예제 #1
0
    // 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));
    }
예제 #2
0
    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);
    }
예제 #3
0
        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);
        }
예제 #5
0
        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);
        }