Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion global.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,4 @@
"Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.25452.3",
"MSBuild.Sdk.Extras": "3.0.44"
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -127,24 +127,101 @@
InvocationExpressionSyntax invocationExpression,
string testContextMemberName)
{
// Find the containing method to determine the context
MethodDeclarationSyntax? containingMethod = invocationExpression.FirstAncestorOrSelf<MethodDeclarationSyntax>();

// Create the TestContext.CancellationToken expression
MemberAccessExpressionSyntax testContextExpression = SyntaxFactory.MemberAccessExpression(
SyntaxKind.SimpleMemberAccessExpression,
SyntaxFactory.IdentifierName(testContextMemberName),
SyntaxFactory.IdentifierName("CancellationToken"));

editor.ReplaceNode(invocationExpression, (node, _) =>
editor.ReplaceNode(invocationExpression, (node, generator) =>
Copy link
Member

Choose a reason for hiding this comment

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

Suggested change
editor.ReplaceNode(invocationExpression, (node, generator) =>
editor.ReplaceNode(invocationExpression, (node, _) =>

{
var invocationExpression = (InvocationExpressionSyntax)node;
ArgumentListSyntax currentArguments = invocationExpression.ArgumentList;
SeparatedSyntaxList<ArgumentSyntax> newArguments = currentArguments.Arguments.Add(SyntaxFactory.Argument(testContextExpression));
return invocationExpression.WithArgumentList(currentArguments.WithArguments(newArguments));

// Get the method symbol to determine the CancellationToken parameter name
if (editor.SemanticModel.GetSymbolInfo(invocationExpression).Symbol is IMethodSymbol methodSymbol)

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build Linux Debug)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInTestInitialize_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build Linux Debug)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInTestCleanup_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build Linux Debug)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenTaskDelayWithoutCancellationToken_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build Linux Debug)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInClassInitialize_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build Linux Debug)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInTestMethodWithoutTestContextInScope_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build Linux Release)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenTaskDelayWithoutCancellationToken_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build Linux Release)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInTestCleanup_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build Linux Release)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInTestInitialize_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build Linux Release)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInClassInitialize_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build Linux Release)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInTestMethodWithTestContextFieldInScope_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build MacOS Debug)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInTestCleanup_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build MacOS Debug)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInTestInitialize_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build MacOS Debug)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInClassCleanupWithTestContextParameter_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build MacOS Debug)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInClassInitialize_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build MacOS Debug)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInClassCleanupWithoutTestContextParameter_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build MacOS Release)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInTestInitialize_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build MacOS Release)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenTaskDelayWithoutCancellationToken_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build MacOS Release)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInClassCleanupWithoutTestContextParameter_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build MacOS Release)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInClassInitialize_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build MacOS Release)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInTestCleanup_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build Windows Debug)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenTaskDelayWithoutCancellationToken_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build Windows Debug)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInClassInitialize_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build Windows Debug)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInClassCleanupWithTestContextParameter_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build Windows Debug)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInClassCleanupWithoutTestContextParameter_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build Windows Debug)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInTestInitialize_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build Windows Release)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInTestInitialize_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build Windows Release)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInClassInitialize_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build Windows Release)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInTestCleanup_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build Windows Release)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenTaskDelayWithoutCancellationToken_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx (Build Windows Release)

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInClassCleanupWithTestContextParameter_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInTestInitialize_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInTestCleanup_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenTaskDelayWithoutCancellationToken_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree

Check failure on line 142 in src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs

View check run for this annotation

Azure Pipelines / microsoft.testfx

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs#L142

src/Analyzers/MSTest.Analyzers.CodeFixes/FlowTestContextCancellationTokenFixer.cs(142,1): error : Test method MSTest.Analyzers.Test.FlowTestContextCancellationTokenAnalyzerTests.WhenInClassInitialize_Diagnostic threw exception: System.ArgumentException: Syntax node is not within syntax tree
{
// Get CancellationToken type
if (editor.SemanticModel.Compilation.GetTypeByMetadataName("System.Threading.CancellationToken") is INamedTypeSymbol cancellationTokenType)
{
// Find the CancellationToken parameter
IParameterSymbol? cancellationTokenParameter = null;
for (int i = methodSymbol.Parameters.Length - 1; i >= 0; i--)
{
if (SymbolEqualityComparer.Default.Equals(methodSymbol.Parameters[i].Type, cancellationTokenType))
{
cancellationTokenParameter = methodSymbol.Parameters[i];
break;
}
}

// Check if we should use a named argument
bool shouldUseNamedArgument = ShouldUseNamedArgument(currentArguments, methodSymbol, cancellationTokenParameter);

ArgumentSyntax newArgument = shouldUseNamedArgument && cancellationTokenParameter is not null
? SyntaxFactory.Argument(SyntaxFactory.NameColon(cancellationTokenParameter.Name), SyntaxFactory.Token(SyntaxKind.None), testContextExpression)
: SyntaxFactory.Argument(testContextExpression);

SeparatedSyntaxList<ArgumentSyntax> newArguments = currentArguments.Arguments.Add(newArgument);
return invocationExpression.WithArgumentList(currentArguments.WithArguments(newArguments));
}
}

// Fallback: just add without named argument if we can't get symbol info
SeparatedSyntaxList<ArgumentSyntax> fallbackArguments = currentArguments.Arguments.Add(SyntaxFactory.Argument(testContextExpression));
return invocationExpression.WithArgumentList(currentArguments.WithArguments(fallbackArguments));
});
}

private static bool ShouldUseNamedArgument(ArgumentListSyntax currentArguments, IMethodSymbol methodSymbol, IParameterSymbol? cancellationTokenParameter)
{
if (cancellationTokenParameter is null)
{
return false;
}

// If any existing arguments use named syntax, we should use named arguments
foreach (ArgumentSyntax arg in currentArguments.Arguments)
{
if (arg.NameColon is not null)
{
return true;
}
}

// If there are optional parameters before the CancellationToken parameter and we're not providing all of them,
// we should use named arguments
int cancellationTokenParameterIndex = -1;
for (int i = 0; i < methodSymbol.Parameters.Length; i++)
{
if (SymbolEqualityComparer.Default.Equals(methodSymbol.Parameters[i], cancellationTokenParameter))
{
cancellationTokenParameterIndex = i;
break;
}
}

if (cancellationTokenParameterIndex == -1)
{
return false;
}

int currentArgumentCount = currentArguments.Arguments.Count;

// Check if there are optional parameters between current argument count and cancellation token parameter
for (int i = currentArgumentCount; i < cancellationTokenParameterIndex; i++)
{
if (!methodSymbol.Parameters[i].HasExplicitDefaultValue)
{
// There's a required parameter we're not providing, so we can't skip to the cancellation token
return false;
}
}

// If we're skipping optional parameters, use named argument
return currentArgumentCount < cancellationTokenParameterIndex;
}

internal static MethodDeclarationSyntax AddTestContextParameterToMethod(MethodDeclarationSyntax method)
{
// Create TestContext parameter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -738,4 +738,154 @@ public static async Task AssemblyCleanup(TestContext testContext)

await VerifyCS.VerifyCodeFixAsync(code, fixedCode);
}

[TestMethod]
public async Task WhenMethodWithNamedArguments_ShouldUseNamedArgumentForCancellationToken()
{
string code = """
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Threading;
using System.Threading.Tasks;

public static class TestHelper
{
public static void DoSomething(string x = "", int i = 1, CancellationToken ct = default) { }
}

[TestClass]
public class MyTestClass
{
public TestContext TestContext { get; set; }

[TestMethod]
public void Test()
{
[|TestHelper.DoSomething()|];
[|TestHelper.DoSomething(i: 15)|];
}
}
""";

string fixedCode = """
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Threading;
using System.Threading.Tasks;

public static class TestHelper
{
public static void DoSomething(string x = "", int i = 1, CancellationToken ct = default) { }
}

[TestClass]
public class MyTestClass
{
public TestContext TestContext { get; set; }

[TestMethod]
public void Test()
{
TestHelper.DoSomething(ct: TestContext.CancellationToken);
TestHelper.DoSomething(i: 15, ct: TestContext.CancellationToken);
}
}
""";

await VerifyCS.VerifyCodeFixAsync(code, fixedCode);
}

[TestMethod]
public async Task WhenMethodWithPositionalArguments_ShouldUseNamedArgumentForCancellationToken()
{
string code = """
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Threading;
using System.Threading.Tasks;

public static class TestHelper
{
public static void DoSomething(string x = "", int i = 1, CancellationToken ct = default) { }
}

[TestClass]
public class MyTestClass
{
public TestContext TestContext { get; set; }

[TestMethod]
public void Test()
{
[|TestHelper.DoSomething("test")|];
[|TestHelper.DoSomething("test", 42)|];
}
}
""";

string fixedCode = """
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Threading;
using System.Threading.Tasks;

public static class TestHelper
{
public static void DoSomething(string x = "", int i = 1, CancellationToken ct = default) { }
}

[TestClass]
public class MyTestClass
{
public TestContext TestContext { get; set; }

[TestMethod]
public void Test()
{
TestHelper.DoSomething("test", ct: TestContext.CancellationToken);
TestHelper.DoSomething("test", 42, TestContext.CancellationToken);
}
}
""";

await VerifyCS.VerifyCodeFixAsync(code, fixedCode);
}

[TestMethod]
public async Task WhenTaskDelayStillWorksAsExpected_Diagnostic()
{
string code = """
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Threading;
using System.Threading.Tasks;

[TestClass]
public class MyTestClass
{
public TestContext TestContext { get; set; }

[TestMethod]
public async Task MyTestMethod()
{
await [|Task.Delay(1000)|];
}
}
""";

string fixedCode = """
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Threading;
using System.Threading.Tasks;

[TestClass]
public class MyTestClass
{
public TestContext TestContext { get; set; }

[TestMethod]
public async Task MyTestMethod()
{
await Task.Delay(1000, TestContext.CancellationToken);
}
}
""";

await VerifyCS.VerifyCodeFixAsync(code, fixedCode);
}
}
Loading