public VSTestForwardingApp(string vsTestExePath, IEnumerable <string> argsToForward) { this.allArgs.Add("exec"); // Ensure that path to vstest.console is whitespace friendly. User may install // dotnet-cli to any folder containing whitespace (e.g. VS installs to program files). // Arguments are already whitespace friendly. this.allArgs.Add(ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(vsTestExePath)); this.allArgs.AddRange(argsToForward); }
private void AddCLIRunSettingsArgs(List <string> allArgs) { if (this.VSTestCLIRunSettings != null && this.VSTestCLIRunSettings.Length > 0) { allArgs.Add("--"); foreach (var arg in this.VSTestCLIRunSettings) { allArgs.Add(ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(arg)); } } }
private List <string> AddArgs() { var isConsoleLoggerSpecifiedByUser = false; var isCollectCodeCoverageEnabled = false; var isRunSettingsEnabled = false; var allArgs = new List <string>(); // TODO log arguments in task if (!string.IsNullOrEmpty(this.VSTestSetting)) { isRunSettingsEnabled = true; allArgs.Add("--settings:" + ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(this.VSTestSetting)); } if (this.VSTestTestAdapterPath != null && this.VSTestTestAdapterPath.Length > 0) { foreach (var arg in this.VSTestTestAdapterPath) { allArgs.Add("--testAdapterPath:" + ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(arg)); } } if (!string.IsNullOrEmpty(this.VSTestFramework)) { allArgs.Add("--framework:" + ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(this.VSTestFramework)); } // vstest.console only support x86 and x64 for argument platform if (!string.IsNullOrEmpty(this.VSTestPlatform) && !this.VSTestPlatform.Contains("AnyCPU")) { allArgs.Add("--platform:" + ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(this.VSTestPlatform)); } if (!string.IsNullOrEmpty(this.VSTestTestCaseFilter)) { allArgs.Add("--testCaseFilter:" + ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(this.VSTestTestCaseFilter)); } if (this.VSTestLogger != null && this.VSTestLogger.Length > 0) { foreach (var arg in this.VSTestLogger) { allArgs.Add("--logger:" + ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(arg)); if (arg.StartsWith("console", StringComparison.OrdinalIgnoreCase)) { isConsoleLoggerSpecifiedByUser = true; } } } if (!string.IsNullOrEmpty(this.VSTestResultsDirectory)) { allArgs.Add("--resultsDirectory:" + ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(this.VSTestResultsDirectory)); } if (!string.IsNullOrEmpty(this.VSTestListTests)) { allArgs.Add("--listTests"); } if (!string.IsNullOrEmpty(this.VSTestDiag)) { allArgs.Add("--Diag:" + ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(this.VSTestDiag)); } if (string.IsNullOrEmpty(this.TestFileFullPath)) { this.Log.LogError("Test file path cannot be empty or null."); } else { allArgs.Add(ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart($"{TestDirectory}/{TestFileFullPath}")); } // Console logger was not specified by user, but verbosity was, hence add default console logger with verbosity as specified if (!string.IsNullOrWhiteSpace(this.VSTestVerbosity) && !isConsoleLoggerSpecifiedByUser) { var normalTestLogging = new List <string>() { "n", "normal", "d", "detailed", "diag", "diagnostic" }; var quietTestLogging = new List <string>() { "q", "quiet" }; string vsTestVerbosity = "minimal"; if (normalTestLogging.Contains(this.VSTestVerbosity)) { vsTestVerbosity = "normal"; } else if (quietTestLogging.Contains(this.VSTestVerbosity)) { vsTestVerbosity = "quiet"; } allArgs.Add("--logger:Console;Verbosity=" + vsTestVerbosity); } if (!string.IsNullOrEmpty(this.VSTestBlame)) { allArgs.Add("--Blame"); } if (this.VSTestCollect != null && this.VSTestCollect.Length > 0) { foreach (var arg in this.VSTestCollect) { if (arg.Equals("Code Coverage", StringComparison.OrdinalIgnoreCase)) { isCollectCodeCoverageEnabled = true; } allArgs.Add("--collect:" + ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(arg)); } } if (isCollectCodeCoverageEnabled || isRunSettingsEnabled) { // Pass TraceDataCollector path to vstest.console as TestAdapterPath if --collect "Code Coverage" // or --settings (User can enable code coverage from runsettings) option given. // Not parsing the runsettings for two reason: // 1. To keep no knowledge of runsettings structure in VSTestTask. // 2. Impact of adding adapter path always is minimal. (worst case: loads additional data collector assembly in datacollector process.) // This is required due to currently trace datacollector not ships with dotnet sdk, can be remove once we have // go code coverage x-plat. if (!string.IsNullOrEmpty(this.VSTestTraceDataCollectorDirectoryPath)) { allArgs.Add("--testAdapterPath:" + ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(this .VSTestTraceDataCollectorDirectoryPath)); } else { if (isCollectCodeCoverageEnabled) { // Not showing message in runsettings scenario, because we are not sure that code coverage is enabled. // User might be using older Microsoft.NET.Test.Sdk which don't have CodeCoverage infra. } } } if (!string.IsNullOrWhiteSpace(this.VSTestNoLogo)) { allArgs.Add("--nologo"); } return(allArgs); }
internal IEnumerable <string> CreateArgument() { var allArgs = new List <string>(); // TODO log arguments in task if (!string.IsNullOrEmpty(this.VSTestSetting)) { allArgs.Add("--settings:" + ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(this.VSTestSetting)); } if (!string.IsNullOrEmpty(this.VSTestTestAdapterPath)) { allArgs.Add("--testAdapterPath:" + ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(this.VSTestTestAdapterPath)); } else { // For Full CLR, add source directory as test adapter path. if (this.VSTestFramework.StartsWith(".NETFramework", StringComparison.OrdinalIgnoreCase)) { allArgs.Add("--testAdapterPath:" + ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(Path.GetDirectoryName(this.TestFileFullPath))); } } if (!string.IsNullOrEmpty(this.VSTestFramework)) { allArgs.Add("--framework:" + ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(this.VSTestFramework)); } // vstest.console only support x86 and x64 for argument platform if (!string.IsNullOrEmpty(this.VSTestPlatform) && !this.VSTestPlatform.Contains("AnyCPU")) { allArgs.Add("--platform:" + ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(this.VSTestPlatform)); } if (!string.IsNullOrEmpty(this.VSTestTestCaseFilter)) { allArgs.Add("--testCaseFilter:" + ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(this.VSTestTestCaseFilter)); } if (!string.IsNullOrEmpty(this.VSTestLogger)) { allArgs.Add("--logger:" + ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(this.VSTestLogger)); } if (!string.IsNullOrEmpty(this.VSTestResultsDirectory)) { allArgs.Add("--resultsDirectory:" + ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(this.VSTestResultsDirectory)); } if (!string.IsNullOrEmpty(this.VSTestListTests)) { allArgs.Add("--listTests"); } if (!string.IsNullOrEmpty(this.VSTestDiag)) { allArgs.Add("--Diag:" + ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(this.VSTestDiag)); } if (string.IsNullOrEmpty(this.TestFileFullPath)) { this.Log.LogError("Test file path cannot be empty or null."); } else { allArgs.Add(ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(this.TestFileFullPath)); } if (!string.IsNullOrWhiteSpace(this.VSTestVerbosity) && (string.IsNullOrEmpty(this.VSTestLogger) || !this.VSTestLogger.StartsWith("console", StringComparison.OrdinalIgnoreCase))) { var normalTestLogging = new List <string>() { "n", "normal", "d", "detailed", "diag", "diagnostic" }; var quietTestLogging = new List <string>() { "q", "quiet" }; string vsTestVerbosity = "minimal"; if (normalTestLogging.Contains(this.VSTestVerbosity)) { vsTestVerbosity = "normal"; } else if (quietTestLogging.Contains(this.VSTestVerbosity)) { vsTestVerbosity = "quiet"; } allArgs.Add("--logger:Console;Verbosity=" + vsTestVerbosity); } if (this.VSTestCLIRunSettings != null && this.VSTestCLIRunSettings.Length > 0) { allArgs.Add("--"); foreach (var arg in this.VSTestCLIRunSettings) { allArgs.Add(ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(arg)); } } if (this.VSTestCollect != null && this.VSTestCollect.Length > 0) { foreach (var arg in this.VSTestCollect) { allArgs.Add("--collect:" + ArgumentEscaper.HandleEscapeSequenceInArgForProcessStart(arg)); } } return(allArgs); }