[code-simplifier] Extract named helpers for cancellation-token data predicates
I maintainer di solito rispondono entro 1 giorno
@Evangelink ci sta già lavorando.
Dal 20/10/2026.
Valutazione
- Difficoltà
- 1/5
- Tempo stimato
- Meno di un'ora
- Idoneità per principianti
- 1/100
Direzione di ricerca
The proposed changes are already pushed to branch code-simplifier/cancellation-token-clarity-20261019-7951fa5b626718fa, and the issue includes a pull request creation link. Review the changes in src/Adapter/MSTestAdapter.PlatformServices/Helpers/TestDataSourceHelpers.cs and src/TestFramework/TestFramework/Internal/TestDataSourceUtilities.cs; the issue lists targeted tests and build results. The work is already underway, so this is not available as a first contribution.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
[!TIP]
Your pull request is ready to create! 🎉 ✅Everything is OK—the changes have been pushed to branch
code-simplifier/cancellation-token-clarity-20261019-7951fa5b626718fa. Please review the changes, including any protected files, before creating the pull request.The original pull request description is below.
Code Simplification - 2026-10-19
This PR simplifies code from the recently merged #11991 ("Allow trailing CancellationToken parameters in MSTest tests") to improve readability, while preserving all functionality.
Files Simplified
src/Adapter/MSTestAdapter.PlatformServices/Helpers/TestDataSourceHelpers.cs— Extracted the inline negated compound condition inIsDataConsideredSingleArgumentValue(checking whether a single tuple argument supplies its own explicitCancellationToken) into a named private helperIsSingleTupleArgumentWithExplicitCancellationToken, with an explanatory comment.src/TestFramework/TestFramework/Internal/TestDataSourceUtilities.cs— Extracted the inline negated compound condition inComputeDefaultDisplayName(checking whether data explicitly supplies a trailingCancellationTokenalongside anobject[]data parameter) into a named private helperHasExplicitCancellationTokenData, with an explanatory comment.
Improvements Made
- Reduced Complexity: Both conditions previously combined 3–4 sub-conditions inside a negated parenthesized boolean expression inline in an
if/&&chain, making the control flow harder to scan at a glance. - Enhanced Clarity: Each extracted helper has a descriptive name stating exactly what predicate it checks, plus a comment explaining the "why" (full-arity row vs. plain data value).
- No behavior change: The extracted methods are byte-for-byte equivalent logic, just named and lifted out of the
ifcondition.
Changes Based On
- #11991 — Allow trailing CancellationToken parameters in MSTest tests
Testing
- ✅
MSTestAdapter.PlatformServicesandTestFrameworkbuild successfully (Debug, net8.0) - ✅ Targeted unit tests pass:
TestDataSourceHelpersTests(13/13),TestMethodInfoTests(121/121),MethodInfoExtensionsTests(62/62),CombinatorialDataAttributeTests(13/13),DataRowAttributeTests(34/34) - ✅ No functional changes — behavior is identical; only extraction/naming of existing logic
Review Focus
Please verify:
- The extracted helper names and comments accurately describe the preserved logic
- No unintended side effects from the refactor
[!NOTE]
GitHub Actions is not permitted to create or approve pull requests in this repository.
The changes have been pushed to branch
code-simplifier/cancellation-token-clarity-20261019-7951fa5b626718faand are ready to review.
To fix the permissions issue, go to Settings → Actions → General and enable Allow GitHub Actions to create and approve pull requests. See also: gh-aw FAQ
Show patch preview (33 of 76 lines)
From ffdb15d25f303eccb697bb833ea82adb25fe18ff Mon Sep 17 00:00:00 2001
X-GH-AW-Base-Commit: ef4ea6d27f1d1fb50a60d021f53d73614abe11cd
From: "github-actions[bot]" <github-actions[bot]@users.noreply.github.com>
Date: Mon, 19 Oct 2026 13:37:25 +0000
Subject: [PATCH] Extract named helpers for cancellation-token data predicates
Simplify two recently added conditionals (from #11991) by extracting
them into named private helper methods with explanatory comments,
instead of inline negated compound boolean expressions. No behavior
change.
Co-authored-by: Copilot <[email protected]>
---
.../Helpers/TestDataSourceHelpers.cs | 12 +++++++++---
.../Internal/TestDataSourceUtilities.cs | 14 ++++++++++----
2 files changed, 19 insertions(+), 7 deletions(-)
diff --git a/src/Adapter/MSTestAdapter.PlatformServices/Helpers/TestDataSourceHelpers.cs b/src/Adapter/MSTestAdapter.PlatformServices/Helpers/TestDataSourceHelpers.cs
index 338ad64..ef76b82 100644
--- a/src/Adapter/MSTestAdapter.PlatformServices/Helpers/TestDataSourceHelpers.cs
+++ b/src/Adapter/MSTestAdapter.PlatformServices/Helpers/TestDataSourceHelpers.cs
@@ -18,9 +18,15 @@ public static bool IsDataConsideredSingleArgumentValue(object?[]? data, Paramete
&& GetDataParameterCount(parameters) == 1
&& parameters[0].ParameterType == typeof(object[])
&& !IsDataWithExplicitCancellationToken(data, parameters)
- && !(parameters.Length == 2 && data.Length == 1
- && TryHandleTupleDataSource(data[0], parameters, out object?[] tupleArguments)
- && IsDataWithExplicitCancellationToken(tupleArguments, parameters));
+ && !IsSingleTupleArgumentWithExplicitCancellationToken(data, parameters);
+
+ // A single-element data array whose element is itself a tuple matching [dataParameter, CancellationToken]
+ // is considered a full-arity row supplying its own token, not an object[] data value to wrap.
+
... (truncated)
[!WARNING]
Firewall blocked 80 domains
The following domains were blocked by the firewall during workflow execution:
0t3vsblobprodcus362.vsblob.vsassets.io11vvsblobprodcus336.vsblob.vsassets.io1javsblobprodcus364.vsblob.vsassets.io1k9vsblobprodcus379.vsblob.vsassets.io1p7vsblobprodcus324.vsblob.vsassets.io1s1vsblobprodcus386.vsblob.vsassets.io2zrvsblobprodcus388.vsblob.vsassets.io37bvsblobprodcus311.vsblob.vsassets.io37cvsblobprodcus359.vsblob.vsassets.io4m6vsblobprodcus384.vsblob.vsassets.io4myvsblobprodcus32.vsblob.vsassets.io4vyvsblobprodcus361.vsblob.vsassets.io4zjvsblobprodcus390.vsblob.vsassets.io51yvsblobprodcus36.vsblob.vsassets.io5dkvsblobprodcus355.vsblob.vsassets.io5rqvsblobprodcus385.vsblob.vsassets.io6s7vsblobprodcus313.vsblob.vsassets.io7k6vsblobprodcus337.vsblob.vsassets.io7tjvsblobprodcus341.vsblob.vsassets.io80zvsblobprodcus35.vsblob.vsassets.io8xbvsblobprodcus382.vsblob.vsassets.io96bvsblobprodcus338.vsblob.vsassets.ioajhvsblobprodcus363.vsblob.vsassets.iobcnvsblobprodcus378.vsblob.vsassets.iobuilds.dotnet.microsoft.comc78vsblobprodcus322.vsblob.vsassets.iocflvsblobprodcus383.vsblob.vsassets.ioci.dot.netckzvsblobprodcus347.vsblob.vsassets.iod0svsblobprodcus381.vsblob.vsassets.iodata.nuget.orgdlbvsblobprodcus316.vsblob.vsassets.ioe7bvsblobprodcus348.vsblob.vsassets.iofdpvsblobprodcus345.vsblob.vsassets.iofrdvsblobprodcus327.vsblob.vsassets.iogbsvsblobprodcus365.vsblob.vsassets.iogithub.comh6tvsblobprodcus346.vsblob.vsassets.ioi1qvsblobprodcus353.vsblob.vsassets.iojd4vsblobprodcus366.vsblob.vsassets.iojosvsblobprodcus372.vsblob.vsassets.iojrqvsblobprodcus343.vsblob.vsassets.iok0ivsblobprodcus356.vsblob.vsassets.iok4kvsblobprodcus344.vsblob.vsassets.iokgfvsblobprodcus314.vsblob.vsassets.iokijvsblobprodcus387.vsblob.vsassets.iokxqvsblobprodcus376.vsblob.vsassets.iol49vsblobprodcus358.vsblob.vsassets.iol7avsblobprodcus319.vsblob.vsassets.ioljcvsblobprodcus317.vsblob.vsassets.iolylvsblobprodcus31.vsblob.vsassets.iom16vsblobprodcus374.vsblob.vsassets.iom6xvsblobprodcus342.vsblob.vsassets.iom8dvsblobprodcus37.vsblob.vsassets.iomfjvsblobprodcus373.vsblob.vsassets.ion3kvsblobprodcus335.vsblob.vsassets.ioo3svsblobprodcus318.vsblob.vsassets.ioofvvsblobprodcus315.vsblob.vsassets.iopc2vsblobprodcus360.vsblob.vsassets.iopdfvsblobprodcus380.vsblob.vsassets.iope3vsblobprodcus354.vsblob.vsassets.iopkgs.dev.azure.comrcxvsblobprodcus328.vsblob.vsassets.ios8mvsblobprodcus38.vsblob.vsassets.iose1vsblobprodcus349.vsblob.vsassets.iosqdvsblobprodcus333.vsblob.vsassets.iost8vsblobprodcus339.vsblob.vsassets.iotphvsblobprodcus375.vsblob.vsassets.iou3hvsblobprodcus371.vsblob.vsassets.iou6ovsblobprodcus377.vsblob.vsassets.ioukkvsblobprodcus352.vsblob.vsassets.iouy6vsblobprodcus34.vsblob.vsassets.iov53vsblobprodcus320.vsblob.vsassets.iovb4vsblobprodcus33.vsblob.vsassets.iovwvvsblobprodcus334.vsblob.vsassets.iox3yvsblobprodcus370.vsblob.vsassets.ioxupvsblobprodcus332.vsblob.vsassets.ioyluvsblobprodcus367.vsblob.vsassets.ioyttvsblobprodcus357.vsblob.vsassets.ioytvvsblobprodcus310.vsblob.vsassets.ioTo allow these domains, add them to the
network.allowedlist in your workflow frontmatter:network: allowed: - defaults - "0t3vsblobprodcus362.vsblob.vsassets.io" - "11vvsblobprodcus336.vsblob.vsassets.io" - "1javsblobprodcus364.vsblob.vsassets.io" - "1k9vsblobprodcus379.vsblob.vsassets.io" - "1p7vsblobprodcus324.vsblob.vsassets.io" - "1s1vsblobprodcus386.vsblob.vsassets.io" - "2zrvsblobprodcus388.vsblob.vsassets.io" - "37bvsblobprodcus311.vsblob.vsassets.io" - "37cvsblobprodcus359.vsblob.vsassets.io" - "4m6vsblobprodcus384.vsblob.vsassets.io" - "4myvsblobprodcus32.vsblob.vsassets.io" - "4vyvsblobprodcus361.vsblob.vsassets.io" - "4zjvsblobprodcus390.vsblob.vsassets.io" - "51yvsblobprodcus36.vsblob.vsassets.io" - "5dkvsblobprodcus355.vsblob.vsassets.io" - "5rqvsblobprodcus385.vsblob.vsassets.io" - "6s7vsblobprodcus313.vsblob.vsassets.io" - "7k6vsblobprodcus337.vsblob.vsassets.io" - "7tjvsblobprodcus341.vsblob.vsassets.io" - "80zvsblobprodcus35.vsblob.vsassets.io" - "8xbvsblobprodcus382.vsblob.vsassets.io" - "96bvsblobprodcus338.vsblob.vsassets.io" - "ajhvsblobprodcus363.vsblob.vsassets.io" - "bcnvsblobprodcus378.vsblob.vsassets.io" - "builds.dotnet.microsoft.com" - "c78vsblobprodcus322.vsblob.vsassets.io" - "cflvsblobprodcus383.vsblob.vsassets.io" - "ci.dot.net" - "ckzvsblobprodcus347.vsblob.vsassets.io" - "d0svsblobprodcus381.vsblob.vsassets.io" - "data.nuget.org" - "dlbvsblobprodcus316.vsblob.vsassets.io" - "e7bvsblobprodcus348.vsblob.vsassets.io" - "fdpvsblobprodcus345.vsblob.vsassets.io" - "frdvsblobprodcus327.vsblob.vsassets.io" - "gbsvsblobprodcus365.vsblob.vsassets.io" - "github.com" - "h6tvsblobprodcus346.vsblob.vsassets.io" - "i1qvsblobprodcus353.vsblob.vsassets.io" - "jd4vsblobprodcus366.vsblob.vsassets.io" - "josvsblobprodcus372.vsblob.vsassets.io" - "jrqvsblobprodcus343.vsblob.vsassets.io" - "k0ivsblobprodcus356.vsblob.vsassets.io" - "k4kvsblobprodcus344.vsblob.vsassets.io" - "kgfvsblobprodcus314.vsblob.vsassets.io" - "kijvsblobprodcus387.vsblob.vsassets.io" - "kxqvsblobprodcus376.vsblob.vsassets.io" - "l49vsblobprodcus358.vsblob.vsassets.io" - "l7avsblobprodcus319.vsblob.vsassets.io" - "ljcvsblobprodcus317.vsblob.vsassets.io" - "lylvsblobprodcus31.vsblob.vsassets.io" - "m16vsblobprodcus374.vsblob.vsassets.io" - "m6xvsblobprodcus342.vsblob.vsassets.io" - "m8dvsblobprodcus37.vsblob.vsassets.io" - "mfjvsblobprodcus373.vsblob.vsassets.io" - "n3kvsblobprodcus335.vsblob.vsassets.io" - "o3svsblobprodcus318.vsblob.vsassets.io" - "ofvvsblobprodcus315.vsblob.vsassets.io" - "pc2vsblobprodcus360.vsblob.vsassets.io" - "pdfvsblobprodcus380.vsblob.vsassets.io" - "pe3vsblobprodcus354.vsblob.vsassets.io" - "pkgs.dev.azure.com" - "rcxvsblobprodcus328.vsblob.vsassets.io" - "s8mvsblobprodcus38.vsblob.vsassets.io" - "se1vsblobprodcus349.vsblob.vsassets.io" - "sqdvsblobprodcus333.vsblob.vsassets.io" - "st8vsblobprodcus339.vsblob.vsassets.io" - "tphvsblobprodcus375.vsblob.vsassets.io" - "u3hvsblobprodcus371.vsblob.vsassets.io" - "u6ovsblobprodcus377.vsblob.vsassets.io" - "ukkvsblobprodcus352.vsblob.vsassets.io" - "uy6vsblobprodcus34.vsblob.vsassets.io" - "v53vsblobprodcus320.vsblob.vsassets.io" - "vb4vsblobprodcus33.vsblob.vsassets.io" - "vwvvsblobprodcus334.vsblob.vsassets.io" - "x3yvsblobprodcus370.vsblob.vsassets.io" - "xupvsblobprodcus332.vsblob.vsassets.io" - "yluvsblobprodcus367.vsblob.vsassets.io" - "yttvsblobprodcus357.vsblob.vsassets.io" - "ytvvsblobprodcus310.vsblob.vsassets.io"See Network Configuration for more information.
🤖 Automated content by GitHub Copilot. Generated by the Code Simplifier workflow. · copilot · auto · 217.3 AIC · ⌖ 25.7 AIC · ⊞ 14.7K · [◷]( · ◷)
Add this agentic workflow to your repo
To install this agentic workflow, run
gh aw add githubnext/agentics/workflows/code-simplifier.md@main
- expires on Oct 20, 2026, 1:40 PM UTC
- Lingua principale
- C#
- Stelle
- 1.1k
- Fork
- 312
- Merge medio
- 8h 29m
- PR unite (30g)
- 421
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di microsoft/testfx
-
type/automation type/tech-debt
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
I maintainer di solito rispondono entro 1 giorno
-
type/automation type/tech-debt
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
I maintainer di solito rispondono entro 1 giorno
-
type/automation type/tech-debt
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
I maintainer di solito rispondono entro 1 giorno
-
area/dump needs/triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 45/100
microsoft/testfx#11981 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
type/automation type/tech-debt
Difficoltà 5/5 Più di una settimana Idoneità per principianti 5/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di microsoft/testfx
Issue simili
-
needs-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
elsa-workflows/elsa-foundation#3130 ·
I maintainer di solito rispondono entro 1 giorno
-
遥测历史查询始终返回 HTTP 400,页面静默无结果Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
Format request: .wbpzApertaenhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
KnifeLemon/Filee#294 ·
I maintainer di solito rispondono entro 1 giorno
-
good first issue
Difficoltà 1/5 1-3 ore Idoneità per principianti 88/100
GlebKievsky/git-tips#4 ·
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 77/100
OrchardCMS/OrchardCore#20088 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno