-
Notifications
You must be signed in to change notification settings - Fork 19
Expand file tree
/
Copy pathToolkitSampleMetadataTests.Documentation.cs
More file actions
316 lines (271 loc) · 10.9 KB
/
ToolkitSampleMetadataTests.Documentation.cs
File metadata and controls
316 lines (271 loc) · 10.9 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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
using CommunityToolkit.Tooling.SampleGen.Diagnostics;
using CommunityToolkit.Tooling.SampleGen.Tests.Helpers;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace CommunityToolkit.Tooling.SampleGen.Tests;
public partial class ToolkitSampleMetadataTests
{
// We currently need at least one sample to test the document registry, so we'll have this for the base cases to share.
private static readonly string SimpleSource = """
using System.ComponentModel;
using CommunityToolkit.Tooling.SampleGen;
using CommunityToolkit.Tooling.SampleGen.Attributes;
namespace MyApp
{
[ToolkitSample(id: nameof(Sample), "Test Sample", description: "")]
public partial class Sample : Windows.UI.Xaml.Controls.UserControl
{
}
}
namespace Windows.UI.Xaml.Controls
{
public class UserControl { }
}
""";
private static readonly string EmptySource = """
namespace MyApp
{
public class MyClass { }
}
""";
[TestMethod]
public void MissingFrontMatterSection()
{
string markdown = @"
# This is some test documentation...
Without any front matter.
";
var result = SimpleSource.RunSourceGenerator<ToolkitSampleMetadataGenerator>(SAMPLE_ASM_NAME, markdown);
result.AssertNoCompilationErrors();
result.AssertDiagnosticsAre(DiagnosticDescriptors.MarkdownYAMLFrontMatterException, DiagnosticDescriptors.SampleNotReferencedInMarkdown);
}
[DataRow(1, DisplayName = "Title")]
[DataRow(3, DisplayName = "Description")]
[DataRow(4, DisplayName = "Keywords")]
[DataRow(7, DisplayName = "Category")]
[DataRow(8, DisplayName = "Subcategory")]
[DataRow(9, DisplayName = "GitHub Discussion Id")]
[DataRow(10, DisplayName = "GitHub Issue Id")]
[DataRow(10, DisplayName = "Icon")]
[TestMethod]
public void MissingFrontMatterField(int removeline)
{
string markdown = @"---
title: Canvas Layout
author: mhawker
description: A canvas-like VirtualizingLayout for use in an ItemsRepeater
keywords: CanvasLayout, ItemsRepeater, VirtualizingLayout, Canvas, Layout, Panel, Arrange
dev_langs:
- csharp
category: Controls
subcategory: Layout
discussion-id: 0
issue-id: 0
icon: assets/icon.png
---
# This is some test documentation...
> [!SAMPLE Sample]
Without any front matter.";
// Remove the field we want to test is missing.
var lines = markdown.Split('\n').ToList();
lines.RemoveAt(removeline);
markdown = String.Join('\n', lines);
var result = SimpleSource.RunSourceGenerator<ToolkitSampleMetadataGenerator>(SAMPLE_ASM_NAME, markdown);
// We won't see the sample reference as we bail out when the front matter fails to be complete
result.AssertNoCompilationErrors();
result.AssertDiagnosticsAre(DiagnosticDescriptors.MarkdownYAMLFrontMatterMissingField, DiagnosticDescriptors.SampleNotReferencedInMarkdown);
}
[TestMethod]
public void MarkdownInvalidSampleReference()
{
string markdown = @"---
title: Canvas Layout
author: mhawker
description: A canvas-like VirtualizingLayout for use in an ItemsRepeater
keywords: CanvasLayout, ItemsRepeater, VirtualizingLayout, Canvas, Layout, Panel, Arrange
dev_langs:
- csharp
category: Controls
subcategory: Layout
discussion-id: 0
issue-id: 0
icon: assets/icon.png
---
# This is some test documentation...
> [!SAMPLE SampINVALIDle]
Without any front matter.
";
var result = SimpleSource.RunSourceGenerator<ToolkitSampleMetadataGenerator>(SAMPLE_ASM_NAME, markdown);
result.AssertNoCompilationErrors();
result.AssertDiagnosticsAre(DiagnosticDescriptors.MarkdownSampleIdNotFound, DiagnosticDescriptors.SampleNotReferencedInMarkdown);
}
[TestMethod]
public void DocumentationMissingSample()
{
string markdown = @"---
title: Canvas Layout
author: mhawker
description: A canvas-like VirtualizingLayout for use in an ItemsRepeater
keywords: CanvasLayout, ItemsRepeater, VirtualizingLayout, Canvas, Layout, Panel, Arrange
dev_langs:
- csharp
category: Controls
subcategory: Layout
discussion-id: 0
issue-id: 0
icon: assets/icon.png
---
# This is some test documentation...
Without any sample.";
var result = SimpleSource.RunSourceGenerator<ToolkitSampleMetadataGenerator>(SAMPLE_ASM_NAME, markdown);
result.AssertNoCompilationErrors();
result.AssertDiagnosticsAre(DiagnosticDescriptors.DocumentationHasNoSamples, DiagnosticDescriptors.SampleNotReferencedInMarkdown);
}
[TestMethod]
public void DocumentationValidNoDiagnostics()
{
string markdown = @"---
title: Canvas Layout
author: mhawker
description: A canvas-like VirtualizingLayout for use in an ItemsRepeater
keywords: CanvasLayout, ItemsRepeater, VirtualizingLayout, Canvas, Layout, Panel, Arrange
dev_langs:
- csharp
category: Controls
subcategory: Layout
discussion-id: 0
issue-id: 0
icon: assets/icon.png
---
# This is some test documentation...
Which is valid.
> [!SAMPLE Sample]";
var result = SimpleSource.RunSourceGenerator<ToolkitSampleMetadataGenerator>(SAMPLE_ASM_NAME, markdown);
result.AssertNoCompilationErrors();
result.AssertDiagnosticsAre();
}
[TestMethod]
public void DocumentationInvalidDiscussionId()
{
string markdown = @"---
title: Canvas Layout
author: mhawker
description: A canvas-like VirtualizingLayout for use in an ItemsRepeater
keywords: CanvasLayout, ItemsRepeater, VirtualizingLayout, Canvas, Layout, Panel, Arrange
dev_langs:
- csharp
category: Controls
subcategory: Layout
discussion-id: https://github.com/1234
issue-id: 0
icon: assets/icon.png
---
# This is some test documentation...
Without an invalid discussion-id.";
var result = EmptySource.RunSourceGenerator<ToolkitSampleMetadataGenerator>(SAMPLE_ASM_NAME, markdown);
result.AssertNoCompilationErrors();
result.AssertDiagnosticsAre(DiagnosticDescriptors.MarkdownYAMLFrontMatterException, DiagnosticDescriptors.DocumentationHasNoSamples);
var diag = result.Diagnostics.First((d) => d.Descriptor == DiagnosticDescriptors.MarkdownYAMLFrontMatterException);
Assert.IsTrue(diag.GetMessage().Contains("discussion-id"));
}
[TestMethod]
public void DocumentationInvalidIssueId()
{
string markdown = @"---
title: Canvas Layout
author: mhawker
description: A canvas-like VirtualizingLayout for use in an ItemsRepeater
keywords: CanvasLayout, ItemsRepeater, VirtualizingLayout, Canvas, Layout, Panel, Arrange
dev_langs:
- csharp
category: Controls
subcategory: Layout
discussion-id: 0
issue-id: https://github.com/1234
icon: assets/icon.png
---
# This is some test documentation...
Without an invalid issue-id.";
var result = EmptySource.RunSourceGenerator<ToolkitSampleMetadataGenerator>(SAMPLE_ASM_NAME, markdown);
result.AssertNoCompilationErrors();
result.AssertDiagnosticsAre(DiagnosticDescriptors.MarkdownYAMLFrontMatterException, DiagnosticDescriptors.DocumentationHasNoSamples);
var diag = result.Diagnostics.First((d) => d.Descriptor == DiagnosticDescriptors.MarkdownYAMLFrontMatterException);
Assert.IsTrue(diag.GetMessage().Contains("issue-id"));
}
[TestMethod]
public void DocumentationInvalidIsExperimental()
{
string markdown = @"---
title: Canvas Layout
author: mhawker
description: A canvas-like VirtualizingLayout for use in an ItemsRepeater
keywords: CanvasLayout, ItemsRepeater, VirtualizingLayout, Canvas, Layout, Panel, Arrange
dev_langs:
- csharp
category: Controls
subcategory: Layout
discussion-id: 0
issue-id: 0
icon: assets/icon.png
experimental: No
---
# This is some test documentation...
Without an invalid experimental value.";
var result = EmptySource.RunSourceGenerator<ToolkitSampleMetadataGenerator>(SAMPLE_ASM_NAME, markdown);
result.AssertNoCompilationErrors();
result.AssertDiagnosticsAre(DiagnosticDescriptors.MarkdownYAMLFrontMatterException, DiagnosticDescriptors.DocumentationHasNoSamples);
var diag = result.Diagnostics.First((d) => d.Descriptor == DiagnosticDescriptors.MarkdownYAMLFrontMatterException);
Assert.IsTrue(diag.GetMessage().Contains("experimental"));
}
[TestMethod]
public void DocumentationValidWithRegistry()
{
string markdown = @"---
title: Canvas Layout
author: mhawker
description: A canvas-like VirtualizingLayout for use in an ItemsRepeater
keywords: CanvasLayout, ItemsRepeater, VirtualizingLayout, Canvas, Layout, Panel, Arrange
dev_langs:
- csharp
category: Controls
subcategory: Layout
discussion-id: 0
issue-id: 0
icon: assets\icon.png
experimental: true
---
# This is some test documentation...
Which is valid.
> [!SAMPLE Sample]";
string csproj = """
<Project>
<Import Project="$([MSBuild]::GetPathOfFileAbove(Directory.Build.props))" Condition="Exists('$([MSBuild]::GetPathOfFileAbove(Directory.Build.props))')" />
<PropertyGroup>
<ToolkitComponentName>Primitives</ToolkitComponentName>
</PropertyGroup>
</Project>
""";
var sampleProjectAssembly = SimpleSource.ToSyntaxTree()
.CreateCompilation("MyApp.Samples")
.ToMetadataReference();
var headCompilation = string.Empty
.ToSyntaxTree()
.CreateCompilation("MyApp.Head")
.AddReferences(sampleProjectAssembly);
var result = headCompilation.RunSourceGenerator<ToolkitSampleMetadataGenerator>(markdown, csproj);
result.AssertNoCompilationErrors();
Assert.AreEqual("""
#nullable enable
namespace CommunityToolkit.Tooling.SampleGen;
public static class ToolkitDocumentRegistry
{
public static System.Collections.Generic.IEnumerable<CommunityToolkit.Tooling.SampleGen.Metadata.ToolkitFrontMatter> Execute()
{
yield return new CommunityToolkit.Tooling.SampleGen.Metadata.ToolkitFrontMatter() { ComponentName = "Primitives", Title = "Canvas Layout", Author = "mhawker", Description = "A canvas-like VirtualizingLayout for use in an ItemsRepeater", Keywords = "CanvasLayout, ItemsRepeater, VirtualizingLayout, Canvas, Layout, Panel, Arrange", Category = ToolkitSampleCategory.Controls, Subcategory = ToolkitSampleSubcategory.Layout, DiscussionId = 0, IssueId = 0, Icon = @"assets/icon.png", FilePath = @"experiment\samples\documentation.md", SampleIdReferences = new string[] { "Sample" }, IsExperimental = true, CsProjName = @"componentname.csproj" };
}
}
""", result.Compilation.GetFileContentsByName("ToolkitDocumentRegistry.g.cs"), "Unexpected code generated");
}
}