1+ using System . Threading . Tasks ;
12using Microsoft . VisualStudio . TestTools . UnitTesting ;
23using 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}
0 commit comments