// 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 Microsoft.AspNetCore.Razor.Language.Intermediate; using Xunit; using static Microsoft.AspNetCore.Razor.Language.Intermediate.IntermediateNodeAssert; namespace Microsoft.AspNetCore.Razor.Language.Extensions { public class SectionDirectivePassTest { [Fact] public void Execute_SkipsDocumentWithNoClassNode() { // Arrange var projectEngine = CreateProjectEngine(); var pass = new SectionDirectivePass() { Engine = projectEngine.Engine, }; var sourceDocument = TestRazorSourceDocument.Create("@section Header {

Hello World

}"); var codeDocument = RazorCodeDocument.Create(sourceDocument); var irDocument = new DocumentIntermediateNode(); irDocument.Children.Add(new DirectiveIntermediateNode() { Directive = SectionDirective.Directive, }); // Act pass.Execute(codeDocument, irDocument); // Assert Children( irDocument, node => Assert.IsType(node)); } [Fact] public void Execute_WrapsStatementInSectionNode() { // Arrange var projectEngine = CreateProjectEngine(); var pass = new SectionDirectivePass() { Engine = projectEngine.Engine, }; var content = "@section Header {

Hello World

}"; var sourceDocument = TestRazorSourceDocument.Create(content); var codeDocument = RazorCodeDocument.Create(sourceDocument); var irDocument = Lower(codeDocument, projectEngine); // Act pass.Execute(codeDocument, irDocument); // Assert Children( irDocument, node => Assert.IsType(node)); var @namespace = irDocument.Children[0]; Children( @namespace, node => Assert.IsType(node)); var @class = @namespace.Children[0]; var method = SingleChild(@class); Children( method, node => Assert.IsType(node), node => Assert.IsType(node)); var section = method.Children[1] as SectionIntermediateNode; Assert.Equal("Header", section.SectionName); Children(section, c => Html("

Hello World

", c)); } private static RazorProjectEngine CreateProjectEngine() { return RazorProjectEngine.Create(b => { SectionDirective.Register(b); }); } private static DocumentIntermediateNode Lower(RazorCodeDocument codeDocument, RazorProjectEngine projectEngine) { for (var i = 0; i < projectEngine.Phases.Count; i++) { var phase = projectEngine.Phases[i]; phase.Execute(codeDocument); if (phase is IRazorDocumentClassifierPhase) { break; } } var irDocument = codeDocument.GetDocumentIntermediateNode(); Assert.NotNull(irDocument); return irDocument; } } }