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
{
public interface IRazorEngineFeature : IRazorFeature
public interface IRazorEngineFeature
{
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)
=> 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)
{
var value = _resourceManager.GetString(name);

View File

@ -3,8 +3,6 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Razor.Language.Extensions;
@ -21,7 +19,7 @@ namespace Microsoft.AspNetCore.Razor.Language
{
var builder = new DefaultRazorEngineBuilder(designTime: false);
AddDefaults(builder);
AddDefaultRuntimeFeatures(builder.Features);
AddRuntimeDefaults(builder);
configure?.Invoke(builder);
return builder.Build();
}
@ -35,73 +33,46 @@ namespace Microsoft.AspNetCore.Razor.Language
{
var builder = new DefaultRazorEngineBuilder(designTime: true);
AddDefaults(builder);
AddDefaultDesignTimeFeatures(builder.Features);
AddDesignTimeDefaults(builder);
configure?.Invoke(builder);
return builder.Build();
}
public static RazorEngine CreateEmpty(Action<IRazorEngineBuilder> configure)
{
if (configure == null)
{
throw new ArgumentNullException(nameof(configure));
}
var builder = new DefaultRazorEngineBuilder(designTime: false);
configure(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);
configure?.Invoke(builder);
return builder.Build();
}
internal static void AddDefaults(IRazorEngineBuilder builder)
{
AddDefaultPhases(builder.Phases);
AddDefaultFeatures(builder.Features);
}
builder.Phases.Add(new DefaultRazorParsingPhase());
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
features.Add(new DefaultRazorDirectiveFeature());
var targetExtensionFeature = new DefaultRazorTargetExtensionFeature();
features.Add(targetExtensionFeature);
features.Add(new DefaultMetadataIdentifierFeature());
builder.Features.Add(new DefaultRazorDirectiveFeature());
builder.Features.Add(new DefaultRazorTargetExtensionFeature());
builder.Features.Add(new DefaultMetadataIdentifierFeature());
// Syntax Tree passes
features.Add(new DefaultDirectiveSyntaxTreePass());
features.Add(new HtmlNodeOptimizationPass());
builder.Features.Add(new DefaultDirectiveSyntaxTreePass());
builder.Features.Add(new HtmlNodeOptimizationPass());
// Intermediate Node Passes
features.Add(new DefaultDocumentClassifierPass());
features.Add(new MetadataAttributePass());
features.Add(new DirectiveRemovalOptimizationPass());
features.Add(new DefaultTagHelperOptimizationPass());
builder.Features.Add(new DefaultDocumentClassifierPass());
builder.Features.Add(new MetadataAttributePass());
builder.Features.Add(new DirectiveRemovalOptimizationPass());
builder.Features.Add(new DefaultTagHelperOptimizationPass());
// Default Code Target Extensions
targetExtensionFeature.TargetExtensions.Add(new MetadataAttributeTargetExtension());
builder.AddTargetExtension(new MetadataAttributeTargetExtension());
// Default configuration
var configurationFeature = new DefaultDocumentClassifierPassFeature();
@ -126,42 +97,36 @@ namespace Microsoft.AspNetCore.Razor.Language
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
features.Add(new DefaultRazorParserOptionsFeature(designTime: false, version: RazorParserOptions.LatestRazorLanguageVersion));
features.Add(new DefaultRazorCodeGenerationOptionsFeature(designTime: false));
builder.Features.Add(new DefaultRazorParserOptionsFeature(designTime: false, version: RazorParserOptions.LatestRazorLanguageVersion));
builder.Features.Add(new DefaultRazorCodeGenerationOptionsFeature(designTime: false));
// Intermediate Node Passes
features.Add(new PreallocatedTagHelperAttributeOptimizationPass());
builder.Features.Add(new PreallocatedTagHelperAttributeOptimizationPass());
// Code Target Extensions
var targetExtension = features.OfType<IRazorTargetExtensionFeature>().FirstOrDefault();
Debug.Assert(targetExtension != null);
targetExtension.TargetExtensions.Add(new DefaultTagHelperTargetExtension() { DesignTime = false });
targetExtension.TargetExtensions.Add(new PreallocatedAttributeTargetExtension());
builder.AddTargetExtension(new DefaultTagHelperTargetExtension() { DesignTime = false });
builder.AddTargetExtension(new PreallocatedAttributeTargetExtension());
}
internal static void AddDefaultDesignTimeFeatures(ICollection<IRazorEngineFeature> features)
internal static void AddDesignTimeDefaults(IRazorEngineBuilder builder)
{
// Configure options
features.Add(new DefaultRazorParserOptionsFeature(designTime: true, version: RazorParserOptions.LatestRazorLanguageVersion));
features.Add(new DefaultRazorCodeGenerationOptionsFeature(designTime: true));
features.Add(new SuppressChecksumOptionsFeature());
builder.Features.Add(new DefaultRazorParserOptionsFeature(designTime: true, version: RazorParserOptions.LatestRazorLanguageVersion));
builder.Features.Add(new DefaultRazorCodeGenerationOptionsFeature(designTime: true));
builder.Features.Add(new SuppressChecksumOptionsFeature());
// Intermediate Node Passes
features.Add(new DesignTimeDirectivePass());
builder.Features.Add(new DesignTimeDirectivePass());
// Code Target Extensions
var targetExtension = features.OfType<IRazorTargetExtensionFeature>().FirstOrDefault();
Debug.Assert(targetExtension != null);
targetExtension.TargetExtensions.Add(new DefaultTagHelperTargetExtension() { DesignTime = true });
targetExtension.TargetExtensions.Add(new DesignTimeDirectiveTargetExtension());
builder.AddTargetExtension(new DefaultTagHelperTargetExtension() { DesignTime = true });
builder.AddTargetExtension(new DesignTimeDirectiveTargetExtension());
}
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">
<value>The '{0}.{1}' property must not be null.</value>
</data>
<data name="RazorProjectEngineMissingFeatureDependency" xml:space="preserve">
<value>The '{0}' is missing feature '{1}'.</value>
</data>
</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;
}
}
}