Merge pull request #5942 from ramarag/mult_Ver

Cache accepting multiple input files
This commit is contained in:
Eric Erhardt 2017-03-07 17:44:23 -06:00 committed by GitHub
commit f0e156d384
9 changed files with 135 additions and 27 deletions

View file

@ -0,0 +1,3 @@
<CacheArtifacts>
<Package Id="FluentAssertions" Version ="4.12.0"/>
</CacheArtifacts>

View file

@ -0,0 +1,5 @@
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<PackageReference Include="FluentAssertions" Version ="4.12.0"/>
</ItemGroup>
</Project>

View file

@ -0,0 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="NewtonSoft.Json" Version="9.0.1" />
<PackageReference Include="FluentAssertions" Version="4.12.0" />
</ItemGroup>
</Project>

View file

@ -0,0 +1,24 @@
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
using System.Collections;
using Newtonsoft.Json.Linq;
using FluentAssertions;
class Program
{
public static void Main(string[] args)
{
ArrayList argList = new ArrayList(args);
JObject jObject = new JObject();
foreach (string arg in argList)
{
jObject[arg] = arg;
}
jObject.Count.Should().Be(0);
Console.WriteLine(jObject.ToString());
}
}

View file

@ -9,6 +9,7 @@ using Microsoft.DotNet.Cli;
using System.Diagnostics; using System.Diagnostics;
using System; using System;
using System.IO; using System.IO;
using System.Linq;
namespace Microsoft.DotNet.Tools.Cache namespace Microsoft.DotNet.Tools.Cache
{ {
@ -31,9 +32,9 @@ namespace Microsoft.DotNet.Tools.Cache
app.ArgumentSeparatorHelpText = HelpMessageStrings.MSBuildAdditionalArgsHelpText; app.ArgumentSeparatorHelpText = HelpMessageStrings.MSBuildAdditionalArgsHelpText;
app.HelpOption("-h|--help"); app.HelpOption("-h|--help");
CommandOption projectArgument = app.Option( CommandOption projectArguments = app.Option(
$"-e|--entries <{LocalizableStrings.ProjectEntries}>", LocalizableStrings.ProjectEntryDescription, $"-e|--entries <{LocalizableStrings.ProjectEntries}>", LocalizableStrings.ProjectEntryDescription,
CommandOptionType.SingleValue); CommandOptionType.MultipleValue);
CommandOption frameworkOption = app.Option( CommandOption frameworkOption = app.Option(
$"-f|--framework <{LocalizableStrings.FrameworkOption}>", LocalizableStrings.FrameworkOptionDescription, $"-f|--framework <{LocalizableStrings.FrameworkOption}>", LocalizableStrings.FrameworkOptionDescription,
@ -70,13 +71,19 @@ namespace Microsoft.DotNet.Tools.Cache
{ {
msbuildArgs = new List<string>(); msbuildArgs = new List<string>();
if (string.IsNullOrEmpty(projectArgument.Value())) if (!projectArguments.HasValue())
{ {
throw new InvalidOperationException(LocalizableStrings.SpecifyEntries); throw new InvalidOperationException(LocalizableStrings.SpecifyEntries);
} }
msbuildArgs.Add("/t:ComposeCache"); msbuildArgs.Add("/t:ComposeCache");
msbuildArgs.Add(projectArgument.Value()); msbuildArgs.Add(projectArguments.Values[0]);
var _additionalProjectsargs = projectArguments.Values.Skip(1);
if (_additionalProjectsargs.Count() > 0)
{
msbuildArgs.Add($"/p:AdditionalProjects={string.Join("%3B", _additionalProjectsargs)}");
}
if (!string.IsNullOrEmpty(frameworkOption.Value())) if (!string.IsNullOrEmpty(frameworkOption.Value()))
{ {
@ -106,12 +113,12 @@ namespace Microsoft.DotNet.Tools.Cache
if (skipOptimizationOption.HasValue()) if (skipOptimizationOption.HasValue())
{ {
msbuildArgs.Add($"/p:SkipOptimization={skipOptimizationOption.HasValue()}"); msbuildArgs.Add($"/p:SkipOptimization=true");
} }
if (preserveWorkingDir.HasValue()) if (preserveWorkingDir.HasValue())
{ {
msbuildArgs.Add($"/p:PreserveComposeWorkingDir={preserveWorkingDir.HasValue()}"); msbuildArgs.Add($"/p:PreserveComposeWorkingDir=true");
} }
if (!string.IsNullOrEmpty(verbosityOption.Value())) if (!string.IsNullOrEmpty(verbosityOption.Value()))

View file

@ -54,7 +54,7 @@ namespace Microsoft.DotNet.Tools.Publish
CommandOption filterProjOption = app.Option( CommandOption filterProjOption = app.Option(
$"--filter <{LocalizableStrings.FilterProjOption}>", LocalizableStrings.FilterProjOptionDescription, $"--filter <{LocalizableStrings.FilterProjOption}>", LocalizableStrings.FilterProjOptionDescription,
CommandOptionType.SingleValue); CommandOptionType.MultipleValue);
CommandOption verbosityOption = AddVerbosityOption(app); CommandOption verbosityOption = AddVerbosityOption(app);
@ -95,9 +95,9 @@ namespace Microsoft.DotNet.Tools.Publish
msbuildArgs.Add($"/p:VersionSuffix={versionSuffixOption.Value()}"); msbuildArgs.Add($"/p:VersionSuffix={versionSuffixOption.Value()}");
} }
if (!string.IsNullOrEmpty(filterProjOption.Value())) if (filterProjOption.HasValue())
{ {
msbuildArgs.Add($"/p:FilterProjectFiles={filterProjOption.Value()}"); msbuildArgs.Add($"/p:FilterProjectFiles={string.Join("%3B", filterProjOption.Values)}");
} }
if (!string.IsNullOrEmpty(verbosityOption.Value())) if (!string.IsNullOrEmpty(verbosityOption.Value()))

View file

@ -3,12 +3,13 @@
using Microsoft.DotNet.Cli.Utils; using Microsoft.DotNet.Cli.Utils;
using NuGet.Frameworks; using NuGet.Frameworks;
using System.Collections.Generic;
namespace Microsoft.DotNet.Tools.Test.Utilities namespace Microsoft.DotNet.Tools.Test.Utilities
{ {
public sealed class CacheCommand : TestCommand public sealed class CacheCommand : TestCommand
{ {
private string _profileProject; private List<string> _profileProject = new List<string>();
private string _framework; private string _framework;
private string _output; private string _output;
private string _runtime; private string _runtime;
@ -22,7 +23,8 @@ namespace Microsoft.DotNet.Tools.Test.Utilities
public CacheCommand WithEntries(string profileProject) public CacheCommand WithEntries(string profileProject)
{ {
_profileProject = profileProject; _profileProject.Add($"--entries {profileProject}");
return this; return this;
} }
public CacheCommand WithFramework(string framework) public CacheCommand WithFramework(string framework)
@ -83,7 +85,7 @@ namespace Microsoft.DotNet.Tools.Test.Utilities
FrameworkVersionOption); FrameworkVersionOption);
} }
private string ProfileProjectOption => string.IsNullOrEmpty(_profileProject) ? "" : $"--entries {_profileProject}"; private string ProfileProjectOption => string.Join(" ", _profileProject) ;
private string FrameworkOption => string.IsNullOrEmpty(_framework) ? "" : $"-f {_framework}"; private string FrameworkOption => string.IsNullOrEmpty(_framework) ? "" : $"-f {_framework}";

View file

@ -3,6 +3,7 @@
using Microsoft.DotNet.Cli.Utils; using Microsoft.DotNet.Cli.Utils;
using NuGet.Frameworks; using NuGet.Frameworks;
using System.Collections.Generic;
namespace Microsoft.DotNet.Tools.Test.Utilities namespace Microsoft.DotNet.Tools.Test.Utilities
{ {
@ -11,7 +12,7 @@ namespace Microsoft.DotNet.Tools.Test.Utilities
private string _framework; private string _framework;
private string _output; private string _output;
private string _runtime; private string _runtime;
private string _profileproj; private List<string> _profileFilterProject = new List<string>();
public PublishCommand() public PublishCommand()
: base("dotnet") : base("dotnet")
@ -43,7 +44,7 @@ namespace Microsoft.DotNet.Tools.Test.Utilities
public PublishCommand WithProFileProject(string profileproj) public PublishCommand WithProFileProject(string profileproj)
{ {
_profileproj = profileproj; _profileFilterProject.Add( $" --filter {profileproj}");
return this; return this;
} }
@ -74,6 +75,6 @@ namespace Microsoft.DotNet.Tools.Test.Utilities
private string RuntimeOption => string.IsNullOrEmpty(_runtime) ? "" : $"-r {_runtime}"; private string RuntimeOption => string.IsNullOrEmpty(_runtime) ? "" : $"-r {_runtime}";
private string ProfileProjOption => string.IsNullOrEmpty(_profileproj) ? "" : $"--filter {_profileproj}"; private string ProfileProjOption => string.Join(" ", _profileFilterProject);
} }
} }

View file

@ -33,10 +33,7 @@ namespace Microsoft.DotNet.Cli.Publish.Tests
var rid = DotnetLegacyRuntimeIdentifiers.InferLegacyRestoreRuntimeIdentifier(); var rid = DotnetLegacyRuntimeIdentifiers.InferLegacyRestoreRuntimeIdentifier();
var localAssemblyCache = Path.Combine(testProjectDirectory, "localAssemblyCache"); var localAssemblyCache = Path.Combine(testProjectDirectory, "localAssemblyCache");
var intermediateWorkingDirectory = Path.Combine(testProjectDirectory, "workingDirectory"); var intermediateWorkingDirectory = Path.Combine(testProjectDirectory, "workingDirectory");
var profileProjectPath = TestAssets.Get(profileProjectName) var profileProjectPath = TestAssets.Get(profileProjectName).Root.FullName;
.CreateInstance()
.WithSourceFiles()
.Root.FullName;
var profileProject = Path.Combine(profileProjectPath, $"{profileProjectName}.xml"); var profileProject = Path.Combine(profileProjectPath, $"{profileProjectName}.xml");
new RestoreCommand() new RestoreCommand()
@ -55,12 +52,12 @@ namespace Microsoft.DotNet.Cli.Publish.Tests
.Should().Pass(); .Should().Pass();
var configuration = Environment.GetEnvironmentVariable("CONFIGURATION") ?? "Debug"; var configuration = Environment.GetEnvironmentVariable("CONFIGURATION") ?? "Debug";
var profilefilter = Path.Combine(localAssemblyCache, _arch, _tfm, "artifact.xml"); var profileFilter = Path.Combine(localAssemblyCache, _arch, _tfm, "artifact.xml");
new PublishCommand() new PublishCommand()
.WithFramework(_tfm) .WithFramework(_tfm)
.WithWorkingDirectory(testProjectDirectory) .WithWorkingDirectory(testProjectDirectory)
.WithProFileProject(profilefilter) .WithProFileProject(profileFilter)
.Execute() .Execute()
.Should().Pass(); .Should().Pass();
@ -85,11 +82,8 @@ namespace Microsoft.DotNet.Cli.Publish.Tests
.UseCurrentRuntimeFrameworkVersion(); .UseCurrentRuntimeFrameworkVersion();
var testProjectDirectory = testInstance.Root.ToString(); var testProjectDirectory = testInstance.Root.ToString();
var profileProjectPath = TestAssets.Get(profileProjectName) var profileProjectPath = TestAssets.Get(profileProjectName).Root.FullName;
.CreateInstance() var profileFilter = Path.Combine(profileProjectPath, "NewtonsoftFilterProfile.xml");
.WithSourceFiles()
.Root.FullName;
var profileProject = Path.Combine(profileProjectPath, "NewtonsoftFilterProfile.xml");
new RestoreCommand() new RestoreCommand()
.WithWorkingDirectory(testProjectDirectory) .WithWorkingDirectory(testProjectDirectory)
@ -101,7 +95,7 @@ namespace Microsoft.DotNet.Cli.Publish.Tests
new PublishCommand() new PublishCommand()
.WithFramework(_tfm) .WithFramework(_tfm)
.WithWorkingDirectory(testProjectDirectory) .WithWorkingDirectory(testProjectDirectory)
.WithProFileProject(profileProject) .WithProFileProject(profileFilter)
.Execute() .Execute()
.Should().Pass(); .Should().Pass();
@ -112,5 +106,65 @@ namespace Microsoft.DotNet.Cli.Publish.Tests
.Should().Fail() .Should().Fail()
.And.HaveStdErrContaining("assembly specified in the dependencies manifest was not found -- package: 'newtonsoft.json',"); .And.HaveStdErrContaining("assembly specified in the dependencies manifest was not found -- package: 'newtonsoft.json',");
} }
[Fact]
public void ItPublishesAnAppWithMultipleProfiles()
{
var testAppName = "MultiDependentProject";
var profileProjectName = "NewtonsoftProfile";
var profileProjectName1 = "FluentProfile";
var testInstance = TestAssets.Get(testAppName)
.CreateInstance()
.WithSourceFiles()
.UseCurrentRuntimeFrameworkVersion();
var testProjectDirectory = testInstance.Root.ToString();
var rid = DotnetLegacyRuntimeIdentifiers.InferLegacyRestoreRuntimeIdentifier();
var localAssemblyCache = Path.Combine(testProjectDirectory, "lAC");
var intermediateWorkingDirectory = Path.Combine(testProjectDirectory, "workingDirectory");
var profileProjectPath = TestAssets.Get(profileProjectName).Root.FullName;
var profileProject = Path.Combine(profileProjectPath, $"{profileProjectName}.xml");
var profileFilter = Path.Combine(profileProjectPath, "NewtonsoftFilterProfile.xml");
var profileProjectPath1 = TestAssets.Get(profileProjectName1).Root.FullName;
var profileProject1 = Path.Combine(profileProjectPath1, $"{profileProjectName1}.xml");
var profileFilter1 = Path.Combine(profileProjectPath1, "FluentFilterProfile.xml");
new RestoreCommand()
.WithWorkingDirectory(testProjectDirectory)
.Execute()
.Should().Pass();
new CacheCommand()
.WithEntries(profileProject)
.WithEntries(profileProject1)
.WithFramework(_tfm)
.WithRuntime(rid)
.WithOutput(localAssemblyCache)
.WithRuntimeFrameworkVersion(_frameworkVersion)
.WithIntermediateWorkingDirectory(intermediateWorkingDirectory)
.Execute($"--preserve-working-dir")
.Should().Pass();
var configuration = Environment.GetEnvironmentVariable("CONFIGURATION") ?? "Debug";
new PublishCommand()
.WithFramework(_tfm)
.WithWorkingDirectory(testProjectDirectory)
.WithProFileProject(profileFilter)
.WithProFileProject(profileFilter1)
.Execute()
.Should().Pass();
var outputDll = Path.Combine(testProjectDirectory, "bin", configuration, _tfm, "publish", $"{testAppName}.dll");
new TestCommand("dotnet")
.WithEnvironmentVariable("DOTNET_SHARED_PACKAGES", localAssemblyCache)
.ExecuteWithCapturedOutput(outputDll)
.Should().Pass()
.And.HaveStdOutContaining("{}");
}
} }
} }