Exemplo n.º 1
0
        public void ShouldOrderCommonDepsTopologicalBySolution(DependencySortOrder sortMode)
        {
            int projectCount = 10;
            var ws           = testData.GetLinearSolution(projectCount);
            var before       = ws.CurrentSolution.Projects.Select(p => p.Id).ToArray();
            var sln          = testData.AddRandomReferences(ws).CurrentSolution;

            sln.Projects.Select(p => p.Id).ToArray().Should().Equal(before);
            var projects = sln.Projects.ToDictionary(k => new FileInfoKey(k.FilePath), v => v);

            var dependencyOrder = new DependencyOrder(sln, sln.GetProjectDependencyGraph(), projects, sortMode, this.logger);

            var sorted = dependencyOrder.AllSortedProjectIds;

            sorted.Should().NotEqual(before);

            var result     = sorted.Select(i => sln.GetProject(i)).ToArray();
            var passed     = new HashSet <string>();
            int references = 0;

            foreach (var r in result)
            {
                var refedProjectNames = r.ProjectReferences.Select(p => sln.GetProject(p.ProjectId)?.Name).ToArray();
                foreach (var name in refedProjectNames)
                {
                    Assert.Contains(name, passed);
                    references++;
                }

                passed.Add(r.Name);
            }
        }
Exemplo n.º 2
0
        public DependencyOrder(Solution solution, ProjectDependencyGraph solutionGraph,
                               Dictionary <FileInfoKey, Project> allProjects, DependencySortOrder sortOrder, ILogger logger)
        {
            this.solution      = solution;
            this.solutionGraph = solutionGraph;
            this.sortOrder     = sortOrder;
            if (sortOrder == DependencySortOrder.DateModified)
            {
                this.AllSortedProjectIds = this.solution.Projects
                                           .OrderBy(p => GetProjectTime(p.FilePath, logger)).Select(p => p.Id)
                                           .ToArray();
                //this.AllSortedProjectIds = this.solution.Projects
                //    .GroupBy(p => Path.GetDirectoryName(p.FilePath))
                //    .SelectMany(g => g.Count()>1 ? g.SelectMany(i => (dir) g.AsEnumerable())
                //    .ToArray());
            }
            else
            {
                this.AllSortedProjectIds = this.solutionGraph.GetTopologicallySortedProjects()//.Reverse()
                                           .ToArray();
            }

            this.idToProject = allProjects.Values.ToDictionary(p => p.Id, p => p);
        }