Skip to content

Commit

Permalink
Add C# 9 test cases (8 rules) (#3698)
Browse files Browse the repository at this point in the history
  • Loading branch information
costin-zaharia-sonarsource authored Nov 2, 2020
1 parent 83e869e commit e4351a7
Show file tree
Hide file tree
Showing 17 changed files with 325 additions and 60 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using csharp::SonarAnalyzer.Rules.CSharp;
using SonarAnalyzer.UnitTest.TestFramework;
using Microsoft.CodeAnalysis;

namespace SonarAnalyzer.UnitTest.Rules
{
Expand All @@ -30,16 +31,20 @@ public class UnchangedLocalVariablesShouldBeConstTest
{
[TestMethod]
[TestCategory("Rule")]
public void UnchangedLocalVariablesShouldBeConst()
{
Verifier.VerifyAnalyzer(@"TestCases\UnchangedLocalVariablesShouldBeConst.cs",
new UnchangedLocalVariablesShouldBeConst());
}
public void UnchangedLocalVariablesShouldBeConst() =>
Verifier.VerifyAnalyzer(@"TestCases\UnchangedLocalVariablesShouldBeConst.cs", new UnchangedLocalVariablesShouldBeConst());

[TestMethod]
[TestCategory("Rule")]
public void UnchangedLocalVariablesShouldBeConst_InvalidCode()
{
public void UnchangedLocalVariablesShouldBeConst_CSharp9() =>
Verifier.VerifyAnalyzer(@"TestCases\UnchangedLocalVariablesShouldBeConst.CSharp9.cs",
new UnchangedLocalVariablesShouldBeConst(),
ParseOptionsHelper.FromCSharp9,
outputKind: OutputKind.ConsoleApplication);

[TestMethod]
[TestCategory("Rule")]
public void UnchangedLocalVariablesShouldBeConst_InvalidCode() =>
Verifier.VerifyCSharpAnalyzer(@"
// invalid code
public void Test_TypeThatCannotBeConst(int arg)
Expand All @@ -52,6 +57,5 @@ public void (int arg)
{
int intVar = 1; // Noncompliant
}", new UnchangedLocalVariablesShouldBeConst(), checkMode: CompilationErrorBehavior.Ignore);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,12 @@ public class UninvokedEventDeclarationTest
{
[TestMethod]
[TestCategory("Rule")]
public void UninvokedEventDeclaration()
{
public void UninvokedEventDeclaration() =>
Verifier.VerifyAnalyzer(@"TestCases\UninvokedEventDeclaration.cs", new UninvokedEventDeclaration());
}

[TestMethod]
[TestCategory("Rule")]
public void UninvokedEventDeclaration_CSharp9() =>
Verifier.VerifyAnalyzer(@"TestCases\UninvokedEventDeclaration.CSharp9.cs", new UninvokedEventDeclaration(), ParseOptionsHelper.FromCSharp9);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,14 @@ public void UnnecessaryUsings() =>
new CS.UnnecessaryUsings(),
additionalReferences: GetAdditionalReferences());

[TestMethod]
[TestCategory("Rule")]
public void UnnecessaryUsings_CSharp9() =>
Verifier.VerifyAnalyzer(@"TestCases\UnnecessaryUsings.CSharp9.cs",
new CS.UnnecessaryUsings(),
ParseOptionsHelper.FromCSharp9,
outputKind: OutputKind.ConsoleApplication);

#if NETCOREAPP

[TestMethod]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,17 @@ public void UnusedPrivateMember_FromCSharp8() =>
#endif
options: ParseOptionsHelper.FromCSharp8);

[TestMethod]
[TestCategory("Rule")]
public void UnusedPrivateMember_FromCSharp9() =>
Verifier.VerifyAnalyzer(@"TestCases\UnusedPrivateMember.CSharp9.cs",
new CS.UnusedPrivateMember(),
#if NETFRAMEWORK
additionalReferences: NuGetMetadataReference.NETStandardV2_1_0,
#endif
options: ParseOptionsHelper.FromCSharp9,
outputKind: OutputKind.ConsoleApplication);

[TestMethod]
[TestCategory("CodeFix")]
public void UnusedPrivateMember_CodeFix() =>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/*
/*
* SonarAnalyzer for .NET
* Copyright (C) 2015-2020 SonarSource SA
* mailto: contact AT sonarsource DOT com
Expand All @@ -22,6 +22,7 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using csharp::SonarAnalyzer.Rules.CSharp;
using SonarAnalyzer.UnitTest.TestFramework;
using Microsoft.CodeAnalysis;

namespace SonarAnalyzer.UnitTest.Rules
{
Expand All @@ -30,20 +31,24 @@ public class UnusedReturnValueTest
{
[TestMethod]
[TestCategory("Rule")]
public void UnusedReturnValue()
{
public void UnusedReturnValue() =>
Verifier.VerifyAnalyzer(@"TestCases\UnusedReturnValue.cs",
new UnusedReturnValue(),
ParseOptionsHelper.FromCSharp8);
}
new UnusedReturnValue(),
ParseOptionsHelper.FromCSharp8);

[TestMethod]
[TestCategory("Rule")]
public void UnusedReturnValueWithPartialClasses()
{
public void UnusedReturnValueWithPartialClasses() =>
Verifier.VerifyAnalyzer(new[] { @"TestCases\UnusedReturnValue.part1.cs", @"TestCases\UnusedReturnValue.part2.cs", @"TestCases\UnusedReturnValue.External.cs" },
new UnusedReturnValue(),
ParseOptionsHelper.FromCSharp8);
}
new UnusedReturnValue(),
ParseOptionsHelper.FromCSharp8);

[TestMethod]
[TestCategory("Rule")]
public void UnusedReturnValue_CSharp9() =>
Verifier.VerifyAnalyzer(@"TestCases\UnusedReturnValue.CSharp9.cs",
new UnusedReturnValue(),
ParseOptionsHelper.FromCSharp9,
outputKind: OutputKind.ConsoleApplication);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,15 @@ public class UseGenericEventHandlerInstancesTest
{
[TestMethod]
[TestCategory("Rule")]
public void UseGenericEventHandlerInstances()
{
public void UseGenericEventHandlerInstances() =>
Verifier.VerifyAnalyzer(@"TestCases\UseGenericEventHandlerInstances.cs",
new UseGenericEventHandlerInstances());
}
new UseGenericEventHandlerInstances());

[TestMethod]
[TestCategory("Rule")]
public void UseGenericEventHandlerInstances_CSharp9() =>
Verifier.VerifyAnalyzer(@"TestCases\UseGenericEventHandlerInstances.CSharp9.cs",
new UseGenericEventHandlerInstances(),
ParseOptionsHelper.FromCSharp9);
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/*
/*
* SonarAnalyzer for .NET
* Copyright (C) 2015-2020 SonarSource SA
* mailto: contact AT sonarsource DOT com
Expand All @@ -20,6 +20,7 @@

extern alias csharp;
using csharp::SonarAnalyzer.Rules.CSharp;
using Microsoft.CodeAnalysis;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using SonarAnalyzer.UnitTest.TestFramework;

Expand All @@ -30,21 +31,25 @@ public class UseNumericLiteralSeparatorTest
{
[TestMethod]
[TestCategory("Rule")]
public void UseNumericLiteralSeparator_BeforeCSharp7()
{
public void UseNumericLiteralSeparator_BeforeCSharp7() =>
Verifier.VerifyNoIssueReported(@"TestCases\UseNumericLiteralSeparator.cs",
new UseNumericLiteralSeparator(),
ParseOptionsHelper.BeforeCSharp7,
CompilationErrorBehavior.Ignore);
}
new UseNumericLiteralSeparator(),
ParseOptionsHelper.BeforeCSharp7,
CompilationErrorBehavior.Ignore);

[TestMethod]
[TestCategory("Rule")]
public void UseNumericLiteralSeparator_FromCSharp7()
{
public void UseNumericLiteralSeparator_FromCSharp7() =>
Verifier.VerifyAnalyzer(@"TestCases\UseNumericLiteralSeparator.cs",
new UseNumericLiteralSeparator(),
ParseOptionsHelper.FromCSharp7);
}
new UseNumericLiteralSeparator(),
ParseOptionsHelper.FromCSharp7);

[TestMethod]
[TestCategory("Rule")]
public void UseNumericLiteralSeparator_CSharp9() =>
Verifier.VerifyAnalyzer(@"TestCases\UseNumericLiteralSeparator.CSharp9.cs",
new UseNumericLiteralSeparator(),
ParseOptionsHelper.FromCSharp9,
outputKind: OutputKind.ConsoleApplication);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,42 +22,48 @@
using VB = SonarAnalyzer.Rules.VisualBasic;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using SonarAnalyzer.UnitTest.TestFramework;
using Microsoft.CodeAnalysis;

namespace SonarAnalyzer.UnitTest.Rules
{
[TestClass]
public class UseShortCircuitingOperatorTest
{
[TestMethod, TestCategory("Rule")]
public void UseShortCircuitingOperators_VisualBasic()
{
public void UseShortCircuitingOperators_VisualBasic() =>
Verifier.VerifyAnalyzer(@"TestCases\UseShortCircuitingOperator.vb", new VB.UseShortCircuitingOperator());
}

[TestMethod, TestCategory("CodeFix")]
public void UseShortCircuitingOperators_VisualBasic_CodeFix()
{
Verifier.VerifyCodeFix(
@"TestCases\UseShortCircuitingOperator.vb",
@"TestCases\UseShortCircuitingOperator.Fixed.vb",
new VB.UseShortCircuitingOperator(),
new VB.UseShortCircuitingOperatorFixProvider());
}
public void UseShortCircuitingOperators_VisualBasic_CodeFix() =>
Verifier.VerifyCodeFix(@"TestCases\UseShortCircuitingOperator.vb",
@"TestCases\UseShortCircuitingOperator.Fixed.vb",
new VB.UseShortCircuitingOperator(),
new VB.UseShortCircuitingOperatorFixProvider());

[TestMethod, TestCategory("Rule")]
public void UseShortCircuitingOperators_CSharp()
{
public void UseShortCircuitingOperators_CSharp() =>
Verifier.VerifyAnalyzer(@"TestCases\UseShortCircuitingOperator.cs", new CS.UseShortCircuitingOperator());
}

[TestMethod, TestCategory("Rule")]
public void UseShortCircuitingOperators_CSharp9() =>
Verifier.VerifyAnalyzer(@"TestCases\UseShortCircuitingOperator.CSharp9.cs",
new CS.UseShortCircuitingOperator(),
ParseOptionsHelper.FromCSharp9,
outputKind: OutputKind.ConsoleApplication);

[TestMethod, TestCategory("CodeFix")]
public void UseShortCircuitingOperators_CSharp_CodeFix() =>
Verifier.VerifyCodeFix(@"TestCases\UseShortCircuitingOperator.cs",
@"TestCases\UseShortCircuitingOperator.Fixed.cs",
new CS.UseShortCircuitingOperator(),
new CS.UseShortCircuitingOperatorFixProvider());

[TestMethod, TestCategory("CodeFix")]
public void UseShortCircuitingOperators_CSharp_CodeFix()
{
Verifier.VerifyCodeFix(
@"TestCases\UseShortCircuitingOperator.cs",
@"TestCases\UseShortCircuitingOperator.Fixed.cs",
new CS.UseShortCircuitingOperator(),
new CS.UseShortCircuitingOperatorFixProvider());
}
public void UseShortCircuitingOperators_CSharp9_CodeFix() =>
Verifier.VerifyCodeFix(@"TestCases\UseShortCircuitingOperator.CSharp9.cs",
@"TestCases\UseShortCircuitingOperator.CSharp9.Fixed.cs",
new CS.UseShortCircuitingOperator(),
new CS.UseShortCircuitingOperatorFixProvider(),
ParseOptionsHelper.FromCSharp9);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
using System;

int target = 32; // Noncompliant {{Add the 'const' modifier to 'target'.}}
// ^^^^^^
const int alreadyConst = 32;

if (target == alreadyConst)
{
}

nint foo = 42; // Noncompliant

nuint bar = 31; // Noncompliant - FP
bar++;

if (target == (int)bar)
{
}

Func<int, int> staticLambda = static (t) =>
{
int v = 41; // Noncompliant
return v;
};

Func<int, int, int> withDiscard = static (_, _) =>
{
int v = 41; // Noncompliant
return v;
};

record Rec
{
public Rec()
{
int target = 32; // Noncompliant {{Add the 'const' modifier to 'target'.}}
// ^^^^^^
if (target == 1)
{
}
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
using System;

public record EventInvocations
{
public event EventHandler MyEvent1;
public event EventHandler MyEvent2;
public event EventHandler MyEvent3;
public event EventHandler MyEvent4;
public event EventHandler MyEvent5;
public event EventHandler MyEvent6;
public event EventHandler MyEvent7; // Compliant - FN

public event Action<object, EventArgs> MyAction1;
public event Action<object, EventArgs> MyAction2;
public event Action<object, EventArgs> MyAction3;
public event Action<object, EventArgs> MyAction4;
public event Action<object, EventArgs> MyAction5;
public event Action<object, EventArgs> MyAction6;
public event Action<object, EventArgs> MyAction7; // Compliant - FN

public void InvokeAll()
{
MyEvent1(this, EventArgs.Empty);
MyEvent2.Invoke(this, EventArgs.Empty);
MyEvent3.DynamicInvoke(this, EventArgs.Empty);
MyEvent4.BeginInvoke(this, EventArgs.Empty, null, null);
this.MyEvent5(this, EventArgs.Empty);
MyEvent6?.Invoke(this, EventArgs.Empty);

MyAction1(this, EventArgs.Empty);
MyAction2.Invoke(this, EventArgs.Empty);
MyAction3.DynamicInvoke(this, EventArgs.Empty);
MyAction4.BeginInvoke(this, EventArgs.Empty, null, null);
this.MyAction5(this, EventArgs.Empty);
MyAction6?.Invoke(this, EventArgs.Empty);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using System;
using System.Linq; // Noncompliant
// Noncompliant@-1 - FP: duplicate
using System.Collections;

Console.WriteLine("a");

record Record
{
public double Size(IList list) => list.Count;
}
Loading

0 comments on commit e4351a7

Please sign in to comment.