forked from thomhurst/TUnit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAssertionMethodGeneratorIncrementalTests.cs
More file actions
114 lines (96 loc) · 4.17 KB
/
Copy pathAssertionMethodGeneratorIncrementalTests.cs
File metadata and controls
114 lines (96 loc) · 4.17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
using Microsoft.CodeAnalysis.CSharp;
namespace TUnit.Assertions.SourceGenerator.IncrementalTests;
public class AssertionMethodGeneratorIncrementalTests
{
private const string DefaultAssertion =
"""
#nullable enabled
using System.ComponentModel;
using TUnit.Assertions.Attributes;
public static partial class IntAssertionExtensions
{
[GenerateAssertion(ExpectationMessage = "to be positive")]
public static bool IsPositive(this int value)
{
return value > 0;
}
public static bool IsNegative(this int value)
{
return value < 0;
}
}
""";
[Fact]
public void AddUnrelatedMethodShouldNotRegenerate()
{
var syntaxTree = CSharpSyntaxTree.ParseText(DefaultAssertion, CSharpParseOptions.Default);
var compilation1 = Fixture.CreateLibrary(syntaxTree);
var driver1 = TestHelper.GenerateTracked(compilation1);
TestHelper.AssertRunReasons(driver1, IncrementalGeneratorRunReasons.New);
var compilation2 = compilation1.AddSyntaxTrees(CSharpSyntaxTree.ParseText("struct MyValue {}"));
var driver2 = driver1.RunGenerators(compilation2);
TestHelper.AssertRunReasons(driver2, IncrementalGeneratorRunReasons.Cached);
}
[Fact]
public void AddNewTypeAssertionShouldRegenerate()
{
var syntaxTree = CSharpSyntaxTree.ParseText(DefaultAssertion, CSharpParseOptions.Default);
var compilation1 = Fixture.CreateLibrary(syntaxTree);
var driver1 = TestHelper.GenerateTracked(compilation1);
TestHelper.AssertRunReasons(driver1, IncrementalGeneratorRunReasons.New);
var compilation2 = compilation1.AddSyntaxTrees(CSharpSyntaxTree.ParseText(
"""
using TUnit.Assertions.Attributes;
public static partial class LongAssertionExtensions
{
[GenerateAssertion(ExpectationMessage = "to be positive")]
public static bool IsPositive(this long value)
{
return value > 0;
}
}
"""));
var driver2 = driver1.RunGenerators(compilation2);
TestHelper.AssertRunReasons(driver2, IncrementalGeneratorRunReasons.Cached, 0);
TestHelper.AssertRunReasons(driver2, IncrementalGeneratorRunReasons.New, 1);
}
[Fact]
public void AddNewSameTypeAssertionShouldRegenerate()
{
var syntaxTree = CSharpSyntaxTree.ParseText(DefaultAssertion, CSharpParseOptions.Default);
var compilation1 = Fixture.CreateLibrary(syntaxTree);
var driver1 = TestHelper.GenerateTracked(compilation1);
TestHelper.AssertRunReasons(driver1, IncrementalGeneratorRunReasons.New);
var compilation2 = TestHelper.ReplaceMethodDeclaration(compilation1, "IsNegative",
"""
[GenerateAssertion(ExpectationMessage = "to be less than zero")]
public static bool IsNegative(this int value)
{
return value < 0;
}
"""
);
var driver2 = driver1.RunGenerators(compilation2);
TestHelper.AssertRunReasons(driver2, IncrementalGeneratorRunReasons.Cached, 0);
TestHelper.AssertRunReasons(driver2, IncrementalGeneratorRunReasons.New, 1);
}
[Fact]
public void ModifyMessageShouldRegenerate()
{
var syntaxTree = CSharpSyntaxTree.ParseText(DefaultAssertion, CSharpParseOptions.Default);
var compilation1 = Fixture.CreateLibrary(syntaxTree);
var driver1 = TestHelper.GenerateTracked(compilation1);
TestHelper.AssertRunReasons(driver1, IncrementalGeneratorRunReasons.New);
var compilation2 = TestHelper.ReplaceMethodDeclaration(compilation1, "IsPositive",
"""
[GenerateAssertion(ExpectationMessage = "to be more than zero")]
public static bool IsPositive(this int value)
{
return value > 0;
}
"""
);
var driver2 = driver1.RunGenerators(compilation2);
TestHelper.AssertRunReasons(driver2, IncrementalGeneratorRunReasons.Modified);
}
}