public async Task When_Two_Roots()
        {
            using (var workspace = WorkspaceUtils.GetSubjectSolution())
            {
                var project = workspace.CurrentSolution.Projects.Single(p => p.Name == "SubjectSolution");

                var graph = await NodeGraph.BuildGraph(CompilationCache.CacheWithSolution(workspace.CurrentSolution), ct : default);

                var someClassNode         = graph.Nodes[TypeNodeKey.GetFromFullName("SubjectSolution.SomeClass")];
                var someCircularClassNode = graph.Nodes[TypeNodeKey.GetFromFullName("SubjectSolution.SomeCircularClass")];

                var roots = new HashSet <Node>();
                roots.Add(someClassNode);
                roots.Add(someCircularClassNode);

                var paths = NodeGraphExtensions.GetMultiDependencyRootPaths(graph, roots).ToArray();
                var path  = paths.Single();

                Assert.AreEqual(someClassNode, path.Source);
                Assert.AreEqual(someCircularClassNode, path.Target);
                Assert.AreEqual(2, path.Intermediates.Count);
                Assert.AreEqual("SomeOtherClass", (path.Intermediates[0] as TypeNode).Identifier.Name);
                Assert.AreEqual("SomeDeeperClass", (path.Intermediates[1] as TypeNode).Identifier.Name);
            }
        }
Пример #2
0
        public async Task When_MultiDependency_Edge()
        {
            using (var workspace = WorkspaceUtils.GetSubjectSolution())
            {
                var project = workspace.CurrentSolution.Projects.Single(p => p.Name == "SubjectSolution");

                var graph = await NodeGraph.BuildGraph(CompilationCache.CacheWithSolution(workspace.CurrentSolution), ct : default);

                var someClassNode = graph.Nodes[TypeNodeKey.GetFromFullName("SubjectSolution.SomeClass")];
                var deepClassNode = graph.Nodes[TypeNodeKey.GetFromFullName("SubjectSolution.SomeClassDepth5")];

                var roots = new HashSet <Node>();
                roots.Add(someClassNode);
                roots.Add(deepClassNode);

                var paths = NodeGraphExtensions.GetMultiDependencyRootPaths(graph, roots).ToArray();
                var path  = paths.Single();

                var displayGraph = graph.GetDisplaySubgraph(subgraphNodes: roots, pinnedNodes: SetUtils.GetEmpty <NodeKey>());

                var multiEdges = displayGraph.Edges.OfType <MultiDependencyDisplayEdge>();

                AssertEx.ContainsSingle(multiEdges, m => m.Source.DisplayString.EndsWith("SomeClass") && m.Target.DisplayString.EndsWith("SomeClassDepth5"));
            }
        }