diff --git a/test/Microsoft.AspNet.Mvc.Localization.Test/HtmlLocalizerTest.cs b/test/Microsoft.AspNet.Mvc.Localization.Test/HtmlLocalizerTest.cs index 3c056d5ce0..2887795f6c 100644 --- a/test/Microsoft.AspNet.Mvc.Localization.Test/HtmlLocalizerTest.cs +++ b/test/Microsoft.AspNet.Mvc.Localization.Test/HtmlLocalizerTest.cs @@ -3,6 +3,8 @@ using System; using System.Collections.Generic; +using System.Globalization; +using System.Linq; using Microsoft.AspNet.Testing; using Microsoft.Extensions.Localization; using Microsoft.Extensions.WebEncoders.Testing; @@ -150,6 +152,99 @@ namespace Microsoft.AspNet.Mvc.Localization.Test Assert.NotNull(exception); Assert.Equal("Input string was not in a correct format.", exception.Message); } + + [Fact] + public void HtmlLocalizer_GetString_ReturnsLocalizedString() + { + // Arrange + var stringLocalizer = new TestStringLocalizer(); + + var htmlLocalizer = new HtmlLocalizer(stringLocalizer, new HtmlTestEncoder()); + + // Act + var actualLocalizedString = htmlLocalizer.GetString("John"); + + // Assert + Assert.Equal("Hello John", actualLocalizedString.Value); + } + + [Fact] + public void HtmlLocalizer_GetStringWithArguments_ReturnsLocalizedString() + { + // Arrange + var stringLocalizer = new TestStringLocalizer(); + + var htmlLocalizer = new HtmlLocalizer(stringLocalizer, new HtmlTestEncoder()); + + // Act + var actualLocalizedString = htmlLocalizer.GetString("John", "Doe"); + + // Assert + Assert.Equal("Hello John Doe", actualLocalizedString.Value); + } + + [Fact] + public void HtmlLocalizer_Html_ReturnsLocalizedHtmlString() + { + // Arrange + var stringLocalizer = new TestStringLocalizer(); + + var htmlLocalizer = new HtmlLocalizer(stringLocalizer, new HtmlTestEncoder()); + + // Act + var actualLocalizedString = htmlLocalizer.Html("John"); + + // Assert + Assert.Equal("Hello John", actualLocalizedString.Value); + } + + [Fact] + public void HtmlLocalizer_WithCulture_ReturnsLocalizedHtmlString() + { + // Arrange + var stringLocalizer = new TestStringLocalizer(); + + var htmlLocalizer = new HtmlLocalizer(stringLocalizer, new HtmlTestEncoder()); + + // Act + var actualLocalizedString = htmlLocalizer.WithCulture(new CultureInfo("fr"))["John"]; + + // Assert + Assert.Equal("Bonjour John", actualLocalizedString.Value); + } + + [Fact] + public void HtmlLocalizer_GetAllStrings_ReturnsAllLocalizedStrings() + { + // Arrange + var stringLocalizer = new TestStringLocalizer(); + + var htmlLocalizer = new HtmlLocalizer(stringLocalizer, new HtmlTestEncoder()); + + // Act + var allLocalizedStrings = htmlLocalizer.GetAllStrings(includeAncestorCultures: false).ToList(); + + //Assert + Assert.Equal(1, allLocalizedStrings.Count); + Assert.Equal("World", allLocalizedStrings.First().Value); + } + + [Fact] + public void HtmlLocalizer_GetAllStringsIncludeAncestorCulture_ReturnsAllLocalizedStrings() + { + // Arrange + var stringLocalizer = new TestStringLocalizer(); + + var htmlLocalizer = new HtmlLocalizer(stringLocalizer, new HtmlTestEncoder()); + + // Act + var allLocalizedStrings = htmlLocalizer.GetAllStrings().ToList(); + + //Assert + Assert.Equal(2, allLocalizedStrings.Count); + Assert.Equal("World", allLocalizedStrings[0].Value); + Assert.Equal("Bar", allLocalizedStrings[1].Value); + } } public class TestClass diff --git a/test/Microsoft.AspNet.Mvc.Localization.Test/TestStringLocalizer.cs b/test/Microsoft.AspNet.Mvc.Localization.Test/TestStringLocalizer.cs new file mode 100644 index 0000000000..434e9186ee --- /dev/null +++ b/test/Microsoft.AspNet.Mvc.Localization.Test/TestStringLocalizer.cs @@ -0,0 +1,75 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using System.Collections.Generic; +using System.Globalization; +using Microsoft.Extensions.Localization; + +namespace Microsoft.AspNet.Mvc.Localization.Test +{ + public class TestStringLocalizer : IStringLocalizer + { + private CultureInfo _culture { get; set; } + + public TestStringLocalizer() : this(null) + { + } + + public TestStringLocalizer(CultureInfo culture) + { + _culture = culture; + } + + public LocalizedString this[string name] + { + get + { + var value = "Hello "; + + if (_culture != null) + { + value = "Bonjour "; + } + return new LocalizedString(name, value + name); + } + } + + public LocalizedString this[string name, params object[] arguments] + { + get + { + var value = "Hello "; + + if (_culture != null) + { + value = "Bonjour "; + } + + string argument = string.Empty; + foreach (var arg in arguments) + { + argument = argument + " " + arg; + } + return new LocalizedString(name, value + name + argument); + } + } + + public IEnumerable GetAllStrings(bool includeAncestorCultures) + { + var allStrings = new List(); + allStrings.Add(new LocalizedString("Hello", "World")); + + if (includeAncestorCultures) + { + allStrings.Add(new LocalizedString("Foo", "Bar")); + } + + return allStrings; + } + + public IStringLocalizer WithCulture(CultureInfo culture) + { + return new TestStringLocalizer(culture); + } + } +} diff --git a/test/Microsoft.AspNet.Mvc.Localization.Test/ViewLocalizerTest.cs b/test/Microsoft.AspNet.Mvc.Localization.Test/ViewLocalizerTest.cs index 0e449f2b93..1453e36351 100644 --- a/test/Microsoft.AspNet.Mvc.Localization.Test/ViewLocalizerTest.cs +++ b/test/Microsoft.AspNet.Mvc.Localization.Test/ViewLocalizerTest.cs @@ -1,14 +1,18 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; +using System.Collections.Generic; using System.Globalization; +using System.Linq; +using System.Text.Encodings.Web; using Microsoft.AspNet.Mvc.Rendering; +using Microsoft.AspNet.Mvc.ViewEngines; using Microsoft.Extensions.Localization; using Microsoft.Extensions.PlatformAbstractions; using Microsoft.Extensions.WebEncoders.Testing; using Moq; using Xunit; -using Microsoft.AspNet.Mvc.ViewEngines; namespace Microsoft.AspNet.Mvc.Localization.Test { @@ -77,5 +81,248 @@ namespace Microsoft.AspNet.Mvc.Localization.Test // Assert Assert.Equal(localizedString, actualLocalizedString); } + + [Fact] + public void ViewLocalizer_GetAllStrings_ReturnsLocalizedHtmlString() + { + // Arrange + var stringLocalizer = new TestStringLocalizer(); + var htmlLocalizer = new HtmlLocalizer(stringLocalizer, new HtmlTestEncoder()); + var applicationEnvironment = new Mock(); + applicationEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication"); + var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), applicationEnvironment.Object); + + var view = new Mock(); + view.Setup(v => v.Path).Returns("example"); + var viewContext = new ViewContext(); + viewContext.View = view.Object; + + viewLocalizer.Contextualize(viewContext); + + // Act + var allLocalizedStrings = viewLocalizer.GetAllStrings(includeAncestorCultures: false).ToList(); + + // Assert + Assert.Equal(1, allLocalizedStrings.Count); + Assert.Equal("World", allLocalizedStrings.First().Value); + } + + [Fact] + public void ViewLocalizer_GetAllStringsIncludeAncestorCulture_ReturnsLocalizedHtmlString() + { + // Arrange + var stringLocalizer = new TestStringLocalizer(); + var htmlLocalizer = new HtmlLocalizer(stringLocalizer, new HtmlTestEncoder()); + var applicationEnvironment = new Mock(); + applicationEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication"); + var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), applicationEnvironment.Object); + + var view = new Mock(); + view.Setup(v => v.Path).Returns("example"); + var viewContext = new ViewContext(); + viewContext.View = view.Object; + + viewLocalizer.Contextualize(viewContext); + + // Act + var allLocalizedStrings = viewLocalizer.GetAllStrings().ToList(); + + // Assert + Assert.Equal(2, allLocalizedStrings.Count); + Assert.Equal("World", allLocalizedStrings[0].Value); + Assert.Equal("Bar", allLocalizedStrings[1].Value); + } + + [Fact] + public void ViewLocalizer_GetString_ReturnsLocalizedString() + { + // Arrange + var stringLocalizer = new TestStringLocalizer(); + var htmlLocalizer = new HtmlLocalizer(stringLocalizer, new HtmlTestEncoder()); + var applicationEnvironment = new Mock(); + applicationEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication"); + var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), applicationEnvironment.Object); + + var view = new Mock(); + view.Setup(v => v.Path).Returns("example"); + var viewContext = new ViewContext(); + viewContext.View = view.Object; + + viewLocalizer.Contextualize(viewContext); + + // Act + var actualLocalizedString = viewLocalizer.GetString("John"); + + // Assert + Assert.Equal("Hello John", actualLocalizedString.Value); + } + + [Fact] + public void ViewLocalizer_GetStringWithArguments_ReturnsLocalizedString() + { + // Arrange + var stringLocalizer = new TestStringLocalizer(); + var htmlLocalizer = new HtmlLocalizer(stringLocalizer, new HtmlTestEncoder()); + var applicationEnvironment = new Mock(); + applicationEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication"); + var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), applicationEnvironment.Object); + + var view = new Mock(); + view.Setup(v => v.Path).Returns("example"); + var viewContext = new ViewContext(); + viewContext.View = view.Object; + + viewLocalizer.Contextualize(viewContext); + + // Act + var actualLocalizedString = viewLocalizer.GetString("John", "Doe"); + + // Assert + Assert.Equal("Hello John Doe", actualLocalizedString.Value); + } + + [Fact] + public void ViewLocalizer_Html_ReturnsLocalizedHtmlString() + { + // Arrange + var stringLocalizer = new TestStringLocalizer(); + var htmlLocalizer = new HtmlLocalizer(stringLocalizer, new HtmlTestEncoder()); + var applicationEnvironment = new Mock(); + applicationEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication"); + var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), applicationEnvironment.Object); + + var view = new Mock(); + view.Setup(v => v.Path).Returns("example"); + var viewContext = new ViewContext(); + viewContext.View = view.Object; + + viewLocalizer.Contextualize(viewContext); + + // Act + var actualLocalizedString = viewLocalizer.Html("John"); + + // Assert + Assert.Equal("Hello John", actualLocalizedString.Value); + } + + [Fact] + public void ViewLocalizer_HtmlWithArguments_ReturnsLocalizedHtmlString() + { + // Arrange + var stringLocalizer = new TestStringLocalizer(); + var htmlLocalizer = new HtmlLocalizer(stringLocalizer, new HtmlTestEncoder()); + var applicationEnvironment = new Mock(); + applicationEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication"); + var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), applicationEnvironment.Object); + + var view = new Mock(); + view.Setup(v => v.Path).Returns("example"); + var viewContext = new ViewContext(); + viewContext.View = view.Object; + + viewLocalizer.Contextualize(viewContext); + + // Act + var actualLocalizedString = viewLocalizer.Html("John", "Doe"); + + // Assert + Assert.Equal("Hello John Doe", actualLocalizedString.Value); + } + + [Fact] + public void ViewLocalizer_WithCulture_ReturnsLocalizedHtmlString() + { + // Arrange + var stringLocalizer = new TestStringLocalizer(); + var htmlLocalizer = new HtmlLocalizer(stringLocalizer, new HtmlTestEncoder()); + var applicationEnvironment = new Mock(); + applicationEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication"); + var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), applicationEnvironment.Object); + + var view = new Mock(); + view.Setup(v => v.Path).Returns("example"); + var viewContext = new ViewContext(); + viewContext.View = view.Object; + + viewLocalizer.Contextualize(viewContext); + + // Act + var actualLocalizedString = viewLocalizer.WithCulture(new CultureInfo("fr"))["John"]; + + // Assert + Assert.Equal("Bonjour John", actualLocalizedString.Value); + } + + private class TestHtmlLocalizer : IHtmlLocalizer + { + private IStringLocalizer _stringLocalizer { get; set; } + + public TestHtmlLocalizer(IStringLocalizer stringLocalizer, HtmlEncoder encoder) + { + _stringLocalizer = stringLocalizer; + } + + public LocalizedString this[string name] + { + get + { + return _stringLocalizer[name]; + } + } + + public LocalizedString this[string name, params object[] arguments] + { + get + { + return _stringLocalizer[name, arguments]; + } + } + + public IEnumerable GetAllStrings(bool includeAncestorCultures) + { + return _stringLocalizer.GetAllStrings(includeAncestorCultures); + } + + public IStringLocalizer WithCulture(CultureInfo culture) + { + return new TestStringLocalizer(culture); + } + + IHtmlLocalizer IHtmlLocalizer.WithCulture(CultureInfo culture) + { + return new TestHtmlLocalizer(new TestStringLocalizer(culture), new HtmlTestEncoder()); + } + + public LocalizedHtmlString Html(string key) + { + var localiziedString = _stringLocalizer.GetString(key); + return new LocalizedHtmlString(localiziedString.Name, localiziedString.Value); + } + + public LocalizedHtmlString Html(string key, params object[] arguments) + { + var localizedString = _stringLocalizer.GetString(key, arguments); + + return new LocalizedHtmlString(localizedString.Name, localizedString.Value); + } + + IEnumerable IStringLocalizer.GetAllStrings(bool includeAncestorCultures) + { + return _stringLocalizer.GetAllStrings(includeAncestorCultures); + } + } + + private class TestHtmlLocalizerFactory : IHtmlLocalizerFactory + { + public IHtmlLocalizer Create(Type resourceSource) + { + return new TestHtmlLocalizer(new TestStringLocalizer(), new HtmlTestEncoder()); + } + + public IHtmlLocalizer Create(string baseName, string location) + { + return new TestHtmlLocalizer(new TestStringLocalizer(), new HtmlTestEncoder()); + } + } } }