[Test Improver] Add unit tests for CommandLineParseResult - #8249

Merged
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
test-assist/commandline-parse-result-tests-a3720d0efbb63e1f
May 15, 2026
Merged

[Test Improver] Add unit tests for CommandLineParseResult#8249
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
test-assist/commandline-parse-result-tests-a3720d0efbb63e1f

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Cover key behaviors of CommandLineParseResult:

  • Empty returns result with no tool, no options, no errors
  • HasTool and HasError properties
  • IsOptionSet (case-insensitive, dash-stripping)
  • TryGetOptionArgumentList (single option, missing, multiple occurrences)
  • Equals (identical, differing tool/errors/options, null, self-reference)
  • ToString output contains relevant content

Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com

Fixes#8247

Cover key behaviors of CommandLineParseResult:
- Empty returns result with no tool, no options, no errors
- HasTool and HasError properties
- IsOptionSet (case-insensitive, dash-stripping)
- TryGetOptionArgumentList (single option, missing, multiple occurrences)
- Equals (identical, differing tool/errors/options, null, self-reference)
- ToString output contains relevant content
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings May 15, 2026 09:39

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 a new MSTest unit test file covering public behaviors of the experimental CommandLineParseResult API (Empty, HasTool/HasError, IsOptionSet, TryGetOptionArgumentList, Equals, ToString) which were previously only exercised indirectly through parser-level tests.

Changes:

  • Adds 20 focused unit tests for CommandLineParseResult covering option lookup (case-insensitive, dash-stripping), argument retrieval, equality semantics, and ToString formatting.
Show a summary per file
FileDescription
test/UnitTests/Microsoft.Testing.Platform.UnitTests/CommandLine/CommandLineParseResultTests.csNew MSTest test class exercising Empty, HasTool, HasError, IsOptionSet, TryGetOptionArgumentList, Equals, and ToString.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 0

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Review of PR #8249CommandLineParseResultTests

Good addition of unit tests for a previously untested public API. The tests are well-structured, isolated, and correctly use MSTest assertions. Two issues worth addressing:

Dimension summary

#DimensionStatus
1Algorithmic Correctness✅ Tests correctly reflect the implementation
2Threading & ConcurrencyN/A
3Public API / PublicAPI.Unshipped.txtN/A — test-only change
4No init on new public APIN/A
5PerformanceN/A
6Cross-TFM correctness✅ No TFM-specific constructs
7IPC ContractN/A
8Defensive codingN/A
9LocalizationN/A
10Test Isolation✅ All tests are independent, no shared state
11Assertion Quality✅ Correct assertion methods used throughout
12Flakiness✅ No timing, ports, or file-system dependencies
13Test Completeness⚠️ Missing tests for TryGetOptionArgumentList case-sensitivity and leading-dash behavior
14Data-driven coverageN/A — no [DataRow] tests in this PR
15Code Structure✅ Clean and readable
16–21Remaining dimensionsN/A

Key findings

  1. TryGetOptionArgumentList behavioral gaps (MAJOR — line 92): Unlike IsOptionSet, TryGetOptionArgumentList uses an exact-match (==) which is case-sensitive. The PR tests IsOptionSet case-insensitivity explicitly but does not add a corresponding test for TryGetOptionArgumentList. The leading-dash stripping via Trim(OptionPrefix) is also untested for this method. These omissions leave a behavioral asymmetry undocumented.

  2. ToString_EmptyResult_ContainsNone is underspecified (MINOR — line 196): The assertion Contains("None") is satisfied by either the Errors or Options section. The test would still pass if one of the two sections regressed. Consider asserting on section headers or both occurrences of "None".

Generated by Expert Code Review (on open) for issue #8249 · ● 6M

@Evangelink

Copy link
Copy Markdown
MemberAuthor

Copilot address review ocmments

Co-authored-by: Evangelink <11340282+Evangelink@users.noreply.github.com>

CopilotAI commented May 15, 2026

Copy link
Copy Markdown
Contributor

Copilot address review ocmments

Done in eb9d0cd: I addressed the review feedback by adding the missing TryGetOptionArgumentList behavior tests and strengthening the empty ToString() assertions.

@Evangelink
Amaury Levé (Evangelink) merged commit 09d90b6 into mainMay 15, 2026
23 of 29 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the test-assist/commandline-parse-result-tests-a3720d0efbb63e1f branch May 15, 2026 17:02
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.

[Test Improver] Add unit tests for CommandLineParseResult

3 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

[Test Improver] Add unit tests for CommandLineParseResult - #8249

Merged
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
test-assist/commandline-parse-result-tests-a3720d0efbb63e1f
May 15, 2026
Merged

[Test Improver] Add unit tests for CommandLineParseResult#8249
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
test-assist/commandline-parse-result-tests-a3720d0efbb63e1f

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Cover key behaviors of CommandLineParseResult:

  • Empty returns result with no tool, no options, no errors
  • HasTool and HasError properties
  • IsOptionSet (case-insensitive, dash-stripping)
  • TryGetOptionArgumentList (single option, missing, multiple occurrences)
  • Equals (identical, differing tool/errors/options, null, self-reference)
  • ToString output contains relevant content

Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com

Fixes#8247

Cover key behaviors of CommandLineParseResult:
- Empty returns result with no tool, no options, no errors
- HasTool and HasError properties
- IsOptionSet (case-insensitive, dash-stripping)
- TryGetOptionArgumentList (single option, missing, multiple occurrences)
- Equals (identical, differing tool/errors/options, null, self-reference)
- ToString output contains relevant content
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings May 15, 2026 09:39

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 a new MSTest unit test file covering public behaviors of the experimental CommandLineParseResult API (Empty, HasTool/HasError, IsOptionSet, TryGetOptionArgumentList, Equals, ToString) which were previously only exercised indirectly through parser-level tests.

Changes:

  • Adds 20 focused unit tests for CommandLineParseResult covering option lookup (case-insensitive, dash-stripping), argument retrieval, equality semantics, and ToString formatting.
Show a summary per file
FileDescription
test/UnitTests/Microsoft.Testing.Platform.UnitTests/CommandLine/CommandLineParseResultTests.csNew MSTest test class exercising Empty, HasTool, HasError, IsOptionSet, TryGetOptionArgumentList, Equals, and ToString.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 0

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Review of PR #8249CommandLineParseResultTests

Good addition of unit tests for a previously untested public API. The tests are well-structured, isolated, and correctly use MSTest assertions. Two issues worth addressing:

Dimension summary

#DimensionStatus
1Algorithmic Correctness✅ Tests correctly reflect the implementation
2Threading & ConcurrencyN/A
3Public API / PublicAPI.Unshipped.txtN/A — test-only change
4No init on new public APIN/A
5PerformanceN/A
6Cross-TFM correctness✅ No TFM-specific constructs
7IPC ContractN/A
8Defensive codingN/A
9LocalizationN/A
10Test Isolation✅ All tests are independent, no shared state
11Assertion Quality✅ Correct assertion methods used throughout
12Flakiness✅ No timing, ports, or file-system dependencies
13Test Completeness⚠️ Missing tests for TryGetOptionArgumentList case-sensitivity and leading-dash behavior
14Data-driven coverageN/A — no [DataRow] tests in this PR
15Code Structure✅ Clean and readable
16–21Remaining dimensionsN/A

Key findings

  1. TryGetOptionArgumentList behavioral gaps (MAJOR — line 92): Unlike IsOptionSet, TryGetOptionArgumentList uses an exact-match (==) which is case-sensitive. The PR tests IsOptionSet case-insensitivity explicitly but does not add a corresponding test for TryGetOptionArgumentList. The leading-dash stripping via Trim(OptionPrefix) is also untested for this method. These omissions leave a behavioral asymmetry undocumented.

  2. ToString_EmptyResult_ContainsNone is underspecified (MINOR — line 196): The assertion Contains("None") is satisfied by either the Errors or Options section. The test would still pass if one of the two sections regressed. Consider asserting on section headers or both occurrences of "None".

Generated by Expert Code Review (on open) for issue #8249 · ● 6M

@Evangelink

Copy link
Copy Markdown
MemberAuthor

Copilot address review ocmments

Co-authored-by: Evangelink <11340282+Evangelink@users.noreply.github.com>

CopilotAI commented May 15, 2026

Copy link
Copy Markdown
Contributor

Copilot address review ocmments

Done in eb9d0cd: I addressed the review feedback by adding the missing TryGetOptionArgumentList behavior tests and strengthening the empty ToString() assertions.

@Evangelink
Amaury Levé (Evangelink) merged commit 09d90b6 into mainMay 15, 2026
23 of 29 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the test-assist/commandline-parse-result-tests-a3720d0efbb63e1f branch May 15, 2026 17:02
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.

[Test Improver] Add unit tests for CommandLineParseResult

3 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

[Test Improver] Add unit tests for CommandLineParseResult - #8249

Merged
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
test-assist/commandline-parse-result-tests-a3720d0efbb63e1f
May 15, 2026
Merged

[Test Improver] Add unit tests for CommandLineParseResult#8249
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
test-assist/commandline-parse-result-tests-a3720d0efbb63e1f

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Cover key behaviors of CommandLineParseResult:

  • Empty returns result with no tool, no options, no errors
  • HasTool and HasError properties
  • IsOptionSet (case-insensitive, dash-stripping)
  • TryGetOptionArgumentList (single option, missing, multiple occurrences)
  • Equals (identical, differing tool/errors/options, null, self-reference)
  • ToString output contains relevant content

Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com

Fixes#8247

Cover key behaviors of CommandLineParseResult:
- Empty returns result with no tool, no options, no errors
- HasTool and HasError properties
- IsOptionSet (case-insensitive, dash-stripping)
- TryGetOptionArgumentList (single option, missing, multiple occurrences)
- Equals (identical, differing tool/errors/options, null, self-reference)
- ToString output contains relevant content
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings May 15, 2026 09:39

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 a new MSTest unit test file covering public behaviors of the experimental CommandLineParseResult API (Empty, HasTool/HasError, IsOptionSet, TryGetOptionArgumentList, Equals, ToString) which were previously only exercised indirectly through parser-level tests.

Changes:

  • Adds 20 focused unit tests for CommandLineParseResult covering option lookup (case-insensitive, dash-stripping), argument retrieval, equality semantics, and ToString formatting.
Show a summary per file
FileDescription
test/UnitTests/Microsoft.Testing.Platform.UnitTests/CommandLine/CommandLineParseResultTests.csNew MSTest test class exercising Empty, HasTool, HasError, IsOptionSet, TryGetOptionArgumentList, Equals, and ToString.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 0

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Review of PR #8249CommandLineParseResultTests

Good addition of unit tests for a previously untested public API. The tests are well-structured, isolated, and correctly use MSTest assertions. Two issues worth addressing:

Dimension summary

#DimensionStatus
1Algorithmic Correctness✅ Tests correctly reflect the implementation
2Threading & ConcurrencyN/A
3Public API / PublicAPI.Unshipped.txtN/A — test-only change
4No init on new public APIN/A
5PerformanceN/A
6Cross-TFM correctness✅ No TFM-specific constructs
7IPC ContractN/A
8Defensive codingN/A
9LocalizationN/A
10Test Isolation✅ All tests are independent, no shared state
11Assertion Quality✅ Correct assertion methods used throughout
12Flakiness✅ No timing, ports, or file-system dependencies
13Test Completeness⚠️ Missing tests for TryGetOptionArgumentList case-sensitivity and leading-dash behavior
14Data-driven coverageN/A — no [DataRow] tests in this PR
15Code Structure✅ Clean and readable
16–21Remaining dimensionsN/A

Key findings

  1. TryGetOptionArgumentList behavioral gaps (MAJOR — line 92): Unlike IsOptionSet, TryGetOptionArgumentList uses an exact-match (==) which is case-sensitive. The PR tests IsOptionSet case-insensitivity explicitly but does not add a corresponding test for TryGetOptionArgumentList. The leading-dash stripping via Trim(OptionPrefix) is also untested for this method. These omissions leave a behavioral asymmetry undocumented.

  2. ToString_EmptyResult_ContainsNone is underspecified (MINOR — line 196): The assertion Contains("None") is satisfied by either the Errors or Options section. The test would still pass if one of the two sections regressed. Consider asserting on section headers or both occurrences of "None".

Generated by Expert Code Review (on open) for issue #8249 · ● 6M

@Evangelink

Copy link
Copy Markdown
MemberAuthor

Copilot address review ocmments

Co-authored-by: Evangelink <11340282+Evangelink@users.noreply.github.com>

CopilotAI commented May 15, 2026

Copy link
Copy Markdown
Contributor

Copilot address review ocmments

Done in eb9d0cd: I addressed the review feedback by adding the missing TryGetOptionArgumentList behavior tests and strengthening the empty ToString() assertions.

@Evangelink
Amaury Levé (Evangelink) merged commit 09d90b6 into mainMay 15, 2026
23 of 29 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the test-assist/commandline-parse-result-tests-a3720d0efbb63e1f branch May 15, 2026 17:02
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.

[Test Improver] Add unit tests for CommandLineParseResult

3 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

[Test Improver] Add unit tests for CommandLineParseResult - #8249

Merged
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
test-assist/commandline-parse-result-tests-a3720d0efbb63e1f
May 15, 2026
Merged

[Test Improver] Add unit tests for CommandLineParseResult#8249
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
test-assist/commandline-parse-result-tests-a3720d0efbb63e1f

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Cover key behaviors of CommandLineParseResult:

  • Empty returns result with no tool, no options, no errors
  • HasTool and HasError properties
  • IsOptionSet (case-insensitive, dash-stripping)
  • TryGetOptionArgumentList (single option, missing, multiple occurrences)
  • Equals (identical, differing tool/errors/options, null, self-reference)
  • ToString output contains relevant content

Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com

Fixes#8247

Cover key behaviors of CommandLineParseResult:
- Empty returns result with no tool, no options, no errors
- HasTool and HasError properties
- IsOptionSet (case-insensitive, dash-stripping)
- TryGetOptionArgumentList (single option, missing, multiple occurrences)
- Equals (identical, differing tool/errors/options, null, self-reference)
- ToString output contains relevant content
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings May 15, 2026 09:39

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 a new MSTest unit test file covering public behaviors of the experimental CommandLineParseResult API (Empty, HasTool/HasError, IsOptionSet, TryGetOptionArgumentList, Equals, ToString) which were previously only exercised indirectly through parser-level tests.

Changes:

  • Adds 20 focused unit tests for CommandLineParseResult covering option lookup (case-insensitive, dash-stripping), argument retrieval, equality semantics, and ToString formatting.
Show a summary per file
FileDescription
test/UnitTests/Microsoft.Testing.Platform.UnitTests/CommandLine/CommandLineParseResultTests.csNew MSTest test class exercising Empty, HasTool, HasError, IsOptionSet, TryGetOptionArgumentList, Equals, and ToString.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 0

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Review of PR #8249CommandLineParseResultTests

Good addition of unit tests for a previously untested public API. The tests are well-structured, isolated, and correctly use MSTest assertions. Two issues worth addressing:

Dimension summary

#DimensionStatus
1Algorithmic Correctness✅ Tests correctly reflect the implementation
2Threading & ConcurrencyN/A
3Public API / PublicAPI.Unshipped.txtN/A — test-only change
4No init on new public APIN/A
5PerformanceN/A
6Cross-TFM correctness✅ No TFM-specific constructs
7IPC ContractN/A
8Defensive codingN/A
9LocalizationN/A
10Test Isolation✅ All tests are independent, no shared state
11Assertion Quality✅ Correct assertion methods used throughout
12Flakiness✅ No timing, ports, or file-system dependencies
13Test Completeness⚠️ Missing tests for TryGetOptionArgumentList case-sensitivity and leading-dash behavior
14Data-driven coverageN/A — no [DataRow] tests in this PR
15Code Structure✅ Clean and readable
16–21Remaining dimensionsN/A

Key findings

  1. TryGetOptionArgumentList behavioral gaps (MAJOR — line 92): Unlike IsOptionSet, TryGetOptionArgumentList uses an exact-match (==) which is case-sensitive. The PR tests IsOptionSet case-insensitivity explicitly but does not add a corresponding test for TryGetOptionArgumentList. The leading-dash stripping via Trim(OptionPrefix) is also untested for this method. These omissions leave a behavioral asymmetry undocumented.

  2. ToString_EmptyResult_ContainsNone is underspecified (MINOR — line 196): The assertion Contains("None") is satisfied by either the Errors or Options section. The test would still pass if one of the two sections regressed. Consider asserting on section headers or both occurrences of "None".

Generated by Expert Code Review (on open) for issue #8249 · ● 6M

@Evangelink

Copy link
Copy Markdown
MemberAuthor

Copilot address review ocmments

Co-authored-by: Evangelink <11340282+Evangelink@users.noreply.github.com>

CopilotAI commented May 15, 2026

Copy link
Copy Markdown
Contributor

Copilot address review ocmments

Done in eb9d0cd: I addressed the review feedback by adding the missing TryGetOptionArgumentList behavior tests and strengthening the empty ToString() assertions.

@Evangelink
Amaury Levé (Evangelink) merged commit 09d90b6 into mainMay 15, 2026
23 of 29 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the test-assist/commandline-parse-result-tests-a3720d0efbb63e1f branch May 15, 2026 17:02
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.

[Test Improver] Add unit tests for CommandLineParseResult

3 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

[Test Improver] Add unit tests for CommandLineParseResult - #8249

Merged
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
test-assist/commandline-parse-result-tests-a3720d0efbb63e1f
May 15, 2026
Merged

[Test Improver] Add unit tests for CommandLineParseResult#8249
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
test-assist/commandline-parse-result-tests-a3720d0efbb63e1f

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Cover key behaviors of CommandLineParseResult:

  • Empty returns result with no tool, no options, no errors
  • HasTool and HasError properties
  • IsOptionSet (case-insensitive, dash-stripping)
  • TryGetOptionArgumentList (single option, missing, multiple occurrences)
  • Equals (identical, differing tool/errors/options, null, self-reference)
  • ToString output contains relevant content

Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com

Fixes#8247

Cover key behaviors of CommandLineParseResult:
- Empty returns result with no tool, no options, no errors
- HasTool and HasError properties
- IsOptionSet (case-insensitive, dash-stripping)
- TryGetOptionArgumentList (single option, missing, multiple occurrences)
- Equals (identical, differing tool/errors/options, null, self-reference)
- ToString output contains relevant content
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings May 15, 2026 09:39

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 a new MSTest unit test file covering public behaviors of the experimental CommandLineParseResult API (Empty, HasTool/HasError, IsOptionSet, TryGetOptionArgumentList, Equals, ToString) which were previously only exercised indirectly through parser-level tests.

Changes:

  • Adds 20 focused unit tests for CommandLineParseResult covering option lookup (case-insensitive, dash-stripping), argument retrieval, equality semantics, and ToString formatting.
Show a summary per file
FileDescription
test/UnitTests/Microsoft.Testing.Platform.UnitTests/CommandLine/CommandLineParseResultTests.csNew MSTest test class exercising Empty, HasTool, HasError, IsOptionSet, TryGetOptionArgumentList, Equals, and ToString.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 0

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Review of PR #8249CommandLineParseResultTests

Good addition of unit tests for a previously untested public API. The tests are well-structured, isolated, and correctly use MSTest assertions. Two issues worth addressing:

Dimension summary

#DimensionStatus
1Algorithmic Correctness✅ Tests correctly reflect the implementation
2Threading & ConcurrencyN/A
3Public API / PublicAPI.Unshipped.txtN/A — test-only change
4No init on new public APIN/A
5PerformanceN/A
6Cross-TFM correctness✅ No TFM-specific constructs
7IPC ContractN/A
8Defensive codingN/A
9LocalizationN/A
10Test Isolation✅ All tests are independent, no shared state
11Assertion Quality✅ Correct assertion methods used throughout
12Flakiness✅ No timing, ports, or file-system dependencies
13Test Completeness⚠️ Missing tests for TryGetOptionArgumentList case-sensitivity and leading-dash behavior
14Data-driven coverageN/A — no [DataRow] tests in this PR
15Code Structure✅ Clean and readable
16–21Remaining dimensionsN/A

Key findings

  1. TryGetOptionArgumentList behavioral gaps (MAJOR — line 92): Unlike IsOptionSet, TryGetOptionArgumentList uses an exact-match (==) which is case-sensitive. The PR tests IsOptionSet case-insensitivity explicitly but does not add a corresponding test for TryGetOptionArgumentList. The leading-dash stripping via Trim(OptionPrefix) is also untested for this method. These omissions leave a behavioral asymmetry undocumented.

  2. ToString_EmptyResult_ContainsNone is underspecified (MINOR — line 196): The assertion Contains("None") is satisfied by either the Errors or Options section. The test would still pass if one of the two sections regressed. Consider asserting on section headers or both occurrences of "None".

Generated by Expert Code Review (on open) for issue #8249 · ● 6M

@Evangelink

Copy link
Copy Markdown
MemberAuthor

Copilot address review ocmments

Co-authored-by: Evangelink <11340282+Evangelink@users.noreply.github.com>

CopilotAI commented May 15, 2026

Copy link
Copy Markdown
Contributor

Copilot address review ocmments

Done in eb9d0cd: I addressed the review feedback by adding the missing TryGetOptionArgumentList behavior tests and strengthening the empty ToString() assertions.

@Evangelink
Amaury Levé (Evangelink) merged commit 09d90b6 into mainMay 15, 2026
23 of 29 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the test-assist/commandline-parse-result-tests-a3720d0efbb63e1f branch May 15, 2026 17:02
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.

[Test Improver] Add unit tests for CommandLineParseResult

3 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

[Test Improver] Add unit tests for CommandLineParseResult - #8249

Merged
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
test-assist/commandline-parse-result-tests-a3720d0efbb63e1f
May 15, 2026
Merged

[Test Improver] Add unit tests for CommandLineParseResult#8249
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
test-assist/commandline-parse-result-tests-a3720d0efbb63e1f

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Cover key behaviors of CommandLineParseResult:

  • Empty returns result with no tool, no options, no errors
  • HasTool and HasError properties
  • IsOptionSet (case-insensitive, dash-stripping)
  • TryGetOptionArgumentList (single option, missing, multiple occurrences)
  • Equals (identical, differing tool/errors/options, null, self-reference)
  • ToString output contains relevant content

Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com

Fixes#8247

Cover key behaviors of CommandLineParseResult:
- Empty returns result with no tool, no options, no errors
- HasTool and HasError properties
- IsOptionSet (case-insensitive, dash-stripping)
- TryGetOptionArgumentList (single option, missing, multiple occurrences)
- Equals (identical, differing tool/errors/options, null, self-reference)
- ToString output contains relevant content
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings May 15, 2026 09:39

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 a new MSTest unit test file covering public behaviors of the experimental CommandLineParseResult API (Empty, HasTool/HasError, IsOptionSet, TryGetOptionArgumentList, Equals, ToString) which were previously only exercised indirectly through parser-level tests.

Changes:

  • Adds 20 focused unit tests for CommandLineParseResult covering option lookup (case-insensitive, dash-stripping), argument retrieval, equality semantics, and ToString formatting.
Show a summary per file
FileDescription
test/UnitTests/Microsoft.Testing.Platform.UnitTests/CommandLine/CommandLineParseResultTests.csNew MSTest test class exercising Empty, HasTool, HasError, IsOptionSet, TryGetOptionArgumentList, Equals, and ToString.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 0

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Review of PR #8249CommandLineParseResultTests

Good addition of unit tests for a previously untested public API. The tests are well-structured, isolated, and correctly use MSTest assertions. Two issues worth addressing:

Dimension summary

#DimensionStatus
1Algorithmic Correctness✅ Tests correctly reflect the implementation
2Threading & ConcurrencyN/A
3Public API / PublicAPI.Unshipped.txtN/A — test-only change
4No init on new public APIN/A
5PerformanceN/A
6Cross-TFM correctness✅ No TFM-specific constructs
7IPC ContractN/A
8Defensive codingN/A
9LocalizationN/A
10Test Isolation✅ All tests are independent, no shared state
11Assertion Quality✅ Correct assertion methods used throughout
12Flakiness✅ No timing, ports, or file-system dependencies
13Test Completeness⚠️ Missing tests for TryGetOptionArgumentList case-sensitivity and leading-dash behavior
14Data-driven coverageN/A — no [DataRow] tests in this PR
15Code Structure✅ Clean and readable
16–21Remaining dimensionsN/A

Key findings

  1. TryGetOptionArgumentList behavioral gaps (MAJOR — line 92): Unlike IsOptionSet, TryGetOptionArgumentList uses an exact-match (==) which is case-sensitive. The PR tests IsOptionSet case-insensitivity explicitly but does not add a corresponding test for TryGetOptionArgumentList. The leading-dash stripping via Trim(OptionPrefix) is also untested for this method. These omissions leave a behavioral asymmetry undocumented.

  2. ToString_EmptyResult_ContainsNone is underspecified (MINOR — line 196): The assertion Contains("None") is satisfied by either the Errors or Options section. The test would still pass if one of the two sections regressed. Consider asserting on section headers or both occurrences of "None".

Generated by Expert Code Review (on open) for issue #8249 · ● 6M

@Evangelink

Copy link
Copy Markdown
MemberAuthor

Copilot address review ocmments

Co-authored-by: Evangelink <11340282+Evangelink@users.noreply.github.com>

CopilotAI commented May 15, 2026

Copy link
Copy Markdown
Contributor

Copilot address review ocmments

Done in eb9d0cd: I addressed the review feedback by adding the missing TryGetOptionArgumentList behavior tests and strengthening the empty ToString() assertions.

@Evangelink
Amaury Levé (Evangelink) merged commit 09d90b6 into mainMay 15, 2026
23 of 29 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the test-assist/commandline-parse-result-tests-a3720d0efbb63e1f branch May 15, 2026 17:02
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.

[Test Improver] Add unit tests for CommandLineParseResult

3 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

[Test Improver] Add unit tests for CommandLineParseResult - #8249

Merged
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
test-assist/commandline-parse-result-tests-a3720d0efbb63e1f
May 15, 2026
Merged

[Test Improver] Add unit tests for CommandLineParseResult#8249
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
test-assist/commandline-parse-result-tests-a3720d0efbb63e1f

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Cover key behaviors of CommandLineParseResult:

  • Empty returns result with no tool, no options, no errors
  • HasTool and HasError properties
  • IsOptionSet (case-insensitive, dash-stripping)
  • TryGetOptionArgumentList (single option, missing, multiple occurrences)
  • Equals (identical, differing tool/errors/options, null, self-reference)
  • ToString output contains relevant content

Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com

Fixes#8247

Cover key behaviors of CommandLineParseResult:
- Empty returns result with no tool, no options, no errors
- HasTool and HasError properties
- IsOptionSet (case-insensitive, dash-stripping)
- TryGetOptionArgumentList (single option, missing, multiple occurrences)
- Equals (identical, differing tool/errors/options, null, self-reference)
- ToString output contains relevant content
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings May 15, 2026 09:39

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 a new MSTest unit test file covering public behaviors of the experimental CommandLineParseResult API (Empty, HasTool/HasError, IsOptionSet, TryGetOptionArgumentList, Equals, ToString) which were previously only exercised indirectly through parser-level tests.

Changes:

  • Adds 20 focused unit tests for CommandLineParseResult covering option lookup (case-insensitive, dash-stripping), argument retrieval, equality semantics, and ToString formatting.
Show a summary per file
FileDescription
test/UnitTests/Microsoft.Testing.Platform.UnitTests/CommandLine/CommandLineParseResultTests.csNew MSTest test class exercising Empty, HasTool, HasError, IsOptionSet, TryGetOptionArgumentList, Equals, and ToString.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 0

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Review of PR #8249CommandLineParseResultTests

Good addition of unit tests for a previously untested public API. The tests are well-structured, isolated, and correctly use MSTest assertions. Two issues worth addressing:

Dimension summary

#DimensionStatus
1Algorithmic Correctness✅ Tests correctly reflect the implementation
2Threading & ConcurrencyN/A
3Public API / PublicAPI.Unshipped.txtN/A — test-only change
4No init on new public APIN/A
5PerformanceN/A
6Cross-TFM correctness✅ No TFM-specific constructs
7IPC ContractN/A
8Defensive codingN/A
9LocalizationN/A
10Test Isolation✅ All tests are independent, no shared state
11Assertion Quality✅ Correct assertion methods used throughout
12Flakiness✅ No timing, ports, or file-system dependencies
13Test Completeness⚠️ Missing tests for TryGetOptionArgumentList case-sensitivity and leading-dash behavior
14Data-driven coverageN/A — no [DataRow] tests in this PR
15Code Structure✅ Clean and readable
16–21Remaining dimensionsN/A

Key findings

  1. TryGetOptionArgumentList behavioral gaps (MAJOR — line 92): Unlike IsOptionSet, TryGetOptionArgumentList uses an exact-match (==) which is case-sensitive. The PR tests IsOptionSet case-insensitivity explicitly but does not add a corresponding test for TryGetOptionArgumentList. The leading-dash stripping via Trim(OptionPrefix) is also untested for this method. These omissions leave a behavioral asymmetry undocumented.

  2. ToString_EmptyResult_ContainsNone is underspecified (MINOR — line 196): The assertion Contains("None") is satisfied by either the Errors or Options section. The test would still pass if one of the two sections regressed. Consider asserting on section headers or both occurrences of "None".

Generated by Expert Code Review (on open) for issue #8249 · ● 6M

@Evangelink

Copy link
Copy Markdown
MemberAuthor

Copilot address review ocmments

Co-authored-by: Evangelink <11340282+Evangelink@users.noreply.github.com>

CopilotAI commented May 15, 2026

Copy link
Copy Markdown
Contributor

Copilot address review ocmments

Done in eb9d0cd: I addressed the review feedback by adding the missing TryGetOptionArgumentList behavior tests and strengthening the empty ToString() assertions.

@Evangelink
Amaury Levé (Evangelink) merged commit 09d90b6 into mainMay 15, 2026
23 of 29 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the test-assist/commandline-parse-result-tests-a3720d0efbb63e1f branch May 15, 2026 17:02
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.

[Test Improver] Add unit tests for CommandLineParseResult

3 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

[Test Improver] Add unit tests for CommandLineParseResult - #8249

Merged
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
test-assist/commandline-parse-result-tests-a3720d0efbb63e1f
May 15, 2026
Merged

[Test Improver] Add unit tests for CommandLineParseResult#8249
Amaury Levé (Evangelink) merged 2 commits into
mainfrom
test-assist/commandline-parse-result-tests-a3720d0efbb63e1f

Conversation

@Evangelink

Copy link
Copy Markdown
Member

Cover key behaviors of CommandLineParseResult:

  • Empty returns result with no tool, no options, no errors
  • HasTool and HasError properties
  • IsOptionSet (case-insensitive, dash-stripping)
  • TryGetOptionArgumentList (single option, missing, multiple occurrences)
  • Equals (identical, differing tool/errors/options, null, self-reference)
  • ToString output contains relevant content

Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com

Fixes#8247

Cover key behaviors of CommandLineParseResult:
- Empty returns result with no tool, no options, no errors
- HasTool and HasError properties
- IsOptionSet (case-insensitive, dash-stripping)
- TryGetOptionArgumentList (single option, missing, multiple occurrences)
- Equals (identical, differing tool/errors/options, null, self-reference)
- ToString output contains relevant content
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopilotAI review requested due to automatic review settings May 15, 2026 09:39

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 a new MSTest unit test file covering public behaviors of the experimental CommandLineParseResult API (Empty, HasTool/HasError, IsOptionSet, TryGetOptionArgumentList, Equals, ToString) which were previously only exercised indirectly through parser-level tests.

Changes:

  • Adds 20 focused unit tests for CommandLineParseResult covering option lookup (case-insensitive, dash-stripping), argument retrieval, equality semantics, and ToString formatting.
Show a summary per file
FileDescription
test/UnitTests/Microsoft.Testing.Platform.UnitTests/CommandLine/CommandLineParseResultTests.csNew MSTest test class exercising Empty, HasTool, HasError, IsOptionSet, TryGetOptionArgumentList, Equals, and ToString.

Copilot's findings

  • Files reviewed: 1/1 changed files
  • Comments generated: 0

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

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

Review of PR #8249CommandLineParseResultTests

Good addition of unit tests for a previously untested public API. The tests are well-structured, isolated, and correctly use MSTest assertions. Two issues worth addressing:

Dimension summary

#DimensionStatus
1Algorithmic Correctness✅ Tests correctly reflect the implementation
2Threading & ConcurrencyN/A
3Public API / PublicAPI.Unshipped.txtN/A — test-only change
4No init on new public APIN/A
5PerformanceN/A
6Cross-TFM correctness✅ No TFM-specific constructs
7IPC ContractN/A
8Defensive codingN/A
9LocalizationN/A
10Test Isolation✅ All tests are independent, no shared state
11Assertion Quality✅ Correct assertion methods used throughout
12Flakiness✅ No timing, ports, or file-system dependencies
13Test Completeness⚠️ Missing tests for TryGetOptionArgumentList case-sensitivity and leading-dash behavior
14Data-driven coverageN/A — no [DataRow] tests in this PR
15Code Structure✅ Clean and readable
16–21Remaining dimensionsN/A

Key findings

  1. TryGetOptionArgumentList behavioral gaps (MAJOR — line 92): Unlike IsOptionSet, TryGetOptionArgumentList uses an exact-match (==) which is case-sensitive. The PR tests IsOptionSet case-insensitivity explicitly but does not add a corresponding test for TryGetOptionArgumentList. The leading-dash stripping via Trim(OptionPrefix) is also untested for this method. These omissions leave a behavioral asymmetry undocumented.

  2. ToString_EmptyResult_ContainsNone is underspecified (MINOR — line 196): The assertion Contains("None") is satisfied by either the Errors or Options section. The test would still pass if one of the two sections regressed. Consider asserting on section headers or both occurrences of "None".

Generated by Expert Code Review (on open) for issue #8249 · ● 6M

@Evangelink

Copy link
Copy Markdown
MemberAuthor

Copilot address review ocmments

Co-authored-by: Evangelink <11340282+Evangelink@users.noreply.github.com>

CopilotAI commented May 15, 2026

Copy link
Copy Markdown
Contributor

Copilot address review ocmments

Done in eb9d0cd: I addressed the review feedback by adding the missing TryGetOptionArgumentList behavior tests and strengthening the empty ToString() assertions.

@Evangelink
Amaury Levé (Evangelink) merged commit 09d90b6 into mainMay 15, 2026
23 of 29 checks passed
@Evangelink
Amaury Levé (Evangelink) deleted the test-assist/commandline-parse-result-tests-a3720d0efbb63e1f branch May 15, 2026 17:02
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.

[Test Improver] Add unit tests for CommandLineParseResult

3 participants

@Evangelink