Skip to content

Commit 5748e5f

Browse files
author
William David Cossey
committed
Added interfaces IRazorEngine, IRazorEngineCompilationOptionsBuilder, IRazorEngineCompiledTemplate, IRazorEngineCompiledTemplate<>, these are crucial for Unit Testing using mocking frameworks, i.e. Moq.
1 parent dadcdb7 commit 5748e5f

11 files changed

+119
-39
lines changed

ExampleApp/Program.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ void RecursionTest(int level){
4242
static void Main(string[] args)
4343
{
4444
RazorEngine razorEngine = new RazorEngine();
45-
RazorEngineCompiledTemplate template = razorEngine.Compile(Content);
45+
IRazorEngineCompiledTemplate template = razorEngine.Compile(Content);
4646

4747
string result = template.Run(new
4848
{

RazorEngineCore.Tests/TestCompileAndRun.cs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public Task TestCompileAsync()
2525
public void TestCompileAndRun_HtmlLiteral()
2626
{
2727
RazorEngine razorEngine = new RazorEngine();
28-
RazorEngineCompiledTemplate template = razorEngine.Compile("<h1>Hello @Model.Name</h1>");
28+
IRazorEngineCompiledTemplate template = razorEngine.Compile("<h1>Hello @Model.Name</h1>");
2929

3030
string actual = template.Run(new
3131
{
@@ -39,7 +39,7 @@ public void TestCompileAndRun_HtmlLiteral()
3939
public async Task TestCompileAndRun_HtmlLiteralAsync()
4040
{
4141
RazorEngine razorEngine = new RazorEngine();
42-
RazorEngineCompiledTemplate template = await razorEngine.CompileAsync("<h1>Hello @Model.Name</h1>");
42+
IRazorEngineCompiledTemplate template = await razorEngine.CompileAsync("<h1>Hello @Model.Name</h1>");
4343

4444
string actual = await template.RunAsync(new
4545
{
@@ -53,7 +53,7 @@ public async Task TestCompileAndRun_HtmlLiteralAsync()
5353
public void TestCompileAndRun_InAttributeVariables()
5454
{
5555
RazorEngine razorEngine = new RazorEngine();
56-
RazorEngineCompiledTemplate template = razorEngine.Compile("<div class=\"circle\" style=\"background-color: hsla(@Model.Colour, 70%, 80%,1);\">");
56+
IRazorEngineCompiledTemplate template = razorEngine.Compile("<div class=\"circle\" style=\"background-color: hsla(@Model.Colour, 70%, 80%,1);\">");
5757

5858
string actual = template.Run(new
5959
{
@@ -67,7 +67,7 @@ public void TestCompileAndRun_InAttributeVariables()
6767
public async Task TestCompileAndRun_InAttributeVariablesAsync()
6868
{
6969
RazorEngine razorEngine = new RazorEngine();
70-
RazorEngineCompiledTemplate template = await razorEngine.CompileAsync("<div class=\"circle\" style=\"background-color: hsla(@Model.Colour, 70%, 80%,1);\">");
70+
IRazorEngineCompiledTemplate template = await razorEngine.CompileAsync("<div class=\"circle\" style=\"background-color: hsla(@Model.Colour, 70%, 80%,1);\">");
7171

7272
string actual = await template.RunAsync(new
7373
{
@@ -81,7 +81,7 @@ public async Task TestCompileAndRun_InAttributeVariablesAsync()
8181
public void TestCompileAndRun_HtmlAttribute()
8282
{
8383
RazorEngine razorEngine = new RazorEngine();
84-
RazorEngineCompiledTemplate template = razorEngine.Compile("<div title=\"@Model.Name\">Hello</div>");
84+
IRazorEngineCompiledTemplate template = razorEngine.Compile("<div title=\"@Model.Name\">Hello</div>");
8585

8686
string actual = template.Run(new
8787
{
@@ -95,7 +95,7 @@ public void TestCompileAndRun_HtmlAttribute()
9595
public async Task TestCompileAndRun_HtmlAttributeAsync()
9696
{
9797
RazorEngine razorEngine = new RazorEngine();
98-
RazorEngineCompiledTemplate template = await razorEngine.CompileAsync("<div title=\"@Model.Name\">Hello</div>");
98+
IRazorEngineCompiledTemplate template = await razorEngine.CompileAsync("<div title=\"@Model.Name\">Hello</div>");
9999

100100
string actual = await template.RunAsync(new
101101
{
@@ -109,7 +109,7 @@ public async Task TestCompileAndRun_HtmlAttributeAsync()
109109
public void TestCompileAndRun_DynamicModel_Plain()
110110
{
111111
RazorEngine razorEngine = new RazorEngine();
112-
RazorEngineCompiledTemplate template = razorEngine.Compile("Hello @Model.Name");
112+
IRazorEngineCompiledTemplate template = razorEngine.Compile("Hello @Model.Name");
113113

114114
string actual = template.Run(new
115115
{
@@ -123,7 +123,7 @@ public void TestCompileAndRun_DynamicModel_Plain()
123123
public async Task TestCompileAndRun_DynamicModel_PlainAsync()
124124
{
125125
RazorEngine razorEngine = new RazorEngine();
126-
RazorEngineCompiledTemplate template = await razorEngine.CompileAsync("Hello @Model.Name");
126+
IRazorEngineCompiledTemplate template = await razorEngine.CompileAsync("Hello @Model.Name");
127127

128128
string actual = await template.RunAsync(new
129129
{
@@ -339,7 +339,7 @@ void RecursionTest(int level)
339339
public void TestCompileAndRun_TypedModel1()
340340
{
341341
RazorEngine razorEngine = new RazorEngine();
342-
RazorEngineCompiledTemplate<TestModel1> template = razorEngine.Compile<TestModel1>("Hello @A @B @(A + B) @C @Decorator(\"777\")");
342+
IRazorEngineCompiledTemplate<TestModel1> template = razorEngine.Compile<TestModel1>("Hello @A @B @(A + B) @C @Decorator(\"777\")");
343343

344344
string actual = template.Run(instance =>
345345
{
@@ -355,7 +355,7 @@ public void TestCompileAndRun_TypedModel1()
355355
public async Task TestCompileAndRun_TypedModel1Async()
356356
{
357357
RazorEngine razorEngine = new RazorEngine();
358-
RazorEngineCompiledTemplate<TestModel1> template = await razorEngine.CompileAsync<TestModel1>("Hello @A @B @(A + B) @C @Decorator(\"777\")");
358+
IRazorEngineCompiledTemplate<TestModel1> template = await razorEngine.CompileAsync<TestModel1>("Hello @A @B @(A + B) @C @Decorator(\"777\")");
359359

360360
string actual = await template.RunAsync(instance =>
361361
{
@@ -371,7 +371,7 @@ public async Task TestCompileAndRun_TypedModel1Async()
371371
public void TestCompileAndRun_TypedModel2()
372372
{
373373
RazorEngine razorEngine = new RazorEngine();
374-
RazorEngineCompiledTemplate<TestModel2> template = razorEngine.Compile<TestModel2>("Hello @Model.Decorator(Model.C)");
374+
IRazorEngineCompiledTemplate<TestModel2> template = razorEngine.Compile<TestModel2>("Hello @Model.Decorator(Model.C)");
375375

376376
string actual = template.Run(instance =>
377377
{
@@ -388,7 +388,7 @@ public void TestCompileAndRun_TypedModel2()
388388
public async Task TestCompileAndRun_TypedModel2Async()
389389
{
390390
RazorEngine razorEngine = new RazorEngine();
391-
RazorEngineCompiledTemplate<TestModel2> template = await razorEngine.CompileAsync<TestModel2>("Hello @Model.Decorator(Model.C)");
391+
IRazorEngineCompiledTemplate<TestModel2> template = await razorEngine.CompileAsync<TestModel2>("Hello @Model.Decorator(Model.C)");
392392

393393
string actual = await template.RunAsync(instance =>
394394
{
@@ -405,7 +405,7 @@ public async Task TestCompileAndRun_TypedModel2Async()
405405
public void TestCompileAndRun_Linq()
406406
{
407407
RazorEngine razorEngine = new RazorEngine();
408-
RazorEngineCompiledTemplate<TestModel2> template = razorEngine.Compile<TestModel2>(
408+
IRazorEngineCompiledTemplate<TestModel2> template = razorEngine.Compile<TestModel2>(
409409
@"
410410
@foreach (var item in Model.Numbers.OrderByDescending(x => x))
411411
{
@@ -432,7 +432,7 @@ public void TestCompileAndRun_Linq()
432432
public async Task TestCompileAndRun_LinqAsync()
433433
{
434434
RazorEngine razorEngine = new RazorEngine();
435-
RazorEngineCompiledTemplate<TestModel2> template = await razorEngine.CompileAsync<TestModel2>(
435+
IRazorEngineCompiledTemplate<TestModel2> template = await razorEngine.CompileAsync<TestModel2>(
436436
@"
437437
@foreach (var item in Model.Numbers.OrderByDescending(x => x))
438438
{

RazorEngineCore.Tests/TestSaveLoad.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ public class TestSaveLoad
1111
public void TestSaveToStream()
1212
{
1313
RazorEngine razorEngine = new RazorEngine();
14-
RazorEngineCompiledTemplate initialTemplate = razorEngine.Compile("Hello @Model.Name");
14+
IRazorEngineCompiledTemplate initialTemplate = razorEngine.Compile("Hello @Model.Name");
1515

1616
MemoryStream memoryStream = new MemoryStream();
1717
initialTemplate.SaveToStream(memoryStream);
1818
memoryStream.Position = 0;
1919

20-
RazorEngineCompiledTemplate loadedTemplate = RazorEngineCompiledTemplate.LoadFromStream(memoryStream);
20+
IRazorEngineCompiledTemplate loadedTemplate = RazorEngineCompiledTemplate.LoadFromStream(memoryStream);
2121

2222
string initialTemplateResult = initialTemplate.Run(new { Name = "Alex" });
2323
string loadedTemplateResult = loadedTemplate.Run(new { Name = "Alex" });
@@ -29,13 +29,13 @@ public void TestSaveToStream()
2929
public async Task TestSaveToStreamAsync()
3030
{
3131
RazorEngine razorEngine = new RazorEngine();
32-
RazorEngineCompiledTemplate initialTemplate = await razorEngine.CompileAsync("Hello @Model.Name");
32+
IRazorEngineCompiledTemplate initialTemplate = await razorEngine.CompileAsync("Hello @Model.Name");
3333

3434
MemoryStream memoryStream = new MemoryStream();
3535
await initialTemplate.SaveToStreamAsync(memoryStream);
3636
memoryStream.Position = 0;
3737

38-
RazorEngineCompiledTemplate loadedTemplate = await RazorEngineCompiledTemplate.LoadFromStreamAsync(memoryStream);
38+
IRazorEngineCompiledTemplate loadedTemplate = await RazorEngineCompiledTemplate.LoadFromStreamAsync(memoryStream);
3939

4040
string initialTemplateResult = await initialTemplate.RunAsync(new { Name = "Alex" });
4141
string loadedTemplateResult = await loadedTemplate.RunAsync(new { Name = "Alex" });
@@ -47,11 +47,11 @@ public async Task TestSaveToStreamAsync()
4747
public void TestSaveToFile()
4848
{
4949
RazorEngine razorEngine = new RazorEngine();
50-
RazorEngineCompiledTemplate initialTemplate = razorEngine.Compile("Hello @Model.Name");
50+
IRazorEngineCompiledTemplate initialTemplate = razorEngine.Compile("Hello @Model.Name");
5151

5252
initialTemplate.SaveToFile("testTemplate.dll");
5353

54-
RazorEngineCompiledTemplate loadedTemplate = RazorEngineCompiledTemplate.LoadFromFile("testTemplate.dll");
54+
IRazorEngineCompiledTemplate loadedTemplate = RazorEngineCompiledTemplate.LoadFromFile("testTemplate.dll");
5555

5656
string initialTemplateResult = initialTemplate.Run(new { Name = "Alex" });
5757
string loadedTemplateResult = loadedTemplate.Run(new { Name = "Alex" });
@@ -63,11 +63,11 @@ public void TestSaveToFile()
6363
public async Task TestSaveToFileAsync()
6464
{
6565
RazorEngine razorEngine = new RazorEngine();
66-
RazorEngineCompiledTemplate initialTemplate = await razorEngine.CompileAsync("Hello @Model.Name");
66+
IRazorEngineCompiledTemplate initialTemplate = await razorEngine.CompileAsync("Hello @Model.Name");
6767

6868
await initialTemplate.SaveToFileAsync("testTemplate.dll");
6969

70-
RazorEngineCompiledTemplate loadedTemplate = await RazorEngineCompiledTemplate.LoadFromFileAsync("testTemplate.dll");
70+
IRazorEngineCompiledTemplate loadedTemplate = await RazorEngineCompiledTemplate.LoadFromFileAsync("testTemplate.dll");
7171

7272
string initialTemplateResult = await initialTemplate.RunAsync(new { Name = "Alex" });
7373
string loadedTemplateResult = await loadedTemplate.RunAsync(new { Name = "Alex" });

RazorEngineCore/IRazorEngine.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using System;
2+
using System.Threading.Tasks;
3+
4+
namespace RazorEngineCore
5+
{
6+
public interface IRazorEngine
7+
{
8+
IRazorEngineCompiledTemplate<T> Compile<T>(string content, Action<RazorEngineCompilationOptionsBuilder> builderAction = null)
9+
where T : IRazorEngineTemplate;
10+
11+
Task<IRazorEngineCompiledTemplate<T>> CompileAsync<T>(string content, Action<RazorEngineCompilationOptionsBuilder> builderAction = null)
12+
where T : IRazorEngineTemplate;
13+
14+
IRazorEngineCompiledTemplate Compile(string content, Action<RazorEngineCompilationOptionsBuilder> builderAction = null);
15+
16+
Task<IRazorEngineCompiledTemplate> CompileAsync(string content, Action<RazorEngineCompilationOptionsBuilder> builderAction = null);
17+
}
18+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using System;
2+
using System.Reflection;
3+
4+
namespace RazorEngineCore
5+
{
6+
public interface IRazorEngineCompilationOptionsBuilder
7+
{
8+
RazorEngineCompilationOptions Options { get; set; }
9+
10+
void AddAssemblyReferenceByName(string assemblyName);
11+
12+
void AddAssemblyReference(Assembly assembly);
13+
14+
void AddAssemblyReference(Type type);
15+
16+
void AddUsing(string namespaceName);
17+
18+
void Inherits(Type type);
19+
}
20+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using System.IO;
2+
using System.Threading.Tasks;
3+
4+
namespace RazorEngineCore
5+
{
6+
public interface IRazorEngineCompiledTemplate
7+
{
8+
void SaveToStream(Stream stream);
9+
10+
Task SaveToStreamAsync(Stream stream);
11+
12+
void SaveToFile(string fileName);
13+
14+
Task SaveToFileAsync(string fileName);
15+
16+
string Run(object model = null);
17+
18+
Task<string> RunAsync(object model = null);
19+
}
20+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System;
2+
using System.IO;
3+
using System.Threading.Tasks;
4+
5+
namespace RazorEngineCore
6+
{
7+
public interface IRazorEngineCompiledTemplate<out T>
8+
where T : IRazorEngineTemplate
9+
{
10+
void SaveToStream(Stream stream);
11+
12+
Task SaveToStreamAsync(Stream stream);
13+
14+
void SaveToFile(string fileName);
15+
16+
Task SaveToFileAsync(string fileName);
17+
18+
string Run(Action<T> initializer);
19+
20+
Task<string> RunAsync(Action<T> initializer);
21+
}
22+
}

RazorEngineCore/RazorEngine.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111

1212
namespace RazorEngineCore
1313
{
14-
public class RazorEngine
14+
public class RazorEngine : IRazorEngine
1515
{
16-
public RazorEngineCompiledTemplate<T> Compile<T>(string content, Action<RazorEngineCompilationOptionsBuilder> builderAction = null) where T : IRazorEngineTemplate
16+
public IRazorEngineCompiledTemplate<T> Compile<T>(string content, Action<RazorEngineCompilationOptionsBuilder> builderAction = null) where T : IRazorEngineTemplate
1717
{
1818
RazorEngineCompilationOptionsBuilder compilationOptionsBuilder = new RazorEngineCompilationOptionsBuilder();
1919

@@ -27,12 +27,12 @@ public RazorEngineCompiledTemplate<T> Compile<T>(string content, Action<RazorEng
2727
return new RazorEngineCompiledTemplate<T>(memoryStream);
2828
}
2929

30-
public Task<RazorEngineCompiledTemplate<T>> CompileAsync<T>(string content, Action<RazorEngineCompilationOptionsBuilder> builderAction = null) where T : IRazorEngineTemplate
30+
public Task<IRazorEngineCompiledTemplate<T>> CompileAsync<T>(string content, Action<RazorEngineCompilationOptionsBuilder> builderAction = null) where T : IRazorEngineTemplate
3131
{
3232
return Task.Factory.StartNew(() => this.Compile<T>(content: content, builderAction: builderAction));
3333
}
3434

35-
public RazorEngineCompiledTemplate Compile(string content, Action<RazorEngineCompilationOptionsBuilder> builderAction = null)
35+
public IRazorEngineCompiledTemplate Compile(string content, Action<RazorEngineCompilationOptionsBuilder> builderAction = null)
3636
{
3737
RazorEngineCompilationOptionsBuilder compilationOptionsBuilder = new RazorEngineCompilationOptionsBuilder();
3838
compilationOptionsBuilder.Inherits(typeof(RazorEngineTemplateBase));
@@ -44,7 +44,7 @@ public RazorEngineCompiledTemplate Compile(string content, Action<RazorEngineCom
4444
return new RazorEngineCompiledTemplate(memoryStream);
4545
}
4646

47-
public Task<RazorEngineCompiledTemplate> CompileAsync(string content, Action<RazorEngineCompilationOptionsBuilder> builderAction = null)
47+
public Task<IRazorEngineCompiledTemplate> CompileAsync(string content, Action<RazorEngineCompilationOptionsBuilder> builderAction = null)
4848
{
4949
return Task.Factory.StartNew(() => this.Compile(content: content, builderAction: builderAction));
5050
}

RazorEngineCore/RazorEngineCompilationOptionsBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace RazorEngineCore
66
{
7-
public class RazorEngineCompilationOptionsBuilder
7+
public class RazorEngineCompilationOptionsBuilder : IRazorEngineCompilationOptionsBuilder
88
{
99
public RazorEngineCompilationOptions Options { get; set; }
1010

RazorEngineCore/RazorEngineCompiledTemplate.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
namespace RazorEngineCore
77
{
8-
public class RazorEngineCompiledTemplate
8+
public class RazorEngineCompiledTemplate : IRazorEngineCompiledTemplate
99
{
1010
private readonly MemoryStream assemblyByteCode;
1111
private readonly Type templateType;
@@ -18,12 +18,12 @@ internal RazorEngineCompiledTemplate(MemoryStream assemblyByteCode)
1818
this.templateType = assembly.GetType("TemplateNamespace.Template");
1919
}
2020

21-
public static RazorEngineCompiledTemplate LoadFromFile(string fileName)
21+
public static IRazorEngineCompiledTemplate LoadFromFile(string fileName)
2222
{
2323
return LoadFromFileAsync(fileName: fileName).GetAwaiter().GetResult();
2424
}
2525

26-
public static async Task<RazorEngineCompiledTemplate> LoadFromFileAsync(string fileName)
26+
public static async Task<IRazorEngineCompiledTemplate> LoadFromFileAsync(string fileName)
2727
{
2828
MemoryStream memoryStream = new MemoryStream();
2929

@@ -41,12 +41,12 @@ public static async Task<RazorEngineCompiledTemplate> LoadFromFileAsync(string f
4141
return new RazorEngineCompiledTemplate(memoryStream);
4242
}
4343

44-
public static RazorEngineCompiledTemplate LoadFromStream(Stream stream)
44+
public static IRazorEngineCompiledTemplate LoadFromStream(Stream stream)
4545
{
4646
return LoadFromStreamAsync(stream).GetAwaiter().GetResult();
4747
}
4848

49-
public static async Task<RazorEngineCompiledTemplate> LoadFromStreamAsync(Stream stream)
49+
public static async Task<IRazorEngineCompiledTemplate> LoadFromStreamAsync(Stream stream)
5050
{
5151
MemoryStream memoryStream = new MemoryStream();
5252
await stream.CopyToAsync(memoryStream);

0 commit comments

Comments
 (0)