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); }
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()); }
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 }; })); }
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); }
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); }
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)); }
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; }
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)); }
public ValidationAttributeCollector( ResourceKeyBuilder keyBuilder, OldResourceKeyBuilder oldKeyBuilder, DiscoveredTranslationBuilder translationBuilder) { _keyBuilder = keyBuilder; _oldKeyBuilder = oldKeyBuilder; _translationBuilder = translationBuilder; }
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 }); } } }
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; }
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); }
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); }
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); }
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); }