fix #2819: Add more unit tests for ViewLocalizer and HtmlLocalizer
This commit is contained in:
parent
d17db92e19
commit
3da2c35e3e
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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<LocalizedString> GetAllStrings(bool includeAncestorCultures)
|
||||
{
|
||||
var allStrings = new List<LocalizedString>();
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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<IApplicationEnvironment>();
|
||||
applicationEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication");
|
||||
var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), applicationEnvironment.Object);
|
||||
|
||||
var view = new Mock<IView>();
|
||||
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<IApplicationEnvironment>();
|
||||
applicationEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication");
|
||||
var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), applicationEnvironment.Object);
|
||||
|
||||
var view = new Mock<IView>();
|
||||
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<IApplicationEnvironment>();
|
||||
applicationEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication");
|
||||
var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), applicationEnvironment.Object);
|
||||
|
||||
var view = new Mock<IView>();
|
||||
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<IApplicationEnvironment>();
|
||||
applicationEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication");
|
||||
var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), applicationEnvironment.Object);
|
||||
|
||||
var view = new Mock<IView>();
|
||||
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<IApplicationEnvironment>();
|
||||
applicationEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication");
|
||||
var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), applicationEnvironment.Object);
|
||||
|
||||
var view = new Mock<IView>();
|
||||
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<IApplicationEnvironment>();
|
||||
applicationEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication");
|
||||
var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), applicationEnvironment.Object);
|
||||
|
||||
var view = new Mock<IView>();
|
||||
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<IApplicationEnvironment>();
|
||||
applicationEnvironment.Setup(a => a.ApplicationName).Returns("TestApplication");
|
||||
var viewLocalizer = new ViewLocalizer(new TestHtmlLocalizerFactory(), applicationEnvironment.Object);
|
||||
|
||||
var view = new Mock<IView>();
|
||||
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<LocalizedString> 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<LocalizedString> 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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue