Skip to content

Commit

Permalink
[GH-30] - additional set of tests for getting position of argument
Browse files Browse the repository at this point in the history
  • Loading branch information
tpodolak committed Aug 25, 2018
1 parent 9e380af commit 0804465
Show file tree
Hide file tree
Showing 25 changed files with 1,054 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ public abstract class CallInfoDiagnosticVerifier : CSharpDiagnosticVerifier, ICa
{
public abstract Task ReportsDiagnostic_WhenAccessingArgumentOutOfBounds(string call, string argAccess, int expectedLine, int expectedColumn);

public abstract Task ReportsNoDiagnostic_WhenAccessingArgumentOutOfBound_AndPositionIsNotLiteralExpression(string call, string argAccess);

public abstract Task ReportsNoDiagnostic_WhenAccessingArgumentWithinBounds(string call, string argAccess);

public abstract Task ReportsNoDiagnostic_WhenConvertingTypeToAssignableTypeForIndirectCasts(string call, string argAccess);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,51 @@ public void Test()
await VerifyDiagnostic(source, expectedDiagnostic);
}

[Theory]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; callInfo.ArgAt<int>(x);")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; var y = callInfo[x];")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; var y = callInfo.Args()[x];")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; var y = callInfo.ArgTypes()[x];")]
[InlineData("substitute.Barr", @"var x = 2; callInfo.ArgAt<int>(x);")]
[InlineData("substitute.Barr", @"var x = 2; var y = callInfo[x];")]
[InlineData("substitute.Barr", @"var x = 2; var y = callInfo.Args()[x];")]
[InlineData("substitute.Barr", @"var x = 2; var y = callInfo.ArgTypes()[x];")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; callInfo.ArgAt<int>(x);")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; var y = callInfo[x];")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; var y = callInfo.Args()[x];")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; var y = callInfo.ArgTypes()[x];")]
public override async Task ReportsNoDiagnostic_WhenAccessingArgumentOutOfBound_AndPositionIsNotLiteralExpression(string call, string argAccess)
{
var source = $@"using System;
using NSubstitute;
namespace MyNamespace
{{
public interface Foo
{{
int Bar(int x, int y);
int Barr {{ get; }}
int this[int x, int y] {{ get; }}
}}
public class FooTests
{{
public void Test()
{{
var substitute = NSubstitute.Substitute.For<Foo>();
{call}.Returns(callInfo =>
{{
{argAccess}
return 1;
}});
}}
}}
}}";
await VerifyDiagnostic(source);
}

[Theory]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", "callInfo.ArgAt<int>(0);")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", "callInfo.ArgAt<int>(1);")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,51 @@ public void Test()
await VerifyDiagnostic(source, expectedDiagnostic);
}

[Theory]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; callInfo.ArgAt<int>(x);")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; var y = callInfo[x];")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; var y = callInfo.Args()[x];")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; var y = callInfo.ArgTypes()[x];")]
[InlineData("substitute.Barr", @"var x = 2; callInfo.ArgAt<int>(x);")]
[InlineData("substitute.Barr", @"var x = 2; var y = callInfo[x];")]
[InlineData("substitute.Barr", @"var x = 2; var y = callInfo.Args()[x];")]
[InlineData("substitute.Barr", @"var x = 2; var y = callInfo.ArgTypes()[x];")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; callInfo.ArgAt<int>(x);")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; var y = callInfo[x];")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; var y = callInfo.Args()[x];")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; var y = callInfo.ArgTypes()[x];")]
public override async Task ReportsNoDiagnostic_WhenAccessingArgumentOutOfBound_AndPositionIsNotLiteralExpression(string call, string argAccess)
{
var source = $@"using System;
using NSubstitute;
namespace MyNamespace
{{
public interface Foo
{{
int Bar(int x, int y);
int Barr {{ get; }}
int this[int x, int y] {{ get; }}
}}
public class FooTests
{{
public void Test()
{{
var substitute = NSubstitute.Substitute.For<Foo>();
{call}.Returns<int>(callInfo =>
{{
{argAccess}
return 1;
}});
}}
}}
}}";
await VerifyDiagnostic(source);
}

[Theory]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", "callInfo.ArgAt<int>(0);")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", "callInfo.ArgAt<int>(1);")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,51 @@ public void Test()
await VerifyDiagnostic(source, expectedDiagnostic);
}

[Theory]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; callInfo.ArgAt<int>(x);")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; var y = callInfo[x];")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; var y = callInfo.Args()[x];")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; var y = callInfo.ArgTypes()[x];")]
[InlineData("substitute.Barr", @"var x = 2; callInfo.ArgAt<int>(x);")]
[InlineData("substitute.Barr", @"var x = 2; var y = callInfo[x];")]
[InlineData("substitute.Barr", @"var x = 2; var y = callInfo.Args()[x];")]
[InlineData("substitute.Barr", @"var x = 2; var y = callInfo.ArgTypes()[x];")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; callInfo.ArgAt<int>(x);")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; var y = callInfo[x];")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; var y = callInfo.Args()[x];")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; var y = callInfo.ArgTypes()[x];")]
public override async Task ReportsNoDiagnostic_WhenAccessingArgumentOutOfBound_AndPositionIsNotLiteralExpression(string call, string argAccess)
{
var source = $@"using System;
using NSubstitute;
namespace MyNamespace
{{
public interface Foo
{{
int Bar(int x, int y);
int Barr {{ get; }}
int this[int x, int y] {{ get; }}
}}
public class FooTests
{{
public void Test()
{{
var substitute = NSubstitute.Substitute.For<Foo>();
SubstituteExtensions.Returns({call}, callInfo =>
{{
{argAccess}
return 1;
}});
}}
}}
}}";
await VerifyDiagnostic(source);
}

[Theory]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", "callInfo.ArgAt<int>(0);")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", "callInfo.ArgAt<int>(1);")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,51 @@ public void Test()
await VerifyDiagnostic(source, expectedDiagnostic);
}

[Theory]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; callInfo.ArgAt<int>(x);")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; var y = callInfo[x];")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; var y = callInfo.Args()[x];")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; var y = callInfo.ArgTypes()[x];")]
[InlineData("substitute.Barr", @"var x = 2; callInfo.ArgAt<int>(x);")]
[InlineData("substitute.Barr", @"var x = 2; var y = callInfo[x];")]
[InlineData("substitute.Barr", @"var x = 2; var y = callInfo.Args()[x];")]
[InlineData("substitute.Barr", @"var x = 2; var y = callInfo.ArgTypes()[x];")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; callInfo.ArgAt<int>(x);")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; var y = callInfo[x];")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; var y = callInfo.Args()[x];")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; var y = callInfo.ArgTypes()[x];")]
public override async Task ReportsNoDiagnostic_WhenAccessingArgumentOutOfBound_AndPositionIsNotLiteralExpression(string call, string argAccess)
{
var source = $@"using System;
using NSubstitute;
namespace MyNamespace
{{
public interface Foo
{{
int Bar(int x, int y);
int Barr {{ get; }}
int this[int x, int y] {{ get; }}
}}
public class FooTests
{{
public void Test()
{{
var substitute = NSubstitute.Substitute.For<Foo>();
SubstituteExtensions.Returns<int>({call}, callInfo =>
{{
{argAccess}
return 1;
}});
}}
}}
}}";
await VerifyDiagnostic(source);
}

[Theory]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", "callInfo.ArgAt<int>(0);")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", "callInfo.ArgAt<int>(1);")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,51 @@ public void Test()
await VerifyDiagnostic(source, expectedDiagnostic);
}

[Theory]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; callInfo.ArgAt<int>(x);")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; var y = callInfo[x];")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; var y = callInfo.Args()[x];")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; var y = callInfo.ArgTypes()[x];")]
[InlineData("substitute.Barr", @"var x = 2; callInfo.ArgAt<int>(x);")]
[InlineData("substitute.Barr", @"var x = 2; var y = callInfo[x];")]
[InlineData("substitute.Barr", @"var x = 2; var y = callInfo.Args()[x];")]
[InlineData("substitute.Barr", @"var x = 2; var y = callInfo.ArgTypes()[x];")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; callInfo.ArgAt<int>(x);")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; var y = callInfo[x];")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; var y = callInfo.Args()[x];")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; var y = callInfo.ArgTypes()[x];")]
public override async Task ReportsNoDiagnostic_WhenAccessingArgumentOutOfBound_AndPositionIsNotLiteralExpression(string call, string argAccess)
{
var source = $@"using System;
using NSubstitute;
namespace MyNamespace
{{
public interface Foo
{{
int Bar(int x, int y);
int Barr {{ get; }}
int this[int x, int y] {{ get; }}
}}
public class FooTests
{{
public void Test()
{{
var substitute = NSubstitute.Substitute.For<Foo>();
{call}.ReturnsForAnyArgs<int>(callInfo =>
{{
{argAccess}
return 1;
}});
}}
}}
}}";
await VerifyDiagnostic(source);
}

[Theory]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", "callInfo.ArgAt<int>(0);")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", "callInfo.ArgAt<int>(1);")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,51 @@ public void Test()
await VerifyDiagnostic(source, expectedDiagnostic);
}

[Theory]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; callInfo.ArgAt<int>(x);")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; var y = callInfo[x];")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; var y = callInfo.Args()[x];")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; var y = callInfo.ArgTypes()[x];")]
[InlineData("substitute.Barr", @"var x = 2; callInfo.ArgAt<int>(x);")]
[InlineData("substitute.Barr", @"var x = 2; var y = callInfo[x];")]
[InlineData("substitute.Barr", @"var x = 2; var y = callInfo.Args()[x];")]
[InlineData("substitute.Barr", @"var x = 2; var y = callInfo.ArgTypes()[x];")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; callInfo.ArgAt<int>(x);")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; var y = callInfo[x];")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; var y = callInfo.Args()[x];")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; var y = callInfo.ArgTypes()[x];")]
public override async Task ReportsNoDiagnostic_WhenAccessingArgumentOutOfBound_AndPositionIsNotLiteralExpression(string call, string argAccess)
{
var source = $@"using System;
using NSubstitute;
namespace MyNamespace
{{
public interface Foo
{{
int Bar(int x, int y);
int Barr {{ get; }}
int this[int x, int y] {{ get; }}
}}
public class FooTests
{{
public void Test()
{{
var substitute = NSubstitute.Substitute.For<Foo>();
{call}.ReturnsForAnyArgs(callInfo =>
{{
{argAccess}
return 1;
}});
}}
}}
}}";
await VerifyDiagnostic(source);
}

[Theory]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", "callInfo.ArgAt<int>(0);")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", "callInfo.ArgAt<int>(1);")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,51 @@ public void Test()
await VerifyDiagnostic(source, expectedDiagnostic);
}

[Theory]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; callInfo.ArgAt<int>(x);")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; var y = callInfo[x];")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; var y = callInfo.Args()[x];")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", @"var x = 2; var y = callInfo.ArgTypes()[x];")]
[InlineData("substitute.Barr", @"var x = 2; callInfo.ArgAt<int>(x);")]
[InlineData("substitute.Barr", @"var x = 2; var y = callInfo[x];")]
[InlineData("substitute.Barr", @"var x = 2; var y = callInfo.Args()[x];")]
[InlineData("substitute.Barr", @"var x = 2; var y = callInfo.ArgTypes()[x];")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; callInfo.ArgAt<int>(x);")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; var y = callInfo[x];")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; var y = callInfo.Args()[x];")]
[InlineData("substitute.Bar(Arg.Any<int>(), Arg.Any<int>())", @"var x = 2; var y = callInfo.ArgTypes()[x];")]
public override async Task ReportsNoDiagnostic_WhenAccessingArgumentOutOfBound_AndPositionIsNotLiteralExpression(string call, string argAccess)
{
var source = $@"using System;
using NSubstitute;
namespace MyNamespace
{{
public interface Foo
{{
int Bar(int x, int y);
int Barr {{ get; }}
int this[int x, int y] {{ get; }}
}}
public class FooTests
{{
public void Test()
{{
var substitute = NSubstitute.Substitute.For<Foo>();
SubstituteExtensions.ReturnsForAnyArgs({call}, callInfo =>
{{
{argAccess}
return 1;
}});
}}
}}
}}";
await VerifyDiagnostic(source);
}

[Theory]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", "callInfo.ArgAt<int>(0);")]
[InlineData("substitute[Arg.Any<int>(), Arg.Any<int>()]", "callInfo.ArgAt<int>(1);")]
Expand Down
Loading

0 comments on commit 0804465

Please sign in to comment.