package com.dragonheart.test;

import static org.junit.Assert.*;
import java.util.ArrayList;
import org.junit.Before;
import org.junit.Test;
import com.dragonheart.dijkstra.Point;
import com.dragonheart.dijkstra.Edge;
import com.dragonheart.dijkstra.DijkstraGraph;

public class testDijkstraGraph {
	private Point a, b, c, d, e;
	private Edge A, B, C, D, E, F, G;
	private DijkstraGraph graph;

	@Before
	public void setUp() throws Exception {
		a = new Point(2, 0);
		b = new Point(0, 2);
		c = new Point(2, 2);
		d = new Point(5, 2);
		e = new Point(2, 5);
		A = new Edge(a, b, 1.0);
		B = new Edge(a, c, 3.0);
		C = new Edge(a, d, 5.0);
		D = new Edge(b, c, 1.0);
		E = new Edge(b, e, 3.0);
		F = new Edge(c, e, 1.0);
		G = new Edge(d, e, 1.0);
		graph = new DijkstraGraph();
		graph.addPoint(a);
		graph.addPoint(b);
		graph.addPoint(c);
		graph.addPoint(d);
		graph.addPoint(e);
		graph.addEdge(A);
		graph.addEdge(B);
		graph.addEdge(C);
		graph.addEdge(D);
		graph.addEdge(E);
		graph.addEdge(F);
		graph.addEdge(G);
	}

	@Test
	public final void testProcessGraph_WhenNoSourcesNodes_ReturnFalse() {
		assertFalse(graph.processGraph());
	}

	@Test
	public final void testProcessGraph_WithSourceNodes_ReturnTrue() {
		graph.setSourceNode(a);
		assertTrue(graph.processGraph());
	}

	@Test
	public final void testGetPathFrom_WithSingleSourceNode() {
		graph.setSourceNode(e);
		graph.processGraph();
		ArrayList<Point> path = graph.getPathFrom(a);
		assertTrue(path.get(0) == a);
		assertTrue(path.get(1) == b);
		assertTrue(path.get(2) == c);
		assertTrue(path.get(3) == e);
	}
}

@@ -320,16 +320,19 @@
  c, d, e
+, f
 ;%0A%09priva
@@ -358,16 +358,19 @@
  E, F, G
+, H
 ;%0A%09priva
@@ -558,16 +558,39 @@
 (2, 5);%0A
+%09%09f = new Point(0, 5);%0A
 %09%09A = ne
@@ -770,16 +770,43 @@
 , 1.0);%0A
+%09%09H = new Edge(b, f, 1.0);%0A
 %09%09graph 
@@ -929,24 +929,45 @@
 ddPoint(e);%0A
+%09%09graph.addPoint(f);%0A
 %09%09graph.addE
@@ -1094,16 +1094,36 @@
 dge(G);%0A
+%09%09graph.addEdge(H);%0A
 %09%7D%0A%0A%09@Te
@@ -1638,16 +1638,16 @@
  == c);%0A
-
 %09%09assert
@@ -1672,11 +1672,366 @@
 = e);%0A%09%7D
+%0A%0A%09@Test%0A%09public final void testGetPathFrom_WithMultipleSourceNodes() %7B%0A%09%09ArrayList%3CPoint%3E nodes = new ArrayList%3CPoint%3E();%0A%09%09nodes.add(e);%0A%09%09nodes.add(f);%0A%09%09graph.setSourceNodes(nodes);%0A%09%09graph.processGraph()%0A%09%09ArrayList%3CPoint%3E path = graph.getPathFrom(a);%0A%09%09assertTrue(path.get(0) == a);%0A%09%09assertTrue(path.get(1) == b);%0A%09%09assertTrue(path.get(2) == f);%0A%09%7D
 %0A%7D%0A

test for multiple sourceNodes