Exemplo n.º 1
0
        public void NotInheritedModel_ContainsOnlyDeclaredProperties()
        {
            var state         = new ScanState();
            var keyBuilder    = new ResourceKeyBuilder(state);
            var oldKeyBuilder = new OldResourceKeyBuilder(keyBuilder);
            var ctx           = new ConfigurationContext();

            ctx.TypeFactory.ForQuery <DetermineDefaultCulture.Query>().SetHandler <DetermineDefaultCulture.Handler>();

            var queryExecutor      = new QueryExecutor(ctx);
            var translationBuilder = new DiscoveredTranslationBuilder(queryExecutor);

            var sut = new TypeDiscoveryHelper(new List <IResourceTypeScanner>
            {
                new LocalizedModelTypeScanner(keyBuilder, oldKeyBuilder, state, ctx, translationBuilder),
                new LocalizedResourceTypeScanner(keyBuilder, oldKeyBuilder, state, ctx, translationBuilder),
                new LocalizedEnumTypeScanner(keyBuilder, translationBuilder),
                new LocalizedForeignResourceTypeScanner(keyBuilder, oldKeyBuilder, state, ctx, translationBuilder)
            }, ctx);

            var properties           = sut.ScanResources(typeof(SampleViewModelWithBase)).ToList();
            var keys                 = properties.Select(p => p.Key).ToList();
            var stringLengthResource = properties.FirstOrDefault(r => r.Key == "DbLocalizationProvider.Tests.DataAnnotations.SampleViewModelWithBase.ChildProperty-StringLength");

            Assert.Contains("DbLocalizationProvider.Tests.DataAnnotations.SampleViewModelWithBase.ChildProperty-Description", keys);
            Assert.NotNull(stringLengthResource);
            Assert.Contains("StringLength", stringLengthResource.Translations.DefaultTranslation());
            Assert.DoesNotContain("DbLocalizationProvider.Tests.DataAnnotations.SampleViewModelWithBase.BaseProperty", keys);
            Assert.DoesNotContain("DbLocalizationProvider.Tests.DataAnnotations.SampleViewModelWithBase.BaseProperty-Required", keys);
            Assert.DoesNotContain("DbLocalizationProvider.Tests.DataAnnotations.SampleViewModelWithBase.ChildProperty-Description-Required", keys);
        }
Exemplo n.º 2
0
        public LocalizedResourceDiscoveryTests()
        {
            var state         = new ScanState();
            var keyBuilder    = new ResourceKeyBuilder(state);
            var oldKeyBuilder = new OldResourceKeyBuilder(keyBuilder);
            var ctx           = new ConfigurationContext();

            ctx.TypeFactory.ForQuery <DetermineDefaultCulture.Query>().SetHandler <DetermineDefaultCulture.Handler>();

            var queryExecutor      = new QueryExecutor(ctx);
            var translationBuilder = new DiscoveredTranslationBuilder(queryExecutor);

            _sut = new TypeDiscoveryHelper(new List <IResourceTypeScanner>
            {
                new LocalizedModelTypeScanner(keyBuilder, oldKeyBuilder, state, ctx, translationBuilder),
                new LocalizedResourceTypeScanner(keyBuilder, oldKeyBuilder, state, ctx, translationBuilder),
                new LocalizedEnumTypeScanner(keyBuilder, translationBuilder),
                new LocalizedForeignResourceTypeScanner(keyBuilder, oldKeyBuilder, state, ctx, translationBuilder)
            }, ctx);

            _expressionHelper = new ExpressionHelper(keyBuilder);

            _types = _sut.GetTypesWithAttribute <LocalizedResourceAttribute>().ToList();
            Assert.NotEmpty(_types);
        }
        public LocalizedEnumTests()
        {
            var types         = new[] { typeof(DocumentEntity) };
            var state         = new ScanState();
            var keyBuilder    = new ResourceKeyBuilder(state);
            var oldKeyBuilder = new OldResourceKeyBuilder(keyBuilder);
            var ctx           = new ConfigurationContext();

            ctx.TypeFactory.ForQuery <DetermineDefaultCulture.Query>().SetHandler <DetermineDefaultCulture.Handler>();

            var queryExecutor      = new QueryExecutor(ctx.TypeFactory);
            var translationBuilder = new DiscoveredTranslationBuilder(queryExecutor);

            _sut = new TypeDiscoveryHelper(new List <IResourceTypeScanner>
            {
                new LocalizedModelTypeScanner(keyBuilder, oldKeyBuilder, state, ctx, translationBuilder),
                new LocalizedResourceTypeScanner(keyBuilder, oldKeyBuilder, state, ctx, translationBuilder),
                new LocalizedEnumTypeScanner(keyBuilder, translationBuilder),
                new LocalizedForeignResourceTypeScanner(keyBuilder, oldKeyBuilder, state, ctx, translationBuilder)
            }, ctx);

            _expressionHelper = new ExpressionHelper(keyBuilder);

            Assert.NotEmpty(types);

            _properties = types.SelectMany(t => _sut.ScanResources(t));
        }
        public DataAnnotationsTests()
        {
            var state         = new ScanState();
            var keyBuilder    = new ResourceKeyBuilder(state);
            var oldKeyBuilder = new OldResourceKeyBuilder(keyBuilder);
            var ctx           = new ConfigurationContext();

            ctx.TypeFactory
            .ForQuery <DetermineDefaultCulture.Query>().SetHandler <DetermineDefaultCulture.Handler>()
            .ForQuery <GetTranslation.Query>().SetHandler <GetTranslationReturnResourceKeyHandler>();

            var queryExecutor      = new QueryExecutor(ctx);
            var translationBuilder = new DiscoveredTranslationBuilder(queryExecutor);

            _sut = new TypeDiscoveryHelper(new List <IResourceTypeScanner>
            {
                new LocalizedModelTypeScanner(keyBuilder, oldKeyBuilder, state, ctx, translationBuilder),
                new LocalizedResourceTypeScanner(keyBuilder, oldKeyBuilder, state, ctx, translationBuilder),
                new LocalizedEnumTypeScanner(keyBuilder, translationBuilder),
                new LocalizedForeignResourceTypeScanner(keyBuilder, oldKeyBuilder, state, ctx, translationBuilder)
            }, ctx);

            var expressHelper = new ExpressionHelper(keyBuilder);

            _provider = new LocalizationProvider(keyBuilder, expressHelper, new FallbackLanguagesCollection(), queryExecutor);
        }
Exemplo n.º 5
0
        public void SameModel_MultipleDefinitions_DoesNotThrowException()
        {
            var state         = new ScanState();
            var keyBuilder    = new ResourceKeyBuilder(state);
            var oldKeyBuilder = new OldResourceKeyBuilder(keyBuilder);
            var ctx           = new ConfigurationContext();

            ctx.TypeFactory.ForQuery <DetermineDefaultCulture.Query>().SetHandler <DetermineDefaultCulture.Handler>();

            var queryExecutor      = new QueryExecutor(ctx.TypeFactory);
            var translationBuilder = new DiscoveredTranslationBuilder(queryExecutor);

            var sut = new TypeDiscoveryHelper(new List <IResourceTypeScanner>
            {
                new LocalizedModelTypeScanner(keyBuilder, oldKeyBuilder, state, ctx, translationBuilder),
                new LocalizedResourceTypeScanner(keyBuilder, oldKeyBuilder, state, ctx, translationBuilder),
                new LocalizedEnumTypeScanner(keyBuilder, translationBuilder),
                new LocalizedForeignResourceTypeScanner(keyBuilder, oldKeyBuilder, state, ctx, translationBuilder)
            }, ctx);

            var resources = sut.ScanResources(typeof(ViewModelWithDuplicateSubModels));

            Assert.NotNull(resources);

            var count = resources.Count(r => r.Key == "DbLocalizationProvider.Tests.SubModel.MyProperty-StringLength");

            Assert.Equal(1, count);
        }
        public void Test()
        {
            var state         = new ScanState();
            var keyBuilder    = new ResourceKeyBuilder(state);
            var oldKeyBuilder = new OldResourceKeyBuilder(keyBuilder);
            var ctx           = new ConfigurationContext();

            ctx.TypeFactory.ForQuery <DetermineDefaultCulture.Query>().SetHandler <DetermineDefaultCulture.Handler>();

            var queryExecutor      = new QueryExecutor(ctx.TypeFactory);
            var translationBuilder = new DiscoveredTranslationBuilder(queryExecutor);

            var sut = new TypeDiscoveryHelper(new List <IResourceTypeScanner>
            {
                new LocalizedModelTypeScanner(keyBuilder, oldKeyBuilder, state, ctx, translationBuilder),
                new LocalizedResourceTypeScanner(keyBuilder, oldKeyBuilder, state, ctx, translationBuilder),
                new LocalizedEnumTypeScanner(keyBuilder, translationBuilder),
                new LocalizedForeignResourceTypeScanner(keyBuilder, oldKeyBuilder, state, ctx, translationBuilder)
            }, ctx);

            var expressionHelper = new ExpressionHelper(keyBuilder);

            var properties = new[] { typeof(SampleViewModelWithBaseNotInherit), typeof(BaseLocalizedViewModel) }
            .Select(t => sut.ScanResources(t))
            .ToList();

            var childModel      = new SampleViewModelWithBaseNotInherit();
            var basePropertyKey = expressionHelper.GetFullMemberName(() => childModel.BaseProperty);

            Assert.Equal("DbLocalizationProvider.Tests.InheritedModels.BaseLocalizedViewModel.BaseProperty", basePropertyKey);
        }
Exemplo n.º 7
0
 public ValidationAttributeCollector(
     ResourceKeyBuilder keyBuilder,
     OldResourceKeyBuilder oldKeyBuilder,
     DiscoveredTranslationBuilder translationBuilder)
 {
     _keyBuilder         = keyBuilder;
     _oldKeyBuilder      = oldKeyBuilder;
     _translationBuilder = translationBuilder;
 }
 public CustomAttributeCollector(
     ResourceKeyBuilder keyBuilder,
     OldResourceKeyBuilder oldKeyBuilder,
     ConfigurationContext configurationContext,
     DiscoveredTranslationBuilder translationBuilder)
 {
     _keyBuilder           = keyBuilder;
     _oldKeyBuilder        = oldKeyBuilder;
     _configurationContext = configurationContext;
     _translationBuilder   = translationBuilder;
 }
        public void ViewModelType_ShouldSelectModelScanner()
        {
            var state      = new ScanState();
            var keyBuilder = new ResourceKeyBuilder(state);
            var ctx        = new ConfigurationContext();

            ctx.TypeFactory.ForQuery <DetermineDefaultCulture.Query>().SetHandler <DetermineDefaultCulture.Handler>();
            var queryExecutor      = new QueryExecutor(ctx.TypeFactory);
            var translationBuilder = new DiscoveredTranslationBuilder(queryExecutor);
            var sut = new LocalizedModelTypeScanner(keyBuilder, new OldResourceKeyBuilder(keyBuilder), state, ctx, translationBuilder);

            var result = sut.ShouldScan(typeof(SampleViewModel));

            Assert.True(result);
        }
        public void Resource_WithJustStaticGetSet_TranslationShouldBePropertyName()
        {
            var state      = new ScanState();
            var keyBuilder = new ResourceKeyBuilder(state);
            var ctx        = new ConfigurationContext();

            ctx.TypeFactory.ForQuery <DetermineDefaultCulture.Query>().SetHandler <DetermineDefaultCulture.Handler>();
            var queryExecutor      = new QueryExecutor(ctx.TypeFactory);
            var translationBuilder = new DiscoveredTranslationBuilder(queryExecutor);
            var sut = new LocalizedResourceTypeScanner(keyBuilder, new OldResourceKeyBuilder(keyBuilder), state, ctx, translationBuilder);

            var result = sut.GetResources(typeof(PageResources), null);

            Assert.True(result.Any());
            Assert.Equal("Header", result.First().Translations.DefaultTranslation());
        }
        public DuplicateCulturesTests()
        {
            var state         = new ScanState();
            var keyBuilder    = new ResourceKeyBuilder(state);
            var oldKeyBuilder = new OldResourceKeyBuilder(keyBuilder);
            var ctx           = new ConfigurationContext();

            ctx.TypeFactory.ForQuery <DetermineDefaultCulture.Query>().SetHandler <NorwegianDefaultCulture>();
            var queryExecutor      = new QueryExecutor(ctx);
            var translationBuilder = new DiscoveredTranslationBuilder(queryExecutor);

            _sut = new TypeDiscoveryHelper(new List <IResourceTypeScanner>
            {
                new LocalizedModelTypeScanner(keyBuilder, oldKeyBuilder, state, ctx, translationBuilder),
                new LocalizedResourceTypeScanner(keyBuilder, oldKeyBuilder, state, ctx, translationBuilder),
                new LocalizedEnumTypeScanner(keyBuilder, translationBuilder),
                new LocalizedForeignResourceTypeScanner(keyBuilder, oldKeyBuilder, state, ctx, translationBuilder)
            }, ctx);
        }
Exemplo n.º 12
0
        public ForeignResourceScannerTests()
        {
            var state         = new ScanState();
            var keyBuilder    = new ResourceKeyBuilder(state);
            var oldKeyBuilder = new OldResourceKeyBuilder(keyBuilder);
            var ctx           = new ConfigurationContext();

            ctx.TypeFactory.ForQuery <DetermineDefaultCulture.Query>().SetHandler <DetermineDefaultCulture.Handler>();
            ctx.ForeignResources
            .Add <ResourceWithNoAttribute>()
            .Add <BadRecursiveForeignResource>(true);

            var queryExecutor      = new QueryExecutor(ctx);
            var translationBuilder = new DiscoveredTranslationBuilder(queryExecutor);

            _sut = new TypeDiscoveryHelper(new List <IResourceTypeScanner>
            {
                new LocalizedModelTypeScanner(keyBuilder, oldKeyBuilder, state, ctx, translationBuilder),
                new LocalizedResourceTypeScanner(keyBuilder, oldKeyBuilder, state, ctx, translationBuilder),
                new LocalizedEnumTypeScanner(keyBuilder, translationBuilder),
                new LocalizedForeignResourceTypeScanner(keyBuilder, oldKeyBuilder, state, ctx, translationBuilder)
            }, ctx);
        }
Exemplo n.º 13
0
 public DisplayAttributeCollector(OldResourceKeyBuilder oldKeyBuilder, DiscoveredTranslationBuilder translationBuilder)
 {
     _oldKeyBuilder      = oldKeyBuilder;
     _translationBuilder = translationBuilder;
 }
Exemplo n.º 14
0
 public ResourceKeyAttributeCollector(ResourceKeyBuilder keyBuilder, DiscoveredTranslationBuilder translationBuilder)
 {
     _keyBuilder         = keyBuilder;
     _translationBuilder = translationBuilder;
 }
Exemplo n.º 15
0
        /// <summary>
        /// Adds the database localization provider.
        /// </summary>
        /// <param name="services">The services.</param>
        /// <param name="setup">The setup.</param>
        /// <returns></returns>
        public static IServiceCollection AddDbLocalizationProvider(
            this IServiceCollection services,
            Action <ConfigurationContext> setup = null)
        {
            var ctx     = new ConfigurationContext();
            var factory = ctx.TypeFactory;

            // setup default implementations
            factory.ForQuery <GetAllResources.Query>().DecorateWith <CachedGetAllResourcesHandler>();
            factory.ForQuery <DetermineDefaultCulture.Query>().SetHandler <DetermineDefaultCulture.Handler>();
            factory.ForCommand <ClearCache.Command>().SetHandler <ClearCacheHandler>();

            var provider = services.BuildServiceProvider();

            // set to default in-memory provider
            var cache = provider.GetService <IMemoryCache>();

            if (cache != null)
            {
                ctx.CacheManager = new InMemoryCacheManager(cache);
                services.AddSingleton(ctx.CacheManager);
            }

            // run custom configuration setup (if any)
            setup?.Invoke(ctx);

            // adding mvc localization stuff
            var scanState            = new ScanState();
            var keyBuilder           = new ResourceKeyBuilder(scanState);
            var oldKeyBuilder        = new OldResourceKeyBuilder(keyBuilder);
            var expressionHelper     = new ExpressionHelper(keyBuilder);
            var queryExecutor        = new QueryExecutor(ctx);
            var commandExecutor      = new CommandExecutor(ctx);
            var translationBuilder   = new DiscoveredTranslationBuilder(queryExecutor);
            var localizationProvider = new LocalizationProvider(keyBuilder, expressionHelper, ctx.FallbackList, queryExecutor);

            services.AddSingleton(p =>
            {
                // TODO: looks like a bit hackish
                ctx.TypeFactory.SetServiceFactory(p.GetService);
                return(ctx);
            });

            services.AddSingleton(p => ctx.TypeFactory);

            // add all registered handlers to DI (in order to use service factory callback from DI lib)
            foreach (var handler in ctx.TypeFactory.GetAllHandlers())
            {
                services.AddTransient(handler);
            }

            // add all registered handlers to DI (in order to use service factory callback from DI lib)
            foreach (var(service, implementation) in ctx.TypeFactory.GetAllTransientServiceMappings())
            {
                services.AddTransient(service, implementation);
            }

            services.AddSingleton(scanState);
            services.AddSingleton(keyBuilder);
            services.AddSingleton(expressionHelper);
            services.AddSingleton(queryExecutor);
            services.AddSingleton <IQueryExecutor>(queryExecutor);
            services.AddSingleton(commandExecutor);
            services.AddSingleton <ICommandExecutor>(commandExecutor);
            services.AddSingleton <ILogger>(p => new LoggerAdapter(p.GetService <ILogger <LoggerAdapter> >()));

            services.AddSingleton(new TypeDiscoveryHelper(new List <IResourceTypeScanner>
            {
                new LocalizedModelTypeScanner(keyBuilder, oldKeyBuilder, scanState, ctx, translationBuilder),
                new LocalizedResourceTypeScanner(keyBuilder, oldKeyBuilder, scanState, ctx, translationBuilder),
                new LocalizedEnumTypeScanner(keyBuilder, translationBuilder),
                new LocalizedForeignResourceTypeScanner(keyBuilder, oldKeyBuilder, scanState, ctx, translationBuilder)
            }, ctx));

            services.AddSingleton(localizationProvider);
            services.AddSingleton <ILocalizationProvider>(localizationProvider);
            services.AddTransient <ISynchronizer, Synchronizer>();
            services.AddTransient <Synchronizer>();

            services.AddSingleton <DbStringLocalizerFactory>();
            services.AddSingleton <IStringLocalizerFactory>(p => p.GetRequiredService <DbStringLocalizerFactory>());
            services.AddSingleton <DbHtmlLocalizerFactory>();
            services.AddSingleton <IHtmlLocalizerFactory>(p => p.GetRequiredService <DbHtmlLocalizerFactory>());
            services.AddTransient <IViewLocalizer, DbViewLocalizer>();
            services.AddTransient(typeof(IHtmlLocalizer <>), typeof(DbHtmlLocalizer <>));

            // we need to check whether invariant fallback is correctly configured
            if (ctx.EnableInvariantCultureFallback && !ctx.FallbackLanguages.Contains(CultureInfo.InvariantCulture))
            {
                ctx.FallbackLanguages.Then(CultureInfo.InvariantCulture);
            }

            // setup model metadata providers
            if (ctx.ModelMetadataProviders.ReplaceProviders)
            {
                services.Configure <MvcOptions>(
                    _ =>
                {
                    _.ModelMetadataDetailsProviders.Add(
                        new LocalizedDisplayMetadataProvider(
                            new ModelMetadataLocalizationHelper(localizationProvider, keyBuilder, ctx), ctx));
                });

                services.TryAddEnumerable(ServiceDescriptor.Transient <IConfigureOptions <MvcViewOptions>, ConfigureMvcViews>());
            }

            services.AddHttpContextAccessor();

            return(services);
        }
 public CasualResourceCollector(OldResourceKeyBuilder oldKeyKeyBuilder, DiscoveredTranslationBuilder translationBuilder)
 {
     _oldKeyKeyBuilder   = oldKeyKeyBuilder;
     _translationBuilder = translationBuilder;
 }