2
2
{
3
3
using System . Collections . Generic ;
4
4
using System . Threading . Tasks ;
5
+ using Microsoft . CodeAnalysis . CSharp ;
5
6
using Microsoft . CodeAnalysis . Testing ;
6
7
using Microsoft . CodeAnalysis . Testing . Verifiers ;
7
8
using Xunit ;
8
9
9
10
public class SourceGeneratorTests
10
11
{
11
12
private const string generatedFile = "GitBuildInfo.SourceGenerator/GitBuildInfo.SourceGenerator.SourceGenerator/GitAssemblyInfo.g.cs" ;
13
+
14
+ #region C# 10 tests.
15
+ [ Fact ]
16
+ public async Task TestGeneratingDefaultNamespaceCSharp10 ( )
17
+ {
18
+ await TestGeneratingDefaultNamespace ( LanguageVersion . CSharp10 ) . ConfigureAwait ( false ) ;
19
+ }
20
+
21
+ [ Fact ]
22
+ public async Task TestGeneratingNoNamespaceCSharp10 ( )
23
+ {
24
+ await TestGeneratingNoNamespace ( LanguageVersion . CSharp10 ) . ConfigureAwait ( false ) ;
25
+ }
26
+
27
+ [ Fact ]
28
+ public async Task TestGeneratingCustomNamespaceCSharp10 ( )
29
+ {
30
+ await TestGeneratingCustomNamespace ( LanguageVersion . CSharp10 ) . ConfigureAwait ( false ) ;
31
+ }
32
+
33
+ [ Fact ]
34
+ public async Task TestGeneratingGenericCSharp10 ( )
35
+ {
36
+ await TestGeneratingGeneric ( LanguageVersion . CSharp10 ) . ConfigureAwait ( false ) ;
37
+ }
38
+ #endregion
39
+
40
+ #region C# 9 tests.
41
+ [ Fact ]
42
+ public async Task TestGeneratingDefaultNamespaceCSharp9 ( )
43
+ {
44
+ await TestGeneratingDefaultNamespace ( ) . ConfigureAwait ( false ) ;
45
+ }
46
+
47
+ [ Fact ]
48
+ public async Task TestGeneratingNoNamespaceCSharp9 ( )
49
+ {
50
+ await TestGeneratingNoNamespace ( ) . ConfigureAwait ( false ) ;
51
+ }
12
52
13
53
[ Fact ]
14
- public async Task TestGeneratingDefaultNamespace ( )
54
+ public async Task TestGeneratingCustomNamespaceCSharp9 ( )
15
55
{
16
- await RunTest < CSGeneratorTest > ( "Elskom.Generic.Libs.Test" , "false" , @"// <autogenerated/>
56
+ await TestGeneratingCustomNamespace ( ) . ConfigureAwait ( false ) ;
57
+ }
58
+
59
+ [ Fact ]
60
+ public async Task TestGeneratingGenericCSharp9 ( )
61
+ {
62
+ await TestGeneratingGeneric ( ) . ConfigureAwait ( false ) ;
63
+ }
64
+ #endregion
65
+
66
+ private static async Task TestGeneratingDefaultNamespace ( LanguageVersion languageVersion = LanguageVersion . CSharp9 )
67
+ {
68
+ await RunTest < CSGeneratorTest > ( string . Empty , "Test" , "false" , languageVersion == LanguageVersion . CSharp10 ? @"// <autogenerated/>
69
+
70
+ [assembly: GitInformationAttribute(""fbgtgretgtre"", ""vfdbttregter"", ""vsdfvfdsv"", typeof(Test))]
71
+ " : @"// <autogenerated/>
17
72
using Elskom.Generic.Libs;
18
73
19
74
[assembly: GitInformationAttribute(""fbgtgretgtre"", ""vfdbttregter"", ""vsdfvfdsv"", typeof(Test))]
@@ -23,13 +78,15 @@ internal static class Test
23
78
internal static object Dummy()
24
79
=> null;
25
80
}
26
- }" , GetDiagnostics ( ) ) . ConfigureAwait ( false ) ;
81
+ }" , languageVersion , languageVersion == LanguageVersion . CSharp10 ? GetCSharp10Diagnostics ( "Test" , otherEndColumn : 92 ) : GetDiagnostics ( ) ) . ConfigureAwait ( false ) ;
27
82
}
28
83
29
- [ Fact ]
30
- public async Task TestGeneratingNoNamespace ( )
84
+ private async Task TestGeneratingNoNamespace ( LanguageVersion languageVersion = LanguageVersion . CSharp9 )
31
85
{
32
- await RunTest < CSGeneratorTest > ( "Test" , "false" , @"// <autogenerated/>
86
+ await RunTest < CSGeneratorTest > ( string . Empty , "Test" , "false" , languageVersion == LanguageVersion . CSharp10 ? @"// <autogenerated/>
87
+
88
+ [assembly: GitInformationAttribute(""fbgtgretgtre"", ""vfdbttregter"", ""vsdfvfdsv"", typeof(Test))]
89
+ " : @"// <autogenerated/>
33
90
using Elskom.Generic.Libs;
34
91
35
92
[assembly: GitInformationAttribute(""fbgtgretgtre"", ""vfdbttregter"", ""vsdfvfdsv"", typeof(Test))]
@@ -39,13 +96,15 @@ internal static class Test
39
96
internal static object Dummy()
40
97
=> null;
41
98
}
42
- }" , GetDiagnostics ( ) ) . ConfigureAwait ( false ) ;
99
+ }" , languageVersion , languageVersion == LanguageVersion . CSharp10 ? GetCSharp10Diagnostics ( "Test" , otherEndColumn : 92 ) : GetDiagnostics ( ) ) . ConfigureAwait ( false ) ;
43
100
}
44
101
45
- [ Fact ]
46
- public async Task TestGeneratingCustomNamespace ( )
102
+ private async Task TestGeneratingCustomNamespace ( LanguageVersion languageVersion = LanguageVersion . CSharp9 )
47
103
{
48
- await RunTest < CSGeneratorTest > ( "TestNamespace.Test" , "false" , @"// <autogenerated/>
104
+ await RunTest < CSGeneratorTest > ( "TestNamespace" , "Test" , "false" , languageVersion == LanguageVersion . CSharp10 ? @"// <autogenerated/>
105
+
106
+ [assembly: GitInformationAttribute(""fbgtgretgtre"", ""vfdbttregter"", ""vsdfvfdsv"", typeof(Test))]
107
+ " : @"// <autogenerated/>
49
108
using Elskom.Generic.Libs;
50
109
using TestNamespace;
51
110
@@ -56,13 +115,15 @@ internal static class Test
56
115
internal static object Dummy()
57
116
=> null;
58
117
}
59
- }" , GetGenericDiagnostics ( ) ) . ConfigureAwait ( false ) ;
118
+ }" , languageVersion , languageVersion == LanguageVersion . CSharp10 ? GetCSharp10Diagnostics ( "Test" , otherEndColumn : 92 ) : GetGenericDiagnostics ( ) ) . ConfigureAwait ( false ) ;
60
119
}
61
120
62
- [ Fact ]
63
- public async Task TestGeneratingGeneric ( )
121
+ private async Task TestGeneratingGeneric ( LanguageVersion languageVersion = LanguageVersion . CSharp9 )
64
122
{
65
- await RunTest < CSGeneratorTest > ( "Test" , "true" , @"// <autogenerated/>
123
+ await RunTest < CSGeneratorTest > ( string . Empty , "Test" , "true" , languageVersion == LanguageVersion . CSharp10 ? @"// <autogenerated/>
124
+
125
+ [assembly: GitInformationAttribute(""fbgtgretgtre"", ""vfdbttregter"", ""vsdfvfdsv"", typeof(Test<>))]
126
+ " : @"// <autogenerated/>
66
127
using Elskom.Generic.Libs;
67
128
68
129
[assembly: GitInformationAttribute(""fbgtgretgtre"", ""vfdbttregter"", ""vsdfvfdsv"", typeof(Test<>))]
@@ -72,18 +133,19 @@ internal static class Test<T>
72
133
internal static object Dummy()
73
134
=> null;
74
135
}
75
- }" , GetDiagnostics ( ) ) . ConfigureAwait ( false ) ;
136
+ }" , languageVersion , languageVersion == LanguageVersion . CSharp10 ? GetCSharp10Diagnostics ( "Test<>" ) : GetDiagnostics ( ) ) . ConfigureAwait ( false ) ;
76
137
}
77
138
78
139
[ Fact ]
79
140
public async Task TestGeneratingFailure ( )
80
141
{
81
142
await RunTest < CSGeneratorTest > (
143
+ string . Empty ,
82
144
string . Empty ,
83
145
"false" ,
84
146
string . Empty ,
85
147
string . Empty ,
86
- new List < DiagnosticResult >
148
+ expectedDiagnostics : new List < DiagnosticResult >
87
149
{
88
150
new DiagnosticResult ( GeneratorOptions . ValidationWarning ) . WithArguments ( "AssemblyType" ) ,
89
151
} ) . ConfigureAwait ( false ) ;
@@ -93,6 +155,7 @@ await RunTest<CSGeneratorTest>(
93
155
public async Task TestVBGeneratingAbort ( )
94
156
{
95
157
await RunTest < VBGeneratorTest > (
158
+ string . Empty ,
96
159
string . Empty ,
97
160
"false" ,
98
161
string . Empty ,
@@ -107,6 +170,15 @@ private static List<DiagnosticResult> GetDiagnostics(int startLine = 4, int star
107
170
DiagnosticResult . CompilerError ( "CS0246" ) . WithSpan ( generatedFile , startLine , startColumn , endLine , endColumn ) . WithArguments ( "GitInformationAttributeAttribute" ) ,
108
171
} ;
109
172
173
+ // these diagnostics must be ignored because the Elskom.GitInformation project was moved.
174
+ private static List < DiagnosticResult > GetCSharp10Diagnostics ( string argument , int startLine = 3 , int startColumn = 12 , int endLine = 3 , int endColumn = 35 , int otherEndColumn = 94 )
175
+ {
176
+ var expected = new List < DiagnosticResult > ( ) ;
177
+ expected . AddRange ( GetDiagnostics ( startLine , startColumn , endLine , endColumn ) ) ;
178
+ expected . Add ( DiagnosticResult . CompilerError ( "CS0246" ) . WithSpan ( generatedFile , startLine , 88 , endLine , otherEndColumn ) . WithArguments ( argument ) ) ;
179
+ return expected ;
180
+ }
181
+
110
182
// these diagnostics must be ignored because the Elskom.GitInformation project was moved.
111
183
private static List < DiagnosticResult > GetGenericDiagnostics ( )
112
184
{
@@ -119,14 +191,15 @@ private static List<DiagnosticResult> GetGenericDiagnostics()
119
191
return result ;
120
192
}
121
193
122
- private static async Task RunTest < TestType > ( string assemblyType , string isGeneric , string generatedSource ,
123
- string testSource , List < DiagnosticResult > ? expectedDiagnostics = null )
194
+ private static async Task RunTest < TestType > ( string rootNs , string assemblyType , string isGeneric , string generatedSource ,
195
+ string testSource , LanguageVersion languageVersion = LanguageVersion . CSharp9 , List < DiagnosticResult > ? expectedDiagnostics = null )
124
196
where TestType : SourceGeneratorTest < XUnitVerifier > , IGeneratorTestBase , new ( )
125
197
{
126
198
var test = new TestType
127
199
{
128
200
GlobalOptions =
129
201
{
202
+ ( "build_property.RootNamespace" , rootNs ) ,
130
203
( "build_property.GitBuildInfoAssemblyType" , assemblyType ) ,
131
204
( "build_property.GitBuildInfoIsGeneric" , isGeneric ) ,
132
205
( "build_property.GitHead" , "fbgtgretgtre" ) ,
@@ -147,8 +220,9 @@ private static async Task RunTest<TestType>(string assemblyType, string isGeneri
147
220
test . ExpectedDiagnostics . AddRange ( expectedDiagnostics ) ;
148
221
}
149
222
150
- if ( test is not VBGeneratorTest )
223
+ if ( test is CSGeneratorTest tst )
151
224
{
225
+ tst . LanguageVersion = languageVersion ;
152
226
test . TestState . GeneratedSources . Add (
153
227
( typeof ( SourceGenerator ) , "GitAssemblyInfo.g.cs" , generatedSource ) ) ;
154
228
}
0 commit comments