Skip to content

Commit

Permalink
[GH-108] - async method support
Browse files Browse the repository at this point in the history
  • Loading branch information
tpodolak committed Sep 11, 2020
1 parent ac1363f commit edb6496
Show file tree
Hide file tree
Showing 5 changed files with 119 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ internal sealed class NonSubstitutableMemberReceivedInOrderAnalyzer : AbstractNo
private static ImmutableArray<ImmutableArray<int>> IgnoredPaths { get; } = ImmutableArray.Create(
ImmutableArray.Create(
(int)SyntaxKind.Argument),
ImmutableArray.Create(
(int)SyntaxKind.AwaitExpression,
(int)SyntaxKind.Argument),
ImmutableArray.Create(
(int)SyntaxKind.CastExpression,
(int)SyntaxKind.Argument),
Expand All @@ -22,6 +25,10 @@ internal sealed class NonSubstitutableMemberReceivedInOrderAnalyzer : AbstractNo
ImmutableArray.Create(
(int)SyntaxKind.EqualsValueClause,
(int)SyntaxKind.VariableDeclarator),
ImmutableArray.Create(
(int)SyntaxKind.AwaitExpression,
(int)SyntaxKind.EqualsValueClause,
(int)SyntaxKind.VariableDeclarator),
ImmutableArray.Create(
(int)SyntaxKind.AsExpression,
(int)SyntaxKind.EqualsValueClause,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ protected void Analyze(SyntaxNodeAnalysisContext syntaxNodeAnalysisContext, Synt

if (analysisResult.CanBeSubstituted == false)
{
ReportDiagnostics(syntaxNodeAnalysisContext, analysisResult);
ReportDiagnostics(syntaxNodeAnalysisContext, in analysisResult);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,30 +12,27 @@ internal sealed class NonSubstitutableMemberReceivedInOrderAnalyzer : AbstractNo
{
private static ImmutableArray<ImmutableArray<int>> IgnoredPaths { get; } = ImmutableArray.Create(
ImmutableArray.Create(
(int)SyntaxKind.SimpleArgument,
(int)SyntaxKind.ArgumentList,
(int)SyntaxKind.InvocationExpression),
(int)SyntaxKind.SimpleArgument),
ImmutableArray.Create(
(int)SyntaxKind.AwaitExpression,
(int)SyntaxKind.SimpleArgument),
ImmutableArray.Create(
(int)SyntaxKind.TryCastExpression,
(int)SyntaxKind.SimpleArgument,
(int)SyntaxKind.ArgumentList,
(int)SyntaxKind.InvocationExpression),
(int)SyntaxKind.SimpleArgument),
ImmutableArray.Create(
(int)SyntaxKind.PredefinedCastExpression,
(int)SyntaxKind.SimpleArgument,
(int)SyntaxKind.ArgumentList,
(int)SyntaxKind.InvocationExpression),
(int)SyntaxKind.SimpleArgument),
ImmutableArray.Create(
(int)SyntaxKind.DirectCastExpression,
(int)SyntaxKind.SimpleArgument,
(int)SyntaxKind.ArgumentList,
(int)SyntaxKind.InvocationExpression),
(int)SyntaxKind.SimpleArgument),
ImmutableArray.Create(
(int)SyntaxKind.CTypeExpression,
(int)SyntaxKind.SimpleArgument,
(int)SyntaxKind.ArgumentList,
(int)SyntaxKind.InvocationExpression),
(int)SyntaxKind.SimpleArgument),
ImmutableArray.Create(
(int)SyntaxKind.EqualsValue,
(int)SyntaxKind.VariableDeclarator),
ImmutableArray.Create(
(int)SyntaxKind.AwaitExpression,
(int)SyntaxKind.EqualsValue,
(int)SyntaxKind.VariableDeclarator),
ImmutableArray.Create(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ public class NonSubstitutableMemberReceivedInOrderDiagnosticVerifier : CSharpDia
public async Task ReportsDiagnostics_WhenInvokingNonVirtualMethodWithoutAssignment()
{
var source = @"using NSubstitute;
using System.Threading.Tasks;
namespace MyNamespace
{
public class Foo
Expand All @@ -40,17 +40,22 @@ public int Bar()
}
}
public class FooBar
{
public Task Bar()
{
return Task.CompletedTask;
}
}
public class FooTests
{
public void Test()
{
var substitute = NSubstitute.Substitute.For<Foo>();
Received.InOrder(() =>
{
[|substitute.Bar()|];
});
var otherSubstitute = NSubstitute.Substitute.For<FooBar>();
Received.InOrder(() => [|substitute.Bar()|]);
Received.InOrder(async () => await [|otherSubstitute.Bar()|]);
}
}
}";
Expand All @@ -61,7 +66,7 @@ public void Test()
public async Task ReportsDiagnostics_WhenInvokingNonVirtualMethodWithNonUsedAssignment()
{
var source = @"using NSubstitute;
using System.Threading.Tasks;
namespace MyNamespace
{
public class Foo
Expand All @@ -77,11 +82,20 @@ public Foo Bar(int x)
}
}
public class FooBar
{
public Task<int> Bar()
{
return Task.FromResult(1);
}
}
public class FooTests
{
public void Test()
{
var substitute = NSubstitute.Substitute.For<Foo>();
var otherSubstitute = NSubstitute.Substitute.For<FooBar>();
Received.InOrder(() =>
{
[|substitute.Bar()|];
Expand All @@ -90,6 +104,10 @@ public void Test()
var z = (int)[|substitute.Bar()|];
var zz = [|substitute.Bar()|] as object;
});
Received.InOrder(async () =>
{
var x = await [|otherSubstitute.Bar()|];
});
}
}
}";
Expand Down Expand Up @@ -208,7 +226,7 @@ public void Test()
public async Task ReportsNoDiagnostics_WhenInvokingNonVirtualMethodWithUsedAssignment()
{
var source = @"using NSubstitute;
using System.Threading.Tasks;
namespace MyNamespace
{
public class Foo
Expand All @@ -219,11 +237,20 @@ public int Bar()
}
}
public class FooBar
{
public Task<int> Bar()
{
return Task.FromResult(1);
}
}
public class FooTests
{
public void Test()
{
var substitute = NSubstitute.Substitute.For<Foo>();
var otherSubstitute = NSubstitute.Substitute.For<FooBar>();
Received.InOrder(() =>
{
var a = substitute.Bar();
Expand All @@ -233,6 +260,11 @@ public void Test()
var bb = b;
var cc = c;
});
Received.InOrder(async () =>
{
var a = await otherSubstitute.Bar();
var aa = a;
});
}
}
}";
Expand Down Expand Up @@ -299,7 +331,7 @@ public void Test()
public async Task ReportsNoDiagnostics_WhenNonVirtualMethodIsCalledAsArgument()
{
var source = @"using NSubstitute;
using System.Threading.Tasks;
namespace MyNamespace
{
public class Foo
Expand All @@ -315,11 +347,20 @@ public int FooBar()
}
}
public class FooBar
{
public Task<int> Bar()
{
return Task.FromResult(1);
}
}
public class FooTests
{
public void Test()
{
var substitute = NSubstitute.Substitute.For<Foo>();
var otherSubstitute = NSubstitute.Substitute.For<FooBar>();
Received.InOrder(() =>
{
var local = 1;
Expand All @@ -330,6 +371,10 @@ public void Test()
substitute.Bar(local);
substitute.Bar(1);
});
Received.InOrder(async () =>
{
substitute.Bar(await otherSubstitute.Bar());
});
}
}
}";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,22 +29,31 @@ public class NonSubstitutableMemberReceivedInOrderDiagnosticVerifier : VisualBas
public async Task ReportsDiagnostics_WhenInvokingNonVirtualMethodWithoutAssignment()
{
var source = @"Imports NSubstitute
Imports System.Threading.Tasks
Namespace MyNamespace
Public Class Foo
Public Function Bar() As Integer
Return 2
End Function
End Class
Public Class FooBar
Public Function Bar() As Task(Of Integer)
Return Task.FromResult(1)
End Function
End Class
Public Class FooTests
Public Sub Test()
Dim substitute = NSubstitute.Substitute.[For](Of Foo)()
Dim otherSubstitute = NSubstitute.Substitute.[For](Of FooBar)()
NSubstitute.Received.InOrder(Function()
[|substitute.Bar()|]
End Function)
NSubstitute.Received.InOrder(Function() [|substitute.Bar()|])
NSubstitute.Received.InOrder(Async Function() Await [|otherSubstitute.Bar()|])
NSubstitute.Received.InOrder(Sub() [|substitute.Bar()|])
NSubstitute.Received.InOrder(Async Sub() Await [|otherSubstitute.Bar()|])
End Sub
End Class
End Namespace
Expand All @@ -56,7 +65,7 @@ End Namespace
public async Task ReportsDiagnostics_WhenInvokingNonVirtualMethodWithNonUsedAssignment()
{
var source = @"Imports NSubstitute
Imports System.Threading.Tasks
Namespace MyNamespace
Public Class Foo
Public Function Bar() As Integer
Expand All @@ -68,15 +77,26 @@ Return Nothing
End Function
End Class
Public Class FooBar
Public Function Bar() As Task(Of Integer)
Return Task.FromResult(1)
End Function
End Class
Public Class FooTests
Public Sub Test()
Dim substitute = NSubstitute.Substitute.[For](Of Foo)()
Dim otherSubstitute = NSubstitute.Substitute.[For](Of FooBar)()
NSubstitute.Received.InOrder(Function()
[|substitute.Bar()|]
Dim y = [|substitute.Bar()|]
Dim z = CInt([|substitute.Bar()|])
Dim zz = TryCast([|substitute.Bar()|], Object)
End Function)
NSubstitute.Received.InOrder(Async Function()
Await [|otherSubstitute.Bar()|]
Dim y = Await [|otherSubstitute.Bar()|]
End Function)
End Sub
End Class
End Namespace";
Expand Down Expand Up @@ -188,21 +208,32 @@ End Namespace
public async Task ReportsNoDiagnostics_WhenInvokingNonVirtualMethodWithUsedAssignment()
{
var source = @"Imports NSubstitute
Imports System.Threading.Tasks
Namespace MyNamespace
Public Class Foo
Public Function Bar() As Integer
Return 2
End Function
End Class
Public Class FooBar
Public Function Bar() As Task(Of Integer)
Return Task.FromResult(1)
End Function
End Class
Public Class FooTests
Public Sub Test()
Dim substitute = NSubstitute.Substitute.[For](Of Foo)()
Dim otherSubstitute = NSubstitute.Substitute.[For](Of FooBar)()
NSubstitute.Received.InOrder(Function()
Dim x = substitute.Bar()
Dim y = x
End Function)
NSubstitute.Received.InOrder(Async Function()
Dim x = Await otherSubstitute.Bar()
Dim y = x
End Function)
End Sub
End Class
End Namespace
Expand Down Expand Up @@ -274,7 +305,7 @@ End Namespace
public async Task ReportsNoDiagnostics_WhenNonVirtualMethodIsCalledAsArgument()
{
var source = @"Imports NSubstitute
Imports System.Threading.Tasks
Namespace MyNamespace
Public Class Foo
Public Overridable Function Bar(ByVal x As Object) As Integer
Expand All @@ -286,9 +317,16 @@ Return 1
End Function
End Class
Public Class FooBar
Public Function Bar() As Task(Of Integer)
Return Task.FromResult(1)
End Function
End Class
Public Class FooTests
Public Sub Test()
Dim substitute = NSubstitute.Substitute.[For](Of Foo)()
Dim otherSubstitute = NSubstitute.Substitute.[For](Of FooBar)()
NSubstitute.Received.InOrder(Function()
Dim local = 1
Dim x = substitute.Bar(substitute.FooBar())
Expand All @@ -300,6 +338,9 @@ Public Sub Test()
substitute.Bar(local)
substitute.Bar(1)
End Function)
NSubstitute.Received.InOrder(Async Function()
Dim x = substitute.Bar(Await otherSubstitute.Bar())
End Function)
End Sub
End Class
End Namespace
Expand Down

0 comments on commit edb6496

Please sign in to comment.