public static TestCommand FromArgs(string[] args, string[] settings, string msbuildPath = null) { var parser = Parser.Instance; var result = parser.ParseFrom("dotnet test", args); UpdateRunSettingsArgumentsText(); result.ShowHelpOrErrorIfAppropriate(); var parsedTest = result["dotnet"]["test"]; var msbuildArgs = new List <string>() { "-target:VSTest", "-nodereuse:false", // workaround for https://github.com/Microsoft/vstest/issues/1503 "-nologo" }; msbuildArgs.AddRange(parsedTest.OptionValuesToBeForwarded()); msbuildArgs.AddRange(parsedTest.Arguments); if (settings.Any()) { // skip '--' and escape every \ to be \\ and every " to be \" to survive the next hop var escaped = settings.Skip(1).Select(s => s.Replace("\\", "\\\\").Replace("\"", "\\\"")).ToArray(); var runSettingsArg = string.Join(";", escaped); msbuildArgs.Add($"-property:VSTestCLIRunSettings=\"{runSettingsArg}\""); } var verbosityArg = parsedTest.ForwardedOptionValues("verbosity").SingleOrDefault(); if (verbosityArg != null) { var verbosity = verbosityArg.Split(':', 2); if (verbosity.Length == 2) { msbuildArgs.Add($"-property:VSTestVerbosity={verbosity[1]}"); } } bool noRestore = parsedTest.HasOption("--no-restore") || parsedTest.HasOption("--no-build"); TestCommand testCommand = new TestCommand( msbuildArgs, parsedTest.OptionValuesToBeForwarded(), parsedTest.Arguments, noRestore, msbuildPath); var rootVariableName = Environment.Is64BitProcess ? "DOTNET_ROOT" : "DOTNET_ROOT(x86)"; if (Environment.GetEnvironmentVariable(rootVariableName) == null) { testCommand.EnvironmentVariable(rootVariableName, Path.GetDirectoryName(new Muxer().MuxerPath)); } return(testCommand); }
public static TestCommand FromArgs(string[] args, string[] settings, string msbuildPath = null) { var parser = Parser.Instance; var result = parser.ParseFrom("dotnet test", args); result.ShowHelpOrErrorIfAppropriate(); var msbuildArgs = new List <string>() { "-target:VSTest", "-nodereuse:false", // workaround for https://github.com/Microsoft/vstest/issues/1503 "-nologo" }; msbuildArgs.AddRange(result.OptionValuesToBeForwarded(TestCommandParser.GetCommand())); msbuildArgs.AddRange(result.ValueForArgument <IReadOnlyCollection <string> >(TestCommandParser.SlnOrProjectArgument) ?? Array.Empty <string>()); if (settings.Any()) { // skip '--' and escape every \ to be \\ and every " to be \" to survive the next hop var escaped = settings.Skip(1).Select(s => s.Replace("\\", "\\\\").Replace("\"", "\\\"")).ToArray(); var runSettingsArg = string.Join(";", escaped); msbuildArgs.Add($"-property:VSTestCLIRunSettings=\"{runSettingsArg}\""); } var verbosityArg = result.ForwardedOptionValues <IReadOnlyCollection <string> >(TestCommandParser.GetCommand(), "verbosity")?.SingleOrDefault() ?? null; if (verbosityArg != null) { var verbosity = verbosityArg.Split(':', 2); if (verbosity.Length == 2) { msbuildArgs.Add($"-property:VSTestVerbosity={verbosity[1]}"); } } bool noRestore = result.HasOption(TestCommandParser.NoRestoreOption) || result.HasOption(TestCommandParser.NoBuildOption); TestCommand testCommand = new TestCommand( msbuildArgs, result.OptionValuesToBeForwarded(TestCommandParser.GetCommand()), result.ValueForArgument <IReadOnlyCollection <string> >(TestCommandParser.SlnOrProjectArgument), noRestore, msbuildPath); // Apply environment variables provided by the user via --environment (-e) parameter, if present SetEnvironmentVariablesFromParameters(testCommand, result); // Set DOTNET_PATH if it isn't already set in the environment as it is required // by the testhost which uses the apphost feature (Windows only). (bool hasRootVariable, string rootVariableName, string rootValue) = VSTestForwardingApp.GetRootVariable(); if (!hasRootVariable) { testCommand.EnvironmentVariable(rootVariableName, rootValue); } return(testCommand); }
private static void SetEnvironmentVariablesFromParameters(TestCommand testCommand, ParseResult parseResult) { Option <IEnumerable <string> > option = TestCommandParser.EnvOption; if (!parseResult.HasOption(option)) { return; } foreach (string env in parseResult.GetValueForOption(option)) { string name = env; string value = string.Empty; int equalsIndex = env.IndexOf('='); if (equalsIndex > 0) { name = env.Substring(0, equalsIndex); value = env.Substring(equalsIndex + 1); } testCommand.EnvironmentVariable(name, value); } }
private static void SetEnvironmentVariablesFromParameters(TestCommand testCommand, AppliedOptionSet optionSet) { const string optionName = "environment"; if (!optionSet.Contains(optionName)) { return; } foreach (var env in optionSet[optionName].Arguments) { var name = env; var value = string.Empty; var equalsIndex = env.IndexOf('='); if (equalsIndex > 0) { name = env.Substring(0, equalsIndex); value = env.Substring(equalsIndex + 1); } testCommand.EnvironmentVariable(name, value); } }
private static void SetEnvironmentVariablesFromParameters(TestCommand testCommand, ParseResult parseResult) { var option = TestCommandParser.EnvOption; if (!parseResult.HasOption(option)) { return; } foreach (var env in parseResult.ValueForOption <IReadOnlyCollection <string> >(option)) { var name = env; var value = string.Empty; var equalsIndex = env.IndexOf('='); if (equalsIndex > 0) { name = env.Substring(0, equalsIndex); value = env.Substring(equalsIndex + 1); } testCommand.EnvironmentVariable(name, value); } }
public static TestCommand FromArgs(string[] args, string[] settings, string msbuildPath = null) { var parser = Parser.Instance; var result = parser.ParseFrom("dotnet test", args); UpdateRunSettingsArgumentsText(); result.ShowHelpOrErrorIfAppropriate(); var parsedTest = result["dotnet"]["test"]; var msbuildArgs = new List <string>() { "-target:VSTest", "-nodereuse:false", // workaround for https://github.com/Microsoft/vstest/issues/1503 "-nologo" }; msbuildArgs.AddRange(parsedTest.OptionValuesToBeForwarded()); msbuildArgs.AddRange(parsedTest.Arguments); if (settings.Any()) { // skip '--' and escape every \ to be \\ and every " to be \" to survive the next hop var escaped = settings.Skip(1).Select(s => s.Replace("\\", "\\\\").Replace("\"", "\\\"")).ToArray(); var runSettingsArg = string.Join(";", escaped); msbuildArgs.Add($"-property:VSTestCLIRunSettings=\"{runSettingsArg}\""); } var verbosityArg = parsedTest.ForwardedOptionValues("verbosity").SingleOrDefault(); if (verbosityArg != null) { var verbosity = verbosityArg.Split(':', 2); if (verbosity.Length == 2) { msbuildArgs.Add($"-property:VSTestVerbosity={verbosity[1]}"); } } bool noRestore = parsedTest.HasOption("--no-restore") || parsedTest.HasOption("--no-build"); TestCommand testCommand = new TestCommand( msbuildArgs, parsedTest.OptionValuesToBeForwarded(), parsedTest.Arguments, noRestore, msbuildPath); // Set DOTNET_PATH if it isn't already set in the environment as it is required // by the testhost which uses the apphost feature (Windows only). (bool hasRootVariable, string rootVariableName, string rootValue) = VSTestForwardingApp.GetRootVariable(); if (!hasRootVariable) { testCommand.EnvironmentVariable(rootVariableName, rootValue); } return(testCommand); }