// GetCurrentValues uses only the IModelMetadataProvider passed to the DefaultHtmlGenerator constructor. private static IHtmlGenerator GetGenerator(IModelMetadataProvider metadataProvider) { var mvcViewOptionsAccessor = new Mock <IOptions <MvcViewOptions> >(); mvcViewOptionsAccessor.SetupGet(accessor => accessor.Value).Returns(new MvcViewOptions()); var htmlEncoder = Mock.Of <HtmlEncoder>(); var antiforgery = new Mock <IAntiforgery>(); antiforgery .Setup(mock => mock.GetAndStoreTokens(It.IsAny <DefaultHttpContext>())) .Returns(() => { return(new AntiforgeryTokenSet("requestToken", "cookieToken", "formFieldName", "headerName")); }); var attributeProvider = new DefaultValidationHtmlAttributeProvider( mvcViewOptionsAccessor.Object, metadataProvider, new ClientValidatorCache()); return(new DefaultHtmlGenerator( antiforgery.Object, mvcViewOptionsAccessor.Object, metadataProvider, new UrlHelperFactory(), htmlEncoder, attributeProvider)); }
public static IHtmlGenerator GetHtmlGenerator(IModelMetadataProvider provider, IUrlHelperFactory urlHelperFactory, MvcViewOptions options) { var optionsAccessor = new Mock <IOptions <MvcViewOptions> >(); optionsAccessor .SetupGet(o => o.Value) .Returns(options); var attributeProvider = new DefaultValidationHtmlAttributeProvider( optionsAccessor.Object, provider, new ClientValidatorCache()); var htmlGenerator = new DefaultHtmlGenerator( Mock.Of <IAntiforgery>(), optionsAccessor.Object, provider, urlHelperFactory, new HtmlTestEncoder(), attributeProvider); return(htmlGenerator); }
public MvcTestContext() { Scope = TestApplication.Services.CreateScope(); Services = Scope.ServiceProvider; HttpContext = new DefaultHttpContext { RequestServices = Services }; RouteData = new RouteData(); ModelState = new ModelStateDictionary(); ActionDescriptor = new ControllerActionDescriptor(); ActionContext = new ActionContext(HttpContext, RouteData, ActionDescriptor, ModelState); ControllerContext = new ControllerContext(ActionContext); ModelMetadataProvider = Services.GetRequiredService <IModelMetadataProvider>(); HtmlGenerator = Services.GetRequiredService <IHtmlGenerator>(); ValidationHtmlAttributeProvider = new DefaultValidationHtmlAttributeProvider( Options.Create <MvcViewOptions>(new MvcViewOptions()), ModelMetadataProvider, new ClientValidatorCache()); UrlHelper = new UrlHelper(ActionContext); }
private static HtmlHelper <TModel> GetHtmlHelper <TModel>( ViewDataDictionary <TModel> viewData, IUrlHelper urlHelper, ICompositeViewEngine viewEngine, IModelMetadataProvider provider, Func <IHtmlHelper, IHtmlHelper> innerHelperWrapper, IHtmlGenerator htmlGenerator, string idAttributeDotReplacement) { var httpContext = new DefaultHttpContext(); var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor(), viewData.ModelState); var options = new MvcViewOptions(); if (!string.IsNullOrEmpty(idAttributeDotReplacement)) { options.HtmlHelperOptions.IdAttributeDotReplacement = idAttributeDotReplacement; } var localizationOptionsAccesor = new Mock <IOptions <MvcDataAnnotationsLocalizationOptions> >(); localizationOptionsAccesor.SetupGet(o => o.Value).Returns(new MvcDataAnnotationsLocalizationOptions()); options.ClientModelValidatorProviders.Add(new DataAnnotationsClientModelValidatorProvider( new ValidationAttributeAdapterProvider(), localizationOptionsAccesor.Object, stringLocalizerFactory: null)); var optionsAccessor = new Mock <IOptions <MvcViewOptions> >(); optionsAccessor .SetupGet(o => o.Value) .Returns(options); var valiatorProviders = new[] { new DataAnnotationsModelValidatorProvider( new ValidationAttributeAdapterProvider(), new TestOptionsManager <MvcDataAnnotationsLocalizationOptions>(), stringLocalizerFactory: null), }; var validator = new DefaultObjectValidator(provider, valiatorProviders); validator.Validate(actionContext, validationState: null, prefix: string.Empty, viewData.Model); var urlHelperFactory = new Mock <IUrlHelperFactory>(); urlHelperFactory .Setup(f => f.GetUrlHelper(It.IsAny <ActionContext>())) .Returns(urlHelper); var expressionTextCache = new ExpressionTextCache(); var attributeProvider = new DefaultValidationHtmlAttributeProvider( optionsAccessor.Object, provider, new ClientValidatorCache()); if (htmlGenerator == null) { htmlGenerator = new DefaultHtmlGenerator( Mock.Of <IAntiforgery>(), optionsAccessor.Object, provider, urlHelperFactory.Object, new HtmlTestEncoder(), attributeProvider); } // TemplateRenderer will Contextualize this transient service. var innerHelper = (IHtmlHelper) new HtmlHelper( htmlGenerator, viewEngine, provider, new TestViewBufferScope(), new HtmlTestEncoder(), UrlEncoder.Default); if (innerHelperWrapper != null) { innerHelper = innerHelperWrapper(innerHelper); } var serviceCollection = new ServiceCollection(); serviceCollection .AddSingleton(viewEngine) .AddSingleton(urlHelperFactory.Object) .AddSingleton(Mock.Of <IViewComponentHelper>()) .AddSingleton(innerHelper) .AddSingleton <IViewBufferScope, TestViewBufferScope>() .AddSingleton <ValidationHtmlAttributeProvider>(attributeProvider) .AddHtmlTags(reg => { reg.Editors.IfPropertyIs <DateTimeOffset>().ModifyWith(m => m.CurrentTag.Attr("type", "datetime-local") .Value(GetDateValue(m.Value <DateTimeOffset?>()))); }); var serviceProvider = serviceCollection.BuildServiceProvider(); httpContext.RequestServices = serviceProvider; var htmlHelper = new HtmlHelper <TModel>( htmlGenerator, viewEngine, provider, new TestViewBufferScope(), new HtmlTestEncoder(), UrlEncoder.Default, expressionTextCache); var viewContext = new ViewContext( actionContext, Mock.Of <IView>(), viewData, new TempDataDictionary( httpContext, Mock.Of <ITempDataProvider>()), new StringWriter(), options.HtmlHelperOptions) { ClientValidationEnabled = true }; htmlHelper.Contextualize(viewContext); return(htmlHelper); }
private static HtmlHelper <TModel> GetHtmlHelper <TModel>( ViewDataDictionary <TModel> viewData, IUrlHelper urlHelper, ICompositeViewEngine viewEngine, IModelMetadataProvider provider, Func <IHtmlHelper, IHtmlHelper> innerHelperWrapper, IHtmlGenerator htmlGenerator, string idAttributeDotReplacement) { var httpContext = new DefaultHttpContext(); var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor()); var options = new MvcViewOptions(); if (!string.IsNullOrEmpty(idAttributeDotReplacement)) { options.HtmlHelperOptions.IdAttributeDotReplacement = idAttributeDotReplacement; } var localizationOptionsAccesor = new Mock <IOptions <MvcDataAnnotationsLocalizationOptions> >(); localizationOptionsAccesor.SetupGet(o => o.Value).Returns(new MvcDataAnnotationsLocalizationOptions()); options.ClientModelValidatorProviders.Add(new DataAnnotationsClientModelValidatorProvider( new ValidationAttributeAdapterProvider(), localizationOptionsAccesor.Object, stringLocalizerFactory: null)); var optionsAccessor = new Mock <IOptions <MvcViewOptions> >(); optionsAccessor .SetupGet(o => o.Value) .Returns(options); var urlHelperFactory = new Mock <IUrlHelperFactory>(); urlHelperFactory .Setup(f => f.GetUrlHelper(It.IsAny <ActionContext>())) .Returns(urlHelper); var expressionTextCache = new ExpressionTextCache(); if (htmlGenerator == null) { var attributeProvider = new DefaultValidationHtmlAttributeProvider( optionsAccessor.Object, provider, new ClientValidatorCache()); htmlGenerator = new DefaultHtmlGenerator( Mock.Of <IAntiforgery>(), optionsAccessor.Object, provider, urlHelperFactory.Object, new HtmlTestEncoder(), attributeProvider); } // TemplateRenderer will Contextualize this transient service. var innerHelper = (IHtmlHelper) new HtmlHelper( htmlGenerator, viewEngine, provider, new TestViewBufferScope(), new HtmlTestEncoder(), UrlEncoder.Default); if (innerHelperWrapper != null) { innerHelper = innerHelperWrapper(innerHelper); } var serviceProvider = new ServiceCollection() .AddSingleton(viewEngine) .AddSingleton(urlHelperFactory.Object) .AddSingleton(Mock.Of <IViewComponentHelper>()) .AddSingleton(innerHelper) .AddSingleton <IViewBufferScope, TestViewBufferScope>() .BuildServiceProvider(); httpContext.RequestServices = serviceProvider; var htmlHelper = new HtmlHelper <TModel>( htmlGenerator, viewEngine, provider, new TestViewBufferScope(), new HtmlTestEncoder(), UrlEncoder.Default, expressionTextCache); var viewContext = new ViewContext( actionContext, Mock.Of <IView>(), viewData, new TempDataDictionary( httpContext, Mock.Of <ITempDataProvider>()), new StringWriter(), options.HtmlHelperOptions); htmlHelper.Contextualize(viewContext); return(htmlHelper); }