// 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.Collections.Generic; using System.Linq; using Microsoft.AspNetCore.Razor.Language.Extensions; using Moq; using Xunit; namespace Microsoft.AspNetCore.Razor.Language { public class RazorEngineTest { [Fact] public void Create_NoArg_CreatesDefaultRuntimeEngine() { // Arrange // Act var engine = RazorEngine.Create(); // Assert Assert.IsType(engine); AssertDefaultRuntimeFeatures(engine.Features); AssertDefaultRuntimePhases(engine.Phases); AssertDefaultRuntimeTargetExtensions(engine); } [Fact] public void CreateDesignTime_NoArg_CreatesDefaultDesignTimeEngine() { // Arrange // Act var engine = RazorEngine.CreateDesignTime(); // Assert Assert.IsType(engine); AssertDefaultDesignTimeFeatures(engine.Features); AssertDefaultDesignTimePhases(engine.Phases); AssertDefaultDesignTimeTargetExtensions(engine); } [Fact] public void Create_Null_CreatesDefaultRuntimeEngine() { // Arrange // Act var engine = RazorEngine.Create(configure: null); // Assert Assert.IsType(engine); AssertDefaultRuntimeFeatures(engine.Features); AssertDefaultRuntimePhases(engine.Phases); AssertDefaultRuntimeTargetExtensions(engine); } [Fact] public void CreateDesignTime_Null_CreatesDefaultDesignTimeEngine() { // Arrange // Act var engine = RazorEngine.CreateDesignTime(configure: null); // Assert Assert.IsType(engine); AssertDefaultDesignTimeFeatures(engine.Features); AssertDefaultDesignTimePhases(engine.Phases); AssertDefaultDesignTimeTargetExtensions(engine); } [Fact] public void Create_Lambda_AddsFeaturesAndPhases() { // Arrange IRazorEngineFeature[] features = null; IRazorEnginePhase[] phases = null; // Act var engine = RazorEngine.Create(builder => { builder.Features.Clear(); builder.Phases.Clear(); builder.Features.Add(Mock.Of()); builder.Features.Add(Mock.Of()); builder.Phases.Add(Mock.Of()); builder.Phases.Add(Mock.Of()); features = builder.Features.ToArray(); phases = builder.Phases.ToArray(); }); // Assert Assert.Collection( engine.Features, f => Assert.Same(features[0], f), f => Assert.Same(features[1], f)); Assert.Collection( engine.Phases, p => Assert.Same(phases[0], p), p => Assert.Same(phases[1], p)); } [Fact] public void CreateDesignTime_Lambda_AddsFeaturesAndPhases() { // Arrange IRazorEngineFeature[] features = null; IRazorEnginePhase[] phases = null; // Act var engine = RazorEngine.CreateDesignTime(builder => { builder.Features.Clear(); builder.Phases.Clear(); builder.Features.Add(Mock.Of()); builder.Features.Add(Mock.Of()); builder.Phases.Add(Mock.Of()); builder.Phases.Add(Mock.Of()); features = builder.Features.ToArray(); phases = builder.Phases.ToArray(); }); // Assert Assert.Collection( engine.Features, f => Assert.Same(features[0], f), f => Assert.Same(features[1], f)); Assert.Collection( engine.Phases, p => Assert.Same(phases[0], p), p => Assert.Same(phases[1], p)); } private static void AssertDefaultRuntimeTargetExtensions(RazorEngine engine) { var feature = engine.Features.OfType().FirstOrDefault(); Assert.NotNull(feature); Assert.Collection( feature.TargetExtensions, extension => Assert.IsType(extension), extension => Assert.False(Assert.IsType(extension).DesignTime), extension => Assert.IsType(extension)); } private static void AssertDefaultRuntimeFeatures(IEnumerable features) { Assert.Collection( features, feature => Assert.IsType(feature), feature => Assert.IsType(feature), feature => Assert.IsType(feature), feature => Assert.IsType(feature), feature => Assert.IsType(feature), feature => Assert.IsType(feature), feature => Assert.IsType(feature), feature => Assert.IsType(feature), feature => Assert.IsType(feature), feature => Assert.IsType(feature), feature => Assert.IsType(feature), feature => Assert.IsType(feature), feature => Assert.IsType(feature)); } private static void AssertDefaultRuntimePhases(IReadOnlyList phases) { Assert.Collection( phases, phase => Assert.IsType(phase), phase => Assert.IsType(phase), phase => Assert.IsType(phase), phase => Assert.IsType(phase), phase => Assert.IsType(phase), phase => Assert.IsType(phase), phase => Assert.IsType(phase), phase => Assert.IsType(phase)); } private static void AssertDefaultDesignTimeTargetExtensions(RazorEngine engine) { var feature = engine.Features.OfType().FirstOrDefault(); Assert.NotNull(feature); Assert.Collection( feature.TargetExtensions, extension => Assert.IsType(extension), extension => Assert.True(Assert.IsType(extension).DesignTime), extension => Assert.IsType(extension)); } private static void AssertDefaultDesignTimeFeatures(IEnumerable features) { Assert.Collection( features, feature => Assert.IsType(feature), feature => Assert.IsType(feature), feature => Assert.IsType(feature), feature => Assert.IsType(feature), feature => Assert.IsType(feature), feature => Assert.IsType(feature), feature => Assert.IsType(feature), feature => Assert.IsType(feature), feature => Assert.IsType(feature), feature => Assert.IsType(feature), feature => Assert.IsType(feature), feature => Assert.IsType(feature), feature => Assert.IsType(feature), feature => Assert.IsType(feature)); } private static void AssertDefaultDesignTimePhases(IReadOnlyList phases) { Assert.Collection( phases, phase => Assert.IsType(phase), phase => Assert.IsType(phase), phase => Assert.IsType(phase), phase => Assert.IsType(phase), phase => Assert.IsType(phase), phase => Assert.IsType(phase), phase => Assert.IsType(phase), phase => Assert.IsType(phase)); } } }