Skip to content

Commit 4dbf858

Browse files
authored
Merge pull request #3421 from sharwell/record-tests
Increase test coverage for records in SA1500, SA1502, and SA1508
2 parents b5b91d7 + 3cce367 commit 4dbf858

File tree

4 files changed

+230
-18
lines changed

4 files changed

+230
-18
lines changed

StyleCop.Analyzers/StyleCop.Analyzers.Test.CSharp9/LayoutRules/SA1500CSharp9UnitTests.cs

Lines changed: 71 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,89 @@ namespace StyleCop.Analyzers.Test.CSharp9.LayoutRules
77
using System.Threading.Tasks;
88
using Microsoft.CodeAnalysis.Testing;
99
using StyleCop.Analyzers.Test.CSharp8.LayoutRules;
10+
using StyleCop.Analyzers.Test.Helpers;
1011
using Xunit;
1112
using static StyleCop.Analyzers.Test.Verifiers.StyleCopCodeFixVerifier<
1213
StyleCop.Analyzers.LayoutRules.SA1500BracesForMultiLineStatementsMustNotShareLine,
1314
StyleCop.Analyzers.LayoutRules.SA1500CodeFixProvider>;
1415

1516
public class SA1500CSharp9UnitTests : SA1500CSharp8UnitTests
1617
{
17-
[Fact]
18+
[Theory]
19+
[MemberData(nameof(CommonMemberData.RecordTypeDeclarationKeywords), MemberType = typeof(CommonMemberData))]
1820
[WorkItem(3272, "https://github.com/DotNetAnalyzers/StyleCopAnalyzers/issues/3272")]
19-
public async Task TestSingleLineRecordAsync()
21+
public async Task TestSingleLineRecordAsync(string keyword)
2022
{
21-
var testCode = @"namespace TestNamespace
22-
{
23-
public record TestRecord;
24-
}
23+
var testCode = $@"namespace TestNamespace
24+
{{
25+
public {keyword} TestRecord;
26+
}}
2527
";
2628

2729
await VerifyCSharpFixAsync(testCode, DiagnosticResult.EmptyDiagnosticResults, testCode, CancellationToken.None).ConfigureAwait(false);
2830
}
31+
32+
[Theory]
33+
[MemberData(nameof(CommonMemberData.RecordTypeDeclarationKeywords), MemberType = typeof(CommonMemberData))]
34+
[WorkItem(3272, "https://github.com/DotNetAnalyzers/StyleCopAnalyzers/issues/3272")]
35+
public async Task TestSingleLineRecordWithParameterAsync(string keyword)
36+
{
37+
var testCode = $@"namespace TestNamespace
38+
{{
39+
public {keyword} TestRecord(int Count);
40+
}}
41+
";
42+
43+
await new CSharpTest
44+
{
45+
ReferenceAssemblies = ReferenceAssemblies.Net.Net50,
46+
TestCode = testCode,
47+
FixedCode = testCode,
48+
}.RunAsync(CancellationToken.None).ConfigureAwait(false);
49+
}
50+
51+
[Theory]
52+
[MemberData(nameof(CommonMemberData.RecordTypeDeclarationKeywords), MemberType = typeof(CommonMemberData))]
53+
[WorkItem(3272, "https://github.com/DotNetAnalyzers/StyleCopAnalyzers/issues/3272")]
54+
public async Task TestMultiLineRecordAsync(string keyword)
55+
{
56+
var testCode = $@"namespace TestNamespace
57+
{{
58+
public {keyword} TestRecord
59+
{{
60+
public int Count {{ get; init; }}
61+
}}
62+
}}
63+
";
64+
65+
await new CSharpTest
66+
{
67+
ReferenceAssemblies = ReferenceAssemblies.Net.Net50,
68+
TestCode = testCode,
69+
FixedCode = testCode,
70+
}.RunAsync(CancellationToken.None).ConfigureAwait(false);
71+
}
72+
73+
[Theory]
74+
[MemberData(nameof(CommonMemberData.RecordTypeDeclarationKeywords), MemberType = typeof(CommonMemberData))]
75+
[WorkItem(3272, "https://github.com/DotNetAnalyzers/StyleCopAnalyzers/issues/3272")]
76+
public async Task TestMultiLineRecordWithParameterAsync(string keyword)
77+
{
78+
var testCode = $@"namespace TestNamespace
79+
{{
80+
public {keyword} TestRecord(int Count)
81+
{{
82+
public int Count2 {{ get; init; }} = 0;
83+
}}
84+
}}
85+
";
86+
87+
await new CSharpTest
88+
{
89+
ReferenceAssemblies = ReferenceAssemblies.Net.Net50,
90+
TestCode = testCode,
91+
FixedCode = testCode,
92+
}.RunAsync(CancellationToken.None).ConfigureAwait(false);
93+
}
2994
}
3095
}

StyleCop.Analyzers/StyleCop.Analyzers.Test.CSharp9/LayoutRules/SA1502CSharp9UnitTests.cs

Lines changed: 71 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,89 @@ namespace StyleCop.Analyzers.Test.CSharp9.LayoutRules
77
using System.Threading.Tasks;
88
using Microsoft.CodeAnalysis.Testing;
99
using StyleCop.Analyzers.Test.CSharp8.LayoutRules;
10+
using StyleCop.Analyzers.Test.Helpers;
1011
using Xunit;
1112
using static StyleCop.Analyzers.Test.Verifiers.StyleCopCodeFixVerifier<
1213
StyleCop.Analyzers.LayoutRules.SA1502ElementMustNotBeOnASingleLine,
1314
StyleCop.Analyzers.LayoutRules.SA1502CodeFixProvider>;
1415

1516
public class SA1502CSharp9UnitTests : SA1502CSharp8UnitTests
1617
{
17-
[Fact]
18+
[Theory]
19+
[MemberData(nameof(CommonMemberData.RecordTypeDeclarationKeywords), MemberType = typeof(CommonMemberData))]
1820
[WorkItem(3272, "https://github.com/DotNetAnalyzers/StyleCopAnalyzers/issues/3272")]
19-
public async Task TestSingleLineRecordAsync()
21+
public async Task TestSingleLineRecordAsync(string keyword)
2022
{
21-
var testCode = @"namespace TestNamespace
22-
{
23-
public record TestRecord;
24-
}
23+
var testCode = $@"namespace TestNamespace
24+
{{
25+
public {keyword} TestRecord;
26+
}}
2527
";
2628

2729
await VerifyCSharpFixAsync(testCode, DiagnosticResult.EmptyDiagnosticResults, testCode, CancellationToken.None).ConfigureAwait(false);
2830
}
31+
32+
[Theory]
33+
[MemberData(nameof(CommonMemberData.RecordTypeDeclarationKeywords), MemberType = typeof(CommonMemberData))]
34+
[WorkItem(3272, "https://github.com/DotNetAnalyzers/StyleCopAnalyzers/issues/3272")]
35+
public async Task TestSingleLineRecordWithParameterAsync(string keyword)
36+
{
37+
var testCode = $@"namespace TestNamespace
38+
{{
39+
public {keyword} TestRecord(int Count);
40+
}}
41+
";
42+
43+
await new CSharpTest
44+
{
45+
ReferenceAssemblies = ReferenceAssemblies.Net.Net50,
46+
TestCode = testCode,
47+
FixedCode = testCode,
48+
}.RunAsync(CancellationToken.None).ConfigureAwait(false);
49+
}
50+
51+
[Theory]
52+
[MemberData(nameof(CommonMemberData.RecordTypeDeclarationKeywords), MemberType = typeof(CommonMemberData))]
53+
[WorkItem(3272, "https://github.com/DotNetAnalyzers/StyleCopAnalyzers/issues/3272")]
54+
public async Task TestMultiLineRecordAsync(string keyword)
55+
{
56+
var testCode = $@"namespace TestNamespace
57+
{{
58+
public {keyword} TestRecord
59+
{{
60+
public int Count {{ get; init; }}
61+
}}
62+
}}
63+
";
64+
65+
await new CSharpTest
66+
{
67+
ReferenceAssemblies = ReferenceAssemblies.Net.Net50,
68+
TestCode = testCode,
69+
FixedCode = testCode,
70+
}.RunAsync(CancellationToken.None).ConfigureAwait(false);
71+
}
72+
73+
[Theory]
74+
[MemberData(nameof(CommonMemberData.RecordTypeDeclarationKeywords), MemberType = typeof(CommonMemberData))]
75+
[WorkItem(3272, "https://github.com/DotNetAnalyzers/StyleCopAnalyzers/issues/3272")]
76+
public async Task TestMultiLineRecordWithParameterAsync(string keyword)
77+
{
78+
var testCode = $@"namespace TestNamespace
79+
{{
80+
public {keyword} TestRecord(int Count)
81+
{{
82+
public int Count2 {{ get; init; }} = 0;
83+
}}
84+
}}
85+
";
86+
87+
await new CSharpTest
88+
{
89+
ReferenceAssemblies = ReferenceAssemblies.Net.Net50,
90+
TestCode = testCode,
91+
FixedCode = testCode,
92+
}.RunAsync(CancellationToken.None).ConfigureAwait(false);
93+
}
2994
}
3095
}

StyleCop.Analyzers/StyleCop.Analyzers.Test.CSharp9/LayoutRules/SA1508CSharp9UnitTests.cs

Lines changed: 71 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,89 @@ namespace StyleCop.Analyzers.Test.CSharp9.LayoutRules
77
using System.Threading.Tasks;
88
using Microsoft.CodeAnalysis.Testing;
99
using StyleCop.Analyzers.Test.CSharp8.LayoutRules;
10+
using StyleCop.Analyzers.Test.Helpers;
1011
using Xunit;
1112
using static StyleCop.Analyzers.Test.Verifiers.StyleCopCodeFixVerifier<
1213
StyleCop.Analyzers.LayoutRules.SA1508ClosingBracesMustNotBePrecededByBlankLine,
1314
StyleCop.Analyzers.LayoutRules.SA1508CodeFixProvider>;
1415

1516
public class SA1508CSharp9UnitTests : SA1508CSharp8UnitTests
1617
{
17-
[Fact]
18+
[Theory]
19+
[MemberData(nameof(CommonMemberData.RecordTypeDeclarationKeywords), MemberType = typeof(CommonMemberData))]
1820
[WorkItem(3272, "https://github.com/DotNetAnalyzers/StyleCopAnalyzers/issues/3272")]
19-
public async Task TestSingleLineRecordAsync()
21+
public async Task TestSingleLineRecordAsync(string keyword)
2022
{
21-
var testCode = @"namespace TestNamespace
22-
{
23-
public record TestRecord;
24-
}
23+
var testCode = $@"namespace TestNamespace
24+
{{
25+
public {keyword} TestRecord;
26+
}}
2527
";
2628

2729
await VerifyCSharpFixAsync(testCode, DiagnosticResult.EmptyDiagnosticResults, testCode, CancellationToken.None).ConfigureAwait(false);
2830
}
31+
32+
[Theory]
33+
[MemberData(nameof(CommonMemberData.RecordTypeDeclarationKeywords), MemberType = typeof(CommonMemberData))]
34+
[WorkItem(3272, "https://github.com/DotNetAnalyzers/StyleCopAnalyzers/issues/3272")]
35+
public async Task TestSingleLineRecordWithParameterAsync(string keyword)
36+
{
37+
var testCode = $@"namespace TestNamespace
38+
{{
39+
public {keyword} TestRecord(int Count);
40+
}}
41+
";
42+
43+
await new CSharpTest
44+
{
45+
ReferenceAssemblies = ReferenceAssemblies.Net.Net50,
46+
TestCode = testCode,
47+
FixedCode = testCode,
48+
}.RunAsync(CancellationToken.None).ConfigureAwait(false);
49+
}
50+
51+
[Theory]
52+
[MemberData(nameof(CommonMemberData.RecordTypeDeclarationKeywords), MemberType = typeof(CommonMemberData))]
53+
[WorkItem(3272, "https://github.com/DotNetAnalyzers/StyleCopAnalyzers/issues/3272")]
54+
public async Task TestMultiLineRecordAsync(string keyword)
55+
{
56+
var testCode = $@"namespace TestNamespace
57+
{{
58+
public {keyword} TestRecord
59+
{{
60+
public int Count {{ get; init; }}
61+
}}
62+
}}
63+
";
64+
65+
await new CSharpTest
66+
{
67+
ReferenceAssemblies = ReferenceAssemblies.Net.Net50,
68+
TestCode = testCode,
69+
FixedCode = testCode,
70+
}.RunAsync(CancellationToken.None).ConfigureAwait(false);
71+
}
72+
73+
[Theory]
74+
[MemberData(nameof(CommonMemberData.RecordTypeDeclarationKeywords), MemberType = typeof(CommonMemberData))]
75+
[WorkItem(3272, "https://github.com/DotNetAnalyzers/StyleCopAnalyzers/issues/3272")]
76+
public async Task TestMultiLineRecordWithParameterAsync(string keyword)
77+
{
78+
var testCode = $@"namespace TestNamespace
79+
{{
80+
public {keyword} TestRecord(int Count)
81+
{{
82+
public int Count2 {{ get; init; }} = 0;
83+
}}
84+
}}
85+
";
86+
87+
await new CSharpTest
88+
{
89+
ReferenceAssemblies = ReferenceAssemblies.Net.Net50,
90+
TestCode = testCode,
91+
FixedCode = testCode,
92+
}.RunAsync(CancellationToken.None).ConfigureAwait(false);
93+
}
2994
}
3095
}

StyleCop.Analyzers/StyleCop.Analyzers.Test/Helpers/CommonMemberData.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,23 @@ public static IEnumerable<object[]> DataTypeDeclarationKeywords
2929
}
3030
}
3131

32+
public static IEnumerable<object[]> RecordTypeDeclarationKeywords
33+
{
34+
get
35+
{
36+
if (LightupHelpers.SupportsCSharp9)
37+
{
38+
yield return new[] { "record" };
39+
}
40+
41+
if (LightupHelpers.SupportsCSharp10)
42+
{
43+
yield return new[] { "record class" };
44+
yield return new[] { "record struct" };
45+
}
46+
}
47+
}
48+
3249
public static IEnumerable<object[]> TypeDeclarationKeywords
3350
{
3451
get

0 commit comments

Comments
 (0)