public void ResolveDependencyOrder_Test3()
        {
            Project ProjectA = new Project("a");
            Project ProjectB = new Project("b");
            Project ProjectC = new Project("c");

            ProjectA.AddDependencyProjects(ProjectB);
            ProjectA.AddDependencyProjects(ProjectC);

            HashSet <Project> AllProjects = new HashSet <Project>();

            AllProjects.Add(ProjectA);
            AllProjects.Add(ProjectB);
            AllProjects.Add(ProjectC);

            string[] expectedResult = new string[] { "b", "c", "a" };
            ResolveDependencyOrder resolveDependency = new ResolveDependencyOrder();
            HashSet <Project>      StartUpProjects   = resolveDependency.GetStartUpProjects(AllProjects);

            foreach (Project project in StartUpProjects)
            {
                resolveDependency.ResolveDependency(project);
            }
            var actualResult = resolveDependency.ex_seq_Projects.ToArray();

            Assert.Equal(expectedResult.Length, actualResult.Length);
            for (int i = 0; i < actualResult.Length; i++)
            {
                Assert.Equal(expectedResult[i], actualResult[i].Name);
            }
        }
        public void ResolveDependencyOrder_Test6()
        {
            Project ProjectA = new Project("a");
            Project ProjectB = new Project("b");
            Project ProjectC = new Project("c");
            Project ProjectD = new Project("d");
            Project ProjectE = new Project("e");

            ProjectA.AddDependencyProjects(ProjectB);
            ProjectA.AddDependencyProjects(ProjectD);
            ProjectC.AddDependencyProjects(ProjectD);
            ProjectB.AddDependencyProjects(ProjectC);
            ProjectB.AddDependencyProjects(ProjectE);
            ProjectD.AddDependencyProjects(ProjectB);

            HashSet <Project> AllProjects = new HashSet <Project>();

            AllProjects.Add(ProjectA);
            AllProjects.Add(ProjectB);
            AllProjects.Add(ProjectC);
            AllProjects.Add(ProjectD);
            AllProjects.Add(ProjectE);

            ResolveDependencyOrder resolveDependency = new ResolveDependencyOrder();
            HashSet <Project>      StartUpProjects   = resolveDependency.GetStartUpProjects(AllProjects);
            var exception = Record.Exception(() => resolveDependency.ResolveDependency(StartUpProjects.FirstOrDefault()));

            Assert.NotNull(exception);
            Assert.IsType <Exception>(exception);
            Assert.Equal($"Circular reference detected: d -> b !!!", exception.Message);
        }
        public void ResolveDependencyOrder_Test10()
        {
            Project ProjectA = new Project("a");
            Project ProjectB = new Project("b");
            Project ProjectC = new Project("c");
            Project ProjectD = new Project("d");
            Project ProjectE = new Project("e");
            Project ProjectF = new Project("f");
            Project ProjectG = new Project("g");
            Project ProjectH = new Project("h");
            Project ProjectI = new Project("i");
            Project ProjectJ = new Project("j");

            ProjectA.AddDependencyProjects(ProjectB);
            ProjectA.AddDependencyProjects(ProjectD);
            ProjectA.AddDependencyProjects(ProjectF);
            ProjectC.AddDependencyProjects(ProjectD);
            ProjectB.AddDependencyProjects(ProjectC);
            ProjectB.AddDependencyProjects(ProjectE);
            ProjectF.AddDependencyProjects(ProjectE);
            ProjectF.AddDependencyProjects(ProjectH);
            ProjectH.AddDependencyProjects(ProjectE);
            ProjectH.AddDependencyProjects(ProjectJ);
            ProjectI.AddDependencyProjects(ProjectH);
            ProjectI.AddDependencyProjects(ProjectJ);
            ProjectG.AddDependencyProjects(ProjectH);
            ProjectG.AddDependencyProjects(ProjectF);

            HashSet <Project> AllProjects = new HashSet <Project>();

            AllProjects.Add(ProjectA);
            AllProjects.Add(ProjectB);
            AllProjects.Add(ProjectC);
            AllProjects.Add(ProjectD);
            AllProjects.Add(ProjectE);
            AllProjects.Add(ProjectF);
            AllProjects.Add(ProjectG);
            AllProjects.Add(ProjectH);
            AllProjects.Add(ProjectI);

            string[] expectedResult = new string[] { "d", "c", "e", "b", "j", "h", "f", "a", "g", "i" };
            ResolveDependencyOrder resolveDependency = new ResolveDependencyOrder();
            HashSet <Project>      StartUpProjects   = resolveDependency.GetStartUpProjects(AllProjects);

            foreach (Project project in StartUpProjects)
            {
                resolveDependency.ResolveDependency(project);
            }
            var actualResult = resolveDependency.ex_seq_Projects.ToArray();

            Assert.Equal(expectedResult.Length, actualResult.Length);
            for (int i = 0; i < actualResult.Length; i++)
            {
                Assert.Equal(expectedResult[i], actualResult[i].Name);
            }
        }
        public void ResolveDependencyOrder_Test2()
        {
            Project ProjectA = new Project("a");
            Project ProjectB = new Project("b");
            Project ProjectC = new Project("c");

            ProjectA.AddDependencyProjects(ProjectB);
            ProjectB.AddDependencyProjects(ProjectC);
            ProjectC.AddDependencyProjects(ProjectA);

            HashSet <Project> AllProjects = new HashSet <Project>();

            AllProjects.Add(ProjectA);
            AllProjects.Add(ProjectB);
            AllProjects.Add(ProjectC);

            ResolveDependencyOrder resolveDependency = new ResolveDependencyOrder();

            var exception = Record.Exception(() => resolveDependency.GetStartUpProjects(AllProjects));

            Assert.NotNull(exception);
            Assert.IsType <Exception>(exception);
            Assert.Equal($"No Start Up Project Exists !!!", exception.Message);
        }