14
14
using System . Threading . Tasks ;
15
15
using CommunityToolkit . Mvvm . SourceGenerators . UnitTests . Helpers ;
16
16
using System . Text . RegularExpressions ;
17
+ using Microsoft . CodeAnalysis . Diagnostics ;
17
18
18
19
namespace CommunityToolkit . Mvvm . SourceGenerators . UnitTests ;
19
20
@@ -247,7 +248,7 @@ public partial class {|MVVMTK0008:SampleViewModel|}
247
248
}
248
249
}" ;
249
250
250
- await VerifyUnsupportedCSharpVersionAndSuccessfulGeneration ( source ) ;
251
+ await VerifyAnalyzerDiagnosticsAndSuccessfulGeneration < UnsupportedCSharpLanguageVersionAnalyzer > ( source , LanguageVersion . CSharp7_3 ) ;
251
252
}
252
253
253
254
[ TestMethod ]
@@ -264,7 +265,7 @@ public partial class {|MVVMTK0008:SampleViewModel|}
264
265
}
265
266
}" ;
266
267
267
- await VerifyUnsupportedCSharpVersionAndSuccessfulGeneration ( source ) ;
268
+ await VerifyAnalyzerDiagnosticsAndSuccessfulGeneration < UnsupportedCSharpLanguageVersionAnalyzer > ( source , LanguageVersion . CSharp7_3 ) ;
268
269
}
269
270
270
271
[ TestMethod ]
@@ -283,7 +284,7 @@ public partial class {|MVVMTK0008:SampleViewModel|}
283
284
}
284
285
}" ;
285
286
286
- await VerifyUnsupportedCSharpVersionAndSuccessfulGeneration ( source ) ;
287
+ await VerifyAnalyzerDiagnosticsAndSuccessfulGeneration < UnsupportedCSharpLanguageVersionAnalyzer > ( source , LanguageVersion . CSharp7_3 ) ;
287
288
}
288
289
289
290
[ TestMethod ]
@@ -308,7 +309,7 @@ public partial class {|MVVMTK0008:SampleViewModel|}
308
309
}
309
310
}" ;
310
311
311
- await VerifyUnsupportedCSharpVersionAndSuccessfulGeneration ( source ) ;
312
+ await VerifyAnalyzerDiagnosticsAndSuccessfulGeneration < UnsupportedCSharpLanguageVersionAnalyzer > ( source , LanguageVersion . CSharp7_3 ) ;
312
313
}
313
314
314
315
[ TestMethod ]
@@ -327,7 +328,7 @@ public partial class SampleViewModel : ObservableValidator
327
328
}
328
329
}" ;
329
330
330
- await VerifyUnsupportedCSharpVersionAndSuccessfulGeneration ( source ) ;
331
+ await VerifyAnalyzerDiagnosticsAndSuccessfulGeneration < UnsupportedCSharpLanguageVersionAnalyzer > ( source , LanguageVersion . CSharp7_3 ) ;
331
332
}
332
333
333
334
[ TestMethod ]
@@ -347,7 +348,7 @@ public partial class SampleViewModel
347
348
}
348
349
}" ;
349
350
350
- await VerifyUnsupportedCSharpVersionAndSuccessfulGeneration ( source ) ;
351
+ await VerifyAnalyzerDiagnosticsAndSuccessfulGeneration < UnsupportedCSharpLanguageVersionAnalyzer > ( source , LanguageVersion . CSharp7_3 ) ;
351
352
}
352
353
353
354
[ TestMethod ]
@@ -370,7 +371,7 @@ public void Receive(MyMessage message)
370
371
}
371
372
}" ;
372
373
373
- await VerifyUnsupportedCSharpVersionAndSuccessfulGeneration ( source ) ;
374
+ await VerifyAnalyzerDiagnosticsAndSuccessfulGeneration < UnsupportedCSharpLanguageVersionAnalyzer > ( source , LanguageVersion . CSharp7_3 ) ;
374
375
}
375
376
376
377
[ TestMethod ]
@@ -980,7 +981,7 @@ public partial class MyViewModel : INotifyPropertyChanged
980
981
}
981
982
982
983
[ TestMethod ]
983
- public void FieldWithOrphanedDependentObservablePropertyAttributesError_NotifyPropertyChangedFor ( )
984
+ public async Task FieldWithOrphanedDependentObservablePropertyAttributesError_NotifyPropertyChangedFor ( )
984
985
{
985
986
string source = @"
986
987
using CommunityToolkit.Mvvm.ComponentModel;
@@ -989,16 +990,16 @@ namespace MyApp
989
990
{
990
991
public partial class MyViewModel
991
992
{
992
- [NotifyPropertyChangedFor("")]
993
- public int number;
993
+ [NotifyPropertyChangedFor("""" )]
994
+ public int {|MVVMTK0020: number|} ;
994
995
}
995
996
}" ;
996
997
997
- VerifyGeneratedDiagnostics < ObservablePropertyGenerator > ( source , "MVVMTK0020" ) ;
998
+ await VerifyAnalyzerDiagnosticsAndSuccessfulGeneration < FieldWithOrphanedDependentObservablePropertyAttributesAnalyzer > ( source , LanguageVersion . CSharp8 ) ;
998
999
}
999
1000
1000
1001
[ TestMethod ]
1001
- public void FieldWithOrphanedDependentObservablePropertyAttributesError_NotifyCanExecuteChangedFor ( )
1002
+ public async Task FieldWithOrphanedDependentObservablePropertyAttributesError_NotifyCanExecuteChangedFor ( )
1002
1003
{
1003
1004
string source = @"
1004
1005
using CommunityToolkit.Mvvm.ComponentModel;
@@ -1007,16 +1008,16 @@ namespace MyApp
1007
1008
{
1008
1009
public partial class MyViewModel
1009
1010
{
1010
- [NotifyCanExecuteChangedFor("")]
1011
- public int number;
1011
+ [NotifyCanExecuteChangedFor("""" )]
1012
+ public int {|MVVMTK0020: number|} ;
1012
1013
}
1013
1014
}" ;
1014
1015
1015
- VerifyGeneratedDiagnostics < ObservablePropertyGenerator > ( source , "MVVMTK0020" ) ;
1016
+ await VerifyAnalyzerDiagnosticsAndSuccessfulGeneration < FieldWithOrphanedDependentObservablePropertyAttributesAnalyzer > ( source , LanguageVersion . CSharp8 ) ;
1016
1017
}
1017
1018
1018
1019
[ TestMethod ]
1019
- public void FieldWithOrphanedDependentObservablePropertyAttributesError_NotifyPropertyChangedRecipients ( )
1020
+ public async Task FieldWithOrphanedDependentObservablePropertyAttributesError_NotifyPropertyChangedRecipients ( )
1020
1021
{
1021
1022
string source = @"
1022
1023
using CommunityToolkit.Mvvm.ComponentModel;
@@ -1026,15 +1027,15 @@ namespace MyApp
1026
1027
public partial class MyViewModel
1027
1028
{
1028
1029
[NotifyPropertyChangedRecipients]
1029
- public int number;
1030
+ public int {|MVVMTK0020: number|} ;
1030
1031
}
1031
1032
}" ;
1032
1033
1033
- VerifyGeneratedDiagnostics < ObservablePropertyGenerator > ( source , "MVVMTK0020" ) ;
1034
+ await VerifyAnalyzerDiagnosticsAndSuccessfulGeneration < FieldWithOrphanedDependentObservablePropertyAttributesAnalyzer > ( source , LanguageVersion . CSharp8 ) ;
1034
1035
}
1035
1036
1036
1037
[ TestMethod ]
1037
- public void FieldWithOrphanedDependentObservablePropertyAttributesError_MultipleUsesStillGenerateOnlyASingleDiagnostic ( )
1038
+ public async Task FieldWithOrphanedDependentObservablePropertyAttributesError_MultipleUsesStillGenerateOnlyASingleDiagnostic ( )
1038
1039
{
1039
1040
string source = @"
1040
1041
using CommunityToolkit.Mvvm.ComponentModel;
@@ -1043,17 +1044,17 @@ namespace MyApp
1043
1044
{
1044
1045
public partial class MyViewModel
1045
1046
{
1046
- [NotifyPropertyChangedFor("")]
1047
- [NotifyPropertyChangedFor("")]
1048
- [NotifyPropertyChangedFor("")]
1049
- [NotifyCanExecuteChangedFor("")]
1050
- [NotifyCanExecuteChangedFor("")]
1047
+ [NotifyPropertyChangedFor("""" )]
1048
+ [NotifyPropertyChangedFor("""" )]
1049
+ [NotifyPropertyChangedFor("""" )]
1050
+ [NotifyCanExecuteChangedFor("""" )]
1051
+ [NotifyCanExecuteChangedFor("""" )]
1051
1052
[NotifyPropertyChangedRecipients]
1052
- public int number;
1053
+ public int {|MVVMTK0020: number|} ;
1053
1054
}
1054
1055
}" ;
1055
1056
1056
- VerifyGeneratedDiagnostics < ObservablePropertyGenerator > ( source , "MVVMTK0020" ) ;
1057
+ await VerifyAnalyzerDiagnosticsAndSuccessfulGeneration < FieldWithOrphanedDependentObservablePropertyAttributesAnalyzer > ( source , LanguageVersion . CSharp8 ) ;
1057
1058
}
1058
1059
1059
1060
[ TestMethod ]
@@ -1428,12 +1429,15 @@ private void GreetUser(User user)
1428
1429
}
1429
1430
1430
1431
/// <summary>
1431
- /// Verifies the diagnostic error for unsupported C# version , and that all available source generators can run successfully with the input source (including subsequent compilation).
1432
+ /// Verifies the diagnostic errors for a given analyzer , and that all available source generators can run successfully with the input source (including subsequent compilation).
1432
1433
/// </summary>
1434
+ /// <typeparam name="TAnalyzer">The type of the analyzer to test.</typeparam>
1433
1435
/// <param name="markdownSource">The input source to process with diagnostic annotations.</param>
1434
- private static async Task VerifyUnsupportedCSharpVersionAndSuccessfulGeneration ( string markdownSource )
1436
+ /// <param name="languageVersion">The language version to use to parse code and run tests.</param>
1437
+ private static async Task VerifyAnalyzerDiagnosticsAndSuccessfulGeneration < TAnalyzer > ( string markdownSource , LanguageVersion languageVersion )
1438
+ where TAnalyzer : DiagnosticAnalyzer , new ( )
1435
1439
{
1436
- await CSharpAnalyzerWithLanguageVersionTest < UnsupportedCSharpLanguageVersionAnalyzer > . VerifyAnalyzerAsync ( markdownSource , LanguageVersion . CSharp7_3 ) ;
1440
+ await CSharpAnalyzerWithLanguageVersionTest < TAnalyzer > . VerifyAnalyzerAsync ( markdownSource , languageVersion ) ;
1437
1441
1438
1442
IIncrementalGenerator [ ] generators =
1439
1443
{
@@ -1450,7 +1454,7 @@ private static async Task VerifyUnsupportedCSharpVersionAndSuccessfulGeneration(
1450
1454
// Transform diagnostic annotations back to normal C# (eg. "{|MVVMTK0008:Foo()|}" ---> "Foo()")
1451
1455
string source = Regex . Replace ( markdownSource , @"{\|((?:,?\w+)+):(.+)\|}" , m => m . Groups [ 2 ] . Value ) ;
1452
1456
1453
- VerifyGeneratedDiagnostics ( CSharpSyntaxTree . ParseText ( source , CSharpParseOptions . Default . WithLanguageVersion ( LanguageVersion . CSharp7_3 ) ) , generators , Array . Empty < string > ( ) ) ;
1457
+ VerifyGeneratedDiagnostics ( CSharpSyntaxTree . ParseText ( source , CSharpParseOptions . Default . WithLanguageVersion ( languageVersion ) ) , generators , Array . Empty < string > ( ) ) ;
1454
1458
}
1455
1459
1456
1460
/// <summary>
0 commit comments