Add --ansi <auto|on|off> CLI option for explicit ANSI control (#5081) - #8493

Merged
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/ansi-cli-option
May 22, 2026
Merged

Add --ansi <auto|on|off> CLI option for explicit ANSI control (#5081)#8493
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/ansi-cli-option

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Implements the user-facing --ansi option with auto/on/off values (plus true|enable|1 / false|disable|0 aliases). The new option fulfils issue #5081 by mapping --ansi on to the existing internal AnsiMode.ForceAnsi, which emits ANSI escape codes (including cursor movement) even when stdout is redirected (for example, in mytest.exe | Out-Host pipelines).

Closes#5081.

What

  • New --ansi <auto|on|off> option on the Terminal test reporter extension.
  • Accepted argument aliases: on/true/enable/1 and off/false/disable/0; case-insensitive; invalid values are rejected with a localized message.
  • When both --ansi and --no-ansi are specified, --ansi wins (documented in the help text and verified by integration tests).
  • --ansi auto explicitly opts back into auto-detection and overrides a sibling --no-ansi.
  • New internal CommandLineOptionArgumentValidator helper exposes IsValidBooleanArgument / IsValidBooleanAutoArgument / IsOnValue / IsOffValue / IsAutoValue so future on|off|auto options can share the same parsing.

Tests

  • New unit tests for the validator and the Terminal options provider (CommandLineOptionArgumentValidatorTests, TerminalTestReporterCommandLineOptionsProviderTests).
  • New integration tests in AnsiOptionTests exercising on/off/auto behavior, alias handling, precedence vs --no-ansi, and invalid-argument rejection.
  • Updated MTP and MSTest acceptance --help / --info expectations to include the new option.

Notes

This was previously bundled into #8461 (TestRun.Current / PlannedTests). Split out per code-review request.

Implements the user-facing --ansi option with auto/on/off values (plus
true|enable|1 / false|disable|0 aliases). The new option fulfils issue
#5081 by mapping --ansi on to the existing internal AnsiMode.ForceAnsi,
which emits ANSI escape codes (including cursor movement) even when
stdout is redirected (for example, in 'mytest.exe | Out-Host' pipelines).
- New internal CommandLineOptionArgumentValidator helper exposes
IsValidBooleanArgument / IsValidBooleanAutoArgument / IsOnValue /
IsOffValue / IsAutoValue for reuse by future on|off|auto options.
- --no-ansi continues to work unchanged. When both --ansi and --no-ansi
are specified, --ansi wins (documented in the help text).
- Updated MTP and MSTest acceptance test --help and --info expectations
to include the new option.
- Added unit tests for the validator and the provider plus integration
tests verifying the on/off/auto behavior, alias handling, and invalid
argument rejection.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds an explicit --ansi <auto|on|off> CLI option to the Terminal test reporter (Microsoft.Testing.Platform), including parsing/validation helpers, localized help/error strings, and updated acceptance/unit tests to cover the new behavior and help output.

Changes:

  • Introduces --ansi <auto|on|off> (with true|enable|1 and false|disable|0 aliases) and wires it to AnsiMode.ForceAnsi/NoAnsi/auto detection.
  • Adds CommandLineOptionArgumentValidator helper for reusable boolean/boolean+auto argument validation.
  • Updates localized resources and --help/--info acceptance expectations; adds new unit + acceptance coverage for the new option.
Show a summary per file
FileDescription
test/UnitTests/Microsoft.Testing.Platform.UnitTests/OutputDevice/Terminal/TerminalTestReporterCommandLineOptionsProviderTests.csUnit tests for --ansi option arity/visibility and accepted/rejected argument values.
test/UnitTests/Microsoft.Testing.Platform.UnitTests/CommandLine/CommandLineOptionArgumentValidatorTests.csUnit tests for shared on/off/auto argument validation helper.
test/IntegrationTests/MSTest.Acceptance.IntegrationTests/HelpInfoTests.csUpdates MSTest host --help expectations to include --ansi.
test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoTests.csUpdates MTP host --help/--info expectations to include --ansi option details.
test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoAllExtensionsTests.csUpdates “all extensions” --help/--info expectations to include --ansi.
test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/AnsiOptionTests.csNew acceptance tests covering --ansi on/off/auto behavior, precedence, and invalid argument handling.
src/Platform/Microsoft.Testing.Platform/Resources/PlatformResources.resxAdds localized resource strings for --ansi description and invalid-argument message.
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.cs.xlfRegenerated localization entry for new --ansi strings (Czech).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.de.xlfRegenerated localization entry for new --ansi strings (German).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.es.xlfRegenerated localization entry for new --ansi strings (Spanish).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.fr.xlfRegenerated localization entry for new --ansi strings (French).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.it.xlfRegenerated localization entry for new --ansi strings (Italian).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ja.xlfRegenerated localization entry for new --ansi strings (Japanese).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ko.xlfRegenerated localization entry for new --ansi strings (Korean).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.pl.xlfRegenerated localization entry for new --ansi strings (Polish).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.pt-BR.xlfRegenerated localization entry for new --ansi strings (Portuguese - Brazil).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ru.xlfRegenerated localization entry for new --ansi strings (Russian).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.tr.xlfRegenerated localization entry for new --ansi strings (Turkish).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.zh-Hans.xlfRegenerated localization entry for new --ansi strings (Chinese - Simplified).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.zh-Hant.xlfRegenerated localization entry for new --ansi strings (Chinese - Traditional).
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/TerminalTestReporterCommandLineOptionsProvider.csAdds --ansi option definition + argument validation using the shared validator helper.
src/Platform/Microsoft.Testing.Platform/OutputDevice/TerminalOutputDevice.csImplements --ansi precedence rules and maps values to AnsiMode selection.
src/Platform/Microsoft.Testing.Platform/CommandLine/CommandLineOptionArgumentValidator.csNew shared helper for on/off/auto argument validation and alias handling.

Copilot's findings

  • Files reviewed: 23/23 changed files
  • Comments generated: 2

- AnsiOption_MissingArgument_FailsCommandLineValidation: assert the actual
arity-validation message (CommandLineOptionsValidator rejects --ansi without
a value before per-occurrence validation runs, so the custom
TerminalAnsiOptionInvalidArgument text is not used here).
- AnsiOption_Auto_OverridesNoAnsi_AndFollowsEnvironmentDetection: rewrite to
prove the override deterministically by forcing GITHUB_ACTIONS=true and
clearing known LLM env vars so '--ansi auto' maps to SimpleAnsi and emits
ESC, demonstrating it won over the auto-injected --no-ansi.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add --ansi option to force Ansi output

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Add --ansi <auto|on|off> CLI option for explicit ANSI control (#5081) - #8493

Merged
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/ansi-cli-option
May 22, 2026
Merged

Add --ansi <auto|on|off> CLI option for explicit ANSI control (#5081)#8493
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/ansi-cli-option

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Implements the user-facing --ansi option with auto/on/off values (plus true|enable|1 / false|disable|0 aliases). The new option fulfils issue #5081 by mapping --ansi on to the existing internal AnsiMode.ForceAnsi, which emits ANSI escape codes (including cursor movement) even when stdout is redirected (for example, in mytest.exe | Out-Host pipelines).

Closes#5081.

What

  • New --ansi <auto|on|off> option on the Terminal test reporter extension.
  • Accepted argument aliases: on/true/enable/1 and off/false/disable/0; case-insensitive; invalid values are rejected with a localized message.
  • When both --ansi and --no-ansi are specified, --ansi wins (documented in the help text and verified by integration tests).
  • --ansi auto explicitly opts back into auto-detection and overrides a sibling --no-ansi.
  • New internal CommandLineOptionArgumentValidator helper exposes IsValidBooleanArgument / IsValidBooleanAutoArgument / IsOnValue / IsOffValue / IsAutoValue so future on|off|auto options can share the same parsing.

Tests

  • New unit tests for the validator and the Terminal options provider (CommandLineOptionArgumentValidatorTests, TerminalTestReporterCommandLineOptionsProviderTests).
  • New integration tests in AnsiOptionTests exercising on/off/auto behavior, alias handling, precedence vs --no-ansi, and invalid-argument rejection.
  • Updated MTP and MSTest acceptance --help / --info expectations to include the new option.

Notes

This was previously bundled into #8461 (TestRun.Current / PlannedTests). Split out per code-review request.

Implements the user-facing --ansi option with auto/on/off values (plus
true|enable|1 / false|disable|0 aliases). The new option fulfils issue
#5081 by mapping --ansi on to the existing internal AnsiMode.ForceAnsi,
which emits ANSI escape codes (including cursor movement) even when
stdout is redirected (for example, in 'mytest.exe | Out-Host' pipelines).
- New internal CommandLineOptionArgumentValidator helper exposes
IsValidBooleanArgument / IsValidBooleanAutoArgument / IsOnValue /
IsOffValue / IsAutoValue for reuse by future on|off|auto options.
- --no-ansi continues to work unchanged. When both --ansi and --no-ansi
are specified, --ansi wins (documented in the help text).
- Updated MTP and MSTest acceptance test --help and --info expectations
to include the new option.
- Added unit tests for the validator and the provider plus integration
tests verifying the on/off/auto behavior, alias handling, and invalid
argument rejection.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds an explicit --ansi <auto|on|off> CLI option to the Terminal test reporter (Microsoft.Testing.Platform), including parsing/validation helpers, localized help/error strings, and updated acceptance/unit tests to cover the new behavior and help output.

Changes:

  • Introduces --ansi <auto|on|off> (with true|enable|1 and false|disable|0 aliases) and wires it to AnsiMode.ForceAnsi/NoAnsi/auto detection.
  • Adds CommandLineOptionArgumentValidator helper for reusable boolean/boolean+auto argument validation.
  • Updates localized resources and --help/--info acceptance expectations; adds new unit + acceptance coverage for the new option.
Show a summary per file
FileDescription
test/UnitTests/Microsoft.Testing.Platform.UnitTests/OutputDevice/Terminal/TerminalTestReporterCommandLineOptionsProviderTests.csUnit tests for --ansi option arity/visibility and accepted/rejected argument values.
test/UnitTests/Microsoft.Testing.Platform.UnitTests/CommandLine/CommandLineOptionArgumentValidatorTests.csUnit tests for shared on/off/auto argument validation helper.
test/IntegrationTests/MSTest.Acceptance.IntegrationTests/HelpInfoTests.csUpdates MSTest host --help expectations to include --ansi.
test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoTests.csUpdates MTP host --help/--info expectations to include --ansi option details.
test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoAllExtensionsTests.csUpdates “all extensions” --help/--info expectations to include --ansi.
test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/AnsiOptionTests.csNew acceptance tests covering --ansi on/off/auto behavior, precedence, and invalid argument handling.
src/Platform/Microsoft.Testing.Platform/Resources/PlatformResources.resxAdds localized resource strings for --ansi description and invalid-argument message.
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.cs.xlfRegenerated localization entry for new --ansi strings (Czech).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.de.xlfRegenerated localization entry for new --ansi strings (German).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.es.xlfRegenerated localization entry for new --ansi strings (Spanish).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.fr.xlfRegenerated localization entry for new --ansi strings (French).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.it.xlfRegenerated localization entry for new --ansi strings (Italian).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ja.xlfRegenerated localization entry for new --ansi strings (Japanese).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ko.xlfRegenerated localization entry for new --ansi strings (Korean).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.pl.xlfRegenerated localization entry for new --ansi strings (Polish).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.pt-BR.xlfRegenerated localization entry for new --ansi strings (Portuguese - Brazil).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ru.xlfRegenerated localization entry for new --ansi strings (Russian).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.tr.xlfRegenerated localization entry for new --ansi strings (Turkish).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.zh-Hans.xlfRegenerated localization entry for new --ansi strings (Chinese - Simplified).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.zh-Hant.xlfRegenerated localization entry for new --ansi strings (Chinese - Traditional).
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/TerminalTestReporterCommandLineOptionsProvider.csAdds --ansi option definition + argument validation using the shared validator helper.
src/Platform/Microsoft.Testing.Platform/OutputDevice/TerminalOutputDevice.csImplements --ansi precedence rules and maps values to AnsiMode selection.
src/Platform/Microsoft.Testing.Platform/CommandLine/CommandLineOptionArgumentValidator.csNew shared helper for on/off/auto argument validation and alias handling.

Copilot's findings

  • Files reviewed: 23/23 changed files
  • Comments generated: 2

- AnsiOption_MissingArgument_FailsCommandLineValidation: assert the actual
arity-validation message (CommandLineOptionsValidator rejects --ansi without
a value before per-occurrence validation runs, so the custom
TerminalAnsiOptionInvalidArgument text is not used here).
- AnsiOption_Auto_OverridesNoAnsi_AndFollowsEnvironmentDetection: rewrite to
prove the override deterministically by forcing GITHUB_ACTIONS=true and
clearing known LLM env vars so '--ansi auto' maps to SimpleAnsi and emits
ESC, demonstrating it won over the auto-injected --no-ansi.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add --ansi option to force Ansi output

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add --ansi <auto|on|off> CLI option for explicit ANSI control (#5081) - #8493

Merged
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/ansi-cli-option
May 22, 2026
Merged

Add --ansi <auto|on|off> CLI option for explicit ANSI control (#5081)#8493
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/ansi-cli-option

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Implements the user-facing --ansi option with auto/on/off values (plus true|enable|1 / false|disable|0 aliases). The new option fulfils issue #5081 by mapping --ansi on to the existing internal AnsiMode.ForceAnsi, which emits ANSI escape codes (including cursor movement) even when stdout is redirected (for example, in mytest.exe | Out-Host pipelines).

Closes#5081.

What

  • New --ansi <auto|on|off> option on the Terminal test reporter extension.
  • Accepted argument aliases: on/true/enable/1 and off/false/disable/0; case-insensitive; invalid values are rejected with a localized message.
  • When both --ansi and --no-ansi are specified, --ansi wins (documented in the help text and verified by integration tests).
  • --ansi auto explicitly opts back into auto-detection and overrides a sibling --no-ansi.
  • New internal CommandLineOptionArgumentValidator helper exposes IsValidBooleanArgument / IsValidBooleanAutoArgument / IsOnValue / IsOffValue / IsAutoValue so future on|off|auto options can share the same parsing.

Tests

  • New unit tests for the validator and the Terminal options provider (CommandLineOptionArgumentValidatorTests, TerminalTestReporterCommandLineOptionsProviderTests).
  • New integration tests in AnsiOptionTests exercising on/off/auto behavior, alias handling, precedence vs --no-ansi, and invalid-argument rejection.
  • Updated MTP and MSTest acceptance --help / --info expectations to include the new option.

Notes

This was previously bundled into #8461 (TestRun.Current / PlannedTests). Split out per code-review request.

Implements the user-facing --ansi option with auto/on/off values (plus
true|enable|1 / false|disable|0 aliases). The new option fulfils issue
#5081 by mapping --ansi on to the existing internal AnsiMode.ForceAnsi,
which emits ANSI escape codes (including cursor movement) even when
stdout is redirected (for example, in 'mytest.exe | Out-Host' pipelines).
- New internal CommandLineOptionArgumentValidator helper exposes
IsValidBooleanArgument / IsValidBooleanAutoArgument / IsOnValue /
IsOffValue / IsAutoValue for reuse by future on|off|auto options.
- --no-ansi continues to work unchanged. When both --ansi and --no-ansi
are specified, --ansi wins (documented in the help text).
- Updated MTP and MSTest acceptance test --help and --info expectations
to include the new option.
- Added unit tests for the validator and the provider plus integration
tests verifying the on/off/auto behavior, alias handling, and invalid
argument rejection.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds an explicit --ansi <auto|on|off> CLI option to the Terminal test reporter (Microsoft.Testing.Platform), including parsing/validation helpers, localized help/error strings, and updated acceptance/unit tests to cover the new behavior and help output.

Changes:

  • Introduces --ansi <auto|on|off> (with true|enable|1 and false|disable|0 aliases) and wires it to AnsiMode.ForceAnsi/NoAnsi/auto detection.
  • Adds CommandLineOptionArgumentValidator helper for reusable boolean/boolean+auto argument validation.
  • Updates localized resources and --help/--info acceptance expectations; adds new unit + acceptance coverage for the new option.
Show a summary per file
FileDescription
test/UnitTests/Microsoft.Testing.Platform.UnitTests/OutputDevice/Terminal/TerminalTestReporterCommandLineOptionsProviderTests.csUnit tests for --ansi option arity/visibility and accepted/rejected argument values.
test/UnitTests/Microsoft.Testing.Platform.UnitTests/CommandLine/CommandLineOptionArgumentValidatorTests.csUnit tests for shared on/off/auto argument validation helper.
test/IntegrationTests/MSTest.Acceptance.IntegrationTests/HelpInfoTests.csUpdates MSTest host --help expectations to include --ansi.
test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoTests.csUpdates MTP host --help/--info expectations to include --ansi option details.
test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoAllExtensionsTests.csUpdates “all extensions” --help/--info expectations to include --ansi.
test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/AnsiOptionTests.csNew acceptance tests covering --ansi on/off/auto behavior, precedence, and invalid argument handling.
src/Platform/Microsoft.Testing.Platform/Resources/PlatformResources.resxAdds localized resource strings for --ansi description and invalid-argument message.
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.cs.xlfRegenerated localization entry for new --ansi strings (Czech).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.de.xlfRegenerated localization entry for new --ansi strings (German).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.es.xlfRegenerated localization entry for new --ansi strings (Spanish).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.fr.xlfRegenerated localization entry for new --ansi strings (French).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.it.xlfRegenerated localization entry for new --ansi strings (Italian).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ja.xlfRegenerated localization entry for new --ansi strings (Japanese).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ko.xlfRegenerated localization entry for new --ansi strings (Korean).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.pl.xlfRegenerated localization entry for new --ansi strings (Polish).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.pt-BR.xlfRegenerated localization entry for new --ansi strings (Portuguese - Brazil).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ru.xlfRegenerated localization entry for new --ansi strings (Russian).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.tr.xlfRegenerated localization entry for new --ansi strings (Turkish).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.zh-Hans.xlfRegenerated localization entry for new --ansi strings (Chinese - Simplified).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.zh-Hant.xlfRegenerated localization entry for new --ansi strings (Chinese - Traditional).
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/TerminalTestReporterCommandLineOptionsProvider.csAdds --ansi option definition + argument validation using the shared validator helper.
src/Platform/Microsoft.Testing.Platform/OutputDevice/TerminalOutputDevice.csImplements --ansi precedence rules and maps values to AnsiMode selection.
src/Platform/Microsoft.Testing.Platform/CommandLine/CommandLineOptionArgumentValidator.csNew shared helper for on/off/auto argument validation and alias handling.

Copilot's findings

  • Files reviewed: 23/23 changed files
  • Comments generated: 2

- AnsiOption_MissingArgument_FailsCommandLineValidation: assert the actual
arity-validation message (CommandLineOptionsValidator rejects --ansi without
a value before per-occurrence validation runs, so the custom
TerminalAnsiOptionInvalidArgument text is not used here).
- AnsiOption_Auto_OverridesNoAnsi_AndFollowsEnvironmentDetection: rewrite to
prove the override deterministically by forcing GITHUB_ACTIONS=true and
clearing known LLM env vars so '--ansi auto' maps to SimpleAnsi and emits
ESC, demonstrating it won over the auto-injected --no-ansi.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add --ansi option to force Ansi output

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add --ansi <auto|on|off> CLI option for explicit ANSI control (#5081) - #8493

Merged
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/ansi-cli-option
May 22, 2026
Merged

Add --ansi <auto|on|off> CLI option for explicit ANSI control (#5081)#8493
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/ansi-cli-option

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Implements the user-facing --ansi option with auto/on/off values (plus true|enable|1 / false|disable|0 aliases). The new option fulfils issue #5081 by mapping --ansi on to the existing internal AnsiMode.ForceAnsi, which emits ANSI escape codes (including cursor movement) even when stdout is redirected (for example, in mytest.exe | Out-Host pipelines).

Closes#5081.

What

  • New --ansi <auto|on|off> option on the Terminal test reporter extension.
  • Accepted argument aliases: on/true/enable/1 and off/false/disable/0; case-insensitive; invalid values are rejected with a localized message.
  • When both --ansi and --no-ansi are specified, --ansi wins (documented in the help text and verified by integration tests).
  • --ansi auto explicitly opts back into auto-detection and overrides a sibling --no-ansi.
  • New internal CommandLineOptionArgumentValidator helper exposes IsValidBooleanArgument / IsValidBooleanAutoArgument / IsOnValue / IsOffValue / IsAutoValue so future on|off|auto options can share the same parsing.

Tests

  • New unit tests for the validator and the Terminal options provider (CommandLineOptionArgumentValidatorTests, TerminalTestReporterCommandLineOptionsProviderTests).
  • New integration tests in AnsiOptionTests exercising on/off/auto behavior, alias handling, precedence vs --no-ansi, and invalid-argument rejection.
  • Updated MTP and MSTest acceptance --help / --info expectations to include the new option.

Notes

This was previously bundled into #8461 (TestRun.Current / PlannedTests). Split out per code-review request.

Implements the user-facing --ansi option with auto/on/off values (plus
true|enable|1 / false|disable|0 aliases). The new option fulfils issue
#5081 by mapping --ansi on to the existing internal AnsiMode.ForceAnsi,
which emits ANSI escape codes (including cursor movement) even when
stdout is redirected (for example, in 'mytest.exe | Out-Host' pipelines).
- New internal CommandLineOptionArgumentValidator helper exposes
IsValidBooleanArgument / IsValidBooleanAutoArgument / IsOnValue /
IsOffValue / IsAutoValue for reuse by future on|off|auto options.
- --no-ansi continues to work unchanged. When both --ansi and --no-ansi
are specified, --ansi wins (documented in the help text).
- Updated MTP and MSTest acceptance test --help and --info expectations
to include the new option.
- Added unit tests for the validator and the provider plus integration
tests verifying the on/off/auto behavior, alias handling, and invalid
argument rejection.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds an explicit --ansi <auto|on|off> CLI option to the Terminal test reporter (Microsoft.Testing.Platform), including parsing/validation helpers, localized help/error strings, and updated acceptance/unit tests to cover the new behavior and help output.

Changes:

  • Introduces --ansi <auto|on|off> (with true|enable|1 and false|disable|0 aliases) and wires it to AnsiMode.ForceAnsi/NoAnsi/auto detection.
  • Adds CommandLineOptionArgumentValidator helper for reusable boolean/boolean+auto argument validation.
  • Updates localized resources and --help/--info acceptance expectations; adds new unit + acceptance coverage for the new option.
Show a summary per file
FileDescription
test/UnitTests/Microsoft.Testing.Platform.UnitTests/OutputDevice/Terminal/TerminalTestReporterCommandLineOptionsProviderTests.csUnit tests for --ansi option arity/visibility and accepted/rejected argument values.
test/UnitTests/Microsoft.Testing.Platform.UnitTests/CommandLine/CommandLineOptionArgumentValidatorTests.csUnit tests for shared on/off/auto argument validation helper.
test/IntegrationTests/MSTest.Acceptance.IntegrationTests/HelpInfoTests.csUpdates MSTest host --help expectations to include --ansi.
test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoTests.csUpdates MTP host --help/--info expectations to include --ansi option details.
test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoAllExtensionsTests.csUpdates “all extensions” --help/--info expectations to include --ansi.
test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/AnsiOptionTests.csNew acceptance tests covering --ansi on/off/auto behavior, precedence, and invalid argument handling.
src/Platform/Microsoft.Testing.Platform/Resources/PlatformResources.resxAdds localized resource strings for --ansi description and invalid-argument message.
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.cs.xlfRegenerated localization entry for new --ansi strings (Czech).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.de.xlfRegenerated localization entry for new --ansi strings (German).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.es.xlfRegenerated localization entry for new --ansi strings (Spanish).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.fr.xlfRegenerated localization entry for new --ansi strings (French).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.it.xlfRegenerated localization entry for new --ansi strings (Italian).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ja.xlfRegenerated localization entry for new --ansi strings (Japanese).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ko.xlfRegenerated localization entry for new --ansi strings (Korean).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.pl.xlfRegenerated localization entry for new --ansi strings (Polish).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.pt-BR.xlfRegenerated localization entry for new --ansi strings (Portuguese - Brazil).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ru.xlfRegenerated localization entry for new --ansi strings (Russian).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.tr.xlfRegenerated localization entry for new --ansi strings (Turkish).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.zh-Hans.xlfRegenerated localization entry for new --ansi strings (Chinese - Simplified).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.zh-Hant.xlfRegenerated localization entry for new --ansi strings (Chinese - Traditional).
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/TerminalTestReporterCommandLineOptionsProvider.csAdds --ansi option definition + argument validation using the shared validator helper.
src/Platform/Microsoft.Testing.Platform/OutputDevice/TerminalOutputDevice.csImplements --ansi precedence rules and maps values to AnsiMode selection.
src/Platform/Microsoft.Testing.Platform/CommandLine/CommandLineOptionArgumentValidator.csNew shared helper for on/off/auto argument validation and alias handling.

Copilot's findings

  • Files reviewed: 23/23 changed files
  • Comments generated: 2

- AnsiOption_MissingArgument_FailsCommandLineValidation: assert the actual
arity-validation message (CommandLineOptionsValidator rejects --ansi without
a value before per-occurrence validation runs, so the custom
TerminalAnsiOptionInvalidArgument text is not used here).
- AnsiOption_Auto_OverridesNoAnsi_AndFollowsEnvironmentDetection: rewrite to
prove the override deterministically by forcing GITHUB_ACTIONS=true and
clearing known LLM env vars so '--ansi auto' maps to SimpleAnsi and emits
ESC, demonstrating it won over the auto-injected --no-ansi.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add --ansi option to force Ansi output

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Add --ansi <auto|on|off> CLI option for explicit ANSI control (#5081) - #8493

Merged
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/ansi-cli-option
May 22, 2026
Merged

Add --ansi <auto|on|off> CLI option for explicit ANSI control (#5081)#8493
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/ansi-cli-option

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Implements the user-facing --ansi option with auto/on/off values (plus true|enable|1 / false|disable|0 aliases). The new option fulfils issue #5081 by mapping --ansi on to the existing internal AnsiMode.ForceAnsi, which emits ANSI escape codes (including cursor movement) even when stdout is redirected (for example, in mytest.exe | Out-Host pipelines).

Closes#5081.

What

  • New --ansi <auto|on|off> option on the Terminal test reporter extension.
  • Accepted argument aliases: on/true/enable/1 and off/false/disable/0; case-insensitive; invalid values are rejected with a localized message.
  • When both --ansi and --no-ansi are specified, --ansi wins (documented in the help text and verified by integration tests).
  • --ansi auto explicitly opts back into auto-detection and overrides a sibling --no-ansi.
  • New internal CommandLineOptionArgumentValidator helper exposes IsValidBooleanArgument / IsValidBooleanAutoArgument / IsOnValue / IsOffValue / IsAutoValue so future on|off|auto options can share the same parsing.

Tests

  • New unit tests for the validator and the Terminal options provider (CommandLineOptionArgumentValidatorTests, TerminalTestReporterCommandLineOptionsProviderTests).
  • New integration tests in AnsiOptionTests exercising on/off/auto behavior, alias handling, precedence vs --no-ansi, and invalid-argument rejection.
  • Updated MTP and MSTest acceptance --help / --info expectations to include the new option.

Notes

This was previously bundled into #8461 (TestRun.Current / PlannedTests). Split out per code-review request.

Implements the user-facing --ansi option with auto/on/off values (plus
true|enable|1 / false|disable|0 aliases). The new option fulfils issue
#5081 by mapping --ansi on to the existing internal AnsiMode.ForceAnsi,
which emits ANSI escape codes (including cursor movement) even when
stdout is redirected (for example, in 'mytest.exe | Out-Host' pipelines).
- New internal CommandLineOptionArgumentValidator helper exposes
IsValidBooleanArgument / IsValidBooleanAutoArgument / IsOnValue /
IsOffValue / IsAutoValue for reuse by future on|off|auto options.
- --no-ansi continues to work unchanged. When both --ansi and --no-ansi
are specified, --ansi wins (documented in the help text).
- Updated MTP and MSTest acceptance test --help and --info expectations
to include the new option.
- Added unit tests for the validator and the provider plus integration
tests verifying the on/off/auto behavior, alias handling, and invalid
argument rejection.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds an explicit --ansi <auto|on|off> CLI option to the Terminal test reporter (Microsoft.Testing.Platform), including parsing/validation helpers, localized help/error strings, and updated acceptance/unit tests to cover the new behavior and help output.

Changes:

  • Introduces --ansi <auto|on|off> (with true|enable|1 and false|disable|0 aliases) and wires it to AnsiMode.ForceAnsi/NoAnsi/auto detection.
  • Adds CommandLineOptionArgumentValidator helper for reusable boolean/boolean+auto argument validation.
  • Updates localized resources and --help/--info acceptance expectations; adds new unit + acceptance coverage for the new option.
Show a summary per file
FileDescription
test/UnitTests/Microsoft.Testing.Platform.UnitTests/OutputDevice/Terminal/TerminalTestReporterCommandLineOptionsProviderTests.csUnit tests for --ansi option arity/visibility and accepted/rejected argument values.
test/UnitTests/Microsoft.Testing.Platform.UnitTests/CommandLine/CommandLineOptionArgumentValidatorTests.csUnit tests for shared on/off/auto argument validation helper.
test/IntegrationTests/MSTest.Acceptance.IntegrationTests/HelpInfoTests.csUpdates MSTest host --help expectations to include --ansi.
test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoTests.csUpdates MTP host --help/--info expectations to include --ansi option details.
test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoAllExtensionsTests.csUpdates “all extensions” --help/--info expectations to include --ansi.
test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/AnsiOptionTests.csNew acceptance tests covering --ansi on/off/auto behavior, precedence, and invalid argument handling.
src/Platform/Microsoft.Testing.Platform/Resources/PlatformResources.resxAdds localized resource strings for --ansi description and invalid-argument message.
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.cs.xlfRegenerated localization entry for new --ansi strings (Czech).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.de.xlfRegenerated localization entry for new --ansi strings (German).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.es.xlfRegenerated localization entry for new --ansi strings (Spanish).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.fr.xlfRegenerated localization entry for new --ansi strings (French).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.it.xlfRegenerated localization entry for new --ansi strings (Italian).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ja.xlfRegenerated localization entry for new --ansi strings (Japanese).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ko.xlfRegenerated localization entry for new --ansi strings (Korean).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.pl.xlfRegenerated localization entry for new --ansi strings (Polish).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.pt-BR.xlfRegenerated localization entry for new --ansi strings (Portuguese - Brazil).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ru.xlfRegenerated localization entry for new --ansi strings (Russian).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.tr.xlfRegenerated localization entry for new --ansi strings (Turkish).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.zh-Hans.xlfRegenerated localization entry for new --ansi strings (Chinese - Simplified).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.zh-Hant.xlfRegenerated localization entry for new --ansi strings (Chinese - Traditional).
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/TerminalTestReporterCommandLineOptionsProvider.csAdds --ansi option definition + argument validation using the shared validator helper.
src/Platform/Microsoft.Testing.Platform/OutputDevice/TerminalOutputDevice.csImplements --ansi precedence rules and maps values to AnsiMode selection.
src/Platform/Microsoft.Testing.Platform/CommandLine/CommandLineOptionArgumentValidator.csNew shared helper for on/off/auto argument validation and alias handling.

Copilot's findings

  • Files reviewed: 23/23 changed files
  • Comments generated: 2

- AnsiOption_MissingArgument_FailsCommandLineValidation: assert the actual
arity-validation message (CommandLineOptionsValidator rejects --ansi without
a value before per-occurrence validation runs, so the custom
TerminalAnsiOptionInvalidArgument text is not used here).
- AnsiOption_Auto_OverridesNoAnsi_AndFollowsEnvironmentDetection: rewrite to
prove the override deterministically by forcing GITHUB_ACTIONS=true and
clearing known LLM env vars so '--ansi auto' maps to SimpleAnsi and emits
ESC, demonstrating it won over the auto-injected --no-ansi.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add --ansi option to force Ansi output

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add --ansi <auto|on|off> CLI option for explicit ANSI control (#5081) - #8493

Merged
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/ansi-cli-option
May 22, 2026
Merged

Add --ansi <auto|on|off> CLI option for explicit ANSI control (#5081)#8493
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/ansi-cli-option

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Implements the user-facing --ansi option with auto/on/off values (plus true|enable|1 / false|disable|0 aliases). The new option fulfils issue #5081 by mapping --ansi on to the existing internal AnsiMode.ForceAnsi, which emits ANSI escape codes (including cursor movement) even when stdout is redirected (for example, in mytest.exe | Out-Host pipelines).

Closes#5081.

What

  • New --ansi <auto|on|off> option on the Terminal test reporter extension.
  • Accepted argument aliases: on/true/enable/1 and off/false/disable/0; case-insensitive; invalid values are rejected with a localized message.
  • When both --ansi and --no-ansi are specified, --ansi wins (documented in the help text and verified by integration tests).
  • --ansi auto explicitly opts back into auto-detection and overrides a sibling --no-ansi.
  • New internal CommandLineOptionArgumentValidator helper exposes IsValidBooleanArgument / IsValidBooleanAutoArgument / IsOnValue / IsOffValue / IsAutoValue so future on|off|auto options can share the same parsing.

Tests

  • New unit tests for the validator and the Terminal options provider (CommandLineOptionArgumentValidatorTests, TerminalTestReporterCommandLineOptionsProviderTests).
  • New integration tests in AnsiOptionTests exercising on/off/auto behavior, alias handling, precedence vs --no-ansi, and invalid-argument rejection.
  • Updated MTP and MSTest acceptance --help / --info expectations to include the new option.

Notes

This was previously bundled into #8461 (TestRun.Current / PlannedTests). Split out per code-review request.

Implements the user-facing --ansi option with auto/on/off values (plus
true|enable|1 / false|disable|0 aliases). The new option fulfils issue
#5081 by mapping --ansi on to the existing internal AnsiMode.ForceAnsi,
which emits ANSI escape codes (including cursor movement) even when
stdout is redirected (for example, in 'mytest.exe | Out-Host' pipelines).
- New internal CommandLineOptionArgumentValidator helper exposes
IsValidBooleanArgument / IsValidBooleanAutoArgument / IsOnValue /
IsOffValue / IsAutoValue for reuse by future on|off|auto options.
- --no-ansi continues to work unchanged. When both --ansi and --no-ansi
are specified, --ansi wins (documented in the help text).
- Updated MTP and MSTest acceptance test --help and --info expectations
to include the new option.
- Added unit tests for the validator and the provider plus integration
tests verifying the on/off/auto behavior, alias handling, and invalid
argument rejection.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds an explicit --ansi <auto|on|off> CLI option to the Terminal test reporter (Microsoft.Testing.Platform), including parsing/validation helpers, localized help/error strings, and updated acceptance/unit tests to cover the new behavior and help output.

Changes:

  • Introduces --ansi <auto|on|off> (with true|enable|1 and false|disable|0 aliases) and wires it to AnsiMode.ForceAnsi/NoAnsi/auto detection.
  • Adds CommandLineOptionArgumentValidator helper for reusable boolean/boolean+auto argument validation.
  • Updates localized resources and --help/--info acceptance expectations; adds new unit + acceptance coverage for the new option.
Show a summary per file
FileDescription
test/UnitTests/Microsoft.Testing.Platform.UnitTests/OutputDevice/Terminal/TerminalTestReporterCommandLineOptionsProviderTests.csUnit tests for --ansi option arity/visibility and accepted/rejected argument values.
test/UnitTests/Microsoft.Testing.Platform.UnitTests/CommandLine/CommandLineOptionArgumentValidatorTests.csUnit tests for shared on/off/auto argument validation helper.
test/IntegrationTests/MSTest.Acceptance.IntegrationTests/HelpInfoTests.csUpdates MSTest host --help expectations to include --ansi.
test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoTests.csUpdates MTP host --help/--info expectations to include --ansi option details.
test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoAllExtensionsTests.csUpdates “all extensions” --help/--info expectations to include --ansi.
test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/AnsiOptionTests.csNew acceptance tests covering --ansi on/off/auto behavior, precedence, and invalid argument handling.
src/Platform/Microsoft.Testing.Platform/Resources/PlatformResources.resxAdds localized resource strings for --ansi description and invalid-argument message.
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.cs.xlfRegenerated localization entry for new --ansi strings (Czech).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.de.xlfRegenerated localization entry for new --ansi strings (German).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.es.xlfRegenerated localization entry for new --ansi strings (Spanish).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.fr.xlfRegenerated localization entry for new --ansi strings (French).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.it.xlfRegenerated localization entry for new --ansi strings (Italian).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ja.xlfRegenerated localization entry for new --ansi strings (Japanese).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ko.xlfRegenerated localization entry for new --ansi strings (Korean).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.pl.xlfRegenerated localization entry for new --ansi strings (Polish).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.pt-BR.xlfRegenerated localization entry for new --ansi strings (Portuguese - Brazil).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ru.xlfRegenerated localization entry for new --ansi strings (Russian).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.tr.xlfRegenerated localization entry for new --ansi strings (Turkish).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.zh-Hans.xlfRegenerated localization entry for new --ansi strings (Chinese - Simplified).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.zh-Hant.xlfRegenerated localization entry for new --ansi strings (Chinese - Traditional).
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/TerminalTestReporterCommandLineOptionsProvider.csAdds --ansi option definition + argument validation using the shared validator helper.
src/Platform/Microsoft.Testing.Platform/OutputDevice/TerminalOutputDevice.csImplements --ansi precedence rules and maps values to AnsiMode selection.
src/Platform/Microsoft.Testing.Platform/CommandLine/CommandLineOptionArgumentValidator.csNew shared helper for on/off/auto argument validation and alias handling.

Copilot's findings

  • Files reviewed: 23/23 changed files
  • Comments generated: 2

- AnsiOption_MissingArgument_FailsCommandLineValidation: assert the actual
arity-validation message (CommandLineOptionsValidator rejects --ansi without
a value before per-occurrence validation runs, so the custom
TerminalAnsiOptionInvalidArgument text is not used here).
- AnsiOption_Auto_OverridesNoAnsi_AndFollowsEnvironmentDetection: rewrite to
prove the override deterministically by forcing GITHUB_ACTIONS=true and
clearing known LLM env vars so '--ansi auto' maps to SimpleAnsi and emits
ESC, demonstrating it won over the auto-injected --no-ansi.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add --ansi option to force Ansi output

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Add --ansi <auto|on|off> CLI option for explicit ANSI control (#5081) - #8493

Merged
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/ansi-cli-option
May 22, 2026
Merged

Add --ansi <auto|on|off> CLI option for explicit ANSI control (#5081)#8493
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/ansi-cli-option

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Implements the user-facing --ansi option with auto/on/off values (plus true|enable|1 / false|disable|0 aliases). The new option fulfils issue #5081 by mapping --ansi on to the existing internal AnsiMode.ForceAnsi, which emits ANSI escape codes (including cursor movement) even when stdout is redirected (for example, in mytest.exe | Out-Host pipelines).

Closes#5081.

What

  • New --ansi <auto|on|off> option on the Terminal test reporter extension.
  • Accepted argument aliases: on/true/enable/1 and off/false/disable/0; case-insensitive; invalid values are rejected with a localized message.
  • When both --ansi and --no-ansi are specified, --ansi wins (documented in the help text and verified by integration tests).
  • --ansi auto explicitly opts back into auto-detection and overrides a sibling --no-ansi.
  • New internal CommandLineOptionArgumentValidator helper exposes IsValidBooleanArgument / IsValidBooleanAutoArgument / IsOnValue / IsOffValue / IsAutoValue so future on|off|auto options can share the same parsing.

Tests

  • New unit tests for the validator and the Terminal options provider (CommandLineOptionArgumentValidatorTests, TerminalTestReporterCommandLineOptionsProviderTests).
  • New integration tests in AnsiOptionTests exercising on/off/auto behavior, alias handling, precedence vs --no-ansi, and invalid-argument rejection.
  • Updated MTP and MSTest acceptance --help / --info expectations to include the new option.

Notes

This was previously bundled into #8461 (TestRun.Current / PlannedTests). Split out per code-review request.

Implements the user-facing --ansi option with auto/on/off values (plus
true|enable|1 / false|disable|0 aliases). The new option fulfils issue
#5081 by mapping --ansi on to the existing internal AnsiMode.ForceAnsi,
which emits ANSI escape codes (including cursor movement) even when
stdout is redirected (for example, in 'mytest.exe | Out-Host' pipelines).
- New internal CommandLineOptionArgumentValidator helper exposes
IsValidBooleanArgument / IsValidBooleanAutoArgument / IsOnValue /
IsOffValue / IsAutoValue for reuse by future on|off|auto options.
- --no-ansi continues to work unchanged. When both --ansi and --no-ansi
are specified, --ansi wins (documented in the help text).
- Updated MTP and MSTest acceptance test --help and --info expectations
to include the new option.
- Added unit tests for the validator and the provider plus integration
tests verifying the on/off/auto behavior, alias handling, and invalid
argument rejection.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds an explicit --ansi <auto|on|off> CLI option to the Terminal test reporter (Microsoft.Testing.Platform), including parsing/validation helpers, localized help/error strings, and updated acceptance/unit tests to cover the new behavior and help output.

Changes:

  • Introduces --ansi <auto|on|off> (with true|enable|1 and false|disable|0 aliases) and wires it to AnsiMode.ForceAnsi/NoAnsi/auto detection.
  • Adds CommandLineOptionArgumentValidator helper for reusable boolean/boolean+auto argument validation.
  • Updates localized resources and --help/--info acceptance expectations; adds new unit + acceptance coverage for the new option.
Show a summary per file
FileDescription
test/UnitTests/Microsoft.Testing.Platform.UnitTests/OutputDevice/Terminal/TerminalTestReporterCommandLineOptionsProviderTests.csUnit tests for --ansi option arity/visibility and accepted/rejected argument values.
test/UnitTests/Microsoft.Testing.Platform.UnitTests/CommandLine/CommandLineOptionArgumentValidatorTests.csUnit tests for shared on/off/auto argument validation helper.
test/IntegrationTests/MSTest.Acceptance.IntegrationTests/HelpInfoTests.csUpdates MSTest host --help expectations to include --ansi.
test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoTests.csUpdates MTP host --help/--info expectations to include --ansi option details.
test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoAllExtensionsTests.csUpdates “all extensions” --help/--info expectations to include --ansi.
test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/AnsiOptionTests.csNew acceptance tests covering --ansi on/off/auto behavior, precedence, and invalid argument handling.
src/Platform/Microsoft.Testing.Platform/Resources/PlatformResources.resxAdds localized resource strings for --ansi description and invalid-argument message.
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.cs.xlfRegenerated localization entry for new --ansi strings (Czech).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.de.xlfRegenerated localization entry for new --ansi strings (German).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.es.xlfRegenerated localization entry for new --ansi strings (Spanish).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.fr.xlfRegenerated localization entry for new --ansi strings (French).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.it.xlfRegenerated localization entry for new --ansi strings (Italian).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ja.xlfRegenerated localization entry for new --ansi strings (Japanese).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ko.xlfRegenerated localization entry for new --ansi strings (Korean).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.pl.xlfRegenerated localization entry for new --ansi strings (Polish).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.pt-BR.xlfRegenerated localization entry for new --ansi strings (Portuguese - Brazil).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ru.xlfRegenerated localization entry for new --ansi strings (Russian).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.tr.xlfRegenerated localization entry for new --ansi strings (Turkish).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.zh-Hans.xlfRegenerated localization entry for new --ansi strings (Chinese - Simplified).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.zh-Hant.xlfRegenerated localization entry for new --ansi strings (Chinese - Traditional).
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/TerminalTestReporterCommandLineOptionsProvider.csAdds --ansi option definition + argument validation using the shared validator helper.
src/Platform/Microsoft.Testing.Platform/OutputDevice/TerminalOutputDevice.csImplements --ansi precedence rules and maps values to AnsiMode selection.
src/Platform/Microsoft.Testing.Platform/CommandLine/CommandLineOptionArgumentValidator.csNew shared helper for on/off/auto argument validation and alias handling.

Copilot's findings

  • Files reviewed: 23/23 changed files
  • Comments generated: 2

- AnsiOption_MissingArgument_FailsCommandLineValidation: assert the actual
arity-validation message (CommandLineOptionsValidator rejects --ansi without
a value before per-occurrence validation runs, so the custom
TerminalAnsiOptionInvalidArgument text is not used here).
- AnsiOption_Auto_OverridesNoAnsi_AndFollowsEnvironmentDetection: rewrite to
prove the override deterministically by forcing GITHUB_ACTIONS=true and
clearing known LLM env vars so '--ansi auto' maps to SimpleAnsi and emits
ESC, demonstrating it won over the auto-injected --no-ansi.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add --ansi option to force Ansi output

2 participants

@Evangelink
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Add --ansi <auto|on|off> CLI option for explicit ANSI control (#5081) - #8493

Merged
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/ansi-cli-option
May 22, 2026
Merged

Add --ansi <auto|on|off> CLI option for explicit ANSI control (#5081)#8493
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
dev/amauryleve/ansi-cli-option

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Implements the user-facing --ansi option with auto/on/off values (plus true|enable|1 / false|disable|0 aliases). The new option fulfils issue #5081 by mapping --ansi on to the existing internal AnsiMode.ForceAnsi, which emits ANSI escape codes (including cursor movement) even when stdout is redirected (for example, in mytest.exe | Out-Host pipelines).

Closes#5081.

What

  • New --ansi <auto|on|off> option on the Terminal test reporter extension.
  • Accepted argument aliases: on/true/enable/1 and off/false/disable/0; case-insensitive; invalid values are rejected with a localized message.
  • When both --ansi and --no-ansi are specified, --ansi wins (documented in the help text and verified by integration tests).
  • --ansi auto explicitly opts back into auto-detection and overrides a sibling --no-ansi.
  • New internal CommandLineOptionArgumentValidator helper exposes IsValidBooleanArgument / IsValidBooleanAutoArgument / IsOnValue / IsOffValue / IsAutoValue so future on|off|auto options can share the same parsing.

Tests

  • New unit tests for the validator and the Terminal options provider (CommandLineOptionArgumentValidatorTests, TerminalTestReporterCommandLineOptionsProviderTests).
  • New integration tests in AnsiOptionTests exercising on/off/auto behavior, alias handling, precedence vs --no-ansi, and invalid-argument rejection.
  • Updated MTP and MSTest acceptance --help / --info expectations to include the new option.

Notes

This was previously bundled into #8461 (TestRun.Current / PlannedTests). Split out per code-review request.

Implements the user-facing --ansi option with auto/on/off values (plus
true|enable|1 / false|disable|0 aliases). The new option fulfils issue
#5081 by mapping --ansi on to the existing internal AnsiMode.ForceAnsi,
which emits ANSI escape codes (including cursor movement) even when
stdout is redirected (for example, in 'mytest.exe | Out-Host' pipelines).
- New internal CommandLineOptionArgumentValidator helper exposes
IsValidBooleanArgument / IsValidBooleanAutoArgument / IsOnValue /
IsOffValue / IsAutoValue for reuse by future on|off|auto options.
- --no-ansi continues to work unchanged. When both --ansi and --no-ansi
are specified, --ansi wins (documented in the help text).
- Updated MTP and MSTest acceptance test --help and --info expectations
to include the new option.
- Added unit tests for the validator and the provider plus integration
tests verifying the on/off/auto behavior, alias handling, and invalid
argument rejection.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds an explicit --ansi <auto|on|off> CLI option to the Terminal test reporter (Microsoft.Testing.Platform), including parsing/validation helpers, localized help/error strings, and updated acceptance/unit tests to cover the new behavior and help output.

Changes:

  • Introduces --ansi <auto|on|off> (with true|enable|1 and false|disable|0 aliases) and wires it to AnsiMode.ForceAnsi/NoAnsi/auto detection.
  • Adds CommandLineOptionArgumentValidator helper for reusable boolean/boolean+auto argument validation.
  • Updates localized resources and --help/--info acceptance expectations; adds new unit + acceptance coverage for the new option.
Show a summary per file
FileDescription
test/UnitTests/Microsoft.Testing.Platform.UnitTests/OutputDevice/Terminal/TerminalTestReporterCommandLineOptionsProviderTests.csUnit tests for --ansi option arity/visibility and accepted/rejected argument values.
test/UnitTests/Microsoft.Testing.Platform.UnitTests/CommandLine/CommandLineOptionArgumentValidatorTests.csUnit tests for shared on/off/auto argument validation helper.
test/IntegrationTests/MSTest.Acceptance.IntegrationTests/HelpInfoTests.csUpdates MSTest host --help expectations to include --ansi.
test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoTests.csUpdates MTP host --help/--info expectations to include --ansi option details.
test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/HelpInfoAllExtensionsTests.csUpdates “all extensions” --help/--info expectations to include --ansi.
test/IntegrationTests/Microsoft.Testing.Platform.Acceptance.IntegrationTests/AnsiOptionTests.csNew acceptance tests covering --ansi on/off/auto behavior, precedence, and invalid argument handling.
src/Platform/Microsoft.Testing.Platform/Resources/PlatformResources.resxAdds localized resource strings for --ansi description and invalid-argument message.
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.cs.xlfRegenerated localization entry for new --ansi strings (Czech).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.de.xlfRegenerated localization entry for new --ansi strings (German).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.es.xlfRegenerated localization entry for new --ansi strings (Spanish).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.fr.xlfRegenerated localization entry for new --ansi strings (French).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.it.xlfRegenerated localization entry for new --ansi strings (Italian).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ja.xlfRegenerated localization entry for new --ansi strings (Japanese).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ko.xlfRegenerated localization entry for new --ansi strings (Korean).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.pl.xlfRegenerated localization entry for new --ansi strings (Polish).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.pt-BR.xlfRegenerated localization entry for new --ansi strings (Portuguese - Brazil).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.ru.xlfRegenerated localization entry for new --ansi strings (Russian).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.tr.xlfRegenerated localization entry for new --ansi strings (Turkish).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.zh-Hans.xlfRegenerated localization entry for new --ansi strings (Chinese - Simplified).
src/Platform/Microsoft.Testing.Platform/Resources/xlf/PlatformResources.zh-Hant.xlfRegenerated localization entry for new --ansi strings (Chinese - Traditional).
src/Platform/Microsoft.Testing.Platform/OutputDevice/Terminal/TerminalTestReporterCommandLineOptionsProvider.csAdds --ansi option definition + argument validation using the shared validator helper.
src/Platform/Microsoft.Testing.Platform/OutputDevice/TerminalOutputDevice.csImplements --ansi precedence rules and maps values to AnsiMode selection.
src/Platform/Microsoft.Testing.Platform/CommandLine/CommandLineOptionArgumentValidator.csNew shared helper for on/off/auto argument validation and alias handling.

Copilot's findings

  • Files reviewed: 23/23 changed files
  • Comments generated: 2

- AnsiOption_MissingArgument_FailsCommandLineValidation: assert the actual
arity-validation message (CommandLineOptionsValidator rejects --ansi without
a value before per-occurrence validation runs, so the custom
TerminalAnsiOptionInvalidArgument text is not used here).
- AnsiOption_Auto_OverridesNoAnsi_AndFollowsEnvironmentDetection: rewrite to
prove the override deterministically by forcing GITHUB_ACTIONS=true and
clearing known LLM env vars so '--ansi auto' maps to SimpleAnsi and emits
ESC, demonstrating it won over the auto-injected --no-ansi.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add --ansi option to force Ansi output

2 participants

@Evangelink