Revert "Add contracts for RazorProjectEngine."

This reverts commit 59f2cf8e66.
This commit is contained in:
N. Taylor Mullen 2018-01-23 11:42:38 -08:00
parent 59f2cf8e66
commit f301d92332
19 changed files with 36 additions and 699 deletions

View File

@ -1,15 +0,0 @@
// 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;
using System.Collections.Generic;
namespace Microsoft.AspNetCore.Razor.Language
{
internal class DefaultRazorImportFeature : IRazorImportFeature
{
public RazorProjectEngine ProjectEngine { get; set; }
public IReadOnlyList<RazorSourceDocument> GetImports(string sourceFilePath) => Array.Empty<RazorSourceDocument>();
}
}

View File

@ -1,93 +0,0 @@
// 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;
using System.Collections.Generic;
using System.Linq;
namespace Microsoft.AspNetCore.Razor.Language
{
internal class DefaultRazorProjectEngine : RazorProjectEngine
{
public DefaultRazorProjectEngine(
RazorEngine engine,
RazorProjectFileSystem fileSystem,
IReadOnlyList<IRazorProjectEngineFeature> features)
{
if (engine == null)
{
throw new ArgumentNullException(nameof(engine));
}
if (fileSystem == null)
{
throw new ArgumentNullException(nameof(fileSystem));
}
if (features == null)
{
throw new ArgumentNullException(nameof(features));
}
Engine = engine;
FileSystem = fileSystem;
Features = features;
for (var i = 0; i < features.Count; i++)
{
features[i].ProjectEngine = this;
}
}
public override RazorProjectFileSystem FileSystem { get; }
public override RazorEngine Engine { get; }
public override IReadOnlyList<IRazorProjectEngineFeature> Features { get; }
public override RazorCodeDocument Process(string filePath)
{
if (string.IsNullOrEmpty(filePath))
{
throw new ArgumentException(Resources.ArgumentCannotBeNullOrEmpty, nameof(filePath));
}
var projectItem = FileSystem.GetItem(filePath);
var sourceDocument = RazorSourceDocument.ReadFrom(projectItem);
var codeDocument = Process(sourceDocument);
return codeDocument;
}
public override RazorCodeDocument Process(RazorSourceDocument sourceDocument)
{
if (sourceDocument == null)
{
throw new ArgumentNullException(nameof(sourceDocument));
}
var importFeature = GetRequiredFeature<IRazorImportFeature>();
var imports = importFeature.GetImports(sourceDocument.FilePath);
var codeDocument = RazorCodeDocument.Create(sourceDocument, imports);
Engine.Process(codeDocument);
return codeDocument;
}
private TFeature GetRequiredFeature<TFeature>() where TFeature : IRazorProjectEngineFeature
{
var feature = Features.OfType<TFeature>().FirstOrDefault();
if (feature == null)
{
throw new InvalidOperationException(
Resources.FormatRazorProjectEngineMissingFeatureDependency(
typeof(RazorProjectEngine).FullName,
typeof(TFeature).FullName));
}
return feature;
}
}
}

View File

@ -1,66 +0,0 @@
// 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;
using System.Collections.Generic;
using System.Linq;
namespace Microsoft.AspNetCore.Razor.Language
{
internal class DefaultRazorProjectEngineBuilder : RazorProjectEngineBuilder
{
public DefaultRazorProjectEngineBuilder(bool designTime, RazorProjectFileSystem fileSystem)
{
if (fileSystem == null)
{
throw new ArgumentNullException(nameof(fileSystem));
}
DesignTime = designTime;
FileSystem = fileSystem;
Features = new List<IRazorFeature>();
Phases = new List<IRazorEnginePhase>();
}
public override RazorProjectFileSystem FileSystem { get; }
public override ICollection<IRazorFeature> Features { get; }
public override IList<IRazorEnginePhase> Phases { get; }
public override bool DesignTime { get; }
public override RazorProjectEngine Build()
{
RazorEngine engine = null;
if (DesignTime)
{
engine = RazorEngine.CreateDesignTimeEmpty(ConfigureRazorEngine);
}
else
{
engine = RazorEngine.CreateEmpty(ConfigureRazorEngine);
}
var projectEngineFeatures = Features.OfType<IRazorProjectEngineFeature>().ToArray();
var projectEngine = new DefaultRazorProjectEngine(engine, FileSystem, projectEngineFeatures);
return projectEngine;
}
private void ConfigureRazorEngine(IRazorEngineBuilder engineBuilder)
{
var engineFeatures = Features.OfType<IRazorEngineFeature>();
foreach (var engineFeature in engineFeatures)
{
engineBuilder.Features.Add(engineFeature);
}
for (var i = 0; i < Phases.Count; i++)
{
engineBuilder.Phases.Add(Phases[i]);
}
}
}
}

View File

@ -3,7 +3,7 @@
namespace Microsoft.AspNetCore.Razor.Language namespace Microsoft.AspNetCore.Razor.Language
{ {
public interface IRazorEngineFeature : IRazorFeature public interface IRazorEngineFeature
{ {
RazorEngine Engine { get; set; } RazorEngine Engine { get; set; }
} }

View File

@ -1,9 +0,0 @@
// 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.
namespace Microsoft.AspNetCore.Razor.Language
{
public interface IRazorFeature
{
}
}

View File

@ -1,12 +0,0 @@
// 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;
namespace Microsoft.AspNetCore.Razor.Language
{
public interface IRazorImportFeature : IRazorProjectEngineFeature
{
IReadOnlyList<RazorSourceDocument> GetImports(string sourceFilePath);
}
}

View File

@ -1,10 +0,0 @@
// 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.
namespace Microsoft.AspNetCore.Razor.Language
{
public interface IRazorProjectEngineFeature : IRazorFeature
{
RazorProjectEngine ProjectEngine { get; set; }
}
}

View File

@ -1856,20 +1856,6 @@ namespace Microsoft.AspNetCore.Razor.Language
internal static string FormatPropertyMustNotBeNull(object p0, object p1) internal static string FormatPropertyMustNotBeNull(object p0, object p1)
=> string.Format(CultureInfo.CurrentCulture, GetString("PropertyMustNotBeNull"), p0, p1); => string.Format(CultureInfo.CurrentCulture, GetString("PropertyMustNotBeNull"), p0, p1);
/// <summary>
/// The '{0}' is missing feature '{1}'.
/// </summary>
internal static string RazorProjectEngineMissingFeatureDependency
{
get => GetString("RazorProjectEngineMissingFeatureDependency");
}
/// <summary>
/// The '{0}' is missing feature '{1}'.
/// </summary>
internal static string FormatRazorProjectEngineMissingFeatureDependency(object p0, object p1)
=> string.Format(CultureInfo.CurrentCulture, GetString("RazorProjectEngineMissingFeatureDependency"), p0, p1);
private static string GetString(string name, params string[] formatterNames) private static string GetString(string name, params string[] formatterNames)
{ {
var value = _resourceManager.GetString(name); var value = _resourceManager.GetString(name);

View File

@ -3,8 +3,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Razor.Language.Extensions; using Microsoft.AspNetCore.Razor.Language.Extensions;
@ -21,7 +19,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
var builder = new DefaultRazorEngineBuilder(designTime: false); var builder = new DefaultRazorEngineBuilder(designTime: false);
AddDefaults(builder); AddDefaults(builder);
AddDefaultRuntimeFeatures(builder.Features); AddRuntimeDefaults(builder);
configure?.Invoke(builder); configure?.Invoke(builder);
return builder.Build(); return builder.Build();
} }
@ -35,73 +33,46 @@ namespace Microsoft.AspNetCore.Razor.Language
{ {
var builder = new DefaultRazorEngineBuilder(designTime: true); var builder = new DefaultRazorEngineBuilder(designTime: true);
AddDefaults(builder); AddDefaults(builder);
AddDefaultDesignTimeFeatures(builder.Features); AddDesignTimeDefaults(builder);
configure?.Invoke(builder); configure?.Invoke(builder);
return builder.Build(); return builder.Build();
} }
public static RazorEngine CreateEmpty(Action<IRazorEngineBuilder> configure) public static RazorEngine CreateEmpty(Action<IRazorEngineBuilder> configure)
{ {
if (configure == null)
{
throw new ArgumentNullException(nameof(configure));
}
var builder = new DefaultRazorEngineBuilder(designTime: false); var builder = new DefaultRazorEngineBuilder(designTime: false);
configure(builder); configure?.Invoke(builder);
return builder.Build();
}
public static RazorEngine CreateDesignTimeEmpty(Action<IRazorEngineBuilder> configure)
{
if (configure == null)
{
throw new ArgumentNullException(nameof(configure));
}
var builder = new DefaultRazorEngineBuilder(designTime: true);
configure(builder);
return builder.Build(); return builder.Build();
} }
internal static void AddDefaults(IRazorEngineBuilder builder) internal static void AddDefaults(IRazorEngineBuilder builder)
{ {
AddDefaultPhases(builder.Phases); builder.Phases.Add(new DefaultRazorParsingPhase());
AddDefaultFeatures(builder.Features); builder.Phases.Add(new DefaultRazorSyntaxTreePhase());
} builder.Phases.Add(new DefaultRazorTagHelperBinderPhase());
builder.Phases.Add(new DefaultRazorIntermediateNodeLoweringPhase());
builder.Phases.Add(new DefaultRazorDocumentClassifierPhase());
builder.Phases.Add(new DefaultRazorDirectiveClassifierPhase());
builder.Phases.Add(new DefaultRazorOptimizationPhase());
builder.Phases.Add(new DefaultRazorCSharpLoweringPhase());
internal static void AddDefaultPhases(IList<IRazorEnginePhase> phases)
{
phases.Add(new DefaultRazorParsingPhase());
phases.Add(new DefaultRazorSyntaxTreePhase());
phases.Add(new DefaultRazorTagHelperBinderPhase());
phases.Add(new DefaultRazorIntermediateNodeLoweringPhase());
phases.Add(new DefaultRazorDocumentClassifierPhase());
phases.Add(new DefaultRazorDirectiveClassifierPhase());
phases.Add(new DefaultRazorOptimizationPhase());
phases.Add(new DefaultRazorCSharpLoweringPhase());
}
internal static void AddDefaultFeatures(ICollection<IRazorEngineFeature> features)
{
// General extensibility // General extensibility
features.Add(new DefaultRazorDirectiveFeature()); builder.Features.Add(new DefaultRazorDirectiveFeature());
var targetExtensionFeature = new DefaultRazorTargetExtensionFeature(); builder.Features.Add(new DefaultRazorTargetExtensionFeature());
features.Add(targetExtensionFeature); builder.Features.Add(new DefaultMetadataIdentifierFeature());
features.Add(new DefaultMetadataIdentifierFeature());
// Syntax Tree passes // Syntax Tree passes
features.Add(new DefaultDirectiveSyntaxTreePass()); builder.Features.Add(new DefaultDirectiveSyntaxTreePass());
features.Add(new HtmlNodeOptimizationPass()); builder.Features.Add(new HtmlNodeOptimizationPass());
// Intermediate Node Passes // Intermediate Node Passes
features.Add(new DefaultDocumentClassifierPass()); builder.Features.Add(new DefaultDocumentClassifierPass());
features.Add(new MetadataAttributePass()); builder.Features.Add(new MetadataAttributePass());
features.Add(new DirectiveRemovalOptimizationPass()); builder.Features.Add(new DirectiveRemovalOptimizationPass());
features.Add(new DefaultTagHelperOptimizationPass()); builder.Features.Add(new DefaultTagHelperOptimizationPass());
// Default Code Target Extensions // Default Code Target Extensions
targetExtensionFeature.TargetExtensions.Add(new MetadataAttributeTargetExtension()); builder.AddTargetExtension(new MetadataAttributeTargetExtension());
// Default configuration // Default configuration
var configurationFeature = new DefaultDocumentClassifierPassFeature(); var configurationFeature = new DefaultDocumentClassifierPassFeature();
@ -126,42 +97,36 @@ namespace Microsoft.AspNetCore.Razor.Language
method.Modifiers.Add("override"); method.Modifiers.Add("override");
}); });
features.Add(configurationFeature); builder.Features.Add(configurationFeature);
} }
internal static void AddDefaultRuntimeFeatures(ICollection<IRazorEngineFeature> features) internal static void AddRuntimeDefaults(IRazorEngineBuilder builder)
{ {
// Configure options // Configure options
features.Add(new DefaultRazorParserOptionsFeature(designTime: false, version: RazorParserOptions.LatestRazorLanguageVersion)); builder.Features.Add(new DefaultRazorParserOptionsFeature(designTime: false, version: RazorParserOptions.LatestRazorLanguageVersion));
features.Add(new DefaultRazorCodeGenerationOptionsFeature(designTime: false)); builder.Features.Add(new DefaultRazorCodeGenerationOptionsFeature(designTime: false));
// Intermediate Node Passes // Intermediate Node Passes
features.Add(new PreallocatedTagHelperAttributeOptimizationPass()); builder.Features.Add(new PreallocatedTagHelperAttributeOptimizationPass());
// Code Target Extensions // Code Target Extensions
var targetExtension = features.OfType<IRazorTargetExtensionFeature>().FirstOrDefault(); builder.AddTargetExtension(new DefaultTagHelperTargetExtension() { DesignTime = false });
Debug.Assert(targetExtension != null); builder.AddTargetExtension(new PreallocatedAttributeTargetExtension());
targetExtension.TargetExtensions.Add(new DefaultTagHelperTargetExtension() { DesignTime = false });
targetExtension.TargetExtensions.Add(new PreallocatedAttributeTargetExtension());
} }
internal static void AddDefaultDesignTimeFeatures(ICollection<IRazorEngineFeature> features) internal static void AddDesignTimeDefaults(IRazorEngineBuilder builder)
{ {
// Configure options // Configure options
features.Add(new DefaultRazorParserOptionsFeature(designTime: true, version: RazorParserOptions.LatestRazorLanguageVersion)); builder.Features.Add(new DefaultRazorParserOptionsFeature(designTime: true, version: RazorParserOptions.LatestRazorLanguageVersion));
features.Add(new DefaultRazorCodeGenerationOptionsFeature(designTime: true)); builder.Features.Add(new DefaultRazorCodeGenerationOptionsFeature(designTime: true));
features.Add(new SuppressChecksumOptionsFeature()); builder.Features.Add(new SuppressChecksumOptionsFeature());
// Intermediate Node Passes // Intermediate Node Passes
features.Add(new DesignTimeDirectivePass()); builder.Features.Add(new DesignTimeDirectivePass());
// Code Target Extensions // Code Target Extensions
var targetExtension = features.OfType<IRazorTargetExtensionFeature>().FirstOrDefault(); builder.AddTargetExtension(new DefaultTagHelperTargetExtension() { DesignTime = true });
Debug.Assert(targetExtension != null); builder.AddTargetExtension(new DesignTimeDirectiveTargetExtension());
targetExtension.TargetExtensions.Add(new DefaultTagHelperTargetExtension() { DesignTime = true });
targetExtension.TargetExtensions.Add(new DesignTimeDirectiveTargetExtension());
} }
public abstract IReadOnlyList<IRazorEngineFeature> Features { get; } public abstract IReadOnlyList<IRazorEngineFeature> Features { get; }

View File

@ -1,129 +0,0 @@
// 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;
using System.Collections.Generic;
namespace Microsoft.AspNetCore.Razor.Language
{
public abstract class RazorProjectEngine
{
public abstract RazorProjectFileSystem FileSystem { get; }
public abstract RazorEngine Engine { get; }
public abstract IReadOnlyList<IRazorProjectEngineFeature> Features { get; }
public abstract RazorCodeDocument Process(string filePath);
public abstract RazorCodeDocument Process(RazorSourceDocument sourceDocument);
public static RazorProjectEngine Create(RazorProjectFileSystem fileSystem) => Create(fileSystem, configure: null);
public static RazorProjectEngine Create(RazorProjectFileSystem fileSystem, Action<RazorProjectEngineBuilder> configure)
{
if (fileSystem == null)
{
throw new ArgumentNullException(nameof(fileSystem));
}
var builder = new DefaultRazorProjectEngineBuilder(designTime: false, fileSystem: fileSystem);
AddDefaults(builder);
AddRuntimeDefaults(builder);
configure?.Invoke(builder);
return builder.Build();
}
public static RazorProjectEngine CreateDesignTime(RazorProjectFileSystem fileSystem) => CreateDesignTime(fileSystem, configure: null);
public static RazorProjectEngine CreateDesignTime(RazorProjectFileSystem fileSystem, Action<RazorProjectEngineBuilder> configure)
{
if (fileSystem == null)
{
throw new ArgumentNullException(nameof(fileSystem));
}
var builder = new DefaultRazorProjectEngineBuilder(designTime: true, fileSystem: fileSystem);
AddDefaults(builder);
AddDesignTimeDefaults(builder);
configure?.Invoke(builder);
return builder.Build();
}
public static RazorProjectEngine CreateEmpty(RazorProjectFileSystem fileSystem, Action<RazorProjectEngineBuilder> configure)
{
if (fileSystem == null)
{
throw new ArgumentNullException(nameof(fileSystem));
}
if (configure == null)
{
throw new ArgumentNullException(nameof(configure));
}
var builder = new DefaultRazorProjectEngineBuilder(designTime: false, fileSystem: fileSystem);
configure(builder);
return builder.Build();
}
public static RazorProjectEngine CreateDesignTimeEmpty(RazorProjectFileSystem fileSystem, Action<RazorProjectEngineBuilder> configure)
{
if (fileSystem == null)
{
throw new ArgumentNullException(nameof(fileSystem));
}
if (configure == null)
{
throw new ArgumentNullException(nameof(configure));
}
var builder = new DefaultRazorProjectEngineBuilder(designTime: true, fileSystem: fileSystem);
configure(builder);
return builder.Build();
}
private static void AddDefaults(RazorProjectEngineBuilder builder)
{
builder.Features.Add(new DefaultRazorImportFeature());
}
private static void AddDesignTimeDefaults(RazorProjectEngineBuilder builder)
{
var engineFeatures = new List<IRazorEngineFeature>();
RazorEngine.AddDefaultFeatures(engineFeatures);
RazorEngine.AddDefaultDesignTimeFeatures(engineFeatures);
AddEngineFeaturesAndPhases(builder, engineFeatures);
}
private static void AddRuntimeDefaults(RazorProjectEngineBuilder builder)
{
var engineFeatures = new List<IRazorEngineFeature>();
RazorEngine.AddDefaultFeatures(engineFeatures);
RazorEngine.AddDefaultRuntimeFeatures(engineFeatures);
AddEngineFeaturesAndPhases(builder, engineFeatures);
}
private static void AddEngineFeaturesAndPhases(RazorProjectEngineBuilder builder, IReadOnlyList<IRazorEngineFeature> engineFeatures)
{
for (var i = 0; i < engineFeatures.Count; i++)
{
var engineFeature = engineFeatures[i];
builder.Features.Add(engineFeature);
}
RazorEngine.AddDefaultPhases(builder.Phases);
}
}
}

View File

@ -1,20 +0,0 @@
// 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;
namespace Microsoft.AspNetCore.Razor.Language
{
public abstract class RazorProjectEngineBuilder
{
public abstract RazorProjectFileSystem FileSystem { get; }
public abstract ICollection<IRazorFeature> Features { get; }
public abstract IList<IRazorEnginePhase> Phases { get; }
public abstract bool DesignTime { get; }
public abstract RazorProjectEngine Build();
}
}

View File

@ -1,33 +0,0 @@
// 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;
using System.Linq;
namespace Microsoft.AspNetCore.Razor.Language
{
public static class RazorProjectEngineBuilderExtensions
{
public static void SetImportFeature(this RazorProjectEngineBuilder builder, IRazorImportFeature feature)
{
if (builder == null)
{
throw new ArgumentNullException(nameof(builder));
}
if (feature == null)
{
throw new ArgumentNullException(nameof(builder));
}
// Remove any existing import features in favor of the new one we're given.
var existingFeatures = builder.Features.OfType<IRazorImportFeature>().ToArray();
foreach (var existingFeature in existingFeatures)
{
builder.Features.Remove(existingFeature);
}
builder.Features.Add(feature);
}
}
}

View File

@ -1,9 +0,0 @@
// 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.
namespace Microsoft.AspNetCore.Razor.Language
{
public abstract class RazorProjectFileSystem : RazorProject
{
}
}

View File

@ -533,7 +533,4 @@ Instead, wrap the contents of the block in "{{}}":
<data name="PropertyMustNotBeNull" xml:space="preserve"> <data name="PropertyMustNotBeNull" xml:space="preserve">
<value>The '{0}.{1}' property must not be null.</value> <value>The '{0}.{1}' property must not be null.</value>
</data> </data>
<data name="RazorProjectEngineMissingFeatureDependency" xml:space="preserve">
<value>The '{0}' is missing feature '{1}'.</value>
</data>
</root> </root>

View File

@ -1,65 +0,0 @@
// 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.Linq;
using Moq;
using Xunit;
namespace Microsoft.AspNetCore.Razor.Language
{
public class DefaultRazorProjectEngineBuilderTest
{
[Fact]
public void Build_AddsFeaturesToRazorEngine()
{
// Arrange
var builder = new DefaultRazorProjectEngineBuilder(false, Mock.Of<RazorProjectFileSystem>());
builder.Features.Add(Mock.Of<IRazorEngineFeature>());
builder.Features.Add(Mock.Of<IRazorEngineFeature>());
builder.Features.Add(Mock.Of<IRazorProjectEngineFeature>());
var features = builder.Features.ToArray();
// Act
var projectEngine = builder.Build();
// Assert
Assert.Collection(projectEngine.Engine.Features,
feature => Assert.Same(features[0], feature),
feature => Assert.Same(features[1], feature));
}
[Fact]
public void Build_AddsPhasesToRazorEngine()
{
// Arrange
var builder = new DefaultRazorProjectEngineBuilder(false, Mock.Of<RazorProjectFileSystem>());
builder.Phases.Add(Mock.Of<IRazorEnginePhase>());
builder.Phases.Add(Mock.Of<IRazorEnginePhase>());
var phases = builder.Phases.ToArray();
// Act
var projectEngine = builder.Build();
// Assert
Assert.Collection(projectEngine.Engine.Phases,
phase => Assert.Same(phases[0], phase),
phase => Assert.Same(phases[1], phase));
}
[Fact]
public void Build_CreatesProjectEngineWithFileSystem()
{
// Arrange
var fileSystem = Mock.Of<RazorProjectFileSystem>();
var builder = new DefaultRazorProjectEngineBuilder(false, fileSystem);
// Act
var projectEngine = builder.Build();
// Assert
Assert.Same(fileSystem, projectEngine.FileSystem);
}
}
}

View File

@ -1,49 +0,0 @@
// 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 Moq;
using Xunit;
namespace Microsoft.AspNetCore.Razor.Language
{
public class DefaultRazorProjectEngineIntegrationTest
{
[Fact]
public void Process_GetsImportsFromFeature()
{
// Arrange
var sourceDocument = TestRazorSourceDocument.Create();
var testImport = TestRazorSourceDocument.Create();
var importFeature = new Mock<IRazorImportFeature>();
importFeature.Setup(feature => feature.GetImports(It.IsAny<string>()))
.Returns(new[] { testImport });
var projectEngine = RazorProjectEngine.Create(TestRazorProjectFileSystem.Empty, builder =>
{
builder.SetImportFeature(importFeature.Object);
});
// Act
var codeDocument = projectEngine.Process(sourceDocument);
// Assert
var import = Assert.Single(codeDocument.Imports);
Assert.Same(testImport, import);
}
[Fact]
public void Process_GeneratesCodeDocumentWithValidCSharpDocument()
{
// Arrange
var sourceDocument = TestRazorSourceDocument.Create();
var projectEngine = RazorProjectEngine.Create(TestRazorProjectFileSystem.Empty);
// Act
var codeDocument = projectEngine.Process(sourceDocument);
// Assert
var csharpDocument = codeDocument.GetCSharpDocument();
Assert.NotNull(csharpDocument);
Assert.Empty(csharpDocument.Diagnostics);
}
}
}

View File

@ -1,29 +0,0 @@
// 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 Moq;
using Xunit;
namespace Microsoft.AspNetCore.Razor.Language
{
public class DefaultRazorProjectEngineTest
{
[Fact]
public void Process_AsksFileSystemForItems()
{
// Arrange
var razorProjectItem = new TestRazorProjectItem("/some/path.cshtml");
var testFileSystem = new Mock<RazorProjectFileSystem>();
testFileSystem.Setup(fileSystem => fileSystem.GetItem("/some/path.cshtml"))
.Returns(razorProjectItem)
.Verifiable();
var projectEngine = RazorProjectEngine.Create(testFileSystem.Object);
// Act
projectEngine.Process("/some/path.cshtml");
// Assert
testFileSystem.Verify();
}
}
}

View File

@ -1,30 +0,0 @@
// 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 Moq;
using Xunit;
namespace Microsoft.AspNetCore.Razor.Language
{
public class RazorProjectEngineBuilderExtensionsTest
{
[Fact]
public void SetImportFeature_SetsTheImportFeature()
{
// Arrange
var builder = new DefaultRazorProjectEngineBuilder(false, Mock.Of<RazorProjectFileSystem>());
var testFeature1 = Mock.Of<IRazorImportFeature>();
var testFeature2 = Mock.Of<IRazorImportFeature>();
builder.Features.Add(testFeature1);
builder.Features.Add(testFeature2);
var newFeature = Mock.Of<IRazorImportFeature>();
// Act
builder.SetImportFeature(newFeature);
// Assert
var feature = Assert.Single(builder.Features);
Assert.Same(newFeature, feature);
}
}
}

View File

@ -1,42 +0,0 @@
// 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;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Microsoft.AspNetCore.Razor.Language
{
public class TestRazorProjectFileSystem : RazorProjectFileSystem
{
public static RazorProjectFileSystem Empty = new TestRazorProjectFileSystem();
private readonly Dictionary<string, RazorProjectItem> _lookup;
public TestRazorProjectFileSystem()
: this(new RazorProjectItem[0])
{
}
public TestRazorProjectFileSystem(IList<RazorProjectItem> items)
{
_lookup = items.ToDictionary(item => item.FilePath);
}
public override IEnumerable<RazorProjectItem> EnumerateItems(string basePath)
{
throw new NotImplementedException();
}
public override RazorProjectItem GetItem(string path)
{
if (!_lookup.TryGetValue(path, out var value))
{
value = new NotFoundProjectItem("", path);
}
return value;
}
}
}