diff --git a/src/BuildPrediction/Predictors/GeneratePackageOnBuildPredictor.cs b/src/BuildPrediction/Predictors/GeneratePackageOnBuildPredictor.cs index 1f4f043..5ffd319 100644 --- a/src/BuildPrediction/Predictors/GeneratePackageOnBuildPredictor.cs +++ b/src/BuildPrediction/Predictors/GeneratePackageOnBuildPredictor.cs @@ -3,98 +3,106 @@ using System; using System.IO; -using Microsoft.Build.Execution; - -namespace Microsoft.Build.Prediction.Predictors -{ - /// - /// Predicts inputs and outputs when using the built-in feature of the Sdk to create a NuGet package during the build. - /// - public sealed class GeneratePackageOnBuildPredictor : IProjectPredictor - { - internal const string GeneratePackageOnBuildPropertyName = "GeneratePackageOnBuild"; - - internal const string PackageIdPropertyName = "PackageId"; - - internal const string PackageVersionPropertyName = "PackageVersion"; - - internal const string PackageOutputPathPropertyName = "PackageOutputPath"; - +using Microsoft.Build.Execution; + +namespace Microsoft.Build.Prediction.Predictors +{ + /// + /// Predicts inputs and outputs when using the built-in feature of the Sdk to create a NuGet package during the build. + /// + public sealed class GeneratePackageOnBuildPredictor : IProjectPredictor + { + internal const string GeneratePackageOnBuildPropertyName = "GeneratePackageOnBuild"; + + internal const string IsPackablePropertyName = "IsPackable"; + + internal const string PackageIdPropertyName = "PackageId"; + + internal const string PackageVersionPropertyName = "PackageVersion"; + + internal const string PackageOutputPathPropertyName = "PackageOutputPath"; + internal const string OutputPathPropertyName = "OutputPath"; - internal const string OutputFileNamesWithoutVersionPropertyName = "OutputFileNamesWithoutVersion"; - - internal const string NuspecOutputPathPropertyName = "NuspecOutputPath"; - - internal const string IncludeSourcePropertyName = "IncludeSource"; - - internal const string IncludeSymbolsPropertyName = "IncludeSymbols"; - - internal const string SymbolPackageFormatPropertyName = "SymbolPackageFormat"; - - internal const string NuspecFilePropertyName = "NuspecFile"; - - /// - public void PredictInputsAndOutputs( - ProjectInstance projectInstance, - ProjectPredictionReporter predictionReporter) - { - // This is based on NuGet.Build.Tasks.Pack.targets and GetPackOutputItemsTask - // See: https://github.com/NuGet/NuGet.Client/blob/dev/src/NuGet.Core/NuGet.Build.Tasks.Pack/NuGet.Build.Tasks.Pack.targets - // See: https://github.com/NuGet/NuGet.Client/blob/dev/src/NuGet.Core/NuGet.Build.Tasks.Pack/GetPackOutputItemsTask.cs - var generatePackageOnBuild = projectInstance.GetPropertyValue(GeneratePackageOnBuildPropertyName); - if (!generatePackageOnBuild.Equals("true", StringComparison.OrdinalIgnoreCase)) - { - return; - } - - var packageId = projectInstance.GetPropertyValue(PackageIdPropertyName); - var packageVersion = projectInstance.GetPropertyValue(PackageVersionPropertyName); - var packageOutputPath = projectInstance.GetPropertyValue(PackageOutputPathPropertyName); - var nuspecOutputPath = projectInstance.GetPropertyValue(NuspecOutputPathPropertyName); - var includeSource = projectInstance.GetPropertyValue(IncludeSourcePropertyName).Equals("true", StringComparison.OrdinalIgnoreCase); + internal const string OutputFileNamesWithoutVersionPropertyName = "OutputFileNamesWithoutVersion"; + + internal const string NuspecOutputPathPropertyName = "NuspecOutputPath"; + + internal const string IncludeSourcePropertyName = "IncludeSource"; + + internal const string IncludeSymbolsPropertyName = "IncludeSymbols"; + + internal const string SymbolPackageFormatPropertyName = "SymbolPackageFormat"; + + internal const string NuspecFilePropertyName = "NuspecFile"; + + /// + public void PredictInputsAndOutputs( + ProjectInstance projectInstance, + ProjectPredictionReporter predictionReporter) + { + // This is based on NuGet.Build.Tasks.Pack.targets and GetPackOutputItemsTask + // See: https://github.com/NuGet/NuGet.Client/blob/dev/src/NuGet.Core/NuGet.Build.Tasks.Pack/NuGet.Build.Tasks.Pack.targets + // See: https://github.com/NuGet/NuGet.Client/blob/dev/src/NuGet.Core/NuGet.Build.Tasks.Pack/GetPackOutputItemsTask.cs + var generatePackageOnBuild = projectInstance.GetPropertyValue(GeneratePackageOnBuildPropertyName); + if (!generatePackageOnBuild.Equals("true", StringComparison.OrdinalIgnoreCase)) + { + return; + } + + var isPackable = projectInstance.GetPropertyValue(IsPackablePropertyName); + if (!isPackable.Equals("true", StringComparison.OrdinalIgnoreCase)) + { + return; + } + + var packageId = projectInstance.GetPropertyValue(PackageIdPropertyName); + var packageVersion = projectInstance.GetPropertyValue(PackageVersionPropertyName); + var packageOutputPath = projectInstance.GetPropertyValue(PackageOutputPathPropertyName); + var nuspecOutputPath = projectInstance.GetPropertyValue(NuspecOutputPathPropertyName); + var includeSource = projectInstance.GetPropertyValue(IncludeSourcePropertyName).Equals("true", StringComparison.OrdinalIgnoreCase); var includeSymbols = projectInstance.GetPropertyValue(IncludeSymbolsPropertyName).Equals("true", StringComparison.OrdinalIgnoreCase); - var outputFileNamesWithoutVersion = projectInstance.GetPropertyValue(OutputFileNamesWithoutVersionPropertyName).Equals("true", StringComparison.OrdinalIgnoreCase); - - var symbolPackageFormat = projectInstance.GetPropertyValue(SymbolPackageFormatPropertyName); - - // PackageOutputPath defaults to OutputPath in the _CalculateInputsOutputsForPack target, not statically. - if (string.IsNullOrEmpty(packageOutputPath)) - { - packageOutputPath = projectInstance.GetPropertyValue(OutputPathPropertyName); - } - - // All params are effectively required - if (!string.IsNullOrEmpty(packageId) - && !string.IsNullOrEmpty(packageVersion) - && !string.IsNullOrEmpty(packageOutputPath) - && !string.IsNullOrEmpty(nuspecOutputPath) - && !string.IsNullOrEmpty(symbolPackageFormat)) - { - var fileBaseName = outputFileNamesWithoutVersion ? packageId : $"{packageId}.{packageVersion}"; - - // Nuspec files can also be provided instead of generated, in which case we should treat it like an input, not an output. - var nuspecFile = projectInstance.GetPropertyValue(NuspecFilePropertyName); - - predictionReporter.ReportOutputFile(Path.Combine(packageOutputPath, fileBaseName + ".nupkg")); - if (string.IsNullOrEmpty(nuspecFile)) - { - predictionReporter.ReportOutputFile(Path.Combine(nuspecOutputPath, fileBaseName + ".nuspec")); - } - else - { - predictionReporter.ReportInputFile(nuspecFile); - } - - if (includeSource || includeSymbols) - { - predictionReporter.ReportOutputFile(Path.Combine(packageOutputPath, fileBaseName + (symbolPackageFormat.Equals("snupkg", StringComparison.OrdinalIgnoreCase) ? ".snupkg" : ".symbols.nupkg"))); - if (string.IsNullOrEmpty(nuspecFile)) - { - predictionReporter.ReportOutputFile(Path.Combine(nuspecOutputPath, fileBaseName + ".symbols.nuspec")); - } - } - } - } - } + var outputFileNamesWithoutVersion = projectInstance.GetPropertyValue(OutputFileNamesWithoutVersionPropertyName).Equals("true", StringComparison.OrdinalIgnoreCase); + + var symbolPackageFormat = projectInstance.GetPropertyValue(SymbolPackageFormatPropertyName); + + // PackageOutputPath defaults to OutputPath in the _CalculateInputsOutputsForPack target, not statically. + if (string.IsNullOrEmpty(packageOutputPath)) + { + packageOutputPath = projectInstance.GetPropertyValue(OutputPathPropertyName); + } + + // All params are effectively required + if (!string.IsNullOrEmpty(packageId) + && !string.IsNullOrEmpty(packageVersion) + && !string.IsNullOrEmpty(packageOutputPath) + && !string.IsNullOrEmpty(nuspecOutputPath) + && !string.IsNullOrEmpty(symbolPackageFormat)) + { + var fileBaseName = outputFileNamesWithoutVersion ? packageId : $"{packageId}.{packageVersion}"; + + // Nuspec files can also be provided instead of generated, in which case we should treat it like an input, not an output. + var nuspecFile = projectInstance.GetPropertyValue(NuspecFilePropertyName); + + predictionReporter.ReportOutputFile(Path.Combine(packageOutputPath, fileBaseName + ".nupkg")); + if (string.IsNullOrEmpty(nuspecFile)) + { + predictionReporter.ReportOutputFile(Path.Combine(nuspecOutputPath, fileBaseName + ".nuspec")); + } + else + { + predictionReporter.ReportInputFile(nuspecFile); + } + + if (includeSource || includeSymbols) + { + predictionReporter.ReportOutputFile(Path.Combine(packageOutputPath, fileBaseName + (symbolPackageFormat.Equals("snupkg", StringComparison.OrdinalIgnoreCase) ? ".snupkg" : ".symbols.nupkg"))); + if (string.IsNullOrEmpty(nuspecFile)) + { + predictionReporter.ReportOutputFile(Path.Combine(nuspecOutputPath, fileBaseName + ".symbols.nuspec")); + } + } + } + } + } } \ No newline at end of file diff --git a/src/BuildPredictionTests/Predictors/GeneratePackageOnBuildPredictorTests.cs b/src/BuildPredictionTests/Predictors/GeneratePackageOnBuildPredictorTests.cs index e000637..761f63d 100644 --- a/src/BuildPredictionTests/Predictors/GeneratePackageOnBuildPredictorTests.cs +++ b/src/BuildPredictionTests/Predictors/GeneratePackageOnBuildPredictorTests.cs @@ -4,229 +4,255 @@ using Microsoft.Build.Construction; using Microsoft.Build.Execution; using Microsoft.Build.Prediction.Predictors; -using Xunit; - -namespace Microsoft.Build.Prediction.Tests.Predictors -{ - public class GeneratePackageOnBuildPredictorTests - { - [Fact] - public void Disabled() - { - ProjectRootElement projectRootElement = ProjectRootElement.Create(); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageIdPropertyName, "SomePackage"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageVersionPropertyName, "1.2.3"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageOutputPathPropertyName, "bin"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.NuspecOutputPathPropertyName, "obj"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.SymbolPackageFormatPropertyName, "symbols.nupkg"); - ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement); - - new GeneratePackageOnBuildPredictor() - .GetProjectPredictions(projectInstance) - .AssertNoPredictions(); - } - - [Fact] - public void OutputFileNamesWithoutVersion() - { - ProjectRootElement projectRootElement = ProjectRootElement.Create(); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.GeneratePackageOnBuildPropertyName, "true"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageIdPropertyName, "SomePackage"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageVersionPropertyName, "1.2.3"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.OutputPathPropertyName, "bin"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.NuspecOutputPathPropertyName, "obj"); +using Xunit; + +namespace Microsoft.Build.Prediction.Tests.Predictors +{ + public class GeneratePackageOnBuildPredictorTests + { + [Fact] + public void Disabled() + { + ProjectRootElement projectRootElement = ProjectRootElement.Create(); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.IsPackablePropertyName, "true"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageIdPropertyName, "SomePackage"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageVersionPropertyName, "1.2.3"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageOutputPathPropertyName, "bin"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.NuspecOutputPathPropertyName, "obj"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.SymbolPackageFormatPropertyName, "symbols.nupkg"); + ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement); + + new GeneratePackageOnBuildPredictor() + .GetProjectPredictions(projectInstance) + .AssertNoPredictions(); + } + + [Fact] + public void NotPackable() + { + ProjectRootElement projectRootElement = ProjectRootElement.Create(); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.GeneratePackageOnBuildPropertyName, "true"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.IsPackablePropertyName, "false"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageIdPropertyName, "SomePackage"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageVersionPropertyName, "1.2.3"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.OutputPathPropertyName, "bin"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.NuspecOutputPathPropertyName, "obj"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.SymbolPackageFormatPropertyName, "symbols.nupkg"); + ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement); + + new GeneratePackageOnBuildPredictor() + .GetProjectPredictions(projectInstance) + .AssertNoPredictions(); + } + + [Fact] + public void OutputFileNamesWithoutVersion() + { + ProjectRootElement projectRootElement = ProjectRootElement.Create(); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.GeneratePackageOnBuildPropertyName, "true"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.IsPackablePropertyName, "true"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageIdPropertyName, "SomePackage"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageVersionPropertyName, "1.2.3"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.OutputPathPropertyName, "bin"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.NuspecOutputPathPropertyName, "obj"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.SymbolPackageFormatPropertyName, "symbols.nupkg"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.OutputFileNamesWithoutVersionPropertyName, "true"); + ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement); + + var expectedOutputFiles = new[] + { + new PredictedItem(@"obj\SomePackage.nuspec", nameof(GeneratePackageOnBuildPredictor)), + new PredictedItem(@"bin\SomePackage.nupkg", nameof(GeneratePackageOnBuildPredictor)), + }; + new GeneratePackageOnBuildPredictor() + .GetProjectPredictions(projectInstance) + .AssertPredictions( + projectInstance, + null, + null, + expectedOutputFiles, + null); + } + + [Fact] + public void GeneratedNuspecDefaultNuspecOutputPath() + { + ProjectRootElement projectRootElement = ProjectRootElement.Create(); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.GeneratePackageOnBuildPropertyName, "true"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.IsPackablePropertyName, "true"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageIdPropertyName, "SomePackage"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageVersionPropertyName, "1.2.3"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.OutputPathPropertyName, "bin"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.NuspecOutputPathPropertyName, "obj"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.SymbolPackageFormatPropertyName, "symbols.nupkg"); + ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement); + + var expectedOutputFiles = new[] + { + new PredictedItem(@"obj\SomePackage.1.2.3.nuspec", nameof(GeneratePackageOnBuildPredictor)), + new PredictedItem(@"bin\SomePackage.1.2.3.nupkg", nameof(GeneratePackageOnBuildPredictor)), + }; + new GeneratePackageOnBuildPredictor() + .GetProjectPredictions(projectInstance) + .AssertPredictions( + projectInstance, + null, + null, + expectedOutputFiles, + null); + } + + [Fact] + public void GeneratedNuspecCustomNuspecOutputPath() + { + ProjectRootElement projectRootElement = ProjectRootElement.Create(); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.GeneratePackageOnBuildPropertyName, "true"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.IsPackablePropertyName, "true"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageIdPropertyName, "SomePackage"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageVersionPropertyName, "1.2.3"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageOutputPathPropertyName, "bin"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.NuspecOutputPathPropertyName, "obj"); projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.SymbolPackageFormatPropertyName, "symbols.nupkg"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.OutputFileNamesWithoutVersionPropertyName, "true"); - ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement); - - var expectedOutputFiles = new[] - { - new PredictedItem(@"obj\SomePackage.nuspec", nameof(GeneratePackageOnBuildPredictor)), - new PredictedItem(@"bin\SomePackage.nupkg", nameof(GeneratePackageOnBuildPredictor)), - }; - new GeneratePackageOnBuildPredictor() - .GetProjectPredictions(projectInstance) - .AssertPredictions( - projectInstance, - null, - null, - expectedOutputFiles, - null); - } - - [Fact] - public void GeneratedNuspecDefaultNuspecOutputPath() - { - ProjectRootElement projectRootElement = ProjectRootElement.Create(); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.GeneratePackageOnBuildPropertyName, "true"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageIdPropertyName, "SomePackage"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageVersionPropertyName, "1.2.3"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.OutputPathPropertyName, "bin"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.NuspecOutputPathPropertyName, "obj"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.SymbolPackageFormatPropertyName, "symbols.nupkg"); - ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement); - - var expectedOutputFiles = new[] - { - new PredictedItem(@"obj\SomePackage.1.2.3.nuspec", nameof(GeneratePackageOnBuildPredictor)), - new PredictedItem(@"bin\SomePackage.1.2.3.nupkg", nameof(GeneratePackageOnBuildPredictor)), - }; - new GeneratePackageOnBuildPredictor() - .GetProjectPredictions(projectInstance) - .AssertPredictions( - projectInstance, - null, - null, - expectedOutputFiles, - null); - } - - [Fact] - public void GeneratedNuspecCustomNuspecOutputPath() - { - ProjectRootElement projectRootElement = ProjectRootElement.Create(); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.GeneratePackageOnBuildPropertyName, "true"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageIdPropertyName, "SomePackage"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageVersionPropertyName, "1.2.3"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageOutputPathPropertyName, "bin"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.NuspecOutputPathPropertyName, "obj"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.SymbolPackageFormatPropertyName, "symbols.nupkg"); - ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement); - - var expectedOutputFiles = new[] - { - new PredictedItem(@"obj\SomePackage.1.2.3.nuspec", nameof(GeneratePackageOnBuildPredictor)), - new PredictedItem(@"bin\SomePackage.1.2.3.nupkg", nameof(GeneratePackageOnBuildPredictor)), - }; - new GeneratePackageOnBuildPredictor() - .GetProjectPredictions(projectInstance) - .AssertPredictions( - projectInstance, - null, - null, - expectedOutputFiles, - null); - } - - [Fact] - public void ProvidedNuspec() - { - ProjectRootElement projectRootElement = ProjectRootElement.Create(); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.GeneratePackageOnBuildPropertyName, "true"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageIdPropertyName, "SomePackage"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageVersionPropertyName, "1.2.3"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.NuspecFilePropertyName, "SomePackage.nuspec"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageOutputPathPropertyName, "bin"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.NuspecOutputPathPropertyName, "obj"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.SymbolPackageFormatPropertyName, "symbols.nupkg"); - ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement); - - var expectedInputFiles = new[] - { - new PredictedItem(@"SomePackage.nuspec", nameof(GeneratePackageOnBuildPredictor)), - }; - var expectedOutputFiles = new[] - { - new PredictedItem(@"bin\SomePackage.1.2.3.nupkg", nameof(GeneratePackageOnBuildPredictor)), - }; - new GeneratePackageOnBuildPredictor() - .GetProjectPredictions(projectInstance) - .AssertPredictions( - projectInstance, - expectedInputFiles, - null, - expectedOutputFiles, - null); - } - - [Fact] - public void IncludeSource() - { - ProjectRootElement projectRootElement = ProjectRootElement.Create(); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.GeneratePackageOnBuildPropertyName, "true"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.IncludeSourcePropertyName, "true"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageIdPropertyName, "SomePackage"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageVersionPropertyName, "1.2.3"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageOutputPathPropertyName, "bin"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.NuspecOutputPathPropertyName, "obj"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.SymbolPackageFormatPropertyName, "symbols.nupkg"); - ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement); - - var expectedOutputFiles = new[] - { - new PredictedItem(@"obj\SomePackage.1.2.3.nuspec", nameof(GeneratePackageOnBuildPredictor)), - new PredictedItem(@"obj\SomePackage.1.2.3.symbols.nuspec", nameof(GeneratePackageOnBuildPredictor)), - new PredictedItem(@"bin\SomePackage.1.2.3.nupkg", nameof(GeneratePackageOnBuildPredictor)), - new PredictedItem(@"bin\SomePackage.1.2.3.symbols.nupkg", nameof(GeneratePackageOnBuildPredictor)), - }; - new GeneratePackageOnBuildPredictor() - .GetProjectPredictions(projectInstance) - .AssertPredictions( - projectInstance, - null, - null, - expectedOutputFiles, - null); - } - - [Fact] - public void IncludeSymbols() - { - ProjectRootElement projectRootElement = ProjectRootElement.Create(); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.GeneratePackageOnBuildPropertyName, "true"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.IncludeSymbolsPropertyName, "true"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageIdPropertyName, "SomePackage"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageVersionPropertyName, "1.2.3"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageOutputPathPropertyName, "bin"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.NuspecOutputPathPropertyName, "obj"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.SymbolPackageFormatPropertyName, "symbols.nupkg"); - ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement); - - var expectedOutputFiles = new[] - { - new PredictedItem(@"obj\SomePackage.1.2.3.nuspec", nameof(GeneratePackageOnBuildPredictor)), - new PredictedItem(@"obj\SomePackage.1.2.3.symbols.nuspec", nameof(GeneratePackageOnBuildPredictor)), - new PredictedItem(@"bin\SomePackage.1.2.3.nupkg", nameof(GeneratePackageOnBuildPredictor)), - new PredictedItem(@"bin\SomePackage.1.2.3.symbols.nupkg", nameof(GeneratePackageOnBuildPredictor)), - }; - new GeneratePackageOnBuildPredictor() - .GetProjectPredictions(projectInstance) - .AssertPredictions( - projectInstance, - null, - null, - expectedOutputFiles, - null); - } - - [Fact] - public void Snupkg() - { - ProjectRootElement projectRootElement = ProjectRootElement.Create(); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.GeneratePackageOnBuildPropertyName, "true"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.IncludeSymbolsPropertyName, "true"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageIdPropertyName, "SomePackage"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageVersionPropertyName, "1.2.3"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageOutputPathPropertyName, "bin"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.NuspecOutputPathPropertyName, "obj"); - projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.SymbolPackageFormatPropertyName, "snupkg"); - ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement); - - var expectedOutputFiles = new[] - { - new PredictedItem(@"obj\SomePackage.1.2.3.nuspec", nameof(GeneratePackageOnBuildPredictor)), - new PredictedItem(@"obj\SomePackage.1.2.3.symbols.nuspec", nameof(GeneratePackageOnBuildPredictor)), - new PredictedItem(@"bin\SomePackage.1.2.3.nupkg", nameof(GeneratePackageOnBuildPredictor)), - new PredictedItem(@"bin\SomePackage.1.2.3.snupkg", nameof(GeneratePackageOnBuildPredictor)), - }; - new GeneratePackageOnBuildPredictor() - .GetProjectPredictions(projectInstance) - .AssertPredictions( - projectInstance, - null, - null, - expectedOutputFiles, - null); - } - } + ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement); + + var expectedOutputFiles = new[] + { + new PredictedItem(@"obj\SomePackage.1.2.3.nuspec", nameof(GeneratePackageOnBuildPredictor)), + new PredictedItem(@"bin\SomePackage.1.2.3.nupkg", nameof(GeneratePackageOnBuildPredictor)), + }; + new GeneratePackageOnBuildPredictor() + .GetProjectPredictions(projectInstance) + .AssertPredictions( + projectInstance, + null, + null, + expectedOutputFiles, + null); + } + + [Fact] + public void ProvidedNuspec() + { + ProjectRootElement projectRootElement = ProjectRootElement.Create(); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.GeneratePackageOnBuildPropertyName, "true"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.IsPackablePropertyName, "true"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageIdPropertyName, "SomePackage"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageVersionPropertyName, "1.2.3"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.NuspecFilePropertyName, "SomePackage.nuspec"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageOutputPathPropertyName, "bin"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.NuspecOutputPathPropertyName, "obj"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.SymbolPackageFormatPropertyName, "symbols.nupkg"); + ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement); + + var expectedInputFiles = new[] + { + new PredictedItem(@"SomePackage.nuspec", nameof(GeneratePackageOnBuildPredictor)), + }; + var expectedOutputFiles = new[] + { + new PredictedItem(@"bin\SomePackage.1.2.3.nupkg", nameof(GeneratePackageOnBuildPredictor)), + }; + new GeneratePackageOnBuildPredictor() + .GetProjectPredictions(projectInstance) + .AssertPredictions( + projectInstance, + expectedInputFiles, + null, + expectedOutputFiles, + null); + } + + [Fact] + public void IncludeSource() + { + ProjectRootElement projectRootElement = ProjectRootElement.Create(); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.GeneratePackageOnBuildPropertyName, "true"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.IsPackablePropertyName, "true"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.IncludeSourcePropertyName, "true"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageIdPropertyName, "SomePackage"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageVersionPropertyName, "1.2.3"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageOutputPathPropertyName, "bin"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.NuspecOutputPathPropertyName, "obj"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.SymbolPackageFormatPropertyName, "symbols.nupkg"); + ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement); + + var expectedOutputFiles = new[] + { + new PredictedItem(@"obj\SomePackage.1.2.3.nuspec", nameof(GeneratePackageOnBuildPredictor)), + new PredictedItem(@"obj\SomePackage.1.2.3.symbols.nuspec", nameof(GeneratePackageOnBuildPredictor)), + new PredictedItem(@"bin\SomePackage.1.2.3.nupkg", nameof(GeneratePackageOnBuildPredictor)), + new PredictedItem(@"bin\SomePackage.1.2.3.symbols.nupkg", nameof(GeneratePackageOnBuildPredictor)), + }; + new GeneratePackageOnBuildPredictor() + .GetProjectPredictions(projectInstance) + .AssertPredictions( + projectInstance, + null, + null, + expectedOutputFiles, + null); + } + + [Fact] + public void IncludeSymbols() + { + ProjectRootElement projectRootElement = ProjectRootElement.Create(); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.GeneratePackageOnBuildPropertyName, "true"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.IsPackablePropertyName, "true"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.IncludeSymbolsPropertyName, "true"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageIdPropertyName, "SomePackage"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageVersionPropertyName, "1.2.3"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageOutputPathPropertyName, "bin"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.NuspecOutputPathPropertyName, "obj"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.SymbolPackageFormatPropertyName, "symbols.nupkg"); + ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement); + + var expectedOutputFiles = new[] + { + new PredictedItem(@"obj\SomePackage.1.2.3.nuspec", nameof(GeneratePackageOnBuildPredictor)), + new PredictedItem(@"obj\SomePackage.1.2.3.symbols.nuspec", nameof(GeneratePackageOnBuildPredictor)), + new PredictedItem(@"bin\SomePackage.1.2.3.nupkg", nameof(GeneratePackageOnBuildPredictor)), + new PredictedItem(@"bin\SomePackage.1.2.3.symbols.nupkg", nameof(GeneratePackageOnBuildPredictor)), + }; + new GeneratePackageOnBuildPredictor() + .GetProjectPredictions(projectInstance) + .AssertPredictions( + projectInstance, + null, + null, + expectedOutputFiles, + null); + } + + [Fact] + public void Snupkg() + { + ProjectRootElement projectRootElement = ProjectRootElement.Create(); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.GeneratePackageOnBuildPropertyName, "true"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.IsPackablePropertyName, "true"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.IncludeSymbolsPropertyName, "true"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageIdPropertyName, "SomePackage"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageVersionPropertyName, "1.2.3"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.PackageOutputPathPropertyName, "bin"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.NuspecOutputPathPropertyName, "obj"); + projectRootElement.AddProperty(GeneratePackageOnBuildPredictor.SymbolPackageFormatPropertyName, "snupkg"); + ProjectInstance projectInstance = TestHelpers.CreateProjectInstanceFromRootElement(projectRootElement); + + var expectedOutputFiles = new[] + { + new PredictedItem(@"obj\SomePackage.1.2.3.nuspec", nameof(GeneratePackageOnBuildPredictor)), + new PredictedItem(@"obj\SomePackage.1.2.3.symbols.nuspec", nameof(GeneratePackageOnBuildPredictor)), + new PredictedItem(@"bin\SomePackage.1.2.3.nupkg", nameof(GeneratePackageOnBuildPredictor)), + new PredictedItem(@"bin\SomePackage.1.2.3.snupkg", nameof(GeneratePackageOnBuildPredictor)), + }; + new GeneratePackageOnBuildPredictor() + .GetProjectPredictions(projectInstance) + .AssertPredictions( + projectInstance, + null, + null, + expectedOutputFiles, + null); + } + } } \ No newline at end of file