-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathR3CommandGeneratorTests.cs
More file actions
155 lines (130 loc) · 4.63 KB
/
Copy pathR3CommandGeneratorTests.cs
File metadata and controls
155 lines (130 loc) · 4.63 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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
using System.Threading.Tasks;
using Microsoft.CodeAnalysis;
using VerifyXunit;
using Xunit;
namespace MvvmAIO.R3.SourceGenerators.Tests;
public sealed class R3CommandGeneratorTests
{
[Fact]
public Task Generates_command_property_for_void_method_without_parameter()
{
const string source = """
namespace Demo;
public partial class ShellViewModel
{
[MvvmAIO.R3.R3Command]
private void Save()
{
}
}
""";
GeneratorRunOutput output = GeneratorTestHarness.Run(
source,
generators: new IIncrementalGenerator[] { new R3CommandGenerator() });
return Verifier.Verify(GeneratorTestHarness.ToSnapshot(output));
}
[Fact]
public void Generates_command_property_for_void_method_with_parameter()
{
const string source = """
namespace Demo;
public partial class ShellViewModel
{
[MvvmAIO.R3.R3Command]
private void Delete(int id)
{
}
}
""";
GeneratorRunOutput output = GeneratorTestHarness.Run(
source,
generators: new IIncrementalGenerator[] { new R3CommandGenerator() });
string snapshot = GeneratorTestHarness.ToSnapshot(output);
Assert.Contains("ReactiveCommand<int>", snapshot);
Assert.Contains("DeleteCommand", snapshot);
Assert.DoesNotContain("R3SG", snapshot.Split("Generated Sources:")[0]);
}
[Fact]
public void Generates_command_property_for_async_task_method()
{
const string source = """
namespace Demo;
public partial class ShellViewModel
{
[MvvmAIO.R3.R3Command]
private System.Threading.Tasks.Task SaveAsync()
{
return System.Threading.Tasks.Task.CompletedTask;
}
}
""";
GeneratorRunOutput output = GeneratorTestHarness.Run(
source,
generators: new IIncrementalGenerator[] { new R3CommandGenerator() });
string snapshot = GeneratorTestHarness.ToSnapshot(output);
Assert.Contains("ReactiveCommand", snapshot);
Assert.Contains("SaveAsyncCommand", snapshot);
Assert.Contains("ValueTask", snapshot);
Assert.DoesNotContain("R3SG", snapshot.Split("Generated Sources:")[0]);
}
[Fact]
public void Generates_command_property_for_async_task_of_T_method()
{
const string source = """
namespace Demo;
public partial class ShellViewModel
{
[MvvmAIO.R3.R3Command]
private System.Threading.Tasks.Task<string> FetchData(int pageIndex)
{
return System.Threading.Tasks.Task.FromResult("data");
}
}
""";
GeneratorRunOutput output = GeneratorTestHarness.Run(
source,
generators: new IIncrementalGenerator[] { new R3CommandGenerator() });
string snapshot = GeneratorTestHarness.ToSnapshot(output);
Assert.Contains("ReactiveCommand<int, string>", snapshot);
Assert.Contains("FetchDataCommand", snapshot);
Assert.DoesNotContain("R3SG", snapshot.Split("Generated Sources:")[0]);
}
[Fact]
public void Supports_custom_command_name()
{
const string source = """
namespace Demo;
public partial class ShellViewModel
{
[MvvmAIO.R3.R3Command(CommandName = "Submit")]
private void Save()
{
}
}
""";
GeneratorRunOutput output = GeneratorTestHarness.Run(
source,
generators: new IIncrementalGenerator[] { new R3CommandGenerator() });
string snapshot = GeneratorTestHarness.ToSnapshot(output);
Assert.Contains("Submit", snapshot);
Assert.DoesNotContain("SaveCommand", snapshot);
}
[Fact]
public Task Reports_diagnostic_when_containing_type_is_not_partial()
{
const string source = """
namespace Demo;
public class ShellViewModel
{
[MvvmAIO.R3.R3Command]
private void Save()
{
}
}
""";
GeneratorRunOutput output = GeneratorTestHarness.Run(
source,
generators: new IIncrementalGenerator[] { new R3CommandGenerator() });
return Verifier.Verify(GeneratorTestHarness.ToSnapshot(output));
}
}