parent
47141b2003
commit
4f255f8583
|
|
@ -50,11 +50,7 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
|
||||||
new CSharpTypeMemberVisitor(writer, Context).Accept(Tree.Chunks);
|
new CSharpTypeMemberVisitor(writer, Context).Accept(Tree.Chunks);
|
||||||
new CSharpDesignTimeHelpersVisitor(writer, Context).AcceptTree(Tree);
|
new CSharpDesignTimeHelpersVisitor(writer, Context).AcceptTree(Tree);
|
||||||
|
|
||||||
writer.WriteLineHiddenDirective();
|
BuildConstructor(writer);
|
||||||
using (writer.BuildConstructor(Context.ClassName))
|
|
||||||
{
|
|
||||||
// Any constructor based logic that we need to add?
|
|
||||||
};
|
|
||||||
|
|
||||||
// Add space inbetween constructor and method body
|
// Add space inbetween constructor and method body
|
||||||
writer.WriteLine();
|
writer.WriteLine();
|
||||||
|
|
@ -72,6 +68,15 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler.CSharp
|
||||||
return new CodeBuilderResult(writer.GenerateCode(), writer.LineMappingManager.Mappings);
|
return new CodeBuilderResult(writer.GenerateCode(), writer.LineMappingManager.Mappings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected virtual void BuildConstructor(CSharpCodeWriter writer)
|
||||||
|
{
|
||||||
|
writer.WriteLineHiddenDirective();
|
||||||
|
using (writer.BuildConstructor(Context.ClassName))
|
||||||
|
{
|
||||||
|
// Any constructor based logic that we need to add?
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private void AddImports(CodeTree codeTree, CSharpCodeWriter writer, IEnumerable<string> defaultImports)
|
private void AddImports(CodeTree codeTree, CSharpCodeWriter writer, IEnumerable<string> defaultImports)
|
||||||
{
|
{
|
||||||
// Write out using directives
|
// Write out using directives
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Accept(Chunk chunk)
|
public virtual void Accept(Chunk chunk)
|
||||||
{
|
{
|
||||||
if (chunk == null)
|
if (chunk == null)
|
||||||
{
|
{
|
||||||
|
|
@ -105,10 +105,6 @@ namespace Microsoft.AspNet.Razor.Generator.Compiler
|
||||||
{
|
{
|
||||||
Visit((SessionStateChunk)chunk);
|
Visit((SessionStateChunk)chunk);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
throw new InvalidOperationException("Unknown chunk type " + chunk.GetType().Name);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract void Visit(LiteralChunk chunk);
|
protected abstract void Visit(LiteralChunk chunk);
|
||||||
|
|
|
||||||
|
|
@ -162,7 +162,7 @@ namespace Microsoft.AspNet.Razor.Parser
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool NamespaceOrTypeName()
|
protected bool NamespaceOrTypeName()
|
||||||
{
|
{
|
||||||
if (Optional(CSharpSymbolType.Identifier) || Optional(CSharpSymbolType.Keyword))
|
if (Optional(CSharpSymbolType.Identifier) || Optional(CSharpSymbolType.Keyword))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -201,5 +201,19 @@ namespace Microsoft.AspNet.Razor
|
||||||
}
|
}
|
||||||
return incomingCodeGenerator;
|
return incomingCodeGenerator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets an instance of the code builder and is provided an opportunity to decorate or replace it
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="incomingBuilder">The code builder</param>
|
||||||
|
/// <returns>Either the same code builder, after modifications, or a different code builder.</returns>
|
||||||
|
public virtual CodeBuilder DecorateCodeBuilder(CodeBuilder incomingBuilder, CodeGeneratorContext context)
|
||||||
|
{
|
||||||
|
if (incomingBuilder == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException("incomingBuilder");
|
||||||
|
}
|
||||||
|
return incomingBuilder;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -167,7 +167,7 @@ namespace Microsoft.AspNet.Razor
|
||||||
generator.DesignTimeMode = Host.DesignTimeMode;
|
generator.DesignTimeMode = Host.DesignTimeMode;
|
||||||
generator.Visit(results);
|
generator.Visit(results);
|
||||||
|
|
||||||
var builder = Host.CodeLanguage.CreateCodeBuilder(generator.Context);
|
var builder = CreateCodeBuilder(generator.Context);
|
||||||
var builderResult = builder.Build();
|
var builderResult = builder.Build();
|
||||||
|
|
||||||
// Collect results and return
|
// Collect results and return
|
||||||
|
|
@ -191,5 +191,11 @@ namespace Microsoft.AspNet.Razor
|
||||||
DesignTimeMode = Host.DesignTimeMode
|
DesignTimeMode = Host.DesignTimeMode
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected internal virtual CodeBuilder CreateCodeBuilder(CodeGeneratorContext context)
|
||||||
|
{
|
||||||
|
return Host.DecorateCodeBuilder(Host.CodeLanguage.CreateCodeBuilder(context),
|
||||||
|
context);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
using Microsoft.AspNet.Razor.Generator;
|
using Microsoft.AspNet.Razor.Generator;
|
||||||
|
using Microsoft.AspNet.Razor.Generator.Compiler.CSharp;
|
||||||
using Microsoft.AspNet.Razor.Parser;
|
using Microsoft.AspNet.Razor.Parser;
|
||||||
using Microsoft.CSharp;
|
|
||||||
using Microsoft.TestCommon;
|
using Microsoft.TestCommon;
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Razor.Test
|
namespace Microsoft.AspNet.Razor.Test
|
||||||
|
|
@ -42,5 +42,24 @@ namespace Microsoft.AspNet.Razor.Test
|
||||||
Assert.Equal("Baz", generator.SourceFileName);
|
Assert.Equal("Baz", generator.SourceFileName);
|
||||||
Assert.Same(host, generator.Host);
|
Assert.Same(host, generator.Host);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void CreateCodeBuilder_ReturnsNewCSharpCodeBuilder()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var language = new CSharpRazorCodeLanguage();
|
||||||
|
var host = new RazorEngineHost(language);
|
||||||
|
var context = CodeGeneratorContext.Create(host,
|
||||||
|
"myclass",
|
||||||
|
"myns",
|
||||||
|
string.Empty,
|
||||||
|
shouldGenerateLinePragmas: false);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var generator = language.CreateCodeBuilder(context);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.IsType<CSharpCodeBuilder>(generator);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
using Microsoft.AspNet.Razor.Generator;
|
||||||
|
using Microsoft.AspNet.Razor.Generator.Compiler;
|
||||||
|
using Microsoft.TestCommon;
|
||||||
|
using Moq;
|
||||||
|
using Moq.Protected;
|
||||||
|
|
||||||
|
namespace Microsoft.AspNet.Razor
|
||||||
|
{
|
||||||
|
public class ChunkVisitorTests
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void Accept_InvokesAppropriateOverload()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var chunks = new Chunk[] { new LiteralChunk(), new StatementChunk() };
|
||||||
|
var visitor = CreateVisitor();
|
||||||
|
|
||||||
|
// Act
|
||||||
|
visitor.Object.Accept(chunks);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
visitor.Protected().Verify("Visit", Times.AtMostOnce(), chunks[0]);
|
||||||
|
visitor.Protected().Verify("Visit", Times.AtMostOnce(), chunks[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Mock<ChunkVisitor<CodeWriter>> CreateVisitor()
|
||||||
|
{
|
||||||
|
var context = CodeGeneratorContext.Create(new RazorEngineHost(new CSharpRazorCodeLanguage()),
|
||||||
|
"myclass",
|
||||||
|
"myns",
|
||||||
|
string.Empty,
|
||||||
|
shouldGenerateLinePragmas: false);
|
||||||
|
var writer = Mock.Of<CodeWriter>();
|
||||||
|
return new Mock<ChunkVisitor<CodeWriter>>(writer, context);
|
||||||
|
}
|
||||||
|
|
||||||
|
private class MyTestChunk : Chunk
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -67,6 +67,7 @@
|
||||||
<Compile Include="Framework\ParserTestBase.cs" />
|
<Compile Include="Framework\ParserTestBase.cs" />
|
||||||
<Compile Include="Framework\RawTextSymbol.cs" />
|
<Compile Include="Framework\RawTextSymbol.cs" />
|
||||||
<Compile Include="Framework\TestSpanBuilder.cs" />
|
<Compile Include="Framework\TestSpanBuilder.cs" />
|
||||||
|
<Compile Include="Generator\CodeTree\ChunkVisitorTests.cs" />
|
||||||
<Compile Include="Generator\CodeTree\CodeTreeGenerationTest.cs" />
|
<Compile Include="Generator\CodeTree\CodeTreeGenerationTest.cs" />
|
||||||
<Compile Include="Generator\CodeTree\CSharpCodeBuilderTests.cs" />
|
<Compile Include="Generator\CodeTree\CSharpCodeBuilderTests.cs" />
|
||||||
<Compile Include="Generator\CodeTree\CSharpPaddingBuilderTests.cs" />
|
<Compile Include="Generator\CodeTree\CSharpPaddingBuilderTests.cs" />
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ using System.IO;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Web.WebPages.TestUtils;
|
using System.Web.WebPages.TestUtils;
|
||||||
using Microsoft.AspNet.Razor.Generator;
|
using Microsoft.AspNet.Razor.Generator;
|
||||||
|
using Microsoft.AspNet.Razor.Generator.Compiler.CSharp;
|
||||||
using Microsoft.AspNet.Razor.Parser;
|
using Microsoft.AspNet.Razor.Parser;
|
||||||
using Microsoft.AspNet.Razor.Text;
|
using Microsoft.AspNet.Razor.Text;
|
||||||
using Microsoft.TestCommon;
|
using Microsoft.TestCommon;
|
||||||
|
|
@ -104,6 +105,29 @@ namespace Microsoft.AspNet.Razor.Test
|
||||||
Assert.Equal(expected, actual);
|
Assert.Equal(expected, actual);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void CreateCodeBuilder_PassesCodeGeneratorThroughDecorateMethodOnHost()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
var mockHost = new Mock<RazorEngineHost>(new CSharpRazorCodeLanguage()) { CallBase = true };
|
||||||
|
var context = CodeGeneratorContext.Create(mockHost.Object,
|
||||||
|
"different-class",
|
||||||
|
"different-ns",
|
||||||
|
string.Empty,
|
||||||
|
shouldGenerateLinePragmas: true);
|
||||||
|
var expected = new CSharpCodeBuilder(context);
|
||||||
|
|
||||||
|
mockHost.Setup(h => h.DecorateCodeBuilder(It.IsAny<CSharpCodeBuilder>(), context))
|
||||||
|
.Returns(expected);
|
||||||
|
var engine = new RazorTemplateEngine(mockHost.Object);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
var actual = engine.CreateCodeBuilder(context);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
Assert.Equal(expected, actual);
|
||||||
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ParseTemplateCopiesTextReaderContentToSeekableTextReaderAndPassesToParseTemplateCore()
|
public void ParseTemplateCopiesTextReaderContentToSeekableTextReaderAndPassesToParseTemplateCore()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue