aspnetcore/test/Microsoft.AspNetCore.Razor..../IntegrationTests/RuntimeCodeGenerationIntegr...

603 lines
18 KiB
C#

// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Threading.Tasks;
using Microsoft.AspNetCore.Razor.Evolution.Intermediate;
using Microsoft.AspNetCore.Testing.xunit;
using Xunit;
namespace Microsoft.AspNetCore.Razor.Evolution.IntegrationTests
{
public class RuntimeCodeGenerationIntegrationTest : IntegrationTestBase
{
[Fact]
public void UnfinishedExpressionInCode()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void Templates()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void StringLiterals()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void SimpleUnspacedIf()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void Sections()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void RazorComments()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void ParserError()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void OpenedIf()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void NullConditionalExpressions()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void NoLinePragmas()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void NestedCSharp()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void NestedCodeBlocks()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void MarkupInCodeBlock()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void Instrumented()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void InlineBlocks()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void Inherits()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void Imports()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void ImplicitExpressionAtEOF()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void ImplicitExpression()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void HtmlCommentWithQuote_Double()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void HtmlCommentWithQuote_Single()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void HiddenSpansInCode()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void FunctionsBlock()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void FunctionsBlockMinimal()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void ExpressionsInCode()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void ExplicitExpressionWithMarkup()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void ExplicitExpressionAtEOF()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void ExplicitExpression()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void EmptyImplicitExpressionInCode()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void EmptyImplicitExpression()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void EmptyExplicitExpression()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void EmptyCodeBlock()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void DesignTime()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void ConditionalAttributes()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void CodeBlockWithTextElement()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void CodeBlockAtEOF()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void CodeBlock()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void Blocks()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
[Fact]
public void Await()
{
// Arrange
var engine = RazorEngine.Create(builder => builder.Features.Add(new ApiSetsIRTestAdapter()));
var document = CreateCodeDocument();
// Act
engine.Process(document);
// Assert
AssertCSharpDocumentMatchesBaseline(document.GetCSharpDocument());
}
private class ApiSetsIRTestAdapter : IRazorIRPass
{
public RazorEngine Engine { get; set; }
public int Order { get; set; }
public DocumentIRNode Execute(RazorCodeDocument codeDocument, DocumentIRNode irDocument)
{
var walker = new ApiSetsIRWalker();
walker.Visit(irDocument);
return irDocument;
}
private class ApiSetsIRWalker : RazorIRNodeWalker
{
public override void VisitClass(ClassDeclarationIRNode node)
{
node.Name = Filename.Replace('/', '_');
node.AccessModifier = "public";
VisitDefault(node);
}
public override void VisitNamespace(NamespaceDeclarationIRNode node)
{
node.Content = typeof(RuntimeCodeGenerationIntegrationTest).Namespace + ".TestFiles";
VisitDefault(node);
}
public override void VisitRazorMethodDeclaration(RazorMethodDeclarationIRNode node)
{
node.AccessModifier = "public";
node.Modifiers = new[] { "async" };
node.ReturnType = typeof(Task).FullName;
node.Name = "ExecuteAsync";
VisitDefault(node);
}
}
}
}
}