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
        }
Пример #5
0
 public void Configure(RazorViewEngineOptions options) =>
 options.FileProviders.Add(new ManifestEmbeddedFileProvider(GetType().Assembly));
Пример #6
0
 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;
        }
Пример #8
0
        public static RazorViewEngineOptions AddEmbeddedBootstrap3ViewsForCloudscribeCoreIdentityServerIntegration(this RazorViewEngineOptions options)
        {
            options.FileProviders.Add(new EmbeddedFileProvider(
                                          typeof(Bootstrap3).GetTypeInfo().Assembly,
                                          "cloudscribe.Core.IdentityServerIntegration.Views.Bootstrap3"
                                          ));

            return(options);
        }
Пример #9
0
        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));
 }
Пример #11
0
 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);
 }
Пример #12
0
        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;
        }
Пример #14
0
 public void ConfigureRazor(RazorViewEngineOptions razor)
 {
     razor.ViewLocationExpanders.Add(new ViewLocationExpander());
 }
 public ViewLocationsLogger(ILogger <ViewLocationsLogger> logger, IOptions <RazorViewEngineOptions> options)
 {
     _logger  = logger;
     _options = options.Value;
 }
Пример #16
0
 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);
        }
Пример #18
0
 public static void AddReferencesFromRuntimeContext(this RazorViewEngineOptions options)
 {
     options.AdditionalCompilationReferences.AddReferencesFromRuntimeContext();
 }
Пример #19
0
        public static RazorViewEngineOptions AddCloudscribeFileManagerBootstrap4Views(this RazorViewEngineOptions options)
        {
            options.FileProviders.Add(new EmbeddedFileProvider(
                                          typeof(FileManagerController).GetTypeInfo().Assembly,
                                          "cloudscribe.FileManager.Web"
                                          ));

            return(options);
        }
Пример #20
0
 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);
                        });
                });
        }
Пример #22
0
        public static RazorViewEngineOptions AddEmbeddedViewsForCloudscribeCoreSimpleContentIntegration(this RazorViewEngineOptions options)
        {
            options.FileProviders.Add(new EmbeddedFileProvider(
                                          typeof(ContentSettingsController).GetTypeInfo().Assembly,
                                          "cloudscribe.Core.SimpleContent.Integration"
                                          ));

            return(options);
        }
Пример #23
0
        public static RazorViewEngineOptions AddCloudscribeSimpleContentBootstrap3Views(this RazorViewEngineOptions options)
        {
            options.FileProviders.Add(new EmbeddedFileProvider(
                                          typeof(Bootstrap3).GetTypeInfo().Assembly,
                                          "cloudscribe.SimpleContent.Web.Views.Bootstrap3"
                                          ));

            return(options);
        }
Пример #24
0
        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);
                });
            });
        }
Пример #25
0
        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;
        }
Пример #26
0
 public static RazorViewEngineOptions UseFeaturesFolder(this RazorViewEngineOptions options)
 {
     options.ViewLocationExpanders.Add(new AreasToFeaturesViewLocationExpander());
     return(options);
 }