From 27da8cbe402d4ee549bbfd972129c9c349207e2f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 25 Apr 2026 20:49:04 +0000 Subject: [PATCH 1/8] Initial plan From 774219a41c0ea3d93b1c8f31d0449923644daba5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 25 Apr 2026 20:56:18 +0000 Subject: [PATCH 2/8] Add --retry-failed-tests-delay option to MTP retry package Agent-Logs-Url: https://github.com/microsoft/testfx/sessions/b65299ab-c298-41e1-b995-33ae9f177b0b Co-authored-by: Evangelink <11340282+Evangelink@users.noreply.github.com> --- .../PACKAGE.md | 3 +- .../Resources/ExtensionResources.resx | 6 ++ .../Resources/xlf/ExtensionResources.cs.xlf | 10 ++++ .../Resources/xlf/ExtensionResources.de.xlf | 10 ++++ .../Resources/xlf/ExtensionResources.es.xlf | 10 ++++ .../Resources/xlf/ExtensionResources.fr.xlf | 10 ++++ .../Resources/xlf/ExtensionResources.it.xlf | 10 ++++ .../Resources/xlf/ExtensionResources.ja.xlf | 10 ++++ .../Resources/xlf/ExtensionResources.ko.xlf | 10 ++++ .../Resources/xlf/ExtensionResources.pl.xlf | 10 ++++ .../xlf/ExtensionResources.pt-BR.xlf | 10 ++++ .../Resources/xlf/ExtensionResources.ru.xlf | 10 ++++ .../Resources/xlf/ExtensionResources.tr.xlf | 10 ++++ .../xlf/ExtensionResources.zh-Hans.xlf | 10 ++++ .../xlf/ExtensionResources.zh-Hant.xlf | 10 ++++ .../RetryCommandLineOptionsProvider.cs | 13 +++++ .../RetryOrchestrator.cs | 16 ++++++ .../RetryTests.cs | 55 +++++++++++++++++++ 18 files changed, 222 insertions(+), 1 deletion(-) diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/PACKAGE.md b/src/Platform/Microsoft.Testing.Extensions.Retry/PACKAGE.md index ac00f1458c..3275f0bc39 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/PACKAGE.md +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/PACKAGE.md @@ -16,9 +16,10 @@ This package extends Microsoft.Testing.Platform with: - **Automatic retry**: automatically re-runs failed tests up to a configurable number of times - **Retry guards**: can stop retries when failure thresholds are exceeded (`--retry-failed-tests-max-percentage`, `--retry-failed-tests-max-tests`) +- **Retry delay**: optionally wait between retry attempts (`--retry-failed-tests-delay`) - **Integration-test focus**: intended for scenarios where transient environment issues can cause intermittent failures -Configure retry using `--retry-failed-tests `, and optionally limit retries with `--retry-failed-tests-max-percentage` or `--retry-failed-tests-max-tests`. +Configure retry using `--retry-failed-tests `, and optionally limit retries with `--retry-failed-tests-max-percentage` or `--retry-failed-tests-max-tests`, or add a delay between retries with `--retry-failed-tests-delay` (e.g. `1s`, `2.5m`, `1h`). ## Documentation diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/ExtensionResources.resx b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/ExtensionResources.resx index 8179e3290f..7d8045bdc2 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/ExtensionResources.resx +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/ExtensionResources.resx @@ -164,6 +164,12 @@ Moving last attempt asset files to the default result directory Retry failed tests feature is not supported in server mode + + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + + + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Retry failed tests the given number of times diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.cs.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.cs.xlf index 0ec43e125a..bb44adcde6 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.cs.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.cs.xlf @@ -50,6 +50,16 @@ Přesouvání souborů prostředků posledního pokusu do výchozího adresáře Nepovedlo se spustit proces {0}. + + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + + + + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + + Retry failed tests feature allows to restart test execution upon failure. Funkce opakování neúspěšných testů umožňuje po selhání znovu spustit test. diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.de.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.de.xlf index 54f48e40b8..c814dd9ad9 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.de.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.de.xlf @@ -50,6 +50,16 @@ Medienobjektdateien des letzten Versuchs werden in das Standardergebnisverzeichn Fehler beim Starten von Prozess "{0}". + + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + + + + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + + Retry failed tests feature allows to restart test execution upon failure. Das Feature zum Wiederholen fehlerhafter Tests ermöglicht es, die Testausführung bei einem Fehler neu zu starten. diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.es.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.es.xlf index 55edc18d71..b263c48dbe 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.es.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.es.xlf @@ -50,6 +50,16 @@ Moviendo los archivos de recursos del último intento al directorio de resultado No se pudo iniciar el proceso '{0}' + + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + + + + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + + Retry failed tests feature allows to restart test execution upon failure. La característica Reintentar pruebas con errores permite reiniciar la ejecución de pruebas en caso de error. diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.fr.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.fr.xlf index 2fc7921866..7d3d5a1ddd 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.fr.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.fr.xlf @@ -50,6 +50,16 @@ Déplacement des fichiers de ressources de la dernière tentative vers le réper Échec de démarrage du processus « {0} » + + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + + + + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + + Retry failed tests feature allows to restart test execution upon failure. La fonctionnalité de nouvelles tentatives de tests ayant échoué permet de redémarrer l’exécution des tests en cas d’échec. diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.it.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.it.xlf index a55bf502da..aaa4980a8e 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.it.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.it.xlf @@ -50,6 +50,16 @@ Spostamento dei file di asset dell'ultimo tentativo nella directory dei risultat Impossibile avviare il processo '{0}' + + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + + + + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + + Retry failed tests feature allows to restart test execution upon failure. La funzionalità di ripetizione dei test non riusciti consente di riavviare l'esecuzione dei test in caso di errore. diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ja.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ja.xlf index 23d77b2232..46f2aba793 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ja.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ja.xlf @@ -50,6 +50,16 @@ Moving last attempt asset files to the default result directory 処理 '{0}' を開始できませんでした + + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + + + + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + + Retry failed tests feature allows to restart test execution upon failure. 失敗したテストの再試行機能を使用すると、失敗時にテストの実行を再開できます。 diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ko.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ko.xlf index df4c3290dd..0e37e6cb5e 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ko.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ko.xlf @@ -50,6 +50,16 @@ Moving last attempt asset files to the default result directory 프로세스 '{0}'을(를) 시작하지 못했습니다. + + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + + + + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + + Retry failed tests feature allows to restart test execution upon failure. 실패한 테스트 다시 시도 기능을 사용하면 실패 시 테스트 실행을 다시 시작할 수 있습니다. diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.pl.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.pl.xlf index cde119184e..3766654987 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.pl.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.pl.xlf @@ -50,6 +50,16 @@ Przeniesienie plików zasobów ostatniej próby do domyślnego katalogu wyników Nie można uruchomić procesu „{0}” + + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + + + + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + + Retry failed tests feature allows to restart test execution upon failure. Funkcja ponawiania testów zakończonych niepowodzeniem umożliwia ponowne uruchomienie wykonywania testu po niepowodzeniu. diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.pt-BR.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.pt-BR.xlf index e7b749064a..90276ba003 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.pt-BR.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.pt-BR.xlf @@ -50,6 +50,16 @@ Movendo arquivos de ativo da última tentativa para o diretório de resultados p Falha ao iniciar o processo '{0}' + + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + + + + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + + Retry failed tests feature allows to restart test execution upon failure. O recurso repetir testes com falha permite reiniciar a execução de teste após falha. diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ru.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ru.xlf index eecf000105..4b8fb57d1f 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ru.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ru.xlf @@ -50,6 +50,16 @@ Moving last attempt asset files to the default result directory Не удалось запустить процесс "{0}". + + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + + + + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + + Retry failed tests feature allows to restart test execution upon failure. Функция повтора неудачных тестов позволяет перезапустить выполнение теста после сбоя. diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.tr.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.tr.xlf index 8879edbaee..2d61658312 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.tr.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.tr.xlf @@ -50,6 +50,16 @@ Son deneme varlık dosyaları, varsayılan sonuç dizinine taşınıyor '{0}' işlemi başlatılamadı + + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + + + + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + + Retry failed tests feature allows to restart test execution upon failure. Başarısız testleri yeniden dene özelliği, başarısızlık durumunda test yürütmenin yeniden başlatılmasına olanak tanır. diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.zh-Hans.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.zh-Hans.xlf index 643ff90857..294d0199ab 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.zh-Hans.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.zh-Hans.xlf @@ -50,6 +50,16 @@ Moving last attempt asset files to the default result directory 无法启动进程“{0}” + + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + + + + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + + Retry failed tests feature allows to restart test execution upon failure. 重试失败的测试功能允许在失败时重新启动测试执行。 diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.zh-Hant.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.zh-Hant.xlf index 417569a8bc..79292afe01 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.zh-Hant.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.zh-Hant.xlf @@ -50,6 +50,16 @@ Moving last attempt asset files to the default result directory 無法啟動處理程序 '{0}' + + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + + + + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + + Retry failed tests feature allows to restart test execution upon failure. 重試失敗的測試功能允許在失敗時重新啟動測試執行。 diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/RetryCommandLineOptionsProvider.cs b/src/Platform/Microsoft.Testing.Extensions.Retry/RetryCommandLineOptionsProvider.cs index 360e814519..88f151cb4e 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/RetryCommandLineOptionsProvider.cs +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/RetryCommandLineOptionsProvider.cs @@ -5,6 +5,7 @@ using Microsoft.Testing.Platform.CommandLine; using Microsoft.Testing.Platform.Extensions; using Microsoft.Testing.Platform.Extensions.CommandLine; +using Microsoft.Testing.Platform.Helpers; namespace Microsoft.Testing.Extensions.Policy; @@ -13,6 +14,7 @@ internal sealed class RetryCommandLineOptionsProvider : ICommandLineOptionsProvi public const string RetryFailedTestsOptionName = "retry-failed-tests"; public const string RetryFailedTestsMaxPercentageOptionName = "retry-failed-tests-max-percentage"; public const string RetryFailedTestsMaxTestsOptionName = "retry-failed-tests-max-tests"; + public const string RetryFailedTestsDelayOptionName = "retry-failed-tests-delay"; public const string RetryFailedTestsPipeNameOptionName = "internal-retry-pipename"; public string Uid => nameof(RetryCommandLineOptionsProvider); @@ -30,6 +32,7 @@ public IReadOnlyCollection GetCommandLineOptions() => new(RetryFailedTestsOptionName, ExtensionResources.RetryFailedTestsOptionDescription, ArgumentArity.ExactlyOne, false, isBuiltIn: true), new(RetryFailedTestsMaxPercentageOptionName, ExtensionResources.RetryFailedTestsMaxPercentageOptionDescription, ArgumentArity.ExactlyOne, false, isBuiltIn: true), new(RetryFailedTestsMaxTestsOptionName, ExtensionResources.RetryFailedTestsMaxTestsOptionDescription, ArgumentArity.ExactlyOne, false, isBuiltIn: true), + new(RetryFailedTestsDelayOptionName, ExtensionResources.RetryFailedTestsDelayOptionDescription, ArgumentArity.ExactlyOne, false, isBuiltIn: true), // Hidden internal args new(RetryFailedTestsPipeNameOptionName, "Communication between the test host and the retry infra.", ArgumentArity.ExactlyOne, isHidden: true, isBuiltIn: true) @@ -54,6 +57,11 @@ public Task ValidateCommandLineOptionsAsync(ICommandLineOption return ValidationResult.InvalidTask(string.Format(CultureInfo.CurrentCulture, ExtensionResources.RetryFailedTestsOptionIsMissingErrorMessage, RetryFailedTestsMaxTestsOptionName, RetryFailedTestsOptionName)); } + if (commandLineOptions.IsOptionSet(RetryFailedTestsDelayOptionName) && !commandLineOptions.IsOptionSet(RetryFailedTestsOptionName)) + { + return ValidationResult.InvalidTask(string.Format(CultureInfo.CurrentCulture, ExtensionResources.RetryFailedTestsOptionIsMissingErrorMessage, RetryFailedTestsDelayOptionName, RetryFailedTestsOptionName)); + } + // No problem found return ValidationResult.ValidTask; } @@ -75,6 +83,11 @@ public Task ValidateOptionArgumentsAsync(CommandLineOption com return ValidationResult.InvalidTask(string.Format(CultureInfo.CurrentCulture, ExtensionResources.RetryFailedTestsOptionSingleIntegerArgumentErrorMessage, RetryFailedTestsMaxTestsOptionName)); } + if (commandOption.Name == RetryFailedTestsDelayOptionName && !TimeSpanParser.TryParse(arguments[0], out TimeSpan _)) + { + return ValidationResult.InvalidTask(ExtensionResources.RetryFailedTestsDelayOptionInvalidArgument); + } + // No problem found return ValidationResult.ValidTask; } diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/RetryOrchestrator.cs b/src/Platform/Microsoft.Testing.Extensions.Retry/RetryOrchestrator.cs index 3533f67fc6..3b9c54cd06 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/RetryOrchestrator.cs +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/RetryOrchestrator.cs @@ -124,6 +124,13 @@ public async Task OrchestrateTestHostExecutionAsync(CancellationToken cance indexToCleanup.Add(argIndex + 1); } + argIndex = GetOptionArgumentIndex(RetryCommandLineOptionsProvider.RetryFailedTestsDelayOptionName, executableArguments); + if (argIndex > -1) + { + indexToCleanup.Add(argIndex); + indexToCleanup.Add(argIndex + 1); + } + argIndex = GetOptionArgumentIndex(PlatformCommandLineProvider.ResultDirectoryOptionKey, executableArguments); if (argIndex > -1) { @@ -361,6 +368,15 @@ public async Task OrchestrateTestHostExecutionAsync(CancellationToken cance finalArguments.Clear(); lastListOfFailedId = retryFailedTestsPipeServer.FailedUID?.ToArray(); + + // Apply delay between retries if configured + if (_commandLineOptions.TryGetOptionArgumentList(RetryCommandLineOptionsProvider.RetryFailedTestsDelayOptionName, out string[]? retryDelay) + && attemptCount < userMaxRetryCount + 1) + { + TimeSpan delay = TimeSpanParser.Parse(retryDelay[0]); + await logger.LogDebugAsync($"Waiting {delay} before next retry attempt").ConfigureAwait(false); + await Task.Delay(delay, cancellationToken).ConfigureAwait(false); + } } else { diff --git a/test/UnitTests/Microsoft.Testing.Extensions.UnitTests/RetryTests.cs b/test/UnitTests/Microsoft.Testing.Extensions.UnitTests/RetryTests.cs index 53f3b8f3d3..dbcbbb0e46 100644 --- a/test/UnitTests/Microsoft.Testing.Extensions.UnitTests/RetryTests.cs +++ b/test/UnitTests/Microsoft.Testing.Extensions.UnitTests/RetryTests.cs @@ -110,4 +110,59 @@ public async Task IsValid_When_TestOption_Provided_With_Either_MaxPercentage_Max Assert.IsTrue(validateOptionsResult.IsValid); Assert.IsTrue(string.IsNullOrEmpty(validateOptionsResult.ErrorMessage)); } + + [DataRow("200")] + [DataRow("1s")] + [DataRow("2.5m")] + [DataRow("1h")] + [TestMethod] + public async Task IsValid_If_CorrectTimeSpan_Is_Provided_For_DelayOption(string delay) + { + var provider = new RetryCommandLineOptionsProvider(); + CommandLineOption option = provider.GetCommandLineOptions().First(x => x.Name == RetryCommandLineOptionsProvider.RetryFailedTestsDelayOptionName); + + ValidationResult validateOptionsResult = await provider.ValidateOptionArgumentsAsync(option, [delay]).ConfigureAwait(false); + Assert.IsTrue(validateOptionsResult.IsValid); + Assert.IsTrue(string.IsNullOrEmpty(validateOptionsResult.ErrorMessage)); + } + + [TestMethod] + public async Task IsInvalid_If_InvalidTimeSpan_Is_Provided_For_DelayOption() + { + var provider = new RetryCommandLineOptionsProvider(); + CommandLineOption option = provider.GetCommandLineOptions().First(x => x.Name == RetryCommandLineOptionsProvider.RetryFailedTestsDelayOptionName); + + ValidationResult validateOptionsResult = await provider.ValidateOptionArgumentsAsync(option, ["invalid"]).ConfigureAwait(false); + Assert.IsFalse(validateOptionsResult.IsValid); + Assert.AreEqual(Policy.Resources.ExtensionResources.RetryFailedTestsDelayOptionInvalidArgument, validateOptionsResult.ErrorMessage); + } + + [TestMethod] + public async Task IsInvalid_When_DelayOption_Provided_But_RetryOption_Missing() + { + var provider = new RetryCommandLineOptionsProvider(); + var options = new Dictionary + { + { RetryCommandLineOptionsProvider.RetryFailedTestsDelayOptionName, ["1s"] }, + }; + + ValidationResult validateOptionsResult = await provider.ValidateCommandLineOptionsAsync(new TestCommandLineOptions(options)).ConfigureAwait(false); + Assert.IsFalse(validateOptionsResult.IsValid); + Assert.AreEqual(string.Format(CultureInfo.CurrentCulture, Policy.Resources.ExtensionResources.RetryFailedTestsOptionIsMissingErrorMessage, RetryCommandLineOptionsProvider.RetryFailedTestsDelayOptionName, RetryCommandLineOptionsProvider.RetryFailedTestsOptionName), validateOptionsResult.ErrorMessage); + } + + [TestMethod] + public async Task IsValid_When_DelayOption_Provided_With_RetryOption() + { + var provider = new RetryCommandLineOptionsProvider(); + var options = new Dictionary + { + { RetryCommandLineOptionsProvider.RetryFailedTestsOptionName, ["3"] }, + { RetryCommandLineOptionsProvider.RetryFailedTestsDelayOptionName, ["1s"] }, + }; + + ValidationResult validateOptionsResult = await provider.ValidateCommandLineOptionsAsync(new TestCommandLineOptions(options)).ConfigureAwait(false); + Assert.IsTrue(validateOptionsResult.IsValid); + Assert.IsTrue(string.IsNullOrEmpty(validateOptionsResult.ErrorMessage)); + } } From 17d44c08aca92227df1502624d56246f4d1ac393 Mon Sep 17 00:00:00 2001 From: GitHub Copilot Date: Mon, 11 May 2026 19:08:23 +0200 Subject: [PATCH 3/8] Fix issues --- .../RetryOrchestrator.cs | 21 +++++++++++-------- .../HelpInfoAllExtensionsTests.cs | 2 ++ .../Services/DesktopTestSourceHostTests.cs | 4 ++-- .../RetryTests.cs | 8 +++++-- 4 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/RetryOrchestrator.cs b/src/Platform/Microsoft.Testing.Extensions.Retry/RetryOrchestrator.cs index aa08295333..2dce1c6eb1 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/RetryOrchestrator.cs +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/RetryOrchestrator.cs @@ -152,6 +152,11 @@ public async Task OrchestrateTestHostExecutionAsync(CancellationToken cance bool thresholdPolicyKickedIn = false; string retryRootFolder = CreateRetriesDirectory(resultDirectory); bool retryInterrupted = false; + + // Parse the delay once before the loop since command-line options don't change. + TimeSpan? retryDelay = _commandLineOptions.TryGetOptionArgumentList(RetryCommandLineOptionsProvider.RetryFailedTestsDelayOptionName, out string[]? retryDelayArgs) + ? TimeSpanParser.Parse(retryDelayArgs[0]) + : null; while (attemptCount < userMaxRetryCount + 1) { attemptCount++; @@ -273,6 +278,13 @@ public async Task OrchestrateTestHostExecutionAsync(CancellationToken cance UseShellExecute = false, }; + // Apply delay between retries if configured (skip first attempt) + if (attemptCount > 1 && retryDelay is { } delay) + { + await logger.LogDebugAsync($"Waiting {delay:c} before retry attempt {attemptCount}").ConfigureAwait(false); + await Task.Delay(delay, cancellationToken).ConfigureAwait(false); + } + await logger.LogDebugAsync($"Starting test host process, attempt {attemptCount}/{userMaxRetryCount}").ConfigureAwait(false); IProcess testHostProcess = _serviceProvider.GetProcessHandler().Start(processStartInfo) ?? throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, ExtensionResources.RetryFailedTestsCannotStartProcessErrorMessage, processStartInfo.FileName)); @@ -368,15 +380,6 @@ public async Task OrchestrateTestHostExecutionAsync(CancellationToken cance finalArguments.Clear(); lastListOfFailedId = retryFailedTestsPipeServer.FailedUID?.ToArray(); - - // Apply delay between retries if configured - if (_commandLineOptions.TryGetOptionArgumentList(RetryCommandLineOptionsProvider.RetryFailedTestsDelayOptionName, out string[]? retryDelay) - && attemptCount < userMaxRetryCount + 1) - { - TimeSpan delay = TimeSpanParser.Parse(retryDelay[0]); - await logger.LogDebugAsync($"Waiting {delay} before next retry attempt").ConfigureAwait(false); - await Task.Delay(delay, cancellationToken).ConfigureAwait(false); - } } else { diff --git a/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoAllExtensionsTests.cs b/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoAllExtensionsTests.cs index 5151f2f827..3631f11d17 100644 --- a/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoAllExtensionsTests.cs +++ b/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoAllExtensionsTests.cs @@ -60,6 +60,8 @@ The directory where the test results are going to be placed. The default is TestResults in the directory that contains the test application. --retry-failed-tests Retry failed tests the given number of times + --retry-failed-tests-delay + Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. --retry-failed-tests-max-percentage Disable retry mechanism if the percentage of failed tests is greater than the specified value --retry-failed-tests-max-tests diff --git a/test/UnitTests/MSTestAdapter.PlatformServices.UnitTests/Services/DesktopTestSourceHostTests.cs b/test/UnitTests/MSTestAdapter.PlatformServices.UnitTests/Services/DesktopTestSourceHostTests.cs index 4dbd1b9025..c30b8edf73 100644 --- a/test/UnitTests/MSTestAdapter.PlatformServices.UnitTests/Services/DesktopTestSourceHostTests.cs +++ b/test/UnitTests/MSTestAdapter.PlatformServices.UnitTests/Services/DesktopTestSourceHostTests.cs @@ -104,7 +104,7 @@ public void SetupHostShouldSetChildDomainsAppBaseToTestSourceLocation() _ = new DummyClass(); string location = typeof(TestSourceHost).Assembly.Location; - Mock sourceHost = new(location, null) { CallBase = true }; + Mock sourceHost = new(location, null!) { CallBase = true }; try { @@ -161,7 +161,7 @@ public void SetupHostShouldSetResolutionsPaths() DummyClass dummyClass = new(); string location = typeof(TestSourceHost).Assembly.Location; - Mock sourceHost = new(location, null) { CallBase = true }; + Mock sourceHost = new(location, null!) { CallBase = true }; try { diff --git a/test/UnitTests/Microsoft.Testing.Extensions.UnitTests/RetryTests.cs b/test/UnitTests/Microsoft.Testing.Extensions.UnitTests/RetryTests.cs index dbcbbb0e46..be42e9af6b 100644 --- a/test/UnitTests/Microsoft.Testing.Extensions.UnitTests/RetryTests.cs +++ b/test/UnitTests/Microsoft.Testing.Extensions.UnitTests/RetryTests.cs @@ -111,6 +111,8 @@ public async Task IsValid_When_TestOption_Provided_With_Either_MaxPercentage_Max Assert.IsTrue(string.IsNullOrEmpty(validateOptionsResult.ErrorMessage)); } + [DataRow("0")] + [DataRow("0s")] [DataRow("200")] [DataRow("1s")] [DataRow("2.5m")] @@ -126,13 +128,15 @@ public async Task IsValid_If_CorrectTimeSpan_Is_Provided_For_DelayOption(string Assert.IsTrue(string.IsNullOrEmpty(validateOptionsResult.ErrorMessage)); } + [DataRow("invalid")] + [DataRow("")] [TestMethod] - public async Task IsInvalid_If_InvalidTimeSpan_Is_Provided_For_DelayOption() + public async Task IsInvalid_If_InvalidTimeSpan_Is_Provided_For_DelayOption(string delay) { var provider = new RetryCommandLineOptionsProvider(); CommandLineOption option = provider.GetCommandLineOptions().First(x => x.Name == RetryCommandLineOptionsProvider.RetryFailedTestsDelayOptionName); - ValidationResult validateOptionsResult = await provider.ValidateOptionArgumentsAsync(option, ["invalid"]).ConfigureAwait(false); + ValidationResult validateOptionsResult = await provider.ValidateOptionArgumentsAsync(option, [delay]).ConfigureAwait(false); Assert.IsFalse(validateOptionsResult.IsValid); Assert.AreEqual(Policy.Resources.ExtensionResources.RetryFailedTestsDelayOptionInvalidArgument, validateOptionsResult.ErrorMessage); } From ee05e8b6f58781319542347773aa907799090c03 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 11 May 2026 17:59:01 +0000 Subject: [PATCH 4/8] Add missing --retry-failed-tests-delay to --info test and whitespace DataRow Co-authored-by: Evangelink <11340282+Evangelink@users.noreply.github.com> --- .../HelpInfoAllExtensionsTests.cs | 4 ++++ .../Microsoft.Testing.Extensions.UnitTests/RetryTests.cs | 1 + 2 files changed, 5 insertions(+) diff --git a/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoAllExtensionsTests.cs b/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoAllExtensionsTests.cs index 3631f11d17..87111e8d18 100644 --- a/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoAllExtensionsTests.cs +++ b/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoAllExtensionsTests.cs @@ -340,6 +340,10 @@ Default type is 'Full' Arity: 1 Hidden: False Description: Disable retry mechanism if the number of failed tests is greater than the specified value + --retry-failed-tests-delay + Arity: 1 + Hidden: False + Description: Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. TerminalTestReporterCommandLineOptionsProvider Name: Terminal test reporter Version: * diff --git a/test/UnitTests/Microsoft.Testing.Extensions.UnitTests/RetryTests.cs b/test/UnitTests/Microsoft.Testing.Extensions.UnitTests/RetryTests.cs index be42e9af6b..f98011a9f6 100644 --- a/test/UnitTests/Microsoft.Testing.Extensions.UnitTests/RetryTests.cs +++ b/test/UnitTests/Microsoft.Testing.Extensions.UnitTests/RetryTests.cs @@ -130,6 +130,7 @@ public async Task IsValid_If_CorrectTimeSpan_Is_Provided_For_DelayOption(string [DataRow("invalid")] [DataRow("")] + [DataRow(" ")] [TestMethod] public async Task IsInvalid_If_InvalidTimeSpan_Is_Provided_For_DelayOption(string delay) { From 5938a46cff9307a7be73c98510ab4c620e190500 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 11 May 2026 18:00:50 +0000 Subject: [PATCH 5/8] Add integration test for delay arg-stripping in RetryOrchestrator Co-authored-by: Evangelink <11340282+Evangelink@users.noreply.github.com> --- .../RetryFailedTestsTests.cs | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/RetryFailedTestsTests.cs b/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/RetryFailedTestsTests.cs index b53aa9ab19..70460982c4 100644 --- a/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/RetryFailedTestsTests.cs +++ b/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/RetryFailedTestsTests.cs @@ -67,6 +67,31 @@ public async Task RetryFailedTests_OnlyRetryTimes_Succeeds(string tfm, bool fail } } + [TestMethod] + [DynamicData(nameof(TargetFrameworks.AllForDynamicData), typeof(TargetFrameworks))] + public async Task RetryFailedTests_WithDelay_StripsDelayFromChildArgs(string tfm) + { + // The retry asset has AddRetryProvider() registered. If --retry-failed-tests-delay is NOT stripped from + // child-process arguments, the child will receive --retry-failed-tests-delay without --retry-failed-tests + // (the orchestrator strips the latter), causing validation to fail. A successful run therefore proves + // arg-stripping is working. + var testHost = TestInfrastructure.TestHost.LocateFrom(AssetFixture.TargetAssetPath, AssetName, tfm); + string resultDirectory = Path.Combine(testHost.DirectoryName, Guid.NewGuid().ToString("N")); + TestHostResult testHostResult = await testHost.ExecuteAsync( + $"--retry-failed-tests 3 --retry-failed-tests-delay 0 --results-directory {resultDirectory}", + new() + { + { EnvironmentVariableConstants.TESTINGPLATFORM_TELEMETRY_OPTOUT, "1" }, + { "METHOD1", "1" }, + { "FAIL", "0" }, + { "RESULTDIR", resultDirectory }, + }, + cancellationToken: TestContext.CancellationToken); + + testHostResult.AssertExitCodeIs(ExitCode.Success); + testHostResult.AssertOutputContains("Tests suite completed successfully in 2 attempts"); + } + [TestMethod] [DynamicData(nameof(GetMatrix))] public async Task RetryFailedTests_MaxPercentage_Succeeds(string tfm, bool fail) From a19943704bc8b3a417cc1b89096a816ab45d61e2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 11 May 2026 18:53:02 +0000 Subject: [PATCH 6/8] Use TryParse with length guard and move delay before pipe server creation Co-authored-by: Evangelink <11340282+Evangelink@users.noreply.github.com> --- .../RetryOrchestrator.cs | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/RetryOrchestrator.cs b/src/Platform/Microsoft.Testing.Extensions.Retry/RetryOrchestrator.cs index 2dce1c6eb1..4e63810e6a 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/RetryOrchestrator.cs +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/RetryOrchestrator.cs @@ -154,13 +154,24 @@ public async Task OrchestrateTestHostExecutionAsync(CancellationToken cance bool retryInterrupted = false; // Parse the delay once before the loop since command-line options don't change. - TimeSpan? retryDelay = _commandLineOptions.TryGetOptionArgumentList(RetryCommandLineOptionsProvider.RetryFailedTestsDelayOptionName, out string[]? retryDelayArgs) - ? TimeSpanParser.Parse(retryDelayArgs[0]) - : null; + TimeSpan? retryDelay = null; + if (_commandLineOptions.TryGetOptionArgumentList(RetryCommandLineOptionsProvider.RetryFailedTestsDelayOptionName, out string[]? retryDelayArgs) + && retryDelayArgs is { Length: > 0 } + && TimeSpanParser.TryParse(retryDelayArgs[0], out TimeSpan parsedDelay)) + { + retryDelay = parsedDelay; + } + while (attemptCount < userMaxRetryCount + 1) { attemptCount++; + if (attemptCount > 1 && retryDelay is { } delay) + { + await logger.LogDebugAsync($"Waiting {delay:c} before retry attempt {attemptCount}").ConfigureAwait(false); + await Task.Delay(delay, cancellationToken).ConfigureAwait(false); + } + // Cleanup the arguments for (int i = 0; i < executableArguments.Length; i++) { @@ -278,13 +289,6 @@ public async Task OrchestrateTestHostExecutionAsync(CancellationToken cance UseShellExecute = false, }; - // Apply delay between retries if configured (skip first attempt) - if (attemptCount > 1 && retryDelay is { } delay) - { - await logger.LogDebugAsync($"Waiting {delay:c} before retry attempt {attemptCount}").ConfigureAwait(false); - await Task.Delay(delay, cancellationToken).ConfigureAwait(false); - } - await logger.LogDebugAsync($"Starting test host process, attempt {attemptCount}/{userMaxRetryCount}").ConfigureAwait(false); IProcess testHostProcess = _serviceProvider.GetProcessHandler().Start(processStartInfo) ?? throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, ExtensionResources.RetryFailedTestsCannotStartProcessErrorMessage, processStartInfo.FileName)); From 6148d3002c0c23f8bf41646aaa4316b0e30899e8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 11 May 2026 19:02:25 +0000 Subject: [PATCH 7/8] Fix bounds check, add range validation, update help text examples Co-authored-by: Evangelink <11340282+Evangelink@users.noreply.github.com> --- .../Resources/ExtensionResources.resx | 2 +- .../Resources/xlf/ExtensionResources.cs.xlf | 4 ++-- .../Resources/xlf/ExtensionResources.de.xlf | 4 ++-- .../Resources/xlf/ExtensionResources.es.xlf | 4 ++-- .../Resources/xlf/ExtensionResources.fr.xlf | 4 ++-- .../Resources/xlf/ExtensionResources.it.xlf | 4 ++-- .../Resources/xlf/ExtensionResources.ja.xlf | 4 ++-- .../Resources/xlf/ExtensionResources.ko.xlf | 4 ++-- .../Resources/xlf/ExtensionResources.pl.xlf | 4 ++-- .../Resources/xlf/ExtensionResources.pt-BR.xlf | 4 ++-- .../Resources/xlf/ExtensionResources.ru.xlf | 4 ++-- .../Resources/xlf/ExtensionResources.tr.xlf | 4 ++-- .../Resources/xlf/ExtensionResources.zh-Hans.xlf | 4 ++-- .../Resources/xlf/ExtensionResources.zh-Hant.xlf | 4 ++-- .../RetryCommandLineOptionsProvider.cs | 5 ++++- .../Microsoft.Testing.Extensions.Retry/RetryOrchestrator.cs | 5 ++++- .../HelpInfoAllExtensionsTests.cs | 4 ++-- .../Microsoft.Testing.Extensions.UnitTests/RetryTests.cs | 1 + 18 files changed, 38 insertions(+), 31 deletions(-) diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/ExtensionResources.resx b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/ExtensionResources.resx index 7d8045bdc2..b3064cd8ce 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/ExtensionResources.resx +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/ExtensionResources.resx @@ -165,7 +165,7 @@ Moving last attempt asset files to the default result directory Retry failed tests feature is not supported in server mode - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.cs.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.cs.xlf index bb44adcde6..4fd9e8013c 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.cs.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.cs.xlf @@ -51,8 +51,8 @@ Přesouvání souborů prostředků posledního pokusu do výchozího adresáře - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.de.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.de.xlf index c814dd9ad9..628780ec73 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.de.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.de.xlf @@ -51,8 +51,8 @@ Medienobjektdateien des letzten Versuchs werden in das Standardergebnisverzeichn - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.es.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.es.xlf index b263c48dbe..cfea1a1a72 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.es.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.es.xlf @@ -51,8 +51,8 @@ Moviendo los archivos de recursos del último intento al directorio de resultado - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.fr.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.fr.xlf index 7d3d5a1ddd..177cee21b6 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.fr.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.fr.xlf @@ -51,8 +51,8 @@ Déplacement des fichiers de ressources de la dernière tentative vers le réper - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.it.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.it.xlf index aaa4980a8e..aa6a9c5c0f 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.it.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.it.xlf @@ -51,8 +51,8 @@ Spostamento dei file di asset dell'ultimo tentativo nella directory dei risultat - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ja.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ja.xlf index 46f2aba793..7c61a94fe0 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ja.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ja.xlf @@ -51,8 +51,8 @@ Moving last attempt asset files to the default result directory - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ko.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ko.xlf index 0e37e6cb5e..f728e6e0f1 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ko.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ko.xlf @@ -51,8 +51,8 @@ Moving last attempt asset files to the default result directory - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.pl.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.pl.xlf index 3766654987..e5a32336c4 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.pl.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.pl.xlf @@ -51,8 +51,8 @@ Przeniesienie plików zasobów ostatniej próby do domyślnego katalogu wyników - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.pt-BR.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.pt-BR.xlf index 90276ba003..e2426efdc2 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.pt-BR.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.pt-BR.xlf @@ -51,8 +51,8 @@ Movendo arquivos de ativo da última tentativa para o diretório de resultados p - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ru.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ru.xlf index 4b8fb57d1f..64af54da39 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ru.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ru.xlf @@ -51,8 +51,8 @@ Moving last attempt asset files to the default result directory - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.tr.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.tr.xlf index 2d61658312..033295db20 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.tr.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.tr.xlf @@ -51,8 +51,8 @@ Son deneme varlık dosyaları, varsayılan sonuç dizinine taşınıyor - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.zh-Hans.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.zh-Hans.xlf index 294d0199ab..aeac13aa44 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.zh-Hans.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.zh-Hans.xlf @@ -51,8 +51,8 @@ Moving last attempt asset files to the default result directory - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.zh-Hant.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.zh-Hant.xlf index 79292afe01..9197880810 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.zh-Hant.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.zh-Hant.xlf @@ -51,8 +51,8 @@ Moving last attempt asset files to the default result directory - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/RetryCommandLineOptionsProvider.cs b/src/Platform/Microsoft.Testing.Extensions.Retry/RetryCommandLineOptionsProvider.cs index 88f151cb4e..d44c1e3917 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/RetryCommandLineOptionsProvider.cs +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/RetryCommandLineOptionsProvider.cs @@ -83,7 +83,10 @@ public Task ValidateOptionArgumentsAsync(CommandLineOption com return ValidationResult.InvalidTask(string.Format(CultureInfo.CurrentCulture, ExtensionResources.RetryFailedTestsOptionSingleIntegerArgumentErrorMessage, RetryFailedTestsMaxTestsOptionName)); } - if (commandOption.Name == RetryFailedTestsDelayOptionName && !TimeSpanParser.TryParse(arguments[0], out TimeSpan _)) + if (commandOption.Name == RetryFailedTestsDelayOptionName + && (!TimeSpanParser.TryParse(arguments[0], out TimeSpan delay) + || delay < TimeSpan.Zero + || delay.TotalMilliseconds > int.MaxValue)) { return ValidationResult.InvalidTask(ExtensionResources.RetryFailedTestsDelayOptionInvalidArgument); } diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/RetryOrchestrator.cs b/src/Platform/Microsoft.Testing.Extensions.Retry/RetryOrchestrator.cs index 4e63810e6a..6d40011cde 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/RetryOrchestrator.cs +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/RetryOrchestrator.cs @@ -128,7 +128,10 @@ public async Task OrchestrateTestHostExecutionAsync(CancellationToken cance if (argIndex > -1) { indexToCleanup.Add(argIndex); - indexToCleanup.Add(argIndex + 1); + if (argIndex + 1 < executableArguments.Length) + { + indexToCleanup.Add(argIndex + 1); + } } argIndex = GetOptionArgumentIndex(PlatformCommandLineProvider.ResultDirectoryOptionKey, executableArguments); diff --git a/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoAllExtensionsTests.cs b/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoAllExtensionsTests.cs index 87111e8d18..ea2d4b260e 100644 --- a/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoAllExtensionsTests.cs +++ b/test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoAllExtensionsTests.cs @@ -61,7 +61,7 @@ The directory where the test results are going to be placed. --retry-failed-tests Retry failed tests the given number of times --retry-failed-tests-delay - Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. --retry-failed-tests-max-percentage Disable retry mechanism if the percentage of failed tests is greater than the specified value --retry-failed-tests-max-tests @@ -343,7 +343,7 @@ Default type is 'Full' --retry-failed-tests-delay Arity: 1 Hidden: False - Description: Add a delay between retries. The delay is expressed as a time value, e.g. 1s, 2.5m, 1h. Default unit is milliseconds. + Description: Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. TerminalTestReporterCommandLineOptionsProvider Name: Terminal test reporter Version: * diff --git a/test/UnitTests/Microsoft.Testing.Extensions.UnitTests/RetryTests.cs b/test/UnitTests/Microsoft.Testing.Extensions.UnitTests/RetryTests.cs index f98011a9f6..17768c5468 100644 --- a/test/UnitTests/Microsoft.Testing.Extensions.UnitTests/RetryTests.cs +++ b/test/UnitTests/Microsoft.Testing.Extensions.UnitTests/RetryTests.cs @@ -131,6 +131,7 @@ public async Task IsValid_If_CorrectTimeSpan_Is_Provided_For_DelayOption(string [DataRow("invalid")] [DataRow("")] [DataRow(" ")] + [DataRow("25d")] [TestMethod] public async Task IsInvalid_If_InvalidTimeSpan_Is_Provided_For_DelayOption(string delay) { From 9b43a08c75739e0d3cb193b34b5796eafa9b3920 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 13 May 2026 14:31:35 +0000 Subject: [PATCH 8/8] Update RetryFailedTestsDelayOptionInvalidArgument error message to include supported range The error message now mentions the supported range (non-negative and no greater than 2147483647ms / ~24.20:31:23.647) to clarify that syntactically valid but out-of-range values like '25d' are also rejected. Addresses review comment: https://github.com/microsoft/testfx/pull/7840#discussion_r3233082819 Co-authored-by: Evangelink <11340282+Evangelink@users.noreply.github.com> --- .../Resources/ExtensionResources.resx | 2 +- .../Resources/xlf/ExtensionResources.cs.xlf | 4 ++-- .../Resources/xlf/ExtensionResources.de.xlf | 4 ++-- .../Resources/xlf/ExtensionResources.es.xlf | 4 ++-- .../Resources/xlf/ExtensionResources.fr.xlf | 4 ++-- .../Resources/xlf/ExtensionResources.it.xlf | 4 ++-- .../Resources/xlf/ExtensionResources.ja.xlf | 4 ++-- .../Resources/xlf/ExtensionResources.ko.xlf | 4 ++-- .../Resources/xlf/ExtensionResources.pl.xlf | 4 ++-- .../Resources/xlf/ExtensionResources.pt-BR.xlf | 4 ++-- .../Resources/xlf/ExtensionResources.ru.xlf | 4 ++-- .../Resources/xlf/ExtensionResources.tr.xlf | 4 ++-- .../Resources/xlf/ExtensionResources.zh-Hans.xlf | 4 ++-- .../Resources/xlf/ExtensionResources.zh-Hant.xlf | 4 ++-- 14 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/ExtensionResources.resx b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/ExtensionResources.resx index b3064cd8ce..46b79b89e5 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/ExtensionResources.resx +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/ExtensionResources.resx @@ -168,7 +168,7 @@ Moving last attempt asset files to the default result directory Add a delay between retries. The delay is expressed as a time value, e.g. 200, 1s, 2.5m, 1h. Default unit is milliseconds. - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) Retry failed tests the given number of times diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.cs.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.cs.xlf index 4fd9e8013c..b9c43ebcdb 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.cs.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.cs.xlf @@ -56,8 +56,8 @@ Přesouvání souborů prostředků posledního pokusu do výchozího adresáře - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.de.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.de.xlf index 628780ec73..d4fce7d287 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.de.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.de.xlf @@ -56,8 +56,8 @@ Medienobjektdateien des letzten Versuchs werden in das Standardergebnisverzeichn - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.es.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.es.xlf index cfea1a1a72..a8916e044e 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.es.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.es.xlf @@ -56,8 +56,8 @@ Moviendo los archivos de recursos del último intento al directorio de resultado - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.fr.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.fr.xlf index 177cee21b6..6cdedcef69 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.fr.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.fr.xlf @@ -56,8 +56,8 @@ Déplacement des fichiers de ressources de la dernière tentative vers le réper - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.it.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.it.xlf index aa6a9c5c0f..a527f4594b 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.it.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.it.xlf @@ -56,8 +56,8 @@ Spostamento dei file di asset dell'ultimo tentativo nella directory dei risultat - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ja.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ja.xlf index 7c61a94fe0..24d3ea5710 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ja.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ja.xlf @@ -56,8 +56,8 @@ Moving last attempt asset files to the default result directory - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ko.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ko.xlf index f728e6e0f1..0cd33ebc93 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ko.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ko.xlf @@ -56,8 +56,8 @@ Moving last attempt asset files to the default result directory - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.pl.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.pl.xlf index e5a32336c4..4f3e1c6148 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.pl.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.pl.xlf @@ -56,8 +56,8 @@ Przeniesienie plików zasobów ostatniej próby do domyślnego katalogu wyników - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.pt-BR.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.pt-BR.xlf index e2426efdc2..3617bb4a4d 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.pt-BR.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.pt-BR.xlf @@ -56,8 +56,8 @@ Movendo arquivos de ativo da última tentativa para o diretório de resultados p - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ru.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ru.xlf index 64af54da39..48bf2fb6f5 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ru.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.ru.xlf @@ -56,8 +56,8 @@ Moving last attempt asset files to the default result directory - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.tr.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.tr.xlf index 033295db20..0bc4b41d5b 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.tr.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.tr.xlf @@ -56,8 +56,8 @@ Son deneme varlık dosyaları, varsayılan sonuç dizinine taşınıyor - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.zh-Hans.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.zh-Hans.xlf index aeac13aa44..c19d72df8b 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.zh-Hans.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.zh-Hans.xlf @@ -56,8 +56,8 @@ Moving last attempt asset files to the default result directory - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) diff --git a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.zh-Hant.xlf b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.zh-Hant.xlf index 9197880810..ee48cb5e68 100644 --- a/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.zh-Hant.xlf +++ b/src/Platform/Microsoft.Testing.Extensions.Retry/Resources/xlf/ExtensionResources.zh-Hant.xlf @@ -56,8 +56,8 @@ Moving last attempt asset files to the default result directory - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) - Option '--retry-failed-tests-delay' requires a valid time span value (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h) + Option '--retry-failed-tests-delay' requires a valid time span value that is non-negative and no greater than 2147483647ms (~24.20:31:23.647) (e.g. 200, 1s, 2.5m, 1h)