Skip to content

Commit 5553311

Browse files
Merge pull request #16 from wdcossey/wdcossey-async-methods
Added Async() methods.
2 parents b8649fa + 03cbb06 commit 5553311

9 files changed

+389
-29
lines changed

RazorEngineCore.Tests/TestCompileAndRun.cs

Lines changed: 207 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.Threading.Tasks;
12
using Microsoft.VisualStudio.TestTools.UnitTesting;
23
using RazorEngineCore.Tests.Models;
34

@@ -12,6 +13,13 @@ public void TestCompile()
1213
RazorEngine razorEngine = new RazorEngine();
1314
razorEngine.Compile("Hello @Model.Name");
1415
}
16+
17+
[TestMethod]
18+
public Task TestCompileAsync()
19+
{
20+
RazorEngine razorEngine = new RazorEngine();
21+
return razorEngine.CompileAsync("Hello @Model.Name");
22+
}
1523

1624
[TestMethod]
1725
public void TestCompileAndRun_HtmlLiteral()
@@ -27,6 +35,20 @@ public void TestCompileAndRun_HtmlLiteral()
2735
Assert.AreEqual("<h1>Hello Alex</h1>", actual);
2836
}
2937

38+
[TestMethod]
39+
public async Task TestCompileAndRun_HtmlLiteralAsync()
40+
{
41+
RazorEngine razorEngine = new RazorEngine();
42+
RazorEngineCompiledTemplate template = await razorEngine.CompileAsync("<h1>Hello @Model.Name</h1>");
43+
44+
string actual = await template.RunAsync(new
45+
{
46+
Name = "Alex"
47+
});
48+
49+
Assert.AreEqual("<h1>Hello Alex</h1>", actual);
50+
}
51+
3052
[TestMethod]
3153
public void TestCompileAndRun_InAttributeVariables()
3254
{
@@ -41,6 +63,20 @@ public void TestCompileAndRun_InAttributeVariables()
4163
Assert.AreEqual("<div class=\"circle\" style=\"background-color: hsla(88, 70%, 80%,1);\">", actual);
4264
}
4365

66+
[TestMethod]
67+
public async Task TestCompileAndRun_InAttributeVariablesAsync()
68+
{
69+
RazorEngine razorEngine = new RazorEngine();
70+
RazorEngineCompiledTemplate template = await razorEngine.CompileAsync("<div class=\"circle\" style=\"background-color: hsla(@Model.Colour, 70%, 80%,1);\">");
71+
72+
string actual = await template.RunAsync(new
73+
{
74+
Colour = 88
75+
});
76+
77+
Assert.AreEqual("<div class=\"circle\" style=\"background-color: hsla(88, 70%, 80%,1);\">", actual);
78+
}
79+
4480
[TestMethod]
4581
public void TestCompileAndRun_HtmlAttribute()
4682
{
@@ -55,6 +91,20 @@ public void TestCompileAndRun_HtmlAttribute()
5591
Assert.AreEqual("<div title=\"Alex\">Hello</div>", actual);
5692
}
5793

94+
[TestMethod]
95+
public async Task TestCompileAndRun_HtmlAttributeAsync()
96+
{
97+
RazorEngine razorEngine = new RazorEngine();
98+
RazorEngineCompiledTemplate template = await razorEngine.CompileAsync("<div title=\"@Model.Name\">Hello</div>");
99+
100+
string actual = await template.RunAsync(new
101+
{
102+
Name = "Alex"
103+
});
104+
105+
Assert.AreEqual("<div title=\"Alex\">Hello</div>", actual);
106+
}
107+
58108
[TestMethod]
59109
public void TestCompileAndRun_DynamicModel_Plain()
60110
{
@@ -69,6 +119,20 @@ public void TestCompileAndRun_DynamicModel_Plain()
69119
Assert.AreEqual("Hello Alex", actual);
70120
}
71121

122+
[TestMethod]
123+
public async Task TestCompileAndRun_DynamicModel_PlainAsync()
124+
{
125+
RazorEngine razorEngine = new RazorEngine();
126+
RazorEngineCompiledTemplate template = await razorEngine.CompileAsync("Hello @Model.Name");
127+
128+
string actual = await template.RunAsync(new
129+
{
130+
Name = "Alex"
131+
});
132+
133+
Assert.AreEqual("Hello Alex", actual);
134+
}
135+
72136
[TestMethod]
73137
public void TestCompileAndRun_DynamicModel_Nested()
74138
{
@@ -90,6 +154,27 @@ public void TestCompileAndRun_DynamicModel_Nested()
90154
Assert.AreEqual("Name: Alex, Membership: Gold", actual);
91155
}
92156

157+
[TestMethod]
158+
public async Task TestCompileAndRun_DynamicModel_NestedAsync()
159+
{
160+
RazorEngine razorEngine = new RazorEngine();
161+
162+
var model = new
163+
{
164+
Name = "Alex",
165+
Membership = new
166+
{
167+
Level = "Gold"
168+
}
169+
};
170+
171+
var template = await razorEngine.CompileAsync("Name: @Model.Name, Membership: @Model.Membership.Level");
172+
173+
string actual = await template.RunAsync(model);
174+
175+
Assert.AreEqual("Name: Alex, Membership: Gold", actual);
176+
}
177+
93178
[TestMethod]
94179
public void TestCompileAndRun_NullModel()
95180
{
@@ -102,6 +187,18 @@ public void TestCompileAndRun_NullModel()
102187
Assert.AreEqual("Name: ", actual);
103188
}
104189

190+
[TestMethod]
191+
public async Task TestCompileAndRun_NullModelAsync()
192+
{
193+
RazorEngine razorEngine = new RazorEngine();
194+
195+
var template = await razorEngine.CompileAsync("Name: @Model");
196+
197+
string actual = await template.RunAsync(null);
198+
199+
Assert.AreEqual("Name: ", actual);
200+
}
201+
105202
[TestMethod]
106203
public void TestCompileAndRun_NullNestedObject()
107204
{
@@ -117,6 +214,21 @@ public void TestCompileAndRun_NullNestedObject()
117214
Assert.AreEqual("Name: ", actual);
118215
}
119216

217+
[TestMethod]
218+
public async Task TestCompileAndRun_NullNestedObjectAsync()
219+
{
220+
RazorEngine razorEngine = new RazorEngine();
221+
222+
var template = await razorEngine.CompileAsync("Name: @Model.user");
223+
224+
string actual = await template.RunAsync(new
225+
{
226+
user = (object)null
227+
});
228+
229+
Assert.AreEqual("Name: ", actual);
230+
}
231+
120232
[TestMethod]
121233
public void TestCompileAndRun_DynamicModel_Lists()
122234
{
@@ -152,6 +264,41 @@ public void TestCompileAndRun_DynamicModel_Lists()
152264
Assert.AreEqual(expected, actual);
153265
}
154266

267+
[TestMethod]
268+
public async Task TestCompileAndRun_DynamicModel_ListsAsync()
269+
{
270+
RazorEngine razorEngine = new RazorEngine();
271+
272+
var model = new
273+
{
274+
Items = new[]
275+
{
276+
new
277+
{
278+
Key = "K1"
279+
},
280+
new
281+
{
282+
Key = "K2"
283+
}
284+
}
285+
};
286+
287+
var template = await razorEngine.CompileAsync(@"
288+
@foreach (var item in Model.Items)
289+
{
290+
<div>@item.Key</div>
291+
}
292+
");
293+
294+
string actual = await template.RunAsync(model);
295+
string expected = @"
296+
<div>K1</div>
297+
<div>K2</div>
298+
";
299+
Assert.AreEqual(expected, actual);
300+
}
301+
155302
[TestMethod]
156303
public void TestCompileAndRun_TestFunction()
157304
{
@@ -204,6 +351,22 @@ public void TestCompileAndRun_TypedModel1()
204351
Assert.AreEqual("Hello 1 2 3 Alex -=777=-", actual);
205352
}
206353

354+
[TestMethod]
355+
public async Task TestCompileAndRun_TypedModel1Async()
356+
{
357+
RazorEngine razorEngine = new RazorEngine();
358+
RazorEngineCompiledTemplate<TestModel1> template = await razorEngine.CompileAsync<TestModel1>("Hello @A @B @(A + B) @C @Decorator(\"777\")");
359+
360+
string actual = await template.RunAsync(instance =>
361+
{
362+
instance.A = 1;
363+
instance.B = 2;
364+
instance.C = "Alex";
365+
});
366+
367+
Assert.AreEqual("Hello 1 2 3 Alex -=777=-", actual);
368+
}
369+
207370
[TestMethod]
208371
public void TestCompileAndRun_TypedModel2()
209372
{
@@ -221,6 +384,23 @@ public void TestCompileAndRun_TypedModel2()
221384
Assert.AreEqual("Hello -=Alex=-", actual);
222385
}
223386

387+
[TestMethod]
388+
public async Task TestCompileAndRun_TypedModel2Async()
389+
{
390+
RazorEngine razorEngine = new RazorEngine();
391+
RazorEngineCompiledTemplate<TestModel2> template = await razorEngine.CompileAsync<TestModel2>("Hello @Model.Decorator(Model.C)");
392+
393+
string actual = await template.RunAsync(instance =>
394+
{
395+
instance.Initialize(new TestModel1()
396+
{
397+
C = "Alex"
398+
});
399+
});
400+
401+
Assert.AreEqual("Hello -=Alex=-", actual);
402+
}
403+
224404
[TestMethod]
225405
public void TestCompileAndRun_Linq()
226406
{
@@ -247,5 +427,32 @@ public void TestCompileAndRun_Linq()
247427

248428
Assert.AreEqual(expected, actual);
249429
}
430+
431+
[TestMethod]
432+
public async Task TestCompileAndRun_LinqAsync()
433+
{
434+
RazorEngine razorEngine = new RazorEngine();
435+
RazorEngineCompiledTemplate<TestModel2> template = await razorEngine.CompileAsync<TestModel2>(
436+
@"
437+
@foreach (var item in Model.Numbers.OrderByDescending(x => x))
438+
{
439+
<p>@item</p>
440+
}
441+
");
442+
string expected = @"
443+
<p>3</p>
444+
<p>2</p>
445+
<p>1</p>
446+
";
447+
string actual = await template.RunAsync(instance =>
448+
{
449+
instance.Initialize(new TestModel1()
450+
{
451+
Numbers = new[] {2, 1, 3}
452+
});
453+
});
454+
455+
Assert.AreEqual(expected, actual);
456+
}
250457
}
251458
}

RazorEngineCore.Tests/TestSaveLoad.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.IO;
2+
using System.Threading.Tasks;
23
using Microsoft.VisualStudio.TestTools.UnitTesting;
34

45
namespace RazorEngineCore.Tests
@@ -23,6 +24,25 @@ public void TestSaveToStream()
2324

2425
Assert.AreEqual(initialTemplateResult, loadedTemplateResult);
2526
}
27+
28+
[TestMethod]
29+
public async Task TestSaveToStreamAsync()
30+
{
31+
RazorEngine razorEngine = new RazorEngine();
32+
RazorEngineCompiledTemplate initialTemplate = await razorEngine.CompileAsync("Hello @Model.Name");
33+
34+
MemoryStream memoryStream = new MemoryStream();
35+
await initialTemplate.SaveToStreamAsync(memoryStream);
36+
memoryStream.Position = 0;
37+
38+
RazorEngineCompiledTemplate loadedTemplate = await RazorEngineCompiledTemplate.LoadFromStreamAsync(memoryStream);
39+
40+
string initialTemplateResult = await initialTemplate.RunAsync(new { Name = "Alex" });
41+
string loadedTemplateResult = await loadedTemplate.RunAsync(new { Name = "Alex" });
42+
43+
Assert.AreEqual(initialTemplateResult, loadedTemplateResult);
44+
}
45+
2646
[TestMethod]
2747
public void TestSaveToFile()
2848
{
@@ -38,5 +58,21 @@ public void TestSaveToFile()
3858

3959
Assert.AreEqual(initialTemplateResult, loadedTemplateResult);
4060
}
61+
62+
[TestMethod]
63+
public async Task TestSaveToFileAsync()
64+
{
65+
RazorEngine razorEngine = new RazorEngine();
66+
RazorEngineCompiledTemplate initialTemplate = await razorEngine.CompileAsync("Hello @Model.Name");
67+
68+
await initialTemplate.SaveToFileAsync("testTemplate.dll");
69+
70+
RazorEngineCompiledTemplate loadedTemplate = await RazorEngineCompiledTemplate.LoadFromFileAsync("testTemplate.dll");
71+
72+
string initialTemplateResult = await initialTemplate.RunAsync(new { Name = "Alex" });
73+
string loadedTemplateResult = await loadedTemplate.RunAsync(new { Name = "Alex" });
74+
75+
Assert.AreEqual(initialTemplateResult, loadedTemplateResult);
76+
}
4177
}
4278
}

0 commit comments

Comments
 (0)