Beispiel #1
0
        public IEnumerable <DiscoveredResource> GetDiscoveredResources(
            Type target,
            object instance,
            MemberInfo mi,
            string translation,
            string resourceKey,
            string resourceKeyPrefix,
            bool typeKeyPrefixSpecified,
            bool isHidden,
            string typeOldName,
            string typeOldNamespace,
            Type declaringType,
            Type returnType,
            bool isSimpleType)
        {
            // try to understand if there is resource "redirect" - [UseResource(..)]
            var resourceRef = mi.GetCustomAttribute <UseResourceAttribute>();

            if (resourceRef != null)
            {
                TypeDiscoveryHelper.UseResourceAttributeCache.TryAdd(resourceKey,
                                                                     ResourceKeyBuilder.BuildResourceKey(resourceRef.TargetContainer, resourceRef.PropertyName));
            }

            return(Enumerable.Empty <DiscoveredResource>());
        }
        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);
        }
Beispiel #3
0
        public ICollection <DiscoveredResource> GetResources(Type target, string resourceKeyPrefix)
        {
            var enumType = Enum.GetUnderlyingType(target);
            var isHidden = target.GetCustomAttribute <HiddenAttribute>() != null;

            string GetEnumTranslation(MemberInfo mi)
            {
                var result           = mi.Name;
                var displayAttribute = mi.GetCustomAttribute <DisplayAttribute>();

                if (displayAttribute != null)
                {
                    result = displayAttribute.Name;
                }

                return(result);
            }

            return(target.GetMembers(BindingFlags.Public | BindingFlags.Static)
                   .Select(mi =>
            {
                var isResourceHidden = isHidden || mi.GetCustomAttribute <HiddenAttribute>() != null;
                var resourceKey = ResourceKeyBuilder.BuildResourceKey(target, mi.Name);
                var translations = TranslationsHelper.GetAllTranslations(mi, resourceKey, GetEnumTranslation(mi));

                return new DiscoveredResource(mi,
                                              resourceKey,
                                              translations,
                                              mi.Name,
                                              target,
                                              enumType,
                                              enumType.IsSimpleType(),
                                              isResourceHidden);
            }).ToList());
        }
Beispiel #4
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 IEnumerable <DiscoveredResource> GetDiscoveredResources(Type target,
                                                                       object instance,
                                                                       MemberInfo mi,
                                                                       string translation,
                                                                       string resourceKey,
                                                                       string resourceKeyPrefix,
                                                                       bool typeKeyPrefixSpecified,
                                                                       bool isHidden,
                                                                       string typeOldName,
                                                                       string typeOldNamespace,
                                                                       Type declaringType,
                                                                       Type returnType,
                                                                       bool isSimpleType)
        {
            // check if there are [ResourceKey] attributes
            var keyAttributes = mi.GetCustomAttributes <ResourceKeyAttribute>().ToList();

            return(keyAttributes.Select(attr =>
            {
                var translations = TranslationsHelper.GetAllTranslations(mi, resourceKey, string.IsNullOrEmpty(attr.Value) ? translation : attr.Value);

                return new DiscoveredResource(mi,
                                              ResourceKeyBuilder.BuildResourceKey(typeKeyPrefixSpecified ? resourceKeyPrefix : null, attr.Key, string.Empty),
                                              translations,
                                              null,
                                              declaringType,
                                              returnType,
                                              true)
                {
                    FromResourceKeyAttribute = true
                };
            }));
        }
Beispiel #6
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);
        }
Beispiel #7
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 static IHtmlContent TranslateByCulture(
            this IHtmlHelper htmlHelper,
            Expression <Func <object> > expression,
            Type customAttribute,
            CultureInfo language,
            params object[] formatArguments)
        {
            if (htmlHelper == null)
            {
                throw new ArgumentNullException(nameof(htmlHelper));
            }
            if (expression == null)
            {
                throw new ArgumentNullException(nameof(expression));
            }
            if (!typeof(Attribute).IsAssignableFrom(customAttribute))
            {
                throw new ArgumentException($"Given type `{customAttribute.FullName}` is not of type `System.Attribute`");
            }
            if (language == null)
            {
                throw new ArgumentNullException(nameof(language));
            }

            var resourceKey = ResourceKeyBuilder.BuildResourceKey(ExpressionHelper.GetFullMemberName(expression), customAttribute);

            return(new HtmlString(LocalizationProvider.Current.GetStringByCulture(resourceKey, language, formatArguments)));
        }
        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);
        }
        public void RequestTranslationForLanguageInsideFallbackList_NoTranslation_NextFallbackLanguageShouldBeUsed()
        {
            var resources = new List <LocalizationResource>
            {
                new LocalizationResource("DbLocalizationProvider.Tests.JsonConverterTests.SomeResourceClass.PropertyInFrenchAndEnglish", false)
                {
                    Translations = new LocalizationResourceTranslationCollection(false)
                    {
                        new LocalizationResourceTranslation
                        {
                            Language = "fr", Value = "FR"
                        },
                        new LocalizationResourceTranslation
                        {
                            Language = "en", Value = "EN"
                        },
                        new LocalizationResourceTranslation
                        {
                            Language = "", Value = "INVARIANT"
                        }
                    }
                },
                new LocalizationResource("DbLocalizationProvider.Tests.JsonConverterTests.SomeResourceClass.PropertyOnlyInInvariant", false)
                {
                    Translations = new LocalizationResourceTranslationCollection(false)
                    {
                        new LocalizationResourceTranslation {
                            Language = "", Value = "INVARIANT"
                        }
                    }
                }
            };

            var keyBuilder = new ResourceKeyBuilder(new ScanState());
            var ctx        = new ConfigurationContext();

            ctx.TypeFactory.ForQuery <GetAllResources.Query>().SetHandler(() => new GetAllResourcesUnitTestHandler(resources));
            ctx.FallbackLanguages.Try(
                new List <CultureInfo>
            {
                new CultureInfo("fr"),
                new CultureInfo("en-GB"),
                new CultureInfo("en"),
                CultureInfo.InvariantCulture
            });

            var sut = new LocalizationProvider(keyBuilder,
                                               new ExpressionHelper(keyBuilder),
                                               ctx.FallbackList,
                                               new QueryExecutor(ctx.TypeFactory));

            var result = sut.Translate <SomeResourceClass>(new CultureInfo("en-GB"));

            Assert.NotNull(result);
            Assert.Equal("EN", result.PropertyInFrenchAndEnglish);

            // request for last language in the list - invariant should be returned
            result = sut.Translate <SomeResourceClass>(new CultureInfo("en"));
            Assert.Equal("INVARIANT", result.PropertyOnlyInInvariant);
        }
Beispiel #12
0
 public LocalizedString this[string name]
 {
     get
     {
         var value = LocalizationProvider.Current.GetString(ResourceKeyBuilder.BuildResourceKey(_containerType, _propertyName, _validatorMetadata));
         return(new LocalizedString(name, value ?? name, value == null));
     }
 }
        public IEnumerable <DiscoveredResource> GetDiscoveredResources(
            Type target,
            object instance,
            MemberInfo mi,
            string translation,
            string resourceKey,
            string resourceKeyPrefix,
            bool typeKeyPrefixSpecified,
            bool isHidden,
            string typeOldName,
            string typeOldNamespace,
            Type declaringType,
            Type returnType,
            bool isSimpleType)
        {
            var keyAttributes        = mi.GetCustomAttributes <ResourceKeyAttribute>().ToList();
            var validationAttributes = mi.GetCustomAttributes <ValidationAttribute>().ToList();

            if (keyAttributes.Count > 1 && validationAttributes.Any())
            {
                throw new InvalidOperationException("Model with data annotation attributes cannot have more than one `[ResourceKey]` attribute.");
            }

            foreach (var validationAttribute in validationAttributes)
            {
                if (validationAttribute.GetType() == typeof(DataTypeAttribute))
                {
                    continue;
                }

                if (keyAttributes.Any())
                {
                    resourceKey = keyAttributes.First().Key;
                }

                var validationResourceKey = ResourceKeyBuilder.BuildResourceKey(resourceKey, validationAttribute);
                var propertyName          = validationResourceKey.Split('.').Last();

                var oldResourceKeys = OldResourceKeyBuilder.GenerateOldResourceKey(target, propertyName, mi, resourceKeyPrefix, typeOldName, typeOldNamespace);

                yield return(new DiscoveredResource(mi,
                                                    validationResourceKey,
                                                    DiscoveredTranslation.FromSingle(string.IsNullOrEmpty(validationAttribute.ErrorMessage)
                                                                                         ? propertyName
                                                                                         : validationAttribute.ErrorMessage),
                                                    propertyName,
                                                    declaringType,
                                                    returnType,
                                                    isSimpleType)
                {
                    TypeName = target.Name,
                    TypeNamespace = target.Namespace,
                    TypeOldName = oldResourceKeys.Item2,
                    TypeOldNamespace = typeOldNamespace,
                    OldResourceKey = oldResourceKeys.Item1
                });
            }
        }
 /// <summary>
 /// Creates new instance of this class.
 /// </summary>
 /// <param name="localizationProvider">Localization provider itself.</param>
 /// <param name="keyBuilder">Resource key builder.</param>
 /// <param name="configurationContext">Configuration settings.</param>
 public ModelMetadataLocalizationHelper(
     ILocalizationProvider localizationProvider,
     ResourceKeyBuilder keyBuilder,
     ConfigurationContext configurationContext)
 {
     _localizationProvider = localizationProvider ?? throw new ArgumentNullException(nameof(localizationProvider));
     _keyBuilder           = keyBuilder ?? throw new ArgumentNullException(nameof(keyBuilder));
     _configurationContext = configurationContext ?? throw new ArgumentNullException(nameof(configurationContext));
 }
Beispiel #15
0
 public LocalizedModelTypeScanner(
     ResourceKeyBuilder keyBuilder,
     OldResourceKeyBuilder oldKeyBuilder,
     ScanState state,
     ConfigurationContext configurationContext,
     DiscoveredTranslationBuilder translationBuilder) :
     base(keyBuilder, oldKeyBuilder, state, configurationContext, translationBuilder)
 {
 }
 public LocalizedModelValidator(
     ValidationAttribute attribute,
     ResourceKeyBuilder keyBuilder,
     ModelMetadataLocalizationHelper metadataHelper)
 {
     _attribute      = attribute;
     _keyBuilder     = keyBuilder;
     _metadataHelper = metadataHelper;
 }
Beispiel #17
0
        public static MvcHtmlString GetTranslations(this HtmlHelper helper, Type containerType, string language = null, string alias = null, bool debug = false, bool camelCase = false)
        {
            if (containerType == null)
            {
                throw new ArgumentNullException(nameof(containerType));
            }

            return(GenerateScriptTag(language, alias, debug, ResourceKeyBuilder.BuildResourceKey(containerType), camelCase));
        }
Beispiel #18
0
 public ValidationAttributeCollector(
     ResourceKeyBuilder keyBuilder,
     OldResourceKeyBuilder oldKeyBuilder,
     DiscoveredTranslationBuilder translationBuilder)
 {
     _keyBuilder         = keyBuilder;
     _oldKeyBuilder      = oldKeyBuilder;
     _translationBuilder = translationBuilder;
 }
Beispiel #19
0
        public IEnumerable <DiscoveredResource> GetDiscoveredResources(
            Type target,
            object instance,
            MemberInfo mi,
            string translation,
            string resourceKey,
            string resourceKeyPrefix,
            bool typeKeyPrefixSpecified,
            bool isHidden,
            string typeOldName,
            string typeOldNamespace,
            Type declaringType,
            Type returnType,
            bool isSimpleType)
        {
            // scan custom registered attributes (if any)
            foreach (var descriptor in ConfigurationContext.Current.CustomAttributes.ToList())
            {
                var customAttributes = mi.GetCustomAttributes(descriptor.CustomAttribute);
                foreach (var customAttribute in customAttributes)
                {
                    var customAttributeKey = ResourceKeyBuilder.BuildResourceKey(resourceKey, customAttribute);
                    var propertyName       = customAttributeKey.Split('.').Last();
                    var oldResourceKeys    = OldResourceKeyBuilder.GenerateOldResourceKey(target,
                                                                                          propertyName,
                                                                                          mi,
                                                                                          resourceKeyPrefix,
                                                                                          typeOldName,
                                                                                          typeOldNamespace);
                    var foreignTranslation = string.Empty;
                    if (descriptor.GenerateTranslation)
                    {
                        var z1 = customAttribute.GetType().ToString();
                        var z2 = customAttribute.ToString();

                        foreignTranslation = !z1.Equals(z2) ? z2 : propertyName;
                    }

                    yield return(new DiscoveredResource(mi,
                                                        customAttributeKey,
                                                        DiscoveredTranslation.FromSingle(foreignTranslation),
                                                        propertyName,
                                                        declaringType,
                                                        returnType,
                                                        isSimpleType)
                    {
                        TypeName = target.Name,
                        TypeNamespace = target.Namespace,
                        TypeOldName = oldResourceKeys.Item2,
                        TypeOldNamespace = typeOldNamespace,
                        OldResourceKey = oldResourceKeys.Item1
                    });
                }
            }
        }
Beispiel #20
0
        public static MvcHtmlString GetTranslations <TModel>(this HtmlHelper <TModel> helper, Type containerType, string language = null, string alias = null, bool debug = false)
        {
            if (containerType == null)
            {
                throw new ArgumentNullException(nameof(containerType));
            }

            var resourceKey = ResourceKeyBuilder.BuildResourceKey(containerType);

            return(GenerateScriptTag(language, alias, debug, resourceKey));
        }
 public CustomAttributeCollector(
     ResourceKeyBuilder keyBuilder,
     OldResourceKeyBuilder oldKeyBuilder,
     ConfigurationContext configurationContext,
     DiscoveredTranslationBuilder translationBuilder)
 {
     _keyBuilder           = keyBuilder;
     _oldKeyBuilder        = oldKeyBuilder;
     _configurationContext = configurationContext;
     _translationBuilder   = translationBuilder;
 }
Beispiel #22
0
        public void BuildResourceKey_ForSecondBaseClassProperty_ExcludedFromChild_ShouldReturnBaseTypeContext()
        {
            var properties =
                new[] { typeof(SampleViewModelWithBaseNotInherit), typeof(BaseLocalizedViewModel), typeof(VeryBaseLocalizedViewModel) }
            .Select(t => _sut.ScanResources(t))
            .ToList();

            var veryBasePropertyKey = ResourceKeyBuilder.BuildResourceKey(typeof(SampleViewModelWithBaseNotInherit), "VeryBaseProperty");

            Assert.Equal("DbLocalizationProvider.Tests.InheritedModels.VeryBaseLocalizedViewModel.VeryBaseProperty", veryBasePropertyKey);
        }
Beispiel #23
0
        public LocalizedString this[string name, params object[] arguments]
        {
            get
            {
                var value = LocalizationProvider.Current.GetStringByCulture(ResourceKeyBuilder.BuildResourceKey(_containerType, _propertyName, _validatorMetadata),
                                                                            _culture,
                                                                            arguments);

                return(new LocalizedString(name, value ?? name, value == null));
            }
        }
        private ICollection <DiscoveredResource> DiscoverResourcesFromMember(
            Type target,
            object instance,
            MemberInfo mi,
            string resourceKeyPrefix,
            bool typeKeyPrefixSpecified,
            bool isHidden,
            string typeOldName      = null,
            string typeOldNamespace = null)
        {
            var resourceKey = ResourceKeyBuilder.BuildResourceKey(resourceKeyPrefix, mi.Name);
            var translation = GetResourceValue(instance, mi);

            Type declaringType = null;
            Type returnType    = null;
            var  isSimpleType  = false;

            switch (mi)
            {
            case PropertyInfo propertyInfo:
                declaringType = propertyInfo.PropertyType;
                returnType    = propertyInfo.GetMethod.ReturnType;
                isSimpleType  = returnType.IsSimpleType();
                break;

            case FieldInfo fieldInfo:
                declaringType = fieldInfo.GetUnderlyingType();
                returnType    = fieldInfo.GetUnderlyingType();
                isSimpleType  = returnType.IsSimpleType();
                break;
            }

            var result = new List <DiscoveredResource>();

            foreach (var collector in _collectors)
            {
                result.AddRange(collector.GetDiscoveredResources(target,
                                                                 instance,
                                                                 mi,
                                                                 translation,
                                                                 resourceKey,
                                                                 resourceKeyPrefix,
                                                                 typeKeyPrefixSpecified,
                                                                 isHidden,
                                                                 typeOldName,
                                                                 typeOldNamespace,
                                                                 declaringType,
                                                                 returnType,
                                                                 isSimpleType).ToList());
            }

            return(result);
        }
Beispiel #25
0
        public void TestOpenGenericRegistration_ClosedGenericLookUp_ShouldFindSame()
        {
            TypeDiscoveryHelper.DiscoveredResourceCache.TryAdd(typeof(BaseOpenViewModel <>).FullName, new List <string> {
                "Message"
            });

            var type = new SampleViewModelWithClosedBase();

            var key = ResourceKeyBuilder.BuildResourceKey(type.GetType(), "Message");

            Assert.Equal("DbLocalizationProvider.Tests.InheritedModels.BaseOpenViewModel`1.Message", key);
        }
 public LocalizedForeignResourceTypeScanner(
     ResourceKeyBuilder keyBuilder,
     OldResourceKeyBuilder oldKeyBuilder,
     ScanState state,
     ConfigurationContext configurationContext,
     DiscoveredTranslationBuilder translationBuilder)
 {
     _keyBuilder           = keyBuilder;
     _oldKeyBuilder        = oldKeyBuilder;
     _state                = state;
     _configurationContext = configurationContext;
     _translationBuilder   = translationBuilder;
 }
 /// <summary>
 /// Creates new instance of localized client-side validator.
 /// </summary>
 /// <param name="validationAttributeAdapterProvider"></param>
 /// <param name="localizationProvider"></param>
 /// <param name="keyBuilder"></param>
 /// <param name="expressionHelper"></param>
 /// <param name="configurationContext"></param>
 public LocalizedClientModelValidator(
     IValidationAttributeAdapterProvider validationAttributeAdapterProvider,
     ILocalizationProvider localizationProvider,
     ResourceKeyBuilder keyBuilder,
     ExpressionHelper expressionHelper,
     ConfigurationContext configurationContext)
 {
     _validationAttributeAdapterProvider = validationAttributeAdapterProvider;
     _localizationProvider = localizationProvider ?? throw new ArgumentNullException(nameof(localizationProvider));
     _keyBuilder           = keyBuilder ?? throw new ArgumentNullException(nameof(keyBuilder));
     _expressionHelper     = expressionHelper ?? throw new ArgumentNullException(nameof(expressionHelper));
     _configurationContext = configurationContext ?? throw new ArgumentNullException(nameof(configurationContext));
 }
        public void DiscoverClassField_RespectsResourceKeyAttribute()
        {
            var sut = new TypeDiscoveryHelper();
            var discoveredModels = sut.ScanResources(typeof(LocalizedModelWithFieldResourceKeys));

            // check return
            Assert.NotEmpty(discoveredModels);

            // check discovered translation
            Assert.Equal("/this/is/key", discoveredModels.First().Key);

            Assert.Equal("/this/is/key", ResourceKeyBuilder.BuildResourceKey(typeof(LocalizedModelWithFieldResourceKeys), nameof(LocalizedModelWithFieldResourceKeys.AnotherField)));
        }
        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);
        }
Beispiel #30
0
        public void BuildResourceKey_ForBaseClassProperty_ExcludedFromChild_ShouldReturnBaseTypeContext()
        {
            var properties =
                new[] { typeof(SampleViewModelWithBaseNotInherit), typeof(BaseLocalizedViewModel) }
            .Select(t => _sut.ScanResources(t))
            .ToList();

            var childPropertyKey        = ResourceKeyBuilder.BuildResourceKey(typeof(SampleViewModelWithBaseNotInherit), "ChildProperty");
            var basePropertyKey         = ResourceKeyBuilder.BuildResourceKey(typeof(SampleViewModelWithBaseNotInherit), "BaseProperty");
            var requiredBasePropertyKey = ResourceKeyBuilder.BuildResourceKey(typeof(SampleViewModelWithBaseNotInherit), "BaseProperty", new RequiredAttribute());

            Assert.Equal("DbLocalizationProvider.Tests.InheritedModels.SampleViewModelWithBaseNotInherit.ChildProperty", childPropertyKey);
            Assert.Equal("DbLocalizationProvider.Tests.InheritedModels.BaseLocalizedViewModel.BaseProperty", basePropertyKey);
            Assert.Equal("DbLocalizationProvider.Tests.InheritedModels.BaseLocalizedViewModel.BaseProperty-Required", requiredBasePropertyKey);
        }