Skip to content

Commit 7cfec8e

Browse files
authored
Merge pull request #9 from vchirikov/master
Add support of multiple methods
2 parents b97ae2a + 7f2da35 commit 7cfec8e

File tree

10 files changed

+312
-113
lines changed

10 files changed

+312
-113
lines changed

.config/dotnet-tools.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"version": 1,
3+
"isRoot": true,
4+
"tools": {
5+
"paket": {
6+
"version": "5.247.4",
7+
"commands": [
8+
"paket"
9+
]
10+
}
11+
}
12+
}

.paket/Paket.Restore.targets

Lines changed: 279 additions & 61 deletions
Large diffs are not rendered by default.

Mocking.Helpers/Mocking.Helpers/Core/BaseMockingProvider.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
1-
using Microsoft.CodeAnalysis;
1+
using System.Linq;
2+
using Microsoft.CodeAnalysis;
23
using Microsoft.CodeAnalysis.CSharp.Syntax;
3-
using System;
4-
using System.Collections.Generic;
5-
using System.Linq;
6-
using System.Text;
74

85
namespace Mocking.Helpers.Interfaces
96
{
107
public abstract class BaseMockingProvider
118
{
129
public abstract string AssemblyName { get; }
13-
public abstract string MockingMethodName { get; }
10+
public abstract string[] MockingMethodNames { get; }
1411
public abstract string MockingWildcardMethod { get; }
1512

1613
protected string FormatMockingWildcardMethod(string parameterTypeName)
@@ -20,7 +17,7 @@ protected string FormatMockingWildcardMethod(string parameterTypeName)
2017

2118
public virtual string GenerateSuggestionForParameterWildcard(SemanticModel model, IMethodSymbol methodSymbol, ArgumentListSyntax arguments)
2219
{
23-
var suggestionParameter = methodSymbol.Parameters.Aggregate(String.Empty, (acc, p) => $"{acc}, {this.FormatMockingWildcardMethod(p.Type.ToMinimalDisplayString(model, arguments.SpanStart))}").TrimStart(',').Trim();
20+
var suggestionParameter = methodSymbol.Parameters.Aggregate(string.Empty, (acc, p) => $"{acc}, {this.FormatMockingWildcardMethod(p.Type.ToMinimalDisplayString(model, arguments.SpanStart))}").TrimStart(',').Trim();
2421
return suggestionParameter;
2522
}
2623

Mocking.Helpers/Mocking.Helpers/FakeItEasy/FakeItEasyIgnoredCompletion.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,11 @@ public class FakeItEasyIgnoredCompletion : CompletionProvider
1818
public FakeItEasyIgnoredCompletion()
1919
{
2020
this._provider = new FakeItEasyProvider();
21+
IsFakeItEasyCallToMethod = (InvocationExpressionSyntax invocation) => this._provider.MockingMethodNames.Any(methodName => SyntaxHelpers.IsMethodNamed(invocation, methodName));
2122
}
2223

23-
internal bool IsFakeItEasyCallToMethod(InvocationExpressionSyntax invocation)
24-
{
25-
return SyntaxHelpers.IsMethodNamed(invocation, this._provider.MockingMethodName);
26-
}
24+
internal readonly Func<InvocationExpressionSyntax, bool> IsFakeItEasyCallToMethod;
25+
2726

2827
public override async Task ProvideCompletionsAsync(CompletionContext context)
2928
{

Mocking.Helpers/Mocking.Helpers/FakeItEasy/FakeItEasyProvider.cs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,10 @@
1-
using Microsoft.CodeAnalysis;
2-
using Microsoft.CodeAnalysis.CSharp.Syntax;
3-
using Mocking.Helpers.Interfaces;
4-
using System;
5-
using System.Collections.Generic;
6-
using System.Linq;
7-
using System.Text;
1+
using Mocking.Helpers.Interfaces;
82

93
namespace Mocking.Helpers.FakeItEasy
104
{
115
public class FakeItEasyProvider : BaseMockingProvider
126
{
13-
public override string MockingMethodName => "CallTo";
7+
public override string[] MockingMethodNames { get; } = new[] { "CallTo" };
148
public override string AssemblyName => "FakeItEasy";
159
public override string MockingWildcardMethod => "A<{0}>._";
1610
}

Mocking.Helpers/Mocking.Helpers/Moq/MoqIsAnyCompletion.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
using Microsoft.CodeAnalysis;
22
using Microsoft.CodeAnalysis.Completion;
3-
using Microsoft.CodeAnalysis.CSharp;
43
using Microsoft.CodeAnalysis.CSharp.Syntax;
54
using System;
6-
using System.Collections.Generic;
75
using System.Linq;
86
using System.Threading.Tasks;
97

@@ -17,12 +15,10 @@ public class MoqIsAnyCompletion : CompletionProvider
1715
public MoqIsAnyCompletion()
1816
{
1917
this._provider = new MoqProvider();
18+
IsMoqSetupMethod = (InvocationExpressionSyntax invocation) => this._provider.MockingMethodNames.Any(methodName => SyntaxHelpers.IsMethodNamed(invocation, methodName));
2019
}
2120

22-
internal bool IsMoqSetupMethod(InvocationExpressionSyntax invocation)
23-
{
24-
return SyntaxHelpers.IsMethodNamed(invocation, this._provider.MockingMethodName);
25-
}
21+
internal readonly Func<InvocationExpressionSyntax, bool> IsMoqSetupMethod;
2622

2723
public override async Task ProvideCompletionsAsync(CompletionContext context)
2824
{

Mocking.Helpers/Mocking.Helpers/Moq/MoqProvider.cs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,10 @@
1-
using Microsoft.CodeAnalysis;
2-
using Microsoft.CodeAnalysis.CSharp.Syntax;
3-
using Mocking.Helpers.Interfaces;
4-
using System;
5-
using System.Collections.Generic;
6-
using System.Linq;
7-
using System.Text;
1+
using Mocking.Helpers.Interfaces;
82

93
namespace Mocking.Helpers.Moq
104
{
115
public class MoqProvider : BaseMockingProvider
126
{
13-
public override string MockingMethodName => "Setup";
7+
public override string[] MockingMethodNames { get; } = new[] { "Setup", "Verify" };
148
public override string AssemblyName => "Moq";
159
public override string MockingWildcardMethod => "It.IsAny<{0}>()";
1610
}

Mocking.Helpers/Mocking.Helpers/NSubstitute/NSubstituteArgAnyCompletion.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22
using Microsoft.CodeAnalysis.Completion;
33
using Microsoft.CodeAnalysis.CSharp.Syntax;
44
using System;
5-
using System.Collections.Generic;
65
using System.Linq;
7-
using System.Text;
86
using System.Threading.Tasks;
97

108
namespace Mocking.Helpers.NSubstitute
@@ -17,12 +15,10 @@ public class NSubstituteArgAnyCompletion : CompletionProvider
1715
public NSubstituteArgAnyCompletion()
1816
{
1917
this._provider = new NSubstituteProvider();
18+
IsSubstituteForMethod = (InvocationExpressionSyntax invocation) => this._provider.MockingMethodNames.Any(methodName => SyntaxHelpers.IsMethodNamed(invocation, methodName));
2019
}
2120

22-
internal bool IsSubstituteForMethod(InvocationExpressionSyntax invocation)
23-
{
24-
return SyntaxHelpers.IsMethodNamed(invocation, this._provider.MockingMethodName);
25-
}
21+
internal readonly Func<InvocationExpressionSyntax, bool> IsSubstituteForMethod;
2622

2723
public override async Task ProvideCompletionsAsync(CompletionContext context)
2824
{
Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,11 @@
1-
using Microsoft.CodeAnalysis;
2-
using Microsoft.CodeAnalysis.CSharp.Syntax;
3-
using Mocking.Helpers.Interfaces;
4-
using System;
5-
using System.Collections.Generic;
6-
using System.Text;
1+
using Mocking.Helpers.Interfaces;
72

83
namespace Mocking.Helpers.NSubstitute
94
{
105
public class NSubstituteProvider : BaseMockingProvider
116
{
127
public override string AssemblyName => "NSubstitute";
13-
public override string MockingMethodName => "For";
8+
public override string[] MockingMethodNames { get; } = new[] { "For" };
149
public override string MockingWildcardMethod => "Arg.Any<{0}>()";
1510
}
1611
}

Mocking.Helpers/Mocking.Helpers/SyntaxHelpers.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,11 @@ internal static bool IsMethodNamed(InvocationExpressionSyntax invocation, string
1414
{
1515
var method = invocation.Expression as MemberAccessExpressionSyntax;
1616
var methodName = method?.Name.Identifier.ValueText;
17-
return methodName == expectedMethodName;
17+
return string.Equals(methodName, expectedMethodName, StringComparison.Ordinal);
1818
}
1919

20-
static internal bool IsCommaOrOpenParenthesis(SyntaxToken token)
21-
{
22-
return token.IsKind(SyntaxKind.OpenParenToken) || token.IsKind(SyntaxKind.CommaToken);
23-
}
20+
internal static readonly Func<SyntaxToken, bool> IsCommaOrOpenParenthesis =
21+
(SyntaxToken token) => token.IsKind(SyntaxKind.OpenParenToken) || token.IsKind(SyntaxKind.CommaToken);
2422

2523
/// <summary>
2624
/// Get token at current position
@@ -75,7 +73,7 @@ static internal IEnumerable<IMethodSymbol> GetCandidatesMockedMethodSignatures(S
7573
{
7674
mockSignatures.AddRange(symbolInfo.CandidateSymbols.OfType<IMethodSymbol>());
7775
}
78-
return mockSignatures.Where(m => !m.IsStatic && m.Parameters.Any());
76+
return mockSignatures.Where(m => !m.IsStatic && m.Parameters.Length > 0);
7977
}
8078
}
8179
}

0 commit comments

Comments
 (0)