// 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.Evolution.Intermediate; using Xunit; using static Microsoft.AspNetCore.Razor.Evolution.Intermediate.RazorIRAssert; namespace Microsoft.AspNetCore.Razor.Evolution { public class DefaultDocumentClassifierTest { [Fact] public void Execute_IgnoresDocumentsWithDocumentKind() { // Arrange var irDocument = new DocumentIRNode() { DocumentKind = "ignore", }; var pass = new DefaultDocumentClassifier(); pass.Engine = RazorEngine.CreateEmpty(b => { }); // Act pass.Execute(TestRazorCodeDocument.CreateEmpty(), irDocument); // Assert Assert.Equal("ignore", irDocument.DocumentKind); NoChildren(irDocument); } [Fact] public void Execute_CreatesClassStructure() { // Arrange var irDocument = new DocumentIRNode(); var pass = new DefaultDocumentClassifier(); pass.Engine = RazorEngine.CreateEmpty(b =>{ }); // Act pass.Execute(TestRazorCodeDocument.CreateEmpty(), irDocument); // Assert Assert.Equal(DefaultDocumentClassifier.DocumentKind, irDocument.DocumentKind); var @namespace = SingleChild(irDocument); var @class = SingleChild(@namespace); var method = SingleChild(@class); NoChildren(method); } [Fact] public void Execute_AddsCheckumFirstToDocument() { // Arrange var irDocument = new DocumentIRNode(); var builder = RazorIRBuilder.Create(irDocument); builder.Add(new ChecksumIRNode()); var pass = new DefaultDocumentClassifier(); pass.Engine = RazorEngine.CreateEmpty(b => { }); // Act pass.Execute(TestRazorCodeDocument.CreateEmpty(), irDocument); // Assert Children( irDocument, n => Assert.IsType(n), n => Assert.IsType(n)); } [Fact] public void Execute_AddsUsingsToNamespace() { // Arrange var irDocument = new DocumentIRNode(); var builder = RazorIRBuilder.Create(irDocument); builder.Add(new UsingStatementIRNode()); var pass = new DefaultDocumentClassifier(); pass.Engine = RazorEngine.CreateEmpty(b => { }); // Act pass.Execute(TestRazorCodeDocument.CreateEmpty(), irDocument); // Assert var @namespace = SingleChild(irDocument); Children( @namespace, n => Assert.IsType(n), n => Assert.IsType(n)); } [Fact] public void Execute_AddsTagHelperFieldsToClass() { // Arrange var irDocument = new DocumentIRNode(); var builder = RazorIRBuilder.Create(irDocument); builder.Add(new DeclareTagHelperFieldsIRNode()); var pass = new DefaultDocumentClassifier(); pass.Engine = RazorEngine.CreateEmpty(b => { }); // Act pass.Execute(TestRazorCodeDocument.CreateEmpty(), irDocument); // Assert var @namespace = SingleChild(irDocument); var @class = SingleChild(@namespace); Children( @class, n => Assert.IsType(n), n => Assert.IsType(n)); } [Fact] public void Execute_AddsTheRestToMethod() { // Arrange var irDocument = new DocumentIRNode(); var builder = RazorIRBuilder.Create(irDocument); builder.Add(new HtmlContentIRNode()); builder.Add(new CSharpStatementIRNode()); var pass = new DefaultDocumentClassifier(); pass.Engine = RazorEngine.CreateEmpty(b => { }); // Act pass.Execute(TestRazorCodeDocument.CreateEmpty(), irDocument); // Assert var @namespace = SingleChild(irDocument); var @class = SingleChild(@namespace); var method = SingleChild(@class); Children( method, n => Assert.IsType(n), n => Assert.IsType(n)); } } }