From 026e5645f3226af3931df63cf1a6b3a4a9f48261 Mon Sep 17 00:00:00 2001 From: Richard Murillo Date: Fri, 30 May 2025 19:35:04 -0700 Subject: [PATCH] test: verify ValueTask task detection --- src/Common/ISymbolExtensions.cs | 2 +- .../SetupShouldNotIncludeAsyncResultAnalyzerTests.cs | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/Common/ISymbolExtensions.cs b/src/Common/ISymbolExtensions.cs index 9885a4f3b..b18d86459 100644 --- a/src/Common/ISymbolExtensions.cs +++ b/src/Common/ISymbolExtensions.cs @@ -100,7 +100,7 @@ public static bool IsMethodReturnTypeTask(this ISymbol methodSymbol) { string type = methodSymbol.ToDisplayString(); return string.Equals(type, "System.Threading.Tasks.Task", StringComparison.Ordinal) - || string.Equals(type, "System.Threading.ValueTask", StringComparison.Ordinal) + || string.Equals(type, "System.Threading.Tasks.ValueTask", StringComparison.Ordinal) || type.StartsWith("System.Threading.Tasks.Task<", StringComparison.Ordinal) || (type.StartsWith("System.Threading.Tasks.ValueTask<", StringComparison.Ordinal) && type.EndsWith(".Result", StringComparison.Ordinal)); diff --git a/tests/Moq.Analyzers.Test/SetupShouldNotIncludeAsyncResultAnalyzerTests.cs b/tests/Moq.Analyzers.Test/SetupShouldNotIncludeAsyncResultAnalyzerTests.cs index 9cddc0770..7b296f2c2 100644 --- a/tests/Moq.Analyzers.Test/SetupShouldNotIncludeAsyncResultAnalyzerTests.cs +++ b/tests/Moq.Analyzers.Test/SetupShouldNotIncludeAsyncResultAnalyzerTests.cs @@ -13,8 +13,14 @@ public static IEnumerable TestData() // Prior to Moq 4.16, the setup helper ReturnsAsync(), ThrowsAsync() are preferred ["""new Mock().Setup(c => c.GenericTaskAsync()).ReturnsAsync(string.Empty);"""], + ["""new Mock().Setup(c => c.ValueTaskAsync());"""], + + ["""new Mock().Setup(c => c.GenericValueTaskAsync()).Returns(ValueTask.FromResult(string.Empty));"""], + // Starting with Moq 4.16, you can simply .Setup the returned tasks's .Result property ["""new Mock().Setup(c => {|Moq1201:c.GenericTaskAsync().Result|});"""], + + ["""new Mock().Setup(c => {|Moq1201:c.GenericValueTaskAsync().Result|});"""], }.WithNamespaces().WithOldMoqReferenceAssemblyGroups(); } @@ -31,6 +37,10 @@ public class AsyncClient public virtual Task TaskAsync() => Task.CompletedTask; public virtual Task GenericTaskAsync() => Task.FromResult(string.Empty); + + public virtual ValueTask ValueTaskAsync() => ValueTask.CompletedTask; + + public virtual ValueTask GenericValueTaskAsync() => ValueTask.FromResult(string.Empty); } internal class UnitTest