Skip to content

Commit 7c6eeb6

Browse files
committed
Add unit tests for new analyzer
1 parent fc42924 commit 7c6eeb6

File tree

1 file changed

+206
-0
lines changed

1 file changed

+206
-0
lines changed

tests/CommunityToolkit.Mvvm.SourceGenerators.Roslyn4120.UnitTests/Test_SourceGeneratorsDiagnostics.cs

Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1243,4 +1243,210 @@ public unsafe partial class SampleViewModel : ObservableObject
12431243

12441244
await CSharpAnalyzerWithLanguageVersionTest<InvalidPointerTypeObservablePropertyAttributeAnalyzer>.VerifyAnalyzerAsync(source, LanguageVersion.Preview);
12451245
}
1246+
1247+
[TestMethod]
1248+
public async Task UseObservablePropertyOnSemiAutoPropertyAnalyzer_NormalProperty_DoesNotWarn()
1249+
{
1250+
const string source = """
1251+
using CommunityToolkit.Mvvm.ComponentModel;
1252+
1253+
namespace MyApp;
1254+
1255+
public partial class SampleViewModel : ObservableObject
1256+
{
1257+
public string Name { get; set; }
1258+
}
1259+
""";
1260+
1261+
await CSharpAnalyzerWithLanguageVersionTest<UseObservablePropertyOnSemiAutoPropertyAnalyzer>.VerifyAnalyzerAsync(source, LanguageVersion.Preview);
1262+
}
1263+
1264+
[TestMethod]
1265+
public async Task UseObservablePropertyOnSemiAutoPropertyAnalyzer_SimilarProperty_NotObservableObject_DoesNotWarn()
1266+
{
1267+
const string source = """
1268+
using CommunityToolkit.Mvvm.ComponentModel;
1269+
1270+
namespace MyApp;
1271+
1272+
public partial class SampleViewModel : MyBaseViewModel
1273+
{
1274+
public string Name
1275+
{
1276+
get => field;
1277+
set => SetProperty(ref field, value);
1278+
}
1279+
}
1280+
1281+
public abstract class MyBaseViewModel
1282+
{
1283+
protected void SetProperty<T>(ref T location, T value, string propertyName = null)
1284+
{
1285+
}
1286+
}
1287+
""";
1288+
1289+
await CSharpAnalyzerWithLanguageVersionTest<UseObservablePropertyOnSemiAutoPropertyAnalyzer>.VerifyAnalyzerAsync(source, LanguageVersion.Preview);
1290+
}
1291+
1292+
[TestMethod]
1293+
public async Task UseObservablePropertyOnSemiAutoPropertyAnalyzer_NoGetter_DoesNotWarn()
1294+
{
1295+
const string source = """
1296+
using CommunityToolkit.Mvvm.ComponentModel;
1297+
1298+
namespace MyApp;
1299+
1300+
public partial class SampleViewModel : ObservableObject
1301+
{
1302+
public string Name
1303+
{
1304+
set => SetProperty(ref field, value);
1305+
}
1306+
}
1307+
""";
1308+
1309+
await CSharpAnalyzerWithLanguageVersionTest<UseObservablePropertyOnSemiAutoPropertyAnalyzer>.VerifyAnalyzerAsync(source, LanguageVersion.Preview);
1310+
}
1311+
1312+
[TestMethod]
1313+
public async Task UseObservablePropertyOnSemiAutoPropertyAnalyzer_NoSetter_DoesNotWarn()
1314+
{
1315+
const string source = """
1316+
using CommunityToolkit.Mvvm.ComponentModel;
1317+
1318+
namespace MyApp;
1319+
1320+
public partial class SampleViewModel : ObservableObject
1321+
{
1322+
public string Name
1323+
{
1324+
get => field;
1325+
}
1326+
}
1327+
""";
1328+
1329+
await CSharpAnalyzerWithLanguageVersionTest<UseObservablePropertyOnSemiAutoPropertyAnalyzer>.VerifyAnalyzerAsync(source, LanguageVersion.Preview);
1330+
}
1331+
1332+
[TestMethod]
1333+
public async Task UseObservablePropertyOnSemiAutoPropertyAnalyzer_OtherLocation_DoesNotWarn()
1334+
{
1335+
const string source = """
1336+
using CommunityToolkit.Mvvm.ComponentModel;
1337+
1338+
namespace MyApp;
1339+
1340+
public partial class SampleViewModel : ObservableObject
1341+
{
1342+
public string Name
1343+
{
1344+
get => field;
1345+
set
1346+
{
1347+
string test = field;
1348+
1349+
SetProperty(ref test, value);
1350+
}
1351+
}
1352+
}
1353+
""";
1354+
1355+
await CSharpAnalyzerWithLanguageVersionTest<UseObservablePropertyOnSemiAutoPropertyAnalyzer>.VerifyAnalyzerAsync(source, LanguageVersion.Preview);
1356+
}
1357+
1358+
[TestMethod]
1359+
public async Task UseObservablePropertyOnSemiAutoPropertyAnalyzer_OtherValue_DoesNotWarn()
1360+
{
1361+
const string source = """
1362+
using CommunityToolkit.Mvvm.ComponentModel;
1363+
1364+
namespace MyApp;
1365+
1366+
public partial class SampleViewModel : ObservableObject
1367+
{
1368+
public string Name
1369+
{
1370+
get => field;
1371+
set
1372+
{
1373+
string test = "Bob";
1374+
1375+
SetProperty(ref field, test);
1376+
}
1377+
}
1378+
}
1379+
""";
1380+
1381+
await CSharpAnalyzerWithLanguageVersionTest<UseObservablePropertyOnSemiAutoPropertyAnalyzer>.VerifyAnalyzerAsync(source, LanguageVersion.Preview);
1382+
}
1383+
1384+
[TestMethod]
1385+
public async Task UseObservablePropertyOnSemiAutoPropertyAnalyzer_ValidProperty_Warns()
1386+
{
1387+
const string source = """
1388+
using CommunityToolkit.Mvvm.ComponentModel;
1389+
1390+
namespace MyApp;
1391+
1392+
public partial class SampleViewModel : ObservableObject
1393+
{
1394+
public string {|MVVMTK0056:Name|}
1395+
{
1396+
get => field;
1397+
set => SetProperty(ref field, value);
1398+
}
1399+
}
1400+
""";
1401+
1402+
await CSharpAnalyzerWithLanguageVersionTest<UseObservablePropertyOnSemiAutoPropertyAnalyzer>.VerifyAnalyzerAsync(source, LanguageVersion.Preview);
1403+
}
1404+
1405+
[TestMethod]
1406+
public async Task UseObservablePropertyOnSemiAutoPropertyAnalyzer_ValidProperty_WithModifiers_Warns()
1407+
{
1408+
const string source = """
1409+
using CommunityToolkit.Mvvm.ComponentModel;
1410+
1411+
namespace MyApp;
1412+
1413+
public partial class SampleViewModel : ObservableObject
1414+
{
1415+
public new string {|MVVMTK0056:Name|}
1416+
{
1417+
get => field;
1418+
private set => SetProperty(ref field, value);
1419+
}
1420+
}
1421+
""";
1422+
1423+
await CSharpAnalyzerWithLanguageVersionTest<UseObservablePropertyOnSemiAutoPropertyAnalyzer>.VerifyAnalyzerAsync(source, LanguageVersion.Preview);
1424+
}
1425+
1426+
[TestMethod]
1427+
public async Task UseObservablePropertyOnSemiAutoPropertyAnalyzer_ValidProperty_WithBlocks_Warns()
1428+
{
1429+
const string source = """
1430+
using CommunityToolkit.Mvvm.ComponentModel;
1431+
1432+
namespace MyApp;
1433+
1434+
public partial class SampleViewModel : ObservableObject
1435+
{
1436+
public new string {|MVVMTK0056:Name|}
1437+
{
1438+
get
1439+
{
1440+
return field;
1441+
}
1442+
private set
1443+
{
1444+
SetProperty(ref field, value);
1445+
}
1446+
}
1447+
}
1448+
""";
1449+
1450+
await CSharpAnalyzerWithLanguageVersionTest<UseObservablePropertyOnSemiAutoPropertyAnalyzer>.VerifyAnalyzerAsync(source, LanguageVersion.Preview);
1451+
}
12461452
}

0 commit comments

Comments
 (0)