// 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 FluentAssertions; using Microsoft.DotNet.Tools.Store; using System.IO; using System.Linq; using Xunit; namespace Microsoft.DotNet.Cli.MSBuild.Tests { public class GivenDotnetStoreInvocation { const string ExpectedPrefix = "exec /m /v:m /t:ComposeStore "; static readonly string[] ArgsPrefix = { "-m", "" }; [Theory] [InlineData("-m")] [InlineData("--manifest")] public void ItAddsProjectToMsbuildInvocation(string optionName) { var msbuildPath = ""; string[] args = new string[] { optionName, "" }; StoreCommand.FromArgs(args, msbuildPath) .GetProcessStartInfo().Arguments.Should().Be($"{ExpectedPrefix}"); } [Theory] [InlineData(new string[] { "-f", "" }, @"/p:TargetFramework=")] [InlineData(new string[] { "--framework", "" }, @"/p:TargetFramework=")] [InlineData(new string[] { "-r", "" }, @"/p:RuntimeIdentifier=")] [InlineData(new string[] { "--runtime", "" }, @"/p:RuntimeIdentifier=")] [InlineData(new string[] { "--manifest", "one.xml", "--manifest", "two.xml", "--manifest", "three.xml" }, @"/p:AdditionalProjects=one.xml%3Btwo.xml%3Bthree.xml")] public void MsbuildInvocationIsCorrect(string[] args, string expectedAdditionalArgs) { args = ArgsPrefix.Concat(args).ToArray(); expectedAdditionalArgs = (string.IsNullOrEmpty(expectedAdditionalArgs) ? "" : $" {expectedAdditionalArgs}"); var msbuildPath = ""; StoreCommand.FromArgs(args, msbuildPath) .GetProcessStartInfo().Arguments.Should().Be($"{ExpectedPrefix}{expectedAdditionalArgs}"); } [Theory] [InlineData("-o")] [InlineData("--output")] public void ItAddsOutputPathToMsBuildInvocation(string optionName) { string path = "/some/path"; var args = ArgsPrefix.Concat(new string[] { optionName, path }).ToArray(); var msbuildPath = ""; StoreCommand.FromArgs(args, msbuildPath) .GetProcessStartInfo().Arguments.Should().Be($"{ExpectedPrefix} /p:ComposeDir={Path.GetFullPath(path)}"); } } }