public static ProjectPredictions GetProjectPredictions(this IProjectGraphPredictor predictor, string projectFile) { var graph = new ProjectGraph(projectFile, _globalProperties, new ProjectCollection()); var entryPointNode = graph.EntryPointNodes.Single(); var projectPredictionCollector = new DefaultProjectPredictionCollector(); var predictionReporter = new ProjectPredictionReporter( projectPredictionCollector, entryPointNode.ProjectInstance, predictor.GetType().Name); predictor.PredictInputsAndOutputs(entryPointNode, predictionReporter); return(projectPredictionCollector.Predictions); }
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); }