dotnet-installer/src/dotnet/commands/dotnet-test/Program.cs

121 lines
3.5 KiB
C#
Raw Normal View History

// 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;
2017-03-10 13:49:49 -08:00
using System.Collections.Generic;
2017-03-10 13:18:14 -08:00
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using Microsoft.DotNet.Cli;
using Microsoft.DotNet.Cli.CommandLine;
using Microsoft.DotNet.Cli.Utils;
using Microsoft.DotNet.Tools.MSBuild;
2017-03-10 13:18:14 -08:00
using Parser = Microsoft.DotNet.Cli.Parser;
namespace Microsoft.DotNet.Tools.Test
{
public class TestCommand : RestoringCommand
{
public TestCommand(IEnumerable<string> msbuildArgs, bool noRestore, string msbuildPath = null)
: base(msbuildArgs, noRestore, msbuildPath)
{
}
public static TestCommand FromArgs(string[] args, string msbuildPath = null)
{
2017-03-10 13:18:14 -08:00
var msbuildArgs = new List<string>()
{
2017-03-10 13:18:14 -08:00
"/t:VSTest",
"/v:quiet",
"/nologo"
};
2017-03-10 13:18:14 -08:00
var parser = Parser.Instance;
2017-03-10 13:18:14 -08:00
var result = parser.ParseFrom("dotnet test", args);
UpdateRunSettingsArgumentsText();
2017-03-13 13:29:03 -07:00
result.ShowHelpOrErrorIfAppropriate();
2017-03-10 13:18:14 -08:00
var parsedTest = result["dotnet"]["test"];
2017-03-10 13:49:49 -08:00
msbuildArgs.AddRange(parsedTest.OptionValuesToBeForwarded());
msbuildArgs.AddRange(parsedTest.Arguments);
var runSettingsOptions =
2017-03-10 13:18:14 -08:00
result.UnparsedTokens
2017-03-11 11:00:18 -08:00
.Select(GetSemiColonEscapedString);
2017-03-10 13:18:14 -08:00
if (runSettingsOptions.Any())
{
2017-03-10 13:18:14 -08:00
var runSettingsArg = string.Join(";", runSettingsOptions);
msbuildArgs.Add($"/p:VSTestCLIRunSettings=\"{runSettingsArg}\"");
}
var verbosityArg = msbuildArgs.LastOrDefault(arg => arg.StartsWith("/verbosity"));
if (!string.IsNullOrEmpty(verbosityArg))
{
var verbosity = verbosityArg.Split(':');
if (verbosity.Length == 2)
{
msbuildArgs.Add($"/p:VSTestVerbosity={verbosity[1]}");
}
}
bool noRestore = parsedTest.HasOption("--no-restore");
return new TestCommand(msbuildArgs, noRestore, msbuildPath);
}
2017-03-10 13:18:14 -08:00
public static int Run(string[] args)
{
2017-03-10 13:18:14 -08:00
DebugHelper.HandleDebugSwitch(ref args);
2017-03-10 13:18:14 -08:00
TestCommand cmd;
2017-03-10 13:18:14 -08:00
try
{
2017-03-10 13:18:14 -08:00
cmd = FromArgs(args);
}
2017-03-10 13:18:14 -08:00
catch (CommandCreationException e)
{
2017-03-10 13:18:14 -08:00
return e.ExitCode;
}
2017-03-10 13:18:14 -08:00
return cmd.Execute();
}
2017-03-11 11:00:18 -08:00
private static string GetSemiColonEscapedString(string arg)
{
2017-01-06 01:12:26 +05:30
if (arg.IndexOf(";") != -1)
{
return arg.Replace(";", "%3b");
}
return arg;
}
2016-12-30 15:47:15 +05:30
private static string[] GetSemiColonEscapedArgs(List<string> args)
{
int counter = 0;
string[] array = new string[args.Count];
foreach (string arg in args)
{
2017-03-11 11:00:18 -08:00
array[counter++] = GetSemiColonEscapedString(arg);
2016-12-30 15:47:15 +05:30
}
return array;
}
private static void UpdateRunSettingsArgumentsText()
{
DefaultHelpViewText.Synopsis.AdditionalArguments = " [[--] <RunSettings arguments>...]]";
DefaultHelpViewText.AdditionalArgumentsSection = LocalizableStrings.RunSettingsArgumentsDescription;
}
}
}