public void ItShouldCacheTheComputedLocalizer()
        {
            // Setup CultureInfo service mock.
            var cultureInfoServiceMock = SetupCultureInfoServiceMock();

            var extensionOptionsContainer = new ExtensionOptionsContainer <MyOptions>(new MyOptions());

            // Setup extension service
            var extensionServiceMock = SetupExtensionServiceMock(new Dictionary <string, string>(), extensionOptionsContainer);

            // Setup extension resolver service.
            var extensionResolverServiceMock = SetupResolverServiceMock(
                (extensionOptionsContainer, extensionServiceMock.Object));

            var optionsMock = SetupJsonLocalizationOptionsMock(extensionOptionsContainer);

            var cacheServiceMock = new Mock <ICacheService>();

            var factory = new JsonStringLocalizerFactory(
                optionsMock.Object,
                cultureInfoServiceMock.Object,
                extensionResolverServiceMock.Object,
                cacheServiceMock.Object,
                Logger);

            var localizer = factory.Create(BaseName, Assembly.FullName);

            Assert.NotNull(localizer);

            cacheServiceMock.Verify(x => x.Match(Assembly, BaseName, null), Times.Once);
            cacheServiceMock.Verify(x => x.Cache(Assembly, BaseName, null, localizer), Times.Once);
            cacheServiceMock.Verify(x => x.Match(Assembly, BaseName, CultureInfo), Times.Once);
            cacheServiceMock.Verify(x => x.Cache(Assembly, BaseName, CultureInfo, It.IsAny <IStringLocalizer>()), Times.Once);
        }
        public void IsShouldCreateAJsonStringLocalizerUsingTheRightExtensionService()
        {
            var key    = "key";
            var value1 = "value1";
            var map1   = new Dictionary <string, string>
            {
                [key] = value1,
            };
            var value2 = "value2";
            var map2   = new Dictionary <string, string>
            {
                [key] = value2,
            };

            // Setup CultureInfo service mock.
            var cultureInfoServiceMock = SetupCultureInfoServiceMock();

            var extensionOptionsContainer1 = new ExtensionOptionsContainer <MyOptions>(new MyOptions());

            extensionOptionsContainer1.Options.AssemblyNames = new[] { "OtherAssemblyName" };
            var extensionOptionsContainer2 = new ExtensionOptionsContainer <MyOptions>(new MyOptions());

            extensionOptionsContainer2.Options.AssemblyNames = new[] { Assembly.GetName().Name };

            // Setup extension service
            var extensionServiceMock1 = SetupExtensionServiceMock(map1, extensionOptionsContainer1);
            var extensionServiceMock2 = SetupExtensionServiceMock(map2, extensionOptionsContainer2);

            // Setup extension resolver service.
            var extensionResolverServiceMock = SetupResolverServiceMock(
                (extensionOptionsContainer1, extensionServiceMock1.Object),
                (extensionOptionsContainer2, extensionServiceMock2.Object));

            var optionsMock = SetupJsonLocalizationOptionsMock(extensionOptionsContainer1, extensionOptionsContainer2);

            var cacheServiceMock = new Mock <ICacheService>();

            var factory = new JsonStringLocalizerFactory(
                optionsMock.Object,
                cultureInfoServiceMock.Object,
                extensionResolverServiceMock.Object,
                cacheServiceMock.Object,
                Logger);

            var localizer = factory.Create(typeof(JsonStringLocalizerFactoryTest));

            Assert.NotNull(localizer);

            Assert.Equal(value2, localizer[key]);
        }
        public async Task ItShouldLoadParentCultureLocalyzer(bool enableHierarchyLoading)
        {
            var map = new Dictionary <string, string>();

            // Setup CultureInfo service mock.
            var cultureInfoServiceMock = SetupCultureInfoServiceMock();

            var extensionOptionsContainer = new ExtensionOptionsContainer <MyOptions>(new MyOptions());

            // Setup extension service
            var extensionServiceMock = new Mock <IJsonLocalizationExtensionService>();

            extensionServiceMock
            .Setup(s => s.TryLoadAsync(extensionOptionsContainer.Options, Assembly, BaseName, CultureInfo))
            .ReturnsAsync(map, TimeSpan.FromMilliseconds(100));
            extensionServiceMock
            .Setup(s => s.TryLoadAsync(extensionOptionsContainer.Options, Assembly, BaseName, CultureInfo.Parent))
            .ReturnsAsync(map, TimeSpan.FromMilliseconds(100));

            // Setup extension resolver service.
            var extensionResolverServiceMock = SetupResolverServiceMock(
                (extensionOptionsContainer, extensionServiceMock.Object));

            var optionsMock = SetupJsonLocalizationOptionsMock(extensionOptionsContainer);

            // We need the real cache service because otherwise the asynchronous parent localizer will be created every time.
            var cacheService = new CacheService();

            var factory = new JsonStringLocalizerFactory(
                optionsMock.Object,
                cultureInfoServiceMock.Object,
                extensionResolverServiceMock.Object,
                cacheService,
                Logger);

            var localizer = factory.Create(typeof(JsonStringLocalizerFactoryTest));

            Assert.NotNull(localizer);

            // make sure the localizer data are loaded.
            await localizer.LoadAsync(enableHierarchyLoading).ConfigureAwait(false);

            // verify the parent hierarchy loading behavior.
            extensionServiceMock.Verify(s => s.TryLoadAsync(extensionOptionsContainer.Options, Assembly, BaseName, CultureInfo), Times.Once);

            extensionServiceMock.Verify(s => s.TryLoadAsync(extensionOptionsContainer.Options, Assembly, BaseName, CultureInfo.Parent), enableHierarchyLoading ? Times.Once : Times.Never);
        }
コード例 #4
0
        public void ItShouldGetTheAppropriateExtensionService()
        {
            var serviceProviderMock = new Mock <IServiceProvider>();

            serviceProviderMock
            .Setup(p => p.GetService(typeof(IJsonLocalizationExtensionService <MyOptions>)))
            .Returns(new MyExtensionService());

            var extensionOptionsContainer = new ExtensionOptionsContainer <MyOptions>(new MyOptions());

            var extensionResolverService = new ExtensionResolverService(serviceProviderMock.Object);
            var extensionService         = extensionResolverService.GetExtensionService(extensionOptionsContainer);

            Assert.NotNull(extensionService);

            serviceProviderMock.Verify(p => p.GetService(typeof(IJsonLocalizationExtensionService <MyOptions>)));
            serviceProviderMock.VerifyNoOtherCalls();
        }
        public void ItShouldCreateAnAsynchronousLocalizerIfTheExtensionServiceIsAsynchronous()
        {
            var key   = "key";
            var value = "value";
            var map   = new Dictionary <string, string>
            {
                [key] = value,
            };

            // Setup CultureInfo service mock.
            var cultureInfoServiceMock = SetupCultureInfoServiceMock();

            var extensionOptionsContainer = new ExtensionOptionsContainer <MyOptions>(new MyOptions());

            // Setup extension service
            var extensionServiceMock = new Mock <IJsonLocalizationExtensionService>();

            extensionServiceMock
            .Setup(s => s.TryLoadAsync(extensionOptionsContainer.Options, Assembly, BaseName, CultureInfo))
            .ReturnsAsync(map, TimeSpan.FromMilliseconds(100));

            // Setup extension resolver service.
            var extensionResolverServiceMock = SetupResolverServiceMock(
                (extensionOptionsContainer, extensionServiceMock.Object));

            var optionsMock = SetupJsonLocalizationOptionsMock(extensionOptionsContainer);

            var cacheServiceMock = new Mock <ICacheService>();

            var factory = new JsonStringLocalizerFactory(
                optionsMock.Object,
                cultureInfoServiceMock.Object,
                extensionResolverServiceMock.Object,
                cacheServiceMock.Object,
                Logger);

            var localizer = factory.Create(typeof(JsonStringLocalizerFactoryTest));

            Assert.NotNull(localizer);

            var proxy = Assert.IsType <StringLocalizerProxy>(localizer);

            Assert.IsType <JsonStringLocalizerAsync>(proxy.CurrentStringLocalizer);
        }
        private void RunBasicFactoryTest(Func <JsonStringLocalizerFactory, IStringLocalizer> getLocalizer)
        {
            var key   = "key";
            var value = "value";
            var map   = new Dictionary <string, string>
            {
                [key] = value,
            };

            // Setup CultureInfo service mock.
            var cultureInfoServiceMock = SetupCultureInfoServiceMock();

            var extensionOptionsContainer = new ExtensionOptionsContainer <MyOptions>(new MyOptions());

            // Setup extension service
            var extensionServiceMock = SetupExtensionServiceMock(map, extensionOptionsContainer);

            // Setup extension resolver service.
            var extensionResolverServiceMock = SetupResolverServiceMock(
                (extensionOptionsContainer, extensionServiceMock.Object));

            var optionsMock = SetupJsonLocalizationOptionsMock(extensionOptionsContainer);

            var cacheServiceMock = new Mock <ICacheService>();

            var factory = new JsonStringLocalizerFactory(
                optionsMock.Object,
                cultureInfoServiceMock.Object,
                extensionResolverServiceMock.Object,
                cacheServiceMock.Object,
                Logger);

            var localizer = getLocalizer(factory);

            Assert.NotNull(localizer);

            Assert.Equal(value, localizer[key]);
        }
        private static Mock <IJsonLocalizationExtensionService> SetupExtensionServiceMock(Dictionary <string, string> map, ExtensionOptionsContainer <MyOptions> extensionOptionsContainer)
        {
            var extensionServiceMock = new Mock <IJsonLocalizationExtensionService>();

            extensionServiceMock
            .Setup(s => s.TryLoadAsync(extensionOptionsContainer.Options, Assembly, BaseName, CultureInfo))
            .ReturnsAsync(map);
            return(extensionServiceMock);
        }
        public async Task ItShouldUseParentCultureLocalyzerWhenKeyNotFound(bool isAsynchronous)
        {
            var key   = "key";
            var value = "value";
            var map   = new Dictionary <string, string>
            {
                [key] = value,
            };

            var key2   = "key2";
            var value2 = "value2";
            var map2   = new Dictionary <string, string>
            {
                [key2] = value2,
            };

            var unknownKey = "test";

            // Setup CultureInfo service mock.
            var cultureInfoServiceMock = SetupCultureInfoServiceMock();

            var extensionOptionsContainer = new ExtensionOptionsContainer <MyOptions>(new MyOptions());

            // Setup extension service
            var extensionServiceMock = new Mock <IJsonLocalizationExtensionService>();

            if (isAsynchronous)
            {
                extensionServiceMock
                .Setup(s => s.TryLoadAsync(extensionOptionsContainer.Options, Assembly, BaseName, CultureInfo))
                .ReturnsAsync(map, TimeSpan.FromMilliseconds(100));
                extensionServiceMock
                .Setup(s => s.TryLoadAsync(extensionOptionsContainer.Options, Assembly, BaseName, CultureInfo.Parent))
                .ReturnsAsync(map2, TimeSpan.FromMilliseconds(100));
            }
            else
            {
                extensionServiceMock
                .Setup(s => s.TryLoadAsync(extensionOptionsContainer.Options, Assembly, BaseName, CultureInfo))
                .ReturnsAsync(map);
                extensionServiceMock
                .Setup(s => s.TryLoadAsync(extensionOptionsContainer.Options, Assembly, BaseName, CultureInfo.Parent))
                .ReturnsAsync(map2);
            }

            // Setup extension resolver service.
            var extensionResolverServiceMock = SetupResolverServiceMock(
                (extensionOptionsContainer, extensionServiceMock.Object));

            var optionsMock = SetupJsonLocalizationOptionsMock(extensionOptionsContainer);

            // We need the real cache service because otherwise the asynchronous parent localizer will be created every time.
            var cacheService = new CacheService();

            var factory = new JsonStringLocalizerFactory(
                optionsMock.Object,
                cultureInfoServiceMock.Object,
                extensionResolverServiceMock.Object,
                cacheService,
                Logger);

            var localizer = factory.Create(typeof(JsonStringLocalizerFactoryTest));

            Assert.NotNull(localizer);

            if (isAsynchronous)
            {
                // make sure the localizer data are loaded.
                await localizer.LoadAsync(true).ConfigureAwait(false);
            }

            Assert.Equal(value, localizer[key]);
            Assert.Equal(value2, localizer[key2]);

            Assert.Equal(unknownKey, localizer[unknownKey]);

            var strings    = localizer.GetAllStrings(false);
            var allStrings = localizer.GetAllStrings(true);

            Assert.Single(strings);
            Assert.Equal(2, allStrings.Count());
        }