public int DoRun(string[] args) { DebugHelper.HandleDebugSwitch(ref args); var dotnetTestParams = new DotnetTestParams(); try { dotnetTestParams.Parse(args); if (dotnetTestParams.Help) { return(0); } // Register for parent process's exit event if (dotnetTestParams.ParentProcessId.HasValue) { RegisterForParentProcessExit(dotnetTestParams.ParentProcessId.Value); } return(RunTest(dotnetTestParams)); } catch (InvalidOperationException ex) { TestHostTracing.Source.TraceEvent(TraceEventType.Error, 0, ex.ToString()); return(-1); } catch (Exception ex) when(!(ex is GracefulException)) { Console.WriteLine(ex.ToString()); TestHostTracing.Source.TraceEvent(TraceEventType.Error, 0, ex.ToString()); return(-2); } }
public void It_throws_InvalidOperationException_if_an_invalid_parent_process_id_is_passed_to_it() { var dotnetTestParams = new DotnetTestParams(); const string invalidParentProcessId = "daddy"; Action action = () => dotnetTestParams.Parse(new [] { "--parentProcessId", invalidParentProcessId }); action .ShouldThrow<InvalidOperationException>() .WithMessage($"Invalid process id '{invalidParentProcessId}'. Process id must be an integer."); }
public int DoRun(string[] args) { DebugHelper.HandleDebugSwitch(ref args); var dotnetTestParams = new DotnetTestParams(); dotnetTestParams.Parse(args); try { if (dotnetTestParams.Help) { return(0); } // Register for parent process's exit event if (dotnetTestParams.ParentProcessId.HasValue) { RegisterForParentProcessExit(dotnetTestParams.ParentProcessId.Value); } var projectContexts = CreateProjectContexts(dotnetTestParams.ProjectPath); var projectContext = projectContexts.First(); var testRunner = projectContext.ProjectFile.TestRunner; IDotnetTestRunner dotnetTestRunner = _dotnetTestRunnerFactory.Create(dotnetTestParams.Port); return(dotnetTestRunner.RunTests(projectContext, dotnetTestParams)); } catch (InvalidOperationException ex) { TestHostTracing.Source.TraceEvent(TraceEventType.Error, 0, ex.ToString()); return(-1); } catch (Exception ex) { TestHostTracing.Source.TraceEvent(TraceEventType.Error, 0, ex.ToString()); return(-2); } }
public int DoRun(string[] args) { DebugHelper.HandleDebugSwitch(ref args); var dotnetTestParams = new DotnetTestParams(); dotnetTestParams.Parse(args); try { if (dotnetTestParams.Help) { return 0; } // Register for parent process's exit event if (dotnetTestParams.ParentProcessId.HasValue) { RegisterForParentProcessExit(dotnetTestParams.ParentProcessId.Value); } var projectContexts = CreateProjectContexts(dotnetTestParams.ProjectPath); var projectContext = projectContexts.First(); var testRunner = projectContext.ProjectFile.TestRunner; IDotnetTestRunner dotnetTestRunner = _dotnetTestRunnerFactory.Create(dotnetTestParams.Port); return dotnetTestRunner.RunTests(projectContext, dotnetTestParams); } catch (InvalidOperationException ex) { TestHostTracing.Source.TraceEvent(TraceEventType.Error, 0, ex.ToString()); return -1; } catch (Exception ex) { TestHostTracing.Source.TraceEvent(TraceEventType.Error, 0, ex.ToString()); return -2; } }
public GivenThatWeWantToParseArgumentsForDotnetTest() { _dotnetTestFullParams = new DotnetTestParams(); _emptyDotnetTestParams = new DotnetTestParams(); _dotnetTestFullParams.Parse(new[] { ProjectJson, "--parentProcessId", ParentProcessId.ToString(), "--port", Port.ToString(), "--framework", Framework, "--output", Output, "--build-base-path", BuildBasePath, "--configuration", Config, "--runtime", Runtime, "--no-build", "--additional-parameters", "additional-parameter-value" }); _emptyDotnetTestParams.Parse(new string[] { }); }
public void It_throws_InvalidOperationException_if_an_invalid_port_is_passed_to_it() { var dotnetTestParams = new DotnetTestParams(); const string invalidPort = "door"; Action action = () => dotnetTestParams.Parse(new[] { "--port", invalidPort }); action .ShouldThrow<InvalidOperationException>() .WithMessage($"{invalidPort} is not a valid port number."); }
public void It_sets_Help_to_true_when_help_is_passed_in() { var dotnetTestParams = new DotnetTestParams(); dotnetTestParams.Parse(new[] { "--help" }); dotnetTestParams.Help.Should().BeTrue(); }
public void It_sets_the_framework_to_unsupported_when_an_invalid_framework_is_passed_in() { var dotnetTestParams = new DotnetTestParams(); dotnetTestParams.Parse(new[] { "--framework", "farm work" }); dotnetTestParams.Framework.DotNetFrameworkName.Should().Be("Unsupported,Version=v0.0"); }
public int DoRun(string[] args) { DebugHelper.HandleDebugSwitch(ref args); var dotnetTestParams = new DotnetTestParams(); try { dotnetTestParams.Parse(args); if (dotnetTestParams.Help) { return(0); } // Register for parent process's exit event if (dotnetTestParams.ParentProcessId.HasValue) { RegisterForParentProcessExit(dotnetTestParams.ParentProcessId.Value); } var projectPath = GetProjectPath(dotnetTestParams.ProjectPath); var runtimeIdentifiers = !string.IsNullOrEmpty(dotnetTestParams.Runtime) ? new[] { dotnetTestParams.Runtime } : RuntimeEnvironmentRidExtensions.GetAllCandidateRuntimeIdentifiers(); var exitCode = 0; // Create a workspace var workspace = new BuildWorkspace(ProjectReaderSettings.ReadFromEnvironment()); if (dotnetTestParams.Framework != null) { var projectContext = workspace.GetProjectContext(projectPath, dotnetTestParams.Framework); if (projectContext == null) { Reporter.Error.WriteLine($"Project '{projectPath}' does not support framework: {dotnetTestParams.UnparsedFramework}"); return(1); } projectContext = workspace.GetRuntimeContext(projectContext, runtimeIdentifiers); exitCode = RunTest(projectContext, dotnetTestParams, workspace); } else { var summary = new Summary(); var projectContexts = workspace.GetProjectContextCollection(projectPath) .EnsureValid(projectPath) .FrameworkOnlyContexts .Select(c => workspace.GetRuntimeContext(c, runtimeIdentifiers)) .ToList(); // Execute for all TFMs the project targets. foreach (var projectContext in projectContexts) { var result = RunTest(projectContext, dotnetTestParams, workspace); if (result == 0) { summary.Passed++; } else { summary.Failed++; if (exitCode == 0) { // If tests fail in more than one TFM, we'll have it use the result of the first one // as the exit code. exitCode = result; } } } summary.Print(); } return(exitCode); } catch (InvalidOperationException ex) { TestHostTracing.Source.TraceEvent(TraceEventType.Error, 0, ex.ToString()); return(-1); } catch (Exception ex) when(!(ex is GracefulException)) { TestHostTracing.Source.TraceEvent(TraceEventType.Error, 0, ex.ToString()); return(-2); } }
public int DoRun(string[] args) { DebugHelper.HandleDebugSwitch(ref args); var dotnetTestParams = new DotnetTestParams(); try { dotnetTestParams.Parse(args); if (dotnetTestParams.Help) { return 0; } // Register for parent process's exit event if (dotnetTestParams.ParentProcessId.HasValue) { RegisterForParentProcessExit(dotnetTestParams.ParentProcessId.Value); } var projectPath = GetProjectPath(dotnetTestParams.ProjectPath); var runtimeIdentifiers = !string.IsNullOrEmpty(dotnetTestParams.Runtime) ? new[] { dotnetTestParams.Runtime } : RuntimeEnvironmentRidExtensions.GetAllCandidateRuntimeIdentifiers(); var exitCode = 0; // Create a workspace var workspace = new BuildWorkspace(ProjectReaderSettings.ReadFromEnvironment()); if (dotnetTestParams.Framework != null) { var projectContext = workspace.GetProjectContext(projectPath, dotnetTestParams.Framework); if (projectContext == null) { Reporter.Error.WriteLine($"Project '{projectPath}' does not support framework: {dotnetTestParams.UnparsedFramework}"); return 1; } projectContext = workspace.GetRuntimeContext(projectContext, runtimeIdentifiers); exitCode = RunTest(projectContext, dotnetTestParams, workspace); } else { var summary = new Summary(); var projectContexts = workspace.GetProjectContextCollection(projectPath) .EnsureValid(projectPath) .FrameworkOnlyContexts .Select(c => workspace.GetRuntimeContext(c, runtimeIdentifiers)) .ToList(); // Execute for all TFMs the project targets. foreach (var projectContext in projectContexts) { var result = RunTest(projectContext, dotnetTestParams, workspace); if (result == 0) { summary.Passed++; } else { summary.Failed++; if (exitCode == 0) { // If tests fail in more than one TFM, we'll have it use the result of the first one // as the exit code. exitCode = result; } } } summary.Print(); } return exitCode; } catch (InvalidOperationException ex) { TestHostTracing.Source.TraceEvent(TraceEventType.Error, 0, ex.ToString()); return -1; } catch (Exception ex) when (!(ex is GracefulException)) { TestHostTracing.Source.TraceEvent(TraceEventType.Error, 0, ex.ToString()); return -2; } }