private void AssertPredictionsMadeForEveryNode(ProjectGraph projectGraph, ProjectGraphPredictions graphPredictions) { Assert.Equal(projectGraph.ProjectNodes.Count, graphPredictions.PredictionsPerNode.Count); foreach (ProjectGraphNode node in projectGraph.ProjectNodes) { graphPredictions.PredictionsPerNode.ContainsKey(node); } }
private ProjectPredictions GetPredictionsForProject(ProjectGraphPredictions graphPredictions, string projectName) { string expectedFullPath = Path.Combine(_rootDir, projectName, projectName + ".proj"); foreach (KeyValuePair <ProjectGraphNode, ProjectPredictions> pair in graphPredictions.PredictionsPerNode) { if (pair.Key.ProjectInstance.FullPath.Equals(expectedFullPath, StringComparison.OrdinalIgnoreCase)) { return(pair.Value); } } throw new InvalidOperationException($"Could not find predictions for project {projectName}"); }
public void EmptyPredictionsResultInEmptyAggregateResult() { var graphPredictors = new IProjectGraphPredictor[] { new MockGraphPredictor(null, null, null, null), new MockGraphPredictor(null, null, null, null), }; var predictors = new IProjectPredictor[] { new MockPredictor(null, null, null, null), new MockPredictor(null, null, null, null), }; var executor = new ProjectGraphPredictionExecutor(graphPredictors, predictors); ProjectRootElement projectA = CreateProject("a"); ProjectRootElement projectB = CreateProject("b"); ProjectRootElement projectC = CreateProject("c"); ProjectRootElement projectD = CreateProject("d"); // A depends on B, D; B depends on C, D; C depends on D projectA.AddItem("ProjectReference", @"..\b\b.proj"); projectA.AddItem("ProjectReference", @"..\d\d.proj"); projectB.AddItem("ProjectReference", @"..\c\c.proj"); projectB.AddItem("ProjectReference", @"..\d\d.proj"); projectC.AddItem("ProjectReference", @"..\d\d.proj"); projectA.Save(); projectB.Save(); projectC.Save(); projectD.Save(); var projectGraph = new ProjectGraph(projectA.FullPath, new ProjectCollection()); ProjectGraphPredictions graphPredictions = executor.PredictInputsAndOutputs(projectGraph); AssertPredictionsMadeForEveryNode(projectGraph, graphPredictions); foreach (ProjectPredictions projectPredictions in graphPredictions.PredictionsPerNode.Values) { projectPredictions.AssertNoPredictions(); } }
public void DistinctInputsAndOutputsAreAggregated() { var graphPredictors = new IProjectGraphPredictor[] { new MockGraphPredictor( new[] { @"inputFile1" }, new[] { @"inputDirectory1" }, new[] { @"outputFile1" }, new[] { @"outputDirectory1" }), new MockGraphPredictor2( new[] { @"inputFile2" }, new[] { @"inputDirectory2" }, new[] { @"outputFile2" }, new[] { @"outputDirectory2" }), }; var predictors = new IProjectPredictor[] { new MockPredictor( new[] { @"inputFile3" }, new[] { @"inputDirectory3" }, new[] { @"outputFile3" }, new[] { @"outputDirectory3" }), new MockPredictor2( new[] { @"inputFile4" }, new[] { @"inputDirectory4" }, new[] { @"outputFile4" }, new[] { @"outputDirectory4" }), }; var executor = new ProjectGraphPredictionExecutor(graphPredictors, predictors); ProjectRootElement projectA = CreateProject("a"); ProjectRootElement projectB = CreateProject("b"); ProjectRootElement projectC = CreateProject("c"); ProjectRootElement projectD = CreateProject("d"); // A depends on B, D; B depends on C, D; C depends on D projectA.AddItem("ProjectReference", @"..\b\b.proj"); projectA.AddItem("ProjectReference", @"..\d\d.proj"); projectB.AddItem("ProjectReference", @"..\c\c.proj"); projectB.AddItem("ProjectReference", @"..\d\d.proj"); projectC.AddItem("ProjectReference", @"..\d\d.proj"); projectA.Save(); projectB.Save(); projectC.Save(); projectD.Save(); var projectGraph = new ProjectGraph(projectA.FullPath, new ProjectCollection()); ProjectGraphPredictions graphPredictions = executor.PredictInputsAndOutputs(projectGraph); AssertPredictionsMadeForEveryNode(projectGraph, graphPredictions); var expectedInputFiles = new[] { new PredictedItem(@"a\inputFile3", "MockPredictor"), new PredictedItem(@"a\inputFile4", "MockPredictor2"), new PredictedItem(@"b\inputFile1", "MockGraphPredictor"), new PredictedItem(@"b\inputFile2", "MockGraphPredictor2"), new PredictedItem(@"d\inputFile1", "MockGraphPredictor"), new PredictedItem(@"d\inputFile2", "MockGraphPredictor2"), }; var expectedInputDirectories = new[] { new PredictedItem(@"a\inputDirectory3", "MockPredictor"), new PredictedItem(@"a\inputDirectory4", "MockPredictor2"), new PredictedItem(@"b\inputDirectory1", "MockGraphPredictor"), new PredictedItem(@"b\inputDirectory2", "MockGraphPredictor2"), new PredictedItem(@"d\inputDirectory1", "MockGraphPredictor"), new PredictedItem(@"d\inputDirectory2", "MockGraphPredictor2"), }; var expectedOutputFiles = new[] { new PredictedItem(@"a\outputFile3", "MockPredictor"), new PredictedItem(@"a\outputFile4", "MockPredictor2"), new PredictedItem(@"b\outputFile1", "MockGraphPredictor"), new PredictedItem(@"b\outputFile2", "MockGraphPredictor2"), new PredictedItem(@"d\outputFile1", "MockGraphPredictor"), new PredictedItem(@"d\outputFile2", "MockGraphPredictor2"), }; var expectedOutputDirectories = new[] { new PredictedItem(@"a\outputDirectory3", "MockPredictor"), new PredictedItem(@"a\outputDirectory4", "MockPredictor2"), new PredictedItem(@"b\outputDirectory1", "MockGraphPredictor"), new PredictedItem(@"b\outputDirectory2", "MockGraphPredictor2"), new PredictedItem(@"d\outputDirectory1", "MockGraphPredictor"), new PredictedItem(@"d\outputDirectory2", "MockGraphPredictor2"), }; GetPredictionsForProject(graphPredictions, "a").AssertPredictions( _rootDir, expectedInputFiles, expectedInputDirectories, expectedOutputFiles, expectedOutputDirectories); expectedInputFiles = new[] { new PredictedItem(@"b\inputFile3", "MockPredictor"), new PredictedItem(@"b\inputFile4", "MockPredictor2"), new PredictedItem(@"c\inputFile1", "MockGraphPredictor"), new PredictedItem(@"c\inputFile2", "MockGraphPredictor2"), new PredictedItem(@"d\inputFile1", "MockGraphPredictor"), new PredictedItem(@"d\inputFile2", "MockGraphPredictor2"), }; expectedInputDirectories = new[] { new PredictedItem(@"b\inputDirectory3", "MockPredictor"), new PredictedItem(@"b\inputDirectory4", "MockPredictor2"), new PredictedItem(@"c\inputDirectory1", "MockGraphPredictor"), new PredictedItem(@"c\inputDirectory2", "MockGraphPredictor2"), new PredictedItem(@"d\inputDirectory1", "MockGraphPredictor"), new PredictedItem(@"d\inputDirectory2", "MockGraphPredictor2"), }; expectedOutputFiles = new[] { new PredictedItem(@"b\outputFile3", "MockPredictor"), new PredictedItem(@"b\outputFile4", "MockPredictor2"), new PredictedItem(@"c\outputFile1", "MockGraphPredictor"), new PredictedItem(@"c\outputFile2", "MockGraphPredictor2"), new PredictedItem(@"d\outputFile1", "MockGraphPredictor"), new PredictedItem(@"d\outputFile2", "MockGraphPredictor2"), }; expectedOutputDirectories = new[] { new PredictedItem(@"b\outputDirectory3", "MockPredictor"), new PredictedItem(@"b\outputDirectory4", "MockPredictor2"), new PredictedItem(@"c\outputDirectory1", "MockGraphPredictor"), new PredictedItem(@"c\outputDirectory2", "MockGraphPredictor2"), new PredictedItem(@"d\outputDirectory1", "MockGraphPredictor"), new PredictedItem(@"d\outputDirectory2", "MockGraphPredictor2"), }; GetPredictionsForProject(graphPredictions, "b").AssertPredictions( _rootDir, expectedInputFiles, expectedInputDirectories, expectedOutputFiles, expectedOutputDirectories); expectedInputFiles = new[] { new PredictedItem(@"c\inputFile3", "MockPredictor"), new PredictedItem(@"c\inputFile4", "MockPredictor2"), new PredictedItem(@"d\inputFile1", "MockGraphPredictor"), new PredictedItem(@"d\inputFile2", "MockGraphPredictor2"), }; expectedInputDirectories = new[] { new PredictedItem(@"c\inputDirectory3", "MockPredictor"), new PredictedItem(@"c\inputDirectory4", "MockPredictor2"), new PredictedItem(@"d\inputDirectory1", "MockGraphPredictor"), new PredictedItem(@"d\inputDirectory2", "MockGraphPredictor2"), }; expectedOutputFiles = new[] { new PredictedItem(@"c\outputFile3", "MockPredictor"), new PredictedItem(@"c\outputFile4", "MockPredictor2"), new PredictedItem(@"d\outputFile1", "MockGraphPredictor"), new PredictedItem(@"d\outputFile2", "MockGraphPredictor2"), }; expectedOutputDirectories = new[] { new PredictedItem(@"c\outputDirectory3", "MockPredictor"), new PredictedItem(@"c\outputDirectory4", "MockPredictor2"), new PredictedItem(@"d\outputDirectory1", "MockGraphPredictor"), new PredictedItem(@"d\outputDirectory2", "MockGraphPredictor2"), }; GetPredictionsForProject(graphPredictions, "c").AssertPredictions( _rootDir, expectedInputFiles, expectedInputDirectories, expectedOutputFiles, expectedOutputDirectories); expectedInputFiles = new[] { new PredictedItem(@"d\inputFile3", "MockPredictor"), new PredictedItem(@"d\inputFile4", "MockPredictor2"), }; expectedInputDirectories = new[] { new PredictedItem(@"d\inputDirectory3", "MockPredictor"), new PredictedItem(@"d\inputDirectory4", "MockPredictor2"), }; expectedOutputFiles = new[] { new PredictedItem(@"d\outputFile3", "MockPredictor"), new PredictedItem(@"d\outputFile4", "MockPredictor2"), }; expectedOutputDirectories = new[] { new PredictedItem(@"d\outputDirectory3", "MockPredictor"), new PredictedItem(@"d\outputDirectory4", "MockPredictor2"), }; GetPredictionsForProject(graphPredictions, "d").AssertPredictions( _rootDir, expectedInputFiles, expectedInputDirectories, expectedOutputFiles, expectedOutputDirectories); }
public void DuplicateInputsAndOutputsMergePredictedBys() { var graphPredictors = new IProjectGraphPredictor[] { new MockGraphPredictor( new[] { @"..\common\inputFile" }, new[] { @"..\common\inputDirectory" }, new[] { @"..\common\outputFile" }, new[] { @"..\common\outputDirectory" }), new MockGraphPredictor2( new[] { @"..\common\inputFile" }, new[] { @"..\common\inputDirectory" }, new[] { @"..\common\outputFile" }, new[] { @"..\common\outputDirectory" }), }; var predictors = new IProjectPredictor[] { new MockPredictor( new[] { @"..\common\inputFile" }, new[] { @"..\common\inputDirectory" }, new[] { @"..\common\outputFile" }, new[] { @"..\common\outputDirectory" }), new MockPredictor2( new[] { @"..\common\inputFile" }, new[] { @"..\common\inputDirectory" }, new[] { @"..\common\outputFile" }, new[] { @"..\common\outputDirectory" }), }; var executor = new ProjectGraphPredictionExecutor(graphPredictors, predictors); ProjectRootElement projectA = CreateProject("a"); ProjectRootElement projectB = CreateProject("b"); // A depends on B projectA.AddItem("ProjectReference", @"..\b\b.proj"); projectA.Save(); projectB.Save(); var projectGraph = new ProjectGraph(projectA.FullPath, new ProjectCollection()); ProjectGraphPredictions graphPredictions = executor.PredictInputsAndOutputs(projectGraph); AssertPredictionsMadeForEveryNode(projectGraph, graphPredictions); var expectedInputFiles = new[] { new PredictedItem(@"common\inputFile", "MockGraphPredictor", "MockGraphPredictor2", "MockPredictor", "MockPredictor2"), }; var expectedInputDirectories = new[] { new PredictedItem(@"common\inputDirectory", "MockGraphPredictor", "MockGraphPredictor2", "MockPredictor", "MockPredictor2"), }; var expectedOutputFiles = new[] { new PredictedItem(@"common\outputFile", "MockGraphPredictor", "MockGraphPredictor2", "MockPredictor", "MockPredictor2"), }; var expectedOutputDirectories = new[] { new PredictedItem(@"common\outputDirectory", "MockGraphPredictor", "MockGraphPredictor2", "MockPredictor", "MockPredictor2"), }; GetPredictionsForProject(graphPredictions, "a").AssertPredictions( _rootDir, expectedInputFiles, expectedInputDirectories, expectedOutputFiles, expectedOutputDirectories); }