public void Should_support_list_of_projects()
        {
            var projectList = new Project[] { new Project("someProject", new ProjectDocument(ProjectType.CSharp)) };

            projectList[0].Value.SetOutputPath("something");
            projectList[0].Value.SetAssemblyName("Project5.dll");
            var optimizer = new BuildOptimizer(_cache, MockRepository.GenerateMock <IConfiguration>());
            var runInfos  = optimizer.AssembleBuildConfiguration(projectList);

            runInfos.Length.ShouldEqual(1);
            runInfos[0].Project.Key.ShouldEqual("someProject");
        }
        public void SetUp()
        {
            // Project dependency graph
            //
            //		    Project2
            //		   /
            //Project0			 Project5
            //		   \        /
            //			Project6
            //					\
            //Project1			Project4
            //	      \        /
            //		   Project3
            //
            _projectList = new string[]
            {
                string.Format("Proj0{0}Project0.csproj", Path.DirectorySeparatorChar),
                string.Format("Proj1{0}Project1.csproj", Path.DirectorySeparatorChar),
                string.Format("Proj2{0}Project2.csproj", Path.DirectorySeparatorChar),
                string.Format("Proj3{0}Project3.csproj", Path.DirectorySeparatorChar),
                string.Format("Proj4{0}Project4.csproj", Path.DirectorySeparatorChar),
                string.Format("Proj5{0}Project5.csproj", Path.DirectorySeparatorChar),
                string.Format("Proj6{0}Project6.csproj", Path.DirectorySeparatorChar)
            };
            _cache = MockRepository.GenerateMock <ICache>();
            var document = new ProjectDocument(ProjectType.CSharp);

            document.AddReferencedBy(new string[] { _projectList[2], _projectList[6] });
            document.SetAssemblyName("Project0.dll");
            document.SetOutputPath(string.Format("bin{0}Debug", Path.DirectorySeparatorChar));
            _cache.Stub(c => c.Get <Project>(_projectList[0])).Return(new Project(_projectList[0], document));
            document = new ProjectDocument(ProjectType.CSharp);
            document.AddReferencedBy(_projectList[3]);
            document.SetAssemblyName("Project1.dll");
            document.SetOutputPath(string.Format("bin{0}Debug", Path.DirectorySeparatorChar));
            document.RebuildOnNextRun();
            _cache.Stub(c => c.Get <Project>(_projectList[1])).Return(new Project(_projectList[1], document));
            document = new ProjectDocument(ProjectType.CSharp);
            document.AddReference(_projectList[0]);
            document.SetAssemblyName("Project2.dll");
            document.SetOutputPath(string.Format("bin{0}Debug", Path.DirectorySeparatorChar));
            _cache.Stub(c => c.Get <Project>(_projectList[2])).Return(new Project(_projectList[2], document));
            document = new ProjectDocument(ProjectType.CSharp);
            document.AddReference(_projectList[1]);
            document.AddReferencedBy(_projectList[4]);
            document.SetAssemblyName("Project3.dll");
            document.SetOutputPath(string.Format("bin{0}Debug", Path.DirectorySeparatorChar));
            _cache.Stub(c => c.Get <Project>(_projectList[3])).Return(new Project(_projectList[3], document));
            document = new ProjectDocument(ProjectType.CSharp);
            document.AddReference(new string[] { _projectList[6], _projectList[3] });
            document.SetAssemblyName("Project4.dll");
            document.SetOutputPath(string.Format("bin{0}Debug", Path.DirectorySeparatorChar));
            _cache.Stub(c => c.Get <Project>(_projectList[4])).Return(new Project(_projectList[4], document));
            document = new ProjectDocument(ProjectType.CSharp);
            document.AddReference(_projectList[6]);
            document.SetAssemblyName("Project5.dll");
            document.SetOutputPath(string.Format("bin{0}Debug", Path.DirectorySeparatorChar));
            document.RebuildOnNextRun();
            _cache.Stub(c => c.Get <Project>(_projectList[5])).Return(new Project(_projectList[5], document));
            document = new ProjectDocument(ProjectType.CSharp);
            document.AddReference(_projectList[0]);
            document.AddReferencedBy(new string[] { _projectList[4], _projectList[5] });
            document.SetAssemblyName("Project6.dll");
            document.SetOutputPath(string.Format("bin{0}Debug", Path.DirectorySeparatorChar));
            _cache.Stub(c => c.Get <Project>(_projectList[6])).Return(new Project(_projectList[6], document));

            _optimizer = new BuildOptimizer(_cache, MockRepository.GenerateMock <IConfiguration>());
        }