예제 #1
0
 public void SortTopologicallyAsString_returns_dependency_package_before_the_package_itself_regardless_of_addition_order_to_graph()
 {
     Graph graph = new Graph();
     PackageDefinition definitionB = new PackageDefinition("B");
     PackageDefinition definitionA = new PackageDefinition("A:B");
     graph.AddPackageDefinition(definitionB);
     graph.AddPackageDefinition(definitionA);
     string sortedList = graph.SortTopologicallyAsString();
     Assert.AreEqual("B, A", sortedList);
 }
예제 #2
0
 public void SortTopologicallyAsString_returns_dependency_package_before_the_package_itself_when_multiple_dependencies_involved()
 {
     Graph graph = new Graph();
     PackageDefinition definitionA = new PackageDefinition("A:B,C,D");
     PackageDefinition definitionB = new PackageDefinition("B:C");
     PackageDefinition definitionC = new PackageDefinition("C");
     PackageDefinition definitionD = new PackageDefinition("D");
     graph.AddPackageDefinition(definitionA);
     graph.AddPackageDefinition(definitionC);
     graph.AddPackageDefinition(definitionB);
     graph.AddPackageDefinition(definitionD);
     string sortedList = graph.SortTopologicallyAsString();
     Assert.AreEqual("C, B, D, A", sortedList);
 }
예제 #3
0
 public void AddNode_adds_node_into_list()
 {
     Graph graph = new Graph();
     PackageDefinition definition = new PackageDefinition("A");
     graph.AddPackageDefinition(definition);
     Assert.IsTrue(graph.Contains(definition.Package));
 }
예제 #4
0
 public void SortTopologicallyAsString_does_not_scan_dependencies_for_Visited_packages()
 {
     Graph graph = new Graph();
     PackageDefinition definitionA = new PackageDefinition("A:B");
     definitionA.MarkAsAdded();
     graph.AddPackageDefinition(definitionA);
     Queue<string> result = graph.SortTopologically();
     Assert.IsEmpty(result);
 }
예제 #5
0
 public void SortTopologicallyAsString_throws_exception_if_package_definitions_contain_cycle()
 {
     Graph graph = new Graph();
     PackageDefinition definitionA = new PackageDefinition("A:B");
     PackageDefinition definitionB = new PackageDefinition("B:A");
     graph.AddPackageDefinition(definitionA);
     graph.AddPackageDefinition(definitionB);
     Assert.Throws<InvalidOperationException>(() => graph.SortTopologically());
 }
예제 #6
0
 public void SortTopologicallyAsString_returns_the_node_if_it_has_no_dependency_list()
 {
     Graph graph = new Graph();
     PackageDefinition definition = new PackageDefinition("A");
     graph.AddPackageDefinition(definition);
     string sortedList = graph.SortTopologicallyAsString();
     Assert.AreEqual("A", sortedList);
 }
예제 #7
0
 public void SortTopologically_throws_exception_if_package_definitions_contain_cycle_even_for_more_complex_scenarios()
 {
     Graph graph = new Graph();
     PackageDefinition definitionA = new PackageDefinition("A:B, C");
     PackageDefinition definitionD = new PackageDefinition("D:A");
     PackageDefinition definitionB = new PackageDefinition("B:C");
     PackageDefinition definitionC = new PackageDefinition("C:E");
     PackageDefinition definitionE = new PackageDefinition("E:D");
     graph.AddPackageDefinition(definitionA);
     graph.AddPackageDefinition(definitionB);
     graph.AddPackageDefinition(definitionC);
     graph.AddPackageDefinition(definitionD);
     graph.AddPackageDefinition(definitionE);
     Assert.Throws<InvalidOperationException>(() => graph.SortTopologically());
 }
예제 #8
0
 public void SortTopologically_returns_the_node_if_it_has_no_dependency_list()
 {
     Graph graph = new Graph();
     PackageDefinition definition = new PackageDefinition("A");
     graph.AddPackageDefinition(definition);
     Queue<string> sortedQueue = graph.SortTopologically();
     Assert.IsTrue(sortedQueue.Count == 1);
     Assert.AreEqual(definition.Package, sortedQueue.Peek());
 }
예제 #9
0
 public void SortTopologically_returns_dependency_package_before_the_package_itself_when_multiple_dependencies_involved()
 {
     Graph graph = new Graph();
     PackageDefinition definitionA = new PackageDefinition("A:B,C,D");
     PackageDefinition definitionB = new PackageDefinition("B:C");
     PackageDefinition definitionC = new PackageDefinition("C");
     PackageDefinition definitionD = new PackageDefinition("D");
     graph.AddPackageDefinition(definitionA);
     graph.AddPackageDefinition(definitionC);
     graph.AddPackageDefinition(definitionB);
     graph.AddPackageDefinition(definitionD);
     Queue<string> sortedQueue = graph.SortTopologically();
     Assert.AreEqual(4, sortedQueue.Count);
     Assert.AreEqual(definitionC.Package, sortedQueue.Dequeue());
     Assert.AreEqual(definitionB.Package, sortedQueue.Dequeue());
     Assert.AreEqual(definitionD.Package, sortedQueue.Dequeue());
     Assert.AreEqual(definitionA.Package, sortedQueue.Dequeue());
 }
예제 #10
0
 public void SortTopologically_returns_dependency_package_before_the_package_itself_regardless_of_addition_order_to_graph()
 {
     Graph graph = new Graph();
     PackageDefinition definitionB = new PackageDefinition("B");
     PackageDefinition definitionA = new PackageDefinition("A:B");
     graph.AddPackageDefinition(definitionB);
     graph.AddPackageDefinition(definitionA);
     Queue<string> sortedQueue = graph.SortTopologically();
     Assert.AreEqual(2, sortedQueue.Count);
     Assert.AreEqual(definitionB.Package, sortedQueue.Dequeue());
     Assert.AreEqual(definitionA.Package, sortedQueue.Dequeue());
 }