Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
d556b81
Add deadline-aware cancellation prototype
nohwnd Jul 16, 2026
30fe9a1
Merge remote-tracking branch 'origin/main' into nohwnd-deadline-aware…
nohwnd Jul 16, 2026
1ddfd5a
Address PR review on deadline-aware cancellation
nohwnd Jul 16, 2026
1cbf4df
Merge remote-tracking branch 'origin/main' into nohwnd-deadline-aware…
nohwnd Jul 20, 2026
91d2de2
Address second review round on deadline-aware cancellation
nohwnd Jul 20, 2026
14d6b88
Address the re-review comments on deadline-aware cancellation
nohwnd Jul 22, 2026
aa73e62
Merge remote-tracking branch 'origin/main' into nohwnd-deadline-aware…
nohwnd Aug 4, 2026
e7786b2
Address deadline-aware cancellation review (exit code, server mode, l…
nohwnd Aug 4, 2026
f445901
Merge remote-tracking branch 'origin/main' into nohwnd-deadline-aware…
nohwnd Aug 4, 2026
f110c3d
Close a disposal race in AbortAtDeadlineExtension
nohwnd Aug 4, 2026
dba2383
Bound the pre-dump in-progress-test query with a short timeout
nohwnd Aug 4, 2026
c693499
Disarm the deadline once test execution completes
nohwnd Aug 4, 2026
4de04d2
Force an async boundary before deadline handler work
nohwnd Aug 4, 2026
e3beadd
Merge remote-tracking branch 'origin/main' into nohwnd-deadline-aware…
nohwnd Aug 17, 2026
f484a19
Address the deadline-cancellation review comments
nohwnd Aug 18, 2026
492ec13
Close the deadline-verdict race and query in-progress tests once per …
nohwnd Aug 18, 2026
7581ebf
Cover the deadline exit-code reason and the one-query-per-dump rule
nohwnd Aug 18, 2026
bf11a67
Keep the deadline verdict separate from the one-shot callbacks
nohwnd Aug 18, 2026
1a452e5
Commit the deadline verdict without awaiting after the claim
nohwnd Aug 18, 2026
a9072f8
Bound the deadline diagnostics and keep the dump's empty-list fallback
nohwnd Aug 18, 2026
7794fe0
Disarm the deadline when the test framework invoker returns
nohwnd Aug 18, 2026
3b0c9c3
Don't report a rejected graceful stop as a deadline truncation
nohwnd Aug 18, 2026
40e3b35
Query the in-progress tests once per dump, not once per process
nohwnd Aug 18, 2026
a0567fe
Don't let a failing diagnostic skip the process tree kill
nohwnd Aug 18, 2026
5a9655c
Merge deadline cancellation review fixes
nohwnd Aug 18, 2026
a9b514e
Merge latest deadline branch update
nohwnd Aug 18, 2026
6acb5fa
Register IStopPoliciesService in the CommonHost request tests
nohwnd Aug 19, 2026
c49b3ac
Request the graceful stop before writing the deadline message
nohwnd Aug 20, 2026
c40c246
Address static analysis findings from the review
nohwnd Aug 20, 2026
286b5eb
Merge origin/main into deadline-aware cancellation
nohwnd Aug 24, 2026
c2fdb6c
Enable deadline cancellation for dotnet test
nohwnd Aug 24, 2026
674b208
Address deadline review feedback
nohwnd Aug 24, 2026
8706876
Bound deadline dump diagnostics
nohwnd Aug 24, 2026
bad2ae9
Synchronize deadline stop outcome
nohwnd Aug 24, 2026
00beaa6
Close deadline startup and dump races
nohwnd Aug 24, 2026
946c650
Bound deadline diagnostics and fix CI
nohwnd Aug 24, 2026
8fa56da
Bound remaining deadline paths
nohwnd Aug 24, 2026
b83f5d5
Tighten graceful-stop diagnostics
nohwnd Aug 24, 2026
d101fbf
Merge latest main
nohwnd Aug 24, 2026
ce5cdee
Assert dotnet test deadline summary
nohwnd Aug 24, 2026
f6843c0
Isolate deadline completion by request
nohwnd Aug 24, 2026
58adca0
Harden concurrent deadline handling
nohwnd Aug 25, 2026
8923aaf
Encapsulate shared execution count writes
nohwnd Aug 25, 2026
8aa847c
Scope capability recreation to server requests
nohwnd Aug 25, 2026
6f2f7bb
Close deadline reporting gaps
nohwnd Aug 25, 2026
ca984c4
Route server stops to active requests
nohwnd Aug 25, 2026
658c4ce
Isolate server request deadline verdicts
nohwnd Aug 25, 2026
c108d87
Harden deadline stop coordination
nohwnd Aug 25, 2026
b04ad08
Move pending stop counter writes to static helpers
nohwnd Aug 25, 2026
7428ca2
Guard legacy graceful stop requests
nohwnd Aug 25, 2026
adade74
Merge main into deadline-aware cancellation
nohwnd Aug 25, 2026
3fde9ec
Close deadline request lifecycle gaps
nohwnd Aug 25, 2026
e86204c
Check server cancellation before request setup
nohwnd Aug 25, 2026
338d0ad
Strengthen deadline lifecycle tests
nohwnd Aug 25, 2026
e4aa33f
Register hot reload deadline fallback early
nohwnd Aug 25, 2026
dc159c5
Dispose failed server request setup
nohwnd Aug 25, 2026
b2f96af
Start process tree dumps concurrently
nohwnd Aug 25, 2026
44794c1
Dispatch process tree dumps concurrently
nohwnd Aug 25, 2026
5f368ff
Address deadline cancellation review feedback
nohwnd Aug 25, 2026
625f25f
Address follow-up deadline review feedback
nohwnd Aug 25, 2026
29c2e9d
Stabilize hot reload deadline tests
nohwnd Aug 25, 2026
76309c1
Address deadline review feedback
Evangelink Aug 26, 2026
aa2afc8
Merge main into deadline cancellation
nohwnd Aug 26, 2026
3d51805
Require explicit deadline offset
nohwnd Aug 26, 2026
782af16
Address remaining deadline review feedback
Evangelink Aug 26, 2026
7e1201b
Merge main into deadline cancellation
nohwnd Aug 26, 2026
ba7cae7
Retry PR validation
nohwnd Aug 26, 2026
450e321
Assert deadline-specific exit reason
nohwnd Aug 26, 2026
3e2bc90
Clean up graceful stop test state
nohwnd Aug 26, 2026
b75739e
Latch graceful stop across server requests
nohwnd Aug 26, 2026
8cec559
Tighten graceful stop lifecycle test
nohwnd Aug 26, 2026
44b89a4
Assert deadline timer interval order
nohwnd Aug 26, 2026
cb606ef
Verify deadline reporter finalization
nohwnd Aug 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
#nullable enable
Microsoft.VisualStudio.TestTools.UnitTesting.MSTestGracefulStopTestExecutionCapability.TryStopTestExecutionAsync(System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task<bool>!
Microsoft.VisualStudio.TestTools.UnitTesting.MSTestGracefulStopTestExecutionCapability.NotifyTestExecutionCompleted() -> void
Microsoft.VisualStudio.TestTools.UnitTesting.MSTestGracefulStopTestExecutionCapability.NotifyTestExecutionPending() -> void
Microsoft.VisualStudio.TestTools.UnitTesting.MSTestGracefulStopTestExecutionCapability.NotifyTestExecutionStarting() -> void
static Microsoft.VisualStudio.TestTools.UnitTesting.MSTestGracefulStopTestExecutionCapability.Create() -> Microsoft.VisualStudio.TestTools.UnitTesting.MSTestGracefulStopTestExecutionCapability!
abstract Microsoft.Testing.Extensions.RunSettingsCommandLineOptionsProviderBase.EnvironmentVariablesNotSupportedOnBrowserError.get -> string!
abstract Microsoft.Testing.Extensions.RunSettingsConfigurationProviderBase.DisplayName.get -> string!
abstract Microsoft.Testing.Extensions.RunSettingsConfigurationProviderBase.ReadRunSettings(Microsoft.Testing.Platform.CommandLine.CommandLineParseResult! commandLineParseResult) -> string?
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,126 @@
namespace Microsoft.VisualStudio.TestTools.UnitTesting;

[SuppressMessage("ApiDesign", "RS0030:Do not use banned APIs", Justification = "We can use MTP from this folder")]
internal sealed class MSTestGracefulStopTestExecutionCapability : IGracefulStopTestExecutionCapability
internal sealed class MSTestGracefulStopTestExecutionCapability : IGracefulStopTestExecutionResultCapability
{
#pragma warning disable IDE0330 // Use 'System.Threading.Lock' - not available on all target frameworks of this project.
private static readonly object Sync = new();
#pragma warning restore IDE0330
private static int s_activeExecutionCount;
private static int s_pendingStopOwnerCount;
private ExecutionState _executionState;
private bool _isStopRequested;

private MSTestGracefulStopTestExecutionCapability()
{
}

public static MSTestGracefulStopTestExecutionCapability Instance { get; } = new();

internal static MSTestGracefulStopTestExecutionCapability Create() => new();

public Task StopTestExecutionAsync(CancellationToken cancellationToken)
{
PlatformServiceProvider.Instance.IsGracefulStopRequested = true;
_ = TryRequestGracefulStop();

return Task.CompletedTask;
}

public Task<bool> TryStopTestExecutionAsync(CancellationToken cancellationToken)
=> Task.FromResult(TryRequestGracefulStop());

internal void NotifyTestExecutionPending()
{
lock (Sync)
{
UnregisterPendingStopOwner(_executionState == ExecutionState.Pending && _isStopRequested);
_isStopRequested = false;
_executionState = ExecutionState.Pending;
}
}

internal void NotifyTestExecutionStarting()
{
lock (Sync)
{
// Preserve a stop accepted while the run was pending. Otherwise this is a new run, so clear
// the process-wide engine flag left by a previous request, but only when no overlapping run
// still owns that flag. Discovery never reaches this path.
if (_isStopRequested)
{
UnregisterPendingStopOwner(_executionState == ExecutionState.Pending && _isStopRequested);
PlatformServiceProvider.Instance.IsGracefulStopRequested = true;
}
else if (s_activeExecutionCount == 0 && s_pendingStopOwnerCount == 0)
{
PlatformServiceProvider.Instance.IsGracefulStopRequested = false;
}

RegisterActiveExecution();
_executionState = ExecutionState.Active;
}
}

internal void NotifyTestExecutionCompleted()
{
lock (Sync)
{
if (_executionState == ExecutionState.Active)
{
UnregisterActiveExecution();
}
else
{
UnregisterPendingStopOwner(_executionState == ExecutionState.Pending && _isStopRequested);
}

_executionState = ExecutionState.Completed;
}
}

private bool TryRequestGracefulStop()
{
lock (Sync)
{
if (_executionState == ExecutionState.Completed || _isStopRequested)
{
return false;
}

RegisterPendingStopOwner(_executionState == ExecutionState.Pending && !_isStopRequested);
_isStopRequested = true;
PlatformServiceProvider.Instance.IsGracefulStopRequested = true;
Comment thread
nohwnd marked this conversation as resolved.
return true;
}
}

private static void RegisterActiveExecution()
=> s_activeExecutionCount++;

private static void UnregisterActiveExecution()
=> s_activeExecutionCount--;

private static void RegisterPendingStopOwner(bool shouldRegister)
{
if (shouldRegister)
{
s_pendingStopOwnerCount++;
Comment thread
github-code-quality[bot] marked this conversation as resolved.
Fixed
}
}

private static void UnregisterPendingStopOwner(bool shouldUnregister)
{
if (shouldUnregister)
{
s_pendingStopOwnerCount--;
Comment thread
github-code-quality[bot] marked this conversation as resolved.
Fixed
}
}

private enum ExecutionState
{
Pending,
Active,
Completed,
}
}
#endif
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ internal sealed class MSTestTestFramework : ITestFramework, IDataProducer, IDisp
private readonly ITrxReportCapability? _trxReportCapability;
private readonly PlatformServicesConfigurationAdapter _configuration;
private readonly ILoggerFactory _loggerFactory;
private readonly MSTestGracefulStopTestExecutionCapability _gracefulStopCapability;
private readonly CountdownEvent _incomingRequestCounter = new(1);
private bool? _isTrxEnabled;
private bool _isDisposed;
Expand All @@ -54,7 +55,9 @@ public MSTestTestFramework(MSTestExtension extension, Func<IEnumerable<Assembly>
_trxReportCapability = capabilities.GetCapability<ITrxReportCapability>();
_configuration = new(serviceProvider.GetConfiguration());
_loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();
_gracefulStopCapability = (MSTestGracefulStopTestExecutionCapability)capabilities.GetCapability<IGracefulStopTestExecutionCapability>()!;
PlatformServiceProvider.Instance.AdapterTraceLogger = new MTPTraceLogger(_loggerFactory.CreateLogger("mstest-trace"));
_gracefulStopCapability.NotifyTestExecutionPending();

// Let the engine emit fixture/test-method spans that nest under the platform's test-case spans. This is a
// no-op unless the OpenTelemetry extension is registered.
Expand Down Expand Up @@ -176,18 +179,26 @@ private async Task RunTestsAsync(RunTestExecutionRequest request, IMessageBus me
// through the VSTest MSTestExecutor class. Results are published natively via MtpTestResultRecorder and the
// MTP-specific filter provider evaluates the filter from the neutral UnitTestElement model so this path
// never materializes a vstest TestCase (see #9769).
await new MSTestEngine(cancellationToken, CreateTelemetrySender())
.RunFromSourcesAsync(
assemblyPaths,
runSettings.SettingsXml,
runContext.TestRunDirectory,
handle.ToAdapterMessageLogger(),
settings => new MtpTestResultRecorder(messageBus, this, sessionUid, IsTrxEnabled, settings),
new MtpTestElementFilterProvider(runContext),
_configuration,
new TestSourceHandler(),
isMTP: true)
.ConfigureAwait(false);
_gracefulStopCapability.NotifyTestExecutionStarting();
try
{
await new MSTestEngine(cancellationToken, CreateTelemetrySender())
.RunFromSourcesAsync(
assemblyPaths,
runSettings.SettingsXml,
runContext.TestRunDirectory,
handle.ToAdapterMessageLogger(),
settings => new MtpTestResultRecorder(messageBus, this, sessionUid, IsTrxEnabled, settings),
new MtpTestElementFilterProvider(runContext),
_configuration,
new TestSourceHandler(),
isMTP: true)
.ConfigureAwait(false);
}
finally
{
_gracefulStopCapability.NotifyTestExecutionCompleted();
}
}

private MSTestRunSettings CreateRunSettings(MSTestFrameworkHandle handle)
Expand Down Expand Up @@ -232,6 +243,7 @@ public void Dispose()
{
if (!_isDisposed)
{
_gracefulStopCapability.NotifyTestExecutionCompleted();
_incomingRequestCounter.Dispose();
_isDisposed = true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public static void AddMSTest(this ITestApplicationBuilder testApplicationBuilder
serviceProvider => new TestFrameworkCapabilities(
new MSTestCapabilities(),
new MSTestBannerCapability(serviceProvider.GetRequiredService<IPlatformInformation>()),
MSTestGracefulStopTestExecutionCapability.Instance),
MSTestGracefulStopTestExecutionCapability.Create()),
(capabilities, serviceProvider) => new MSTestTestFramework(extension, getTestAssemblies, serviceProvider, capabilities));
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ namespace Microsoft.VisualStudio.TestPlatform.MSTest.TestAdapter;
/// </summary>
internal sealed class PlatformServiceProvider : IPlatformServiceProvider
{
private int _isGracefulStopRequested;

/// <summary>
/// Initializes a new instance of the <see cref="PlatformServiceProvider"/> class - a singleton.
/// </summary>
Expand Down Expand Up @@ -109,7 +111,11 @@ public IReflectionOperations ReflectionOperations
/// </summary>
public TestRunCancellationToken? TestRunCancellationToken { get; set; }

public bool IsGracefulStopRequested { get; set; }
public bool IsGracefulStopRequested
{
get => Volatile.Read(ref _isGracefulStopRequested) != 0;
set => Volatile.Write(ref _isGracefulStopRequested, value ? 1 : 0);
}

/// <summary>
/// Gets or sets the instance for the platform service.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ static Microsoft.Testing.Extensions.AzureDevOpsReport.AzureDevOpsSummaryReporter
*REMOVED*Microsoft.Testing.Extensions.AzureDevOpsReport.AzureDevOpsSummaryReporter.AzureDevOpsSummaryReporter(Microsoft.Testing.Platform.CommandLine.ICommandLineOptions! commandLineOptions, Microsoft.Testing.Platform.Configurations.IConfiguration! configuration, Microsoft.Testing.Platform.Helpers.IEnvironment! environment, Microsoft.Testing.Platform.Helpers.IFileSystem! fileSystem, Microsoft.Testing.Platform.OutputDevice.IOutputDevice! outputDevice, Microsoft.Testing.Platform.Services.ITestApplicationModuleInfo! testApplicationModuleInfo, Microsoft.Testing.Platform.Logging.ILoggerFactory! loggerFactory) -> void
*REMOVED*abstract Microsoft.Testing.Extensions.SlowTestReporterBase.EmitSlowTestAsync(string! testName, System.TimeSpan elapsed, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task!
Microsoft.Testing.Platform.Helpers.ExitCode.CoverageThresholdFailed = 14 -> Microsoft.Testing.Platform.Helpers.ExitCode
Microsoft.Testing.Platform.Helpers.ExitCode.TestExecutionStoppedAtDeadline = 15 -> Microsoft.Testing.Platform.Helpers.ExitCode
const Microsoft.Testing.Platform.Helpers.EnvironmentVariableConstants.TESTINGPLATFORM_DEADLINE = "TESTINGPLATFORM_DEADLINE" -> string!
const Microsoft.Testing.Platform.Helpers.EnvironmentVariableConstants.TESTINGPLATFORM_DEADLINE_STOP_MARGIN = "TESTINGPLATFORM_DEADLINE_STOP_MARGIN" -> string!
const Microsoft.Testing.Platform.Helpers.EnvironmentVariableConstants.TESTINGPLATFORM_DEADLINE_DUMP_MARGIN = "TESTINGPLATFORM_DEADLINE_DUMP_MARGIN" -> string!
static Microsoft.Testing.Extensions.AzureDevOpsReport.AzureDevOpsTestResultsClient.CreateHttpClientHandler() -> System.Net.Http.HttpClientHandler!
static Microsoft.Testing.Extensions.AzureDevOpsReport.AzureDevOpsTestResultsClient.ShouldOptInToAutomaticDecompression(System.Net.Http.HttpClientHandler! handler) -> bool
Microsoft.Testing.Extensions.AzureDevOpsReport.AzureDevOpsTestResultsPublisher.AzureDevOpsTestResultsPublisher(Microsoft.Testing.Platform.CommandLine.ICommandLineOptions! commandLineOptions, Microsoft.Testing.Platform.Configurations.IConfiguration! configuration, Microsoft.Testing.Platform.Helpers.IEnvironment! environment, Microsoft.Testing.Platform.Helpers.IFileSystem! fileSystem, Microsoft.Testing.Platform.OutputDevice.IOutputDevice! outputDevice, Microsoft.Testing.Platform.Services.ITestApplicationModuleInfo! testApplicationModuleInfo, Microsoft.Testing.Platform.Services.ITestApplicationProcessExitCode! testApplicationProcessExitCode, Microsoft.Testing.Extensions.AzureDevOpsReport.IAzureDevOpsTestResultsClient! client, Microsoft.Testing.Platform.Helpers.ITask! task, Microsoft.Testing.Platform.Helpers.IClock! clock, Microsoft.Testing.Platform.Logging.ILogger! logger, Microsoft.Testing.Extensions.AzureDevOpsReport.AzureDevOpsTestResultsPublisherOptions! options) -> void
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ static Microsoft.Testing.Extensions.CtrfReport.CtrfReportMerger.MergeToFileAsync
static Microsoft.Testing.Platform.Resources.PlatformResources.NamedPipeDirectoryNotWritableErrorMessage.get -> string!
static Microsoft.Testing.Platform.Resources.PlatformResources.NamedPipePathTooLongErrorMessage.get -> string!
Microsoft.Testing.Platform.Helpers.ExitCode.CoverageThresholdFailed = 14 -> Microsoft.Testing.Platform.Helpers.ExitCode
Microsoft.Testing.Platform.Helpers.ExitCode.TestExecutionStoppedAtDeadline = 15 -> Microsoft.Testing.Platform.Helpers.ExitCode
Comment thread
nohwnd marked this conversation as resolved.
const Microsoft.Testing.Platform.Helpers.EnvironmentVariableConstants.TESTINGPLATFORM_DEADLINE = "TESTINGPLATFORM_DEADLINE" -> string!
const Microsoft.Testing.Platform.Helpers.EnvironmentVariableConstants.TESTINGPLATFORM_DEADLINE_STOP_MARGIN = "TESTINGPLATFORM_DEADLINE_STOP_MARGIN" -> string!
const Microsoft.Testing.Platform.Helpers.EnvironmentVariableConstants.TESTINGPLATFORM_DEADLINE_DUMP_MARGIN = "TESTINGPLATFORM_DEADLINE_DUMP_MARGIN" -> string!
static Microsoft.Testing.Platform.Services.ArtifactNamingHelper.ResolveAndSanitize(string! template, string! processName, string! processId, System.DateTimeOffset timestamp, System.Func<string!, string!>! sanitizeLeafFileName) -> string!
Microsoft.Testing.Extensions.MergeOutputFileHelper
static Microsoft.Testing.Extensions.MergeOutputFileHelper.BuildCaseFoldedProbePath(string! directory, string! probeFileName) -> string!
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ public static string GetReason(int exitCode)
(int)ExitCode.IncompatibleProtocolVersion => GitHubActionsResources.ExitCodeReasonIncompatibleProtocolVersion,
(int)ExitCode.TestExecutionStoppedForMaxFailedTests => GitHubActionsResources.ExitCodeReasonTestExecutionStoppedForMaxFailedTests,
(int)ExitCode.CoverageThresholdFailed => GitHubActionsResources.ExitCodeReasonCoverageThresholdFailed,
(int)ExitCode.TestExecutionStoppedAtDeadline => GitHubActionsResources.ExitCodeReasonTestExecutionStoppedAtDeadline,
_ => GitHubActionsResources.ExitCodeReasonUnknown,
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,10 @@ Microsoft.Testing.Extensions.TestFailureDetails.TestFailureDetails(string? messa
Microsoft.Testing.Extensions.TestRecord.Failure.get -> Microsoft.Testing.Extensions.TestFailureDetails?
Microsoft.Testing.Extensions.TestRecord.TestRecord(string! displayName, string! fullyQualifiedName, Microsoft.Testing.Extensions.TerminalKind kind, System.TimeSpan duration, Microsoft.Testing.Extensions.TestFailureDetails? failure) -> void
Microsoft.Testing.Platform.Helpers.ExitCode.CoverageThresholdFailed = 14 -> Microsoft.Testing.Platform.Helpers.ExitCode
Microsoft.Testing.Platform.Helpers.ExitCode.TestExecutionStoppedAtDeadline = 15 -> Microsoft.Testing.Platform.Helpers.ExitCode
const Microsoft.Testing.Platform.Helpers.EnvironmentVariableConstants.TESTINGPLATFORM_DEADLINE = "TESTINGPLATFORM_DEADLINE" -> string!
const Microsoft.Testing.Platform.Helpers.EnvironmentVariableConstants.TESTINGPLATFORM_DEADLINE_STOP_MARGIN = "TESTINGPLATFORM_DEADLINE_STOP_MARGIN" -> string!
const Microsoft.Testing.Platform.Helpers.EnvironmentVariableConstants.TESTINGPLATFORM_DEADLINE_DUMP_MARGIN = "TESTINGPLATFORM_DEADLINE_DUMP_MARGIN" -> string!
Microsoft.Testing.Platform.Helpers.RuntimeFeatureHelper
override Microsoft.Testing.Extensions.GitHubActionsReport.GitHubActionsCommandLineProvider.ValidateCommandLineOptionsAsync(Microsoft.Testing.Platform.CommandLine.ICommandLineOptions! commandLineOptions) -> System.Threading.Tasks.Task<Microsoft.Testing.Platform.Extensions.ValidationResult>!
static Microsoft.Testing.Extensions.GitHubActionsReport.GitHubActionsAnnotationReporter.GetErrorAnnotation(string! testName, string? explanation, System.Exception? exception, string? repoRoot, Microsoft.Testing.Platform.Helpers.IFileSystem! fileSystem, Microsoft.Testing.Platform.Logging.ILogger! logger, bool skipAssertionFrames, Microsoft.Testing.Extensions.GitHubActionsReport.GitHubActionsSourceLocation? declaredLocation = null) -> string!
Expand Down
Loading