public void Setup_SetsUpModelBinders()
        {
            // Arrange
            var mvcOptions = new MvcOptions();
            var setup1     = new CoreMvcOptionsSetup();
            var setup2     = new MvcOptionsSetup();

            // Act
            setup1.Configure(mvcOptions);
            setup2.Configure(mvcOptions);

            // Assert
            var i = 0;

            Assert.Equal(13, mvcOptions.ModelBinders.Count);
            Assert.IsType(typeof(BinderTypeBasedModelBinder), mvcOptions.ModelBinders[i++]);
            Assert.IsType(typeof(ServicesModelBinder), mvcOptions.ModelBinders[i++]);
            Assert.IsType(typeof(BodyModelBinder), mvcOptions.ModelBinders[i++]);
            Assert.IsType(typeof(HeaderModelBinder), mvcOptions.ModelBinders[i++]);
            Assert.IsType(typeof(TypeConverterModelBinder), mvcOptions.ModelBinders[i++]);
            Assert.IsType(typeof(TypeMatchModelBinder), mvcOptions.ModelBinders[i++]);
            Assert.IsType(typeof(CancellationTokenModelBinder), mvcOptions.ModelBinders[i++]);
            Assert.IsType(typeof(ByteArrayModelBinder), mvcOptions.ModelBinders[i++]);
            Assert.IsType(typeof(FormFileModelBinder), mvcOptions.ModelBinders[i++]);
            Assert.IsType(typeof(FormCollectionModelBinder), mvcOptions.ModelBinders[i++]);
            Assert.IsType(typeof(GenericModelBinder), mvcOptions.ModelBinders[i++]);
            Assert.IsType(typeof(MutableObjectModelBinder), mvcOptions.ModelBinders[i++]);
            Assert.IsType(typeof(ComplexModelDtoModelBinder), mvcOptions.ModelBinders[i++]);
        }
        public void Setup_IgnoresAcceptHeaderHavingWildCardMediaAndSubMediaTypes()
        {
            // Arrange
            var mvcOptions = new MvcOptions();
            var setup      = new CoreMvcOptionsSetup();

            // Act
            setup.Configure(mvcOptions);

            // Assert
            Assert.False(mvcOptions.RespectBrowserAcceptHeader);
        }
        public void Setup_SetsUpModelValidatorProviders()
        {
            // Arrange
            var mvcOptions = new MvcOptions();
            var setup1     = new CoreMvcOptionsSetup();
            var setup2     = new MvcOptionsSetup();

            // Act
            setup1.Configure(mvcOptions);
            setup2.Configure(mvcOptions);

            // Assert
            Assert.Equal(2, mvcOptions.ModelValidatorProviders.Count);
            Assert.IsType <DefaultModelValidatorProvider>(mvcOptions.ModelValidatorProviders[0]);
            Assert.IsType <DataAnnotationsModelValidatorProvider>(mvcOptions.ModelValidatorProviders[1]);
        }
        public void Setup_SetsUpValueProviders()
        {
            // Arrange
            var mvcOptions = new MvcOptions();
            var setup1     = new CoreMvcOptionsSetup();
            var setup2     = new MvcOptionsSetup();

            // Act
            setup1.Configure(mvcOptions);
            setup2.Configure(mvcOptions);

            // Assert
            var valueProviders = mvcOptions.ValueProviderFactories;

            Assert.Equal(3, valueProviders.Count);
            Assert.IsType <RouteValueValueProviderFactory>(valueProviders[0]);
            Assert.IsType <QueryStringValueProviderFactory>(valueProviders[1]);
            Assert.IsType <FormValueProviderFactory>(valueProviders[2]);
        }
        public void Setup_SetsUpInputFormatters()
        {
            // Arrange
            var mvcOptions = new MvcOptions();
            var setup1     = new CoreMvcOptionsSetup();
            var setup2     = new MvcOptionsSetup();
            var setup3     = new JsonMvcOptionsSetup(new OptionsManager <MvcJsonOptions>(
                                                         Enumerable.Empty <IConfigureOptions <MvcJsonOptions> >()));

            // Act
            setup1.Configure(mvcOptions);
            setup2.Configure(mvcOptions);
            setup3.Configure(mvcOptions);

            // Assert
            Assert.Equal(2, mvcOptions.InputFormatters.Count);
            Assert.IsType <JsonInputFormatter>(mvcOptions.InputFormatters[0]);
            Assert.IsType <JsonPatchInputFormatter>(mvcOptions.InputFormatters[1]);
        }
        public void Setup_SetsUpOutputFormatters()
        {
            // Arrange
            var mvcOptions = new MvcOptions();
            var setup1     = new CoreMvcOptionsSetup();
            var setup2     = new MvcOptionsSetup();
            var setup3     = new JsonMvcOptionsSetup(new OptionsManager <MvcJsonOptions>(
                                                         Enumerable.Empty <IConfigureOptions <MvcJsonOptions> >()));

            // Act
            setup1.Configure(mvcOptions);
            setup2.Configure(mvcOptions);
            setup3.Configure(mvcOptions);

            // Assert
            Assert.Equal(4, mvcOptions.OutputFormatters.Count);
            Assert.IsType <HttpNoContentOutputFormatter>(mvcOptions.OutputFormatters[0]);
            Assert.IsType <StringOutputFormatter>(mvcOptions.OutputFormatters[1]);
            Assert.IsType <StreamOutputFormatter>(mvcOptions.OutputFormatters[2]);
            Assert.IsType <JsonOutputFormatter>(mvcOptions.OutputFormatters[3]);
        }
        public void Setup_SetsUpExcludeFromValidationDelegates()
        {
            // Arrange
            var mvcOptions = new MvcOptions();
            var setup1     = new CoreMvcOptionsSetup();
            var setup2     = new MvcOptionsSetup();

            // Act
            setup1.Configure(mvcOptions);
            setup2.Configure(mvcOptions);

            // Assert
            Assert.Equal(8, mvcOptions.ValidationExcludeFilters.Count);
            var i = 0;

            // Verify if the delegates registered by default exclude the given types.
            Assert.IsType(typeof(SimpleTypesExcludeFilter), mvcOptions.ValidationExcludeFilters[i++]);

            Assert.IsType(typeof(DefaultTypeBasedExcludeFilter), mvcOptions.ValidationExcludeFilters[i]);
            var typeFilter
                = Assert.IsType <DefaultTypeBasedExcludeFilter>(mvcOptions.ValidationExcludeFilters[i++]);

            Assert.Equal(typeFilter.ExcludedType, typeof(Type));

            Assert.IsType(typeof(DefaultTypeBasedExcludeFilter), mvcOptions.ValidationExcludeFilters[i]);
            var cancellationTokenFilter
                = Assert.IsType <DefaultTypeBasedExcludeFilter>(mvcOptions.ValidationExcludeFilters[i++]);

            Assert.Equal(cancellationTokenFilter.ExcludedType, typeof(System.Threading.CancellationToken));

            Assert.IsType(typeof(DefaultTypeBasedExcludeFilter), mvcOptions.ValidationExcludeFilters[i]);
            var formFileFilter
                = Assert.IsType <DefaultTypeBasedExcludeFilter>(mvcOptions.ValidationExcludeFilters[i++]);

            Assert.Equal(formFileFilter.ExcludedType, typeof(Http.IFormFile));

            Assert.IsType(
                typeof(DefaultTypeBasedExcludeFilter),
                mvcOptions.ValidationExcludeFilters[i]);
            var formCollectionFilter
                = Assert.IsType <DefaultTypeBasedExcludeFilter>(mvcOptions.ValidationExcludeFilters[i++]);

            Assert.Equal(formCollectionFilter.ExcludedType, typeof(Http.IFormCollection));

            Assert.IsType(typeof(DefaultTypeBasedExcludeFilter), mvcOptions.ValidationExcludeFilters[i]);
            var xObjectFilter
                = Assert.IsType <DefaultTypeBasedExcludeFilter>(mvcOptions.ValidationExcludeFilters[i++]);

            Assert.Equal(xObjectFilter.ExcludedType, typeof(XObject));

            Assert.IsType(typeof(DefaultTypeBasedExcludeFilter), mvcOptions.ValidationExcludeFilters[i]);
            var jTokenFilter
                = Assert.IsType <DefaultTypeBasedExcludeFilter>(mvcOptions.ValidationExcludeFilters[i++]);

            Assert.Equal(jTokenFilter.ExcludedType, typeof(JToken));

            Assert.IsType(typeof(DefaultTypeNameBasedExcludeFilter), mvcOptions.ValidationExcludeFilters[i]);
            var xmlNodeFilter =
                Assert.IsType <DefaultTypeNameBasedExcludeFilter>(mvcOptions.ValidationExcludeFilters[i++]);

            Assert.Equal(xmlNodeFilter.ExcludedTypeName, "System.Xml.XmlNode");
        }