public void ViewLocationExpanders_ReturnsActivatedListOfExpanders() { // Arrange var service = Mock.Of<ITestService>(); var expander = Mock.Of<IViewLocationExpander>(); var type = typeof(TestViewLocationExpander); var serviceProvider = new Mock<IServiceProvider>(); serviceProvider.Setup(p => p.GetService(typeof(ITestService))) .Returns(service); var typeActivatorCache = new DefaultTypeActivatorCache(); var options = new RazorViewEngineOptions(); options.ViewLocationExpanders.Add(type); options.ViewLocationExpanders.Add(expander); var accessor = new Mock<IOptions<RazorViewEngineOptions>>(); accessor.SetupGet(a => a.Options) .Returns(options); var provider = new DefaultViewLocationExpanderProvider(accessor.Object, typeActivatorCache, serviceProvider.Object); // Act var result = provider.ViewLocationExpanders; // Assert Assert.Equal(2, result.Count); var testExpander = Assert.IsType<TestViewLocationExpander>(result[0]); Assert.Same(service, testExpander.Service); Assert.Same(expander, result[1]); }
public void FileProvider_ReturnsCompositeFileProviderIfNoInstancesAreRegistered() { // Arrange var options = new RazorViewEngineOptions(); var optionsAccessor = new Mock<IOptions<RazorViewEngineOptions>>(); optionsAccessor.SetupGet(o => o.Value).Returns(options); var fileProviderAccessor = new DefaultRazorViewEngineFileProviderAccessor(optionsAccessor.Object); // Act var actual = fileProviderAccessor.FileProvider; // Assert Assert.IsType<CompositeFileProvider>(actual); }
public void FileProvider_ReturnsInstanceIfExactlyOneFileProviderIsSpecified() { // Arrange var fileProvider = new TestFileProvider(); var options = new RazorViewEngineOptions(); options.FileProviders.Add(fileProvider); var optionsAccessor = new Mock<IOptions<RazorViewEngineOptions>>(); optionsAccessor.SetupGet(o => o.Value).Returns(options); var fileProviderAccessor = new DefaultRazorViewEngineFileProviderAccessor(optionsAccessor.Object); // Act var actual = fileProviderAccessor.FileProvider; // Assert Assert.Same(fileProvider, actual); }
// Internal for unit testing internal DefaultRoslynCompilationService( DependencyContext dependencyContext, RazorViewEngineOptions viewEngineOptions, IRazorViewEngineFileProviderAccessor fileProviderAccessor, ILoggerFactory loggerFactory) { _dependencyContext = dependencyContext; _applicationReferences = new Lazy<List<MetadataReference>>(GetApplicationReferences); _fileProvider = fileProviderAccessor.FileProvider; _compilationCallback = viewEngineOptions.CompilationCallback; _parseOptions = viewEngineOptions.ParseOptions; _compilationOptions = viewEngineOptions.CompilationOptions; _logger = loggerFactory.CreateLogger<DefaultRoslynCompilationService>(); #if NETSTANDARD1_5 _razorLoadContext = new RazorLoadContext(); #endif }
public void Configure(RazorViewEngineOptions options) => options.FileProviders.Add(new ManifestEmbeddedFileProvider(GetType().Assembly));
public TestRoslynCompilationService(ApplicationPartManager partManager, RazorViewEngineOptions options) : base(partManager, GetAccessor(options), GetFileProviderAccessor(), NullLoggerFactory.Instance) { }
private static IOptions<RazorViewEngineOptions> GetOptions(IFileProvider fileProvider = null) { var razorViewEngineOptions = new RazorViewEngineOptions { FileProvider = fileProvider ?? new TestFileProvider() }; var options = new Mock<IOptions<RazorViewEngineOptions>>(); options.SetupGet(o => o.Options) .Returns(razorViewEngineOptions); return options.Object; }
public static RazorViewEngineOptions AddEmbeddedBootstrap3ViewsForCloudscribeCoreIdentityServerIntegration(this RazorViewEngineOptions options) { options.FileProviders.Add(new EmbeddedFileProvider( typeof(Bootstrap3).GetTypeInfo().Assembly, "cloudscribe.Core.IdentityServerIntegration.Views.Bootstrap3" )); return(options); }
public static void AddAdditionalCompilationReferences(this IServiceCollection services, RazorViewEngineOptions options) { // We don't need this for production as views are pre-compiled var hostingEnvironment = services.BuildServiceProvider().GetService <IHostingEnvironment>(); if (!hostingEnvironment.IsDevelopment()) { return; } // Ensure loaded modules are aware of current context var moduleManager = services.BuildServiceProvider().GetService <IModuleManager>(); var assemblies = moduleManager.LoadModuleAssembliesAsync().Result; var moduleReferences = assemblies .Where(x => !x.IsDynamic && !string.IsNullOrWhiteSpace(x.Location)) .Select(x => MetadataReference.CreateFromFile(x.Location)) .ToList(); foreach (var moduleReference in moduleReferences) { // TODO: Need to resolve for .NET 3.0 - AdditionalCompilationReferences is marked obsolete in 2.2.1 // Apps using these APIs to add assembly references to the // compilation context for runtime compilation should instead // use ApplicationPartManager.AddApplicationPart to add application // parts for each assembly reference, or switch to a built-time compilation model(see Create reusable UI using the Razor Class Library project). // https://github.com/aspnet/Announcements/issues/312 // https://github.com/aspnet/Mvc/issues/4497 // https://github.com/aspnet/Razor/issues/834 options.AdditionalCompilationReferences.Add(moduleReference); } }
public RazorMultiViewEngineOptionsSetup(IHostEnvironment environment, IOptions <RazorViewEngineOptions> originalOptions) { this.environment = environment ?? throw new ArgumentNullException(nameof(environment)); this.originalOptions = originalOptions?.Value ?? throw new ArgumentNullException(nameof(originalOptions)); }
private void ConfigureRazor(RazorViewEngineOptions razor) { razor.ViewLocationFormats.Add("/{1}/{0}" + RazorViewEngine.ViewExtension); razor.ViewLocationFormats.Add("/{1}/Views/{0}" + RazorViewEngine.ViewExtension); razor.ViewLocationFormats.Add("/Shared/{0}" + RazorViewEngine.ViewExtension); }
public static RazorViewEngineOptions AddEmbeddedViewsForCloudscribeSimpleContactForm(this RazorViewEngineOptions options) { options.FileProviders.Add(new EmbeddedFileProvider( typeof(ContactFormService).GetTypeInfo().Assembly, "cloudscribe.SimpleContactForm" )); return(options); }
private static IOptions<RazorViewEngineOptions> GetOptions(Action<RoslynCompilationContext> callback = null) { var razorViewEngineOptions = new RazorViewEngineOptions { CompilationCallback = callback ?? (c => { }), }; var options = new Mock<IOptions<RazorViewEngineOptions>>(); options .SetupGet(o => o.Value) .Returns(razorViewEngineOptions); return options.Object; }
public void ConfigureRazor(RazorViewEngineOptions razor) { razor.ViewLocationExpanders.Add(new ViewLocationExpander()); }
public ViewLocationsLogger(ILogger <ViewLocationsLogger> logger, IOptions <RazorViewEngineOptions> options) { _logger = logger; _options = options.Value; }
public static RazorViewEngineOptions AddViews(this RazorViewEngineOptions options) { options.FileProviders.Add(new EmbeddedFileProvider(typeof(ServiceCollectionExtensions).GetTypeInfo().Assembly, "SelfHosted.Website")); return(options); }
public static RazorViewEngineOptions AddCloudscribeCoreSimpleContentIntegrationBootstrap3Views(this RazorViewEngineOptions options) { options.FileProviders.Add(new EmbeddedFileProvider( typeof(StartupExtensions).GetTypeInfo().Assembly, "cloudscribe.Core.SimpleContent.Views.Bootstrap3" )); return(options); }
public static void AddReferencesFromRuntimeContext(this RazorViewEngineOptions options) { options.AdditionalCompilationReferences.AddReferencesFromRuntimeContext(); }
public static RazorViewEngineOptions AddCloudscribeFileManagerBootstrap4Views(this RazorViewEngineOptions options) { options.FileProviders.Add(new EmbeddedFileProvider( typeof(FileManagerController).GetTypeInfo().Assembly, "cloudscribe.FileManager.Web" )); return(options); }
public static unsafe void AddReferencesFromAssemblyOf <TObject>(this RazorViewEngineOptions options) { options.AddReferencesFromAssemblyOf <TObject>(); }
public void GetCompilationFailedResult_ReturnsCompilationResult_WithGroupedMessages() { // Arrange var viewPath = "Views/Home/Index"; var generatedCodeFileName = "Generated Code"; var fileProvider = new TestFileProvider(); fileProvider.AddFile(viewPath, "view-content"); var options = new RazorViewEngineOptions(); options.FileProviders.Add(fileProvider); var compilationService = new DefaultRoslynCompilationService( GetDependencyContext(), options, GetFileProviderAccessor(fileProvider), NullLoggerFactory.Instance); var assemblyName = "random-assembly-name"; var diagnostics = new[] { Diagnostic.Create( GetDiagnosticDescriptor("message-1"), Location.Create( viewPath, new TextSpan(10, 5), new LinePositionSpan(new LinePosition(10, 1), new LinePosition(10, 2)))), Diagnostic.Create( GetDiagnosticDescriptor("message-2"), Location.Create( assemblyName, new TextSpan(1, 6), new LinePositionSpan(new LinePosition(1, 2), new LinePosition(3, 4)))), Diagnostic.Create( GetDiagnosticDescriptor("message-3"), Location.Create( viewPath, new TextSpan(40, 50), new LinePositionSpan(new LinePosition(30, 5), new LinePosition(40, 12)))), }; // Act var compilationResult = compilationService.GetCompilationFailedResult( viewPath, "compilation-content", assemblyName, diagnostics); // Assert Assert.Collection(compilationResult.CompilationFailures, failure => { Assert.Equal(viewPath, failure.SourceFilePath); Assert.Equal("view-content", failure.SourceFileContent); Assert.Collection(failure.Messages, message => { Assert.Equal("message-1", message.Message); Assert.Equal(viewPath, message.SourceFilePath); Assert.Equal(11, message.StartLine); Assert.Equal(2, message.StartColumn); Assert.Equal(11, message.EndLine); Assert.Equal(3, message.EndColumn); }, message => { Assert.Equal("message-3", message.Message); Assert.Equal(viewPath, message.SourceFilePath); Assert.Equal(31, message.StartLine); Assert.Equal(6, message.StartColumn); Assert.Equal(41, message.EndLine); Assert.Equal(13, message.EndColumn); }); }, failure => { Assert.Equal(generatedCodeFileName, failure.SourceFilePath); Assert.Equal("compilation-content", failure.SourceFileContent); Assert.Collection(failure.Messages, message => { Assert.Equal("message-2", message.Message); Assert.Equal(assemblyName, message.SourceFilePath); Assert.Equal(2, message.StartLine); Assert.Equal(3, message.StartColumn); Assert.Equal(4, message.EndLine); Assert.Equal(5, message.EndColumn); }); }); }
public static RazorViewEngineOptions AddEmbeddedViewsForCloudscribeCoreSimpleContentIntegration(this RazorViewEngineOptions options) { options.FileProviders.Add(new EmbeddedFileProvider( typeof(ContentSettingsController).GetTypeInfo().Assembly, "cloudscribe.Core.SimpleContent.Integration" )); return(options); }
public static RazorViewEngineOptions AddCloudscribeSimpleContentBootstrap3Views(this RazorViewEngineOptions options) { options.FileProviders.Add(new EmbeddedFileProvider( typeof(Bootstrap3).GetTypeInfo().Assembly, "cloudscribe.SimpleContent.Web.Views.Bootstrap3" )); return(options); }
public void GetCompilationFailedResult_ReturnsCompilationResult_WithGroupedMessages() { // Arrange var viewPath = "Views/Home/Index"; var generatedCodeFileName = "Generated Code"; var fileProvider = new TestFileProvider(); fileProvider.AddFile(viewPath, "view-content"); var options = new RazorViewEngineOptions(); options.FileProviders.Add(fileProvider); var compilationService = GetRoslynCompilationService(options: options, fileProvider: fileProvider); var assemblyName = "random-assembly-name"; var diagnostics = new[] { Diagnostic.Create( GetDiagnosticDescriptor("message-1"), Location.Create( viewPath, new TextSpan(10, 5), new LinePositionSpan(new LinePosition(10, 1), new LinePosition(10, 2)))), Diagnostic.Create( GetDiagnosticDescriptor("message-2"), Location.Create( assemblyName, new TextSpan(1, 6), new LinePositionSpan(new LinePosition(1, 2), new LinePosition(3, 4)))), Diagnostic.Create( GetDiagnosticDescriptor("message-3"), Location.Create( viewPath, new TextSpan(40, 50), new LinePositionSpan(new LinePosition(30, 5), new LinePosition(40, 12)))), }; // Act var compilationResult = compilationService.GetCompilationFailedResult( viewPath, "compilation-content", assemblyName, diagnostics); // Assert Assert.Collection(compilationResult.CompilationFailures, failure => { Assert.Equal(viewPath, failure.SourceFilePath); Assert.Equal("view-content", failure.SourceFileContent); Assert.Collection(failure.Messages, message => { Assert.Equal("message-1", message.Message); Assert.Equal(viewPath, message.SourceFilePath); Assert.Equal(11, message.StartLine); Assert.Equal(2, message.StartColumn); Assert.Equal(11, message.EndLine); Assert.Equal(3, message.EndColumn); }, message => { Assert.Equal("message-3", message.Message); Assert.Equal(viewPath, message.SourceFilePath); Assert.Equal(31, message.StartLine); Assert.Equal(6, message.StartColumn); Assert.Equal(41, message.EndLine); Assert.Equal(13, message.EndColumn); }); }, failure => { Assert.Equal(generatedCodeFileName, failure.SourceFilePath); Assert.Equal("compilation-content", failure.SourceFileContent); Assert.Collection(failure.Messages, message => { Assert.Equal("message-2", message.Message); Assert.Equal(assemblyName, message.SourceFilePath); Assert.Equal(2, message.StartLine); Assert.Equal(3, message.StartColumn); Assert.Equal(4, message.EndLine); Assert.Equal(5, message.EndColumn); }); }); }
private static IOptions<RazorViewEngineOptions> GetOptionsAccessor( IEnumerable<IViewLocationExpander> expanders = null) { var options = new RazorViewEngineOptions(); if (expanders != null) { foreach (var expander in expanders) { options.ViewLocationExpanders.Add(expander); } } var optionsAccessor = new Mock<IOptions<RazorViewEngineOptions>>(); optionsAccessor.SetupGet(v => v.Value) .Returns(options); return optionsAccessor.Object; }
public static RazorViewEngineOptions UseFeaturesFolder(this RazorViewEngineOptions options) { options.ViewLocationExpanders.Add(new AreasToFeaturesViewLocationExpander()); return(options); }