public CompiledPageRouteModelProvider( ApplicationPartManager applicationManager, IOptions <RazorPagesOptions> pagesOptionsAccessor) { _applicationManager = applicationManager; _pagesOptions = pagesOptionsAccessor.Value; }
public void Configure_WithCustomRoot_AddsAreaPageViewLocationFormats() { // Arrange var expected = new[] { "/Areas/{2}/Pages/{1}/{0}.cshtml", "/Areas/{2}/Pages/Shared/{0}.cshtml", "/Areas/{2}/Views/Shared/{0}.cshtml", "/RazorFiles/Shared/{0}.cshtml", "/Views/Shared/{0}.cshtml", }; var razorPagesOptions = new RazorPagesOptions { RootDirectory = "/RazorFiles/", }; var viewEngineOptions = GetViewEngineOptions(); var setup = new RazorPagesRazorViewEngineOptionsSetup( Options.Options.Create(razorPagesOptions)); // Act setup.Configure(viewEngineOptions); // Assert Assert.Equal(expected, viewEngineOptions.AreaPageViewLocationFormats); }
public void Configure_AddsSharedPagesDirectoryToAreaViewLocationFormats() { // Arrange var expected = new[] { "/Areas/{2}/Views/{1}/{0}.cshtml", "/Areas/{2}/Views/Shared/{0}.cshtml", "/Views/Shared/{0}.cshtml", "/PagesRoot/Shared/{0}.cshtml", }; var razorPagesOptions = new RazorPagesOptions { RootDirectory = "/PagesRoot", }; var viewEngineOptions = GetViewEngineOptions(); var setup = new RazorPagesRazorViewEngineOptionsSetup( new TestOptionsManager <RazorPagesOptions>(razorPagesOptions)); // Act setup.Configure(viewEngineOptions); // Assert Assert.Equal(expected, viewEngineOptions.AreaViewLocationFormats); }
public DefaultPageLoader( IOptions <RazorPagesOptions> options, RazorProject project, CSharpCompilationFactory compilationFactory, PageRazorEngineHost host, ITagHelperDescriptorResolver tagHelperDescriptorResolver) { _options = options.Value; _project = project; _compilationFactory = compilationFactory; _host = host; _tagHelperDescriptorResolver = tagHelperDescriptorResolver; _engine = RazorEngineBuilder.Build(builder => { builder.Features.Add(new TagHelperFeature(_host.TagHelperDescriptorResolver)); builder.Features.Add(new VirtualDocumentSyntaxTreePass()); builder.Features.Add(new TagHelperBinderSyntaxTreePass()); builder.Features.Add(new DefaultChunkTreeLoweringFeature(_host)); builder.Features.Add(new PageDirectiveFeature()); // RazorPages-specific feature builder.Phases.Add(new DefaultSyntaxTreePhase()); builder.Phases.Add(new DefaultChunkTreePhase()); builder.Phases.Add(new DefaultCSharpSourceLoweringPhase(_host)); }); }
public CompiledPageRouteModelProvider( ApplicationPartManager applicationManager, IOptions <RazorPagesOptions> pagesOptionsAccessor, RazorTemplateEngine templateEngine, ILoggerFactory loggerFactory) { if (applicationManager == null) { throw new ArgumentNullException(nameof(applicationManager)); } if (pagesOptionsAccessor == null) { throw new ArgumentNullException(nameof(pagesOptionsAccessor)); } if (templateEngine == null) { throw new ArgumentNullException(nameof(templateEngine)); } if (loggerFactory == null) { throw new ArgumentNullException(nameof(loggerFactory)); } _applicationManager = applicationManager; _pagesOptions = pagesOptionsAccessor.Value; _templateEngine = templateEngine; _logger = loggerFactory.CreateLogger <CompiledPageRouteModelProvider>(); }
public void OnProvidersExecuting_DoesNotAddsModelsForAreaPages_IfFeatureIsDisabled() { // Arrange var descriptors = new[] { GetDescriptor("/Pages/About.cshtml"), GetDescriptor("/Areas/Accounts/Pages/Home.cshtml"), }; var options = new RazorPagesOptions { EnableAreas = false }; var provider = new TestCompiledPageRouteModelProvider(descriptors, options); var context = new PageRouteModelProviderContext(); // Act provider.OnProvidersExecuting(context); // Assert Assert.Collection(context.RouteModels, result => { Assert.Equal("/Pages/About.cshtml", result.RelativePath); Assert.Equal("/About", result.ViewEnginePath); Assert.Collection(result.Selectors, selector => Assert.Equal("About", selector.AttributeRouteModel.Template)); Assert.Collection(result.RouteValues.OrderBy(k => k.Key), kvp => { Assert.Equal("page", kvp.Key); Assert.Equal("/About", kvp.Value); }); }); }
public void CreateRouteModel_DoesNotAddMultipleSelectorsWhenRouteTemplateIsAbsolute() { // Arrange var relativePath = "/Pages/Users/Profile/Index.cshtml"; var options = new RazorPagesOptions(); var routeModelFactory = new PageRouteModelFactory(options, NullLogger.Instance); // Act var routeModel = routeModelFactory.CreateRouteModel(relativePath, "/my-override"); // Assert Assert.Equal(relativePath, routeModel.RelativePath); Assert.Equal("/Users/Profile/Index", routeModel.ViewEnginePath); Assert.Collection( routeModel.Selectors, selector => Assert.Equal("my-override", selector.AttributeRouteModel.Template)); Assert.Collection( routeModel.RouteValues, kvp => { Assert.Equal("page", kvp.Key); Assert.Equal("/Users/Profile/Index", kvp.Value); }); }
public void CreateAreaRouteModel_AddsSelector() { // Arrange var relativePath = "/Areas/TestArea/Pages/Users/Profile.cshtml"; var options = new RazorPagesOptions(); var routeModelFactory = new PageRouteModelFactory(options, NullLogger.Instance); // Act var routeModel = routeModelFactory.CreateAreaRouteModel(relativePath, "{id?}"); // Assert Assert.Equal(relativePath, routeModel.RelativePath); Assert.Equal("/Users/Profile", routeModel.ViewEnginePath); Assert.Equal("TestArea", routeModel.AreaName); Assert.Collection( routeModel.Selectors, selector => Assert.Equal("TestArea/Users/Profile/{id?}", selector.AttributeRouteModel.Template)); Assert.Collection( routeModel.RouteValues.OrderBy(kvp => kvp.Key), kvp => { Assert.Equal("area", kvp.Key); Assert.Equal("TestArea", kvp.Value); }, kvp => { Assert.Equal("page", kvp.Key); Assert.Equal("/Users/Profile", kvp.Value); }); }
public static void UnsupportedAreaPath(this ILogger logger, RazorPagesOptions options, string filePath) { if (logger.IsEnabled(LogLevel.Warning)) { _unsupportedAreaPath(logger, filePath, options.AreaRootDirectory, options.AreaRootDirectory, options.RootDirectory, null); } }
public MockPageRouteModel(RazorPagesOptions options) { _options = options ?? throw new ArgumentNullException(nameof(options)); _normalizedRootDirectory = NormalizeDirectory(options.RootDirectory); _normalizedAreaRootDirectory = "/Areas/"; }
public DefaultPageLoader( IOptions <RazorPagesOptions> options, RazorProject project, CSharpCompilationFactory compilationFactory, PageRazorEngineHost host, ITagHelperDescriptorResolver tagHelperDescriptorResolver) { _options = options.Value; _project = project; _compilationFactory = compilationFactory; _host = host; _tagHelperDescriptorResolver = tagHelperDescriptorResolver; // TODO: Code smell, this is newed up in several locations. We should find a unified location for this. var attributeContext = new GeneratedTagHelperAttributeContext() { CreateModelExpressionMethodName = "CreateModelExpression", ModelExpressionProviderPropertyName = "ModelExpressionProvider", ModelExpressionTypeName = "Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression", ViewDataPropertyName = "ViewData", }; _engine = RazorEngineBuilder.Build(builder => { builder.Features.Add(new TagHelperFeature(_host.TagHelperDescriptorResolver)); builder.Features.Add(new VirtualDocumentSyntaxTreePass()); builder.Features.Add(new TagHelperBinderSyntaxTreePass()); builder.Features.Add(new InstrumentationPass(_host)); builder.Features.Add(new PreallocatedTagHelperAttributePass()); // MVC specific features builder.Features.Add(new ModelExpressionAttributePass(attributeContext)); builder.Features.Add(new InjectDirectiveRenderer(typeof(RazorInjectAttribute).FullName)); builder.Features.Add(new DefaultChunkTreeLoweringFeature(_host)); builder.Features.Add(new DefaultCSharpSourceLoweringFeature(_host)); // Renderers builder.Features.Add(new RuntimeCSharpRenderer()); builder.Features.Add(new PageStructureCSharpRenderer()); builder.Features.Add(new PageDirectiveFeature()); // RazorPages-specific feature builder.Features.Add(new PagesPropertyInjectionPass()); builder.Features.Add(new RazorDirectiveDiscoveryPass()); builder.Phases.Add(new DefaultSyntaxTreePhase()); builder.Phases.Add(new DefaultChunkTreePhase()); // New Razor generation phases. builder.Phases.Add(new DefaultCSharpSourceLoweringPhase()); builder.Phases.Add(new DefaultCSharpDocumentGenerationPhase(_host)); // Uncomment the below line to force old-style view rendering. // builder.Phases.Add(new Razevolution.DefaultCSharpSourceLoweringPhase(_host)); }); }
public void PostConfigure(string name, RazorPagesOptions options) { name = name ?? throw new ArgumentNullException(nameof(name)); options = options ?? throw new ArgumentNullException(nameof(options)); var convention = new GenericPageModelConvention <TEntity, TKey>(); options.Conventions.AddFolderApplicationModelConvention("/", pam => convention.Apply(pam)); }
public CompiledPageRouteModelProvider( ApplicationPartManager applicationManager, IOptions <RazorPagesOptions> pagesOptionsAccessor, ILoggerFactory loggerFactory) { _applicationManager = applicationManager; _pagesOptions = pagesOptionsAccessor.Value; _logger = loggerFactory.CreateLogger <CompiledPageRouteModelProvider>(); }
public RazorProjectPageRouteModelProvider( RazorProject razorProject, IOptions <RazorPagesOptions> pagesOptionsAccessor, ILoggerFactory loggerFactory) { _project = razorProject; _pagesOptions = pagesOptionsAccessor.Value; _logger = loggerFactory.CreateLogger <RazorProjectPageRouteModelProvider>(); }
public PageActionDescriptorProvider( RazorProject project, IOptions <MvcOptions> options, IOptions <RazorPagesOptions> pagesOptions) { _project = project; _options = options.Value; _pagesOptions = pagesOptions.Value; }
public CompiledPageRouteModelProvider( ApplicationPartManager applicationManager, IOptions <RazorPagesOptions> pagesOptionsAccessor, ILogger <CompiledPageRouteModelProvider> logger) { _applicationManager = applicationManager ?? throw new ArgumentNullException(nameof(applicationManager)); _pagesOptions = pagesOptionsAccessor?.Value ?? throw new ArgumentNullException(nameof(pagesOptionsAccessor)); _routeModelFactory = new PageRouteModelFactory(_pagesOptions, logger); }
public CompiledPageActionDescriptorFactory( IEnumerable <IPageApplicationModelProvider> applicationModelProviders, MvcOptions mvcOptions, RazorPagesOptions pageOptions) { _applicationModelProviders = applicationModelProviders.OrderBy(a => a.Order).ToArray(); _conventions = pageOptions.Conventions; _globalFilters = mvcOptions.Filters; }
public PageRouteModelFactory(RazorPagesOptions options, string rootDirectory, string areaRootDirectory, ILogger logger) { var razorPagesOptions = options; _options = razorPagesOptions ?? throw new ArgumentNullException(nameof(options)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _normalizedRootDirectory = rootDirectory.Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); _normalizedAreaRootDirectory = areaRootDirectory.Replace(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); }
public PageRouteModelFactory( RazorPagesOptions options, ILogger logger) { _options = options ?? throw new ArgumentNullException(nameof(options)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _normalizedRootDirectory = NormalizeDirectory(options.RootDirectory); _normalizedAreaRootDirectory = "/Areas/"; }
public RazorProjectPageRouteModelProvider( RazorProjectFileSystem razorFileSystem, IOptions <RazorPagesOptions> pagesOptionsAccessor, ILoggerFactory loggerFactory) { _razorFileSystem = razorFileSystem; _pagesOptions = pagesOptionsAccessor.Value; _logger = loggerFactory.CreateLogger <RazorProjectPageRouteModelProvider>(); _routeModelFactory = new PageRouteModelFactory(_pagesOptions, _logger); }
public void OnProvidersExecuting_DoesNotAddAreaAndNonAreaRoutesForAPage() { // Arrange var descriptors = new[] { GetDescriptor("/Areas/Accounts/Manage/Home.cshtml"), GetDescriptor("/Areas/About.cshtml"), GetDescriptor("/Contact.cshtml"), }; var options = new RazorPagesOptions { AllowAreas = true, AreaRootDirectory = "/Areas", RootDirectory = "/", }; var provider = new TestCompiledPageRouteModelProvider(descriptors, options); var context = new PageRouteModelProviderContext(); // Act provider.OnProvidersExecuting(context); // Assert Assert.Collection(context.RouteModels, result => { Assert.Equal("/Areas/Accounts/Manage/Home.cshtml", result.RelativePath); Assert.Equal("/Manage/Home", result.ViewEnginePath); Assert.Collection(result.Selectors, selector => Assert.Equal("Accounts/Manage/Home", selector.AttributeRouteModel.Template)); Assert.Collection(result.RouteValues.OrderBy(k => k.Key), kvp => { Assert.Equal("area", kvp.Key); Assert.Equal("Accounts", kvp.Value); }, kvp => { Assert.Equal("page", kvp.Key); Assert.Equal("/Manage/Home", kvp.Value); }); }, result => { Assert.Equal("/Contact.cshtml", result.RelativePath); Assert.Equal("/Contact", result.ViewEnginePath); Assert.Collection(result.Selectors, selector => Assert.Equal("Contact", selector.AttributeRouteModel.Template)); Assert.Collection(result.RouteValues.OrderBy(k => k.Key), kvp => { Assert.Equal("page", kvp.Key); Assert.Equal("/Contact", kvp.Value); }); }); }
public DefaultPageApplicationModelProvider( IModelMetadataProvider modelMetadataProvider, IOptions <RazorPagesOptions> razorPagesOptions) { _modelMetadataProvider = modelMetadataProvider; _razorPagesOptions = razorPagesOptions.Value; _supportsAllRequests = _ => true; _supportsNonGetRequests = context => !HttpMethods.IsGet(context.HttpContext.Request.Method); _handleOptionsRequestsFilter = new HandleOptionsRequestsPageFilter(); }
public DefaultPageApplicationModelProvider( IModelMetadataProvider modelMetadataProvider, IOptions <RazorPagesOptions> razorPagesOptions, IPageApplicationModelPartsProvider pageApplicationModelPartsProvider) { _modelMetadataProvider = modelMetadataProvider; _razorPagesOptions = razorPagesOptions.Value; _pageApplicationModelPartsProvider = pageApplicationModelPartsProvider; _handleOptionsRequestsFilter = new HandleOptionsRequestsPageFilter(); }
public CompiledPageRouteModelProviderTest() { FileProvider = new TestFileProvider(); Project = new FileProviderRazorProject( Mock.Of <IRazorViewEngineFileProviderAccessor>(a => a.FileProvider == FileProvider), Mock.Of <IHostingEnvironment>(e => e.ContentRootPath == "BasePath")); TemplateEngine = new RazorTemplateEngine(RazorEngine.Create(), Project); PagesOptions = new RazorPagesOptions(); Provider = new TestCompiledPageRouteModelProvider(new ApplicationPartManager(), Options.Create(PagesOptions), TemplateEngine, NullLoggerFactory.Instance); }
public void TryParseAreaPath_ReturnsFalse_IfPathDoesNotBelongToRootDirectory(string path) { // Arrange var options = new RazorPagesOptions(); // Act var success = PageSelectorModel.TryParseAreaPath(options, path, NullLogger.Instance, out _); // Assert Assert.False(success); }
public void TryParseAreaPath_ReturnsFalse_IfPathDoesNotBelongToRootDirectory(string path) { // Arrange var options = new RazorPagesOptions(); var routeModelFactory = new PageRouteModelFactory(options, NullLogger.Instance); // Act var success = routeModelFactory.TryParseAreaPath(path, out _); // Assert Assert.False(success); }
public void PostConfigure(string name, RazorPagesOptions options) { name = name ?? throw new ArgumentNullException(nameof(name)); options = options ?? throw new ArgumentNullException(nameof(options)); options.AllowAreas = true; options.Conventions.AuthorizeAreaFolder(IdentityUIAdminAreaName, "/Account/Manage"); options.Conventions.AuthorizeAreaPage(IdentityUIAdminAreaName, "/Account/Logout"); var convention = new IdentityPageModelConvention <TUser, TRole>(); options.Conventions.AddAreaFolderApplicationModelConvention( IdentityUIAdminAreaName, "/", pam => convention.Apply(pam)); }
private TestCompiledPageRouteModelProvider CreateProvider( RazorPagesOptions options = null, IList <CompiledViewDescriptor> descriptors = null) { options = options ?? new RazorPagesOptions(); var provider = new TestCompiledPageRouteModelProvider( new ApplicationPartManager(), Options.Create(options), NullLogger <CompiledPageRouteModelProvider> .Instance); provider.Descriptors.AddRange(descriptors ?? Array.Empty <CompiledViewDescriptor>()); return(provider); }
public RuntimeRazorPageLoaderTests() { var actionDescriptors = new ActionDescriptorCollection(Array.Empty <ActionDescriptor>(), 1); ActionDescriptorCollectionProvider = Mock.Of <IActionDescriptorCollectionProvider>(v => v.ActionDescriptors == actionDescriptors); // The f*cking constructor is internal.. var conventions = Activator.CreateInstance(typeof(PageConventionCollection), BindingFlags.NonPublic | BindingFlags.Instance, null, new object[] { Mock.Of <IServiceProvider>() }, null); // so is the property setter FFS. var options = new RazorPagesOptions(); typeof(RazorPagesOptions).GetProperty("Conventions", BindingFlags.Public | BindingFlags.Instance).SetValue(options, conventions); RazorPagesOptions = Options.Create(options); }
public void TryParseAreaPath_ParsesAreaPath( string path, string expectedArea, string expectedViewEnginePath) { // Arrange var options = new RazorPagesOptions(); var routeModelFactory = new PageRouteModelFactory(options, NullLogger.Instance); // Act var success = routeModelFactory.TryParseAreaPath(path, out var result); // Assert Assert.True(success); Assert.Equal(expectedArea, result.areaName); Assert.Equal(expectedViewEnginePath, result.viewEnginePath); }