From 876bf453353a68a48e37e102b6ab4df4f0e56ff5 Mon Sep 17 00:00:00 2001 From: Youssef1313 Date: Sat, 2 Aug 2025 07:31:14 +0200 Subject: [PATCH 1/2] Fix exception in codefix of explicit mock behavior --- src/CodeFixes/SyntaxGeneratorExtensions.cs | 8 +++---- .../SetExplicitMockBehaviorCodeFixTests.cs | 22 ++++++++++++++++++- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/CodeFixes/SyntaxGeneratorExtensions.cs b/src/CodeFixes/SyntaxGeneratorExtensions.cs index cbb2d6ae9..04e7bd91a 100644 --- a/src/CodeFixes/SyntaxGeneratorExtensions.cs +++ b/src/CodeFixes/SyntaxGeneratorExtensions.cs @@ -29,14 +29,14 @@ public static SyntaxNode InsertArguments(this SyntaxGenerator generator, SyntaxN return invocation.WithArgumentList(SyntaxFactory.ArgumentList(arguments)); } - if (syntax is ObjectCreationExpressionSyntax creation) + if (syntax is BaseObjectCreationExpressionSyntax creation) { SeparatedSyntaxList arguments = creation.ArgumentList?.Arguments ?? []; arguments = arguments.InsertRange(index, items.OfType()); return creation.WithArgumentList(SyntaxFactory.ArgumentList(arguments)); } - throw new ArgumentException($"Must be of type {nameof(InvocationExpressionSyntax)} or {nameof(ObjectCreationExpressionSyntax)} but is of type {syntax.GetType().Name}", nameof(syntax)); + throw new ArgumentException($"Must be of type {nameof(InvocationExpressionSyntax)} or {nameof(BaseObjectCreationExpressionSyntax)} but is of type {syntax.GetType().Name}", nameof(syntax)); } public static SyntaxNode ReplaceArgument(this SyntaxGenerator generator, IOperation operation, int index, SyntaxNode item) @@ -59,13 +59,13 @@ public static SyntaxNode ReplaceArgument(this SyntaxGenerator generator, SyntaxN return invocation.WithArgumentList(SyntaxFactory.ArgumentList(arguments)); } - if (syntax is ObjectCreationExpressionSyntax creation) + if (syntax is BaseObjectCreationExpressionSyntax creation) { SeparatedSyntaxList arguments = creation.ArgumentList?.Arguments ?? []; arguments = arguments.RemoveAt(index).Insert(index, argument); return creation.WithArgumentList(SyntaxFactory.ArgumentList(arguments)); } - throw new ArgumentException($"Must be of type {nameof(InvocationExpressionSyntax)} or {nameof(ObjectCreationExpressionSyntax)} but is of type {syntax.GetType().Name}", nameof(syntax)); + throw new ArgumentException($"Must be of type {nameof(InvocationExpressionSyntax)} or {nameof(BaseObjectCreationExpressionSyntax)} but is of type {syntax.GetType().Name}", nameof(syntax)); } } diff --git a/tests/Moq.Analyzers.Test/SetExplicitMockBehaviorCodeFixTests.cs b/tests/Moq.Analyzers.Test/SetExplicitMockBehaviorCodeFixTests.cs index 97ab8e121..c33a412c3 100644 --- a/tests/Moq.Analyzers.Test/SetExplicitMockBehaviorCodeFixTests.cs +++ b/tests/Moq.Analyzers.Test/SetExplicitMockBehaviorCodeFixTests.cs @@ -33,6 +33,26 @@ public static IEnumerable TestData() ], }.WithNamespaces().WithMoqReferenceAssemblyGroups(); + IEnumerable mockConstructorsWithTargetTypedNew = new object[][] + { + [ + """Mock mock = {|Moq1400:new()|};""", + """Mock mock = new(MockBehavior.Loose);""", + ], + [ + """Mock mock = {|Moq1400:new(MockBehavior.Default)|};""", + """Mock mock = new(MockBehavior.Loose);""", + ], + [ + """Mock mock = new(MockBehavior.Loose);""", + """Mock mock = new(MockBehavior.Loose);""", + ], + [ + """Mock mock = new(MockBehavior.Strict);""", + """Mock mock = new(MockBehavior.Strict);""", + ], + }.WithNamespaces().WithMoqReferenceAssemblyGroups(); + IEnumerable mockConstructorsWithExpressions = new object[][] { [ @@ -89,7 +109,7 @@ public static IEnumerable TestData() ], }.WithNamespaces().WithNewMoqReferenceAssemblyGroups(); - return mockConstructors.Union(mockConstructorsWithExpressions).Union(fluentBuilders).Union(mockRepositories); + return mockConstructors.Union(mockConstructorsWithTargetTypedNew).Union(mockConstructorsWithExpressions).Union(fluentBuilders).Union(mockRepositories); } [Theory] From 6a333aa312c590f93d0c9934fba24c96ef2e0612 Mon Sep 17 00:00:00 2001 From: Youssef Victor Date: Sat, 2 Aug 2025 07:36:43 +0200 Subject: [PATCH 2/2] Update tests/Moq.Analyzers.Test/SetExplicitMockBehaviorCodeFixTests.cs Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- tests/Moq.Analyzers.Test/SetExplicitMockBehaviorCodeFixTests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Moq.Analyzers.Test/SetExplicitMockBehaviorCodeFixTests.cs b/tests/Moq.Analyzers.Test/SetExplicitMockBehaviorCodeFixTests.cs index c33a412c3..9184f6e00 100644 --- a/tests/Moq.Analyzers.Test/SetExplicitMockBehaviorCodeFixTests.cs +++ b/tests/Moq.Analyzers.Test/SetExplicitMockBehaviorCodeFixTests.cs @@ -36,7 +36,7 @@ public static IEnumerable TestData() IEnumerable mockConstructorsWithTargetTypedNew = new object[][] { [ - """Mock mock = {|Moq1400:new()|};""", + """Mock mock = {|Moq1400:new()|};""", """Mock mock = new(MockBehavior.Loose);""", ], [