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;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.Linq;
|
||||||
using Microsoft.AspNet.Testing;
|
using Microsoft.AspNet.Testing;
|
||||||
using Microsoft.Extensions.Localization;
|
using Microsoft.Extensions.Localization;
|
||||||
using Microsoft.Extensions.WebEncoders.Testing;
|
using Microsoft.Extensions.WebEncoders.Testing;
|
||||||
|
|
@ -150,6 +152,99 @@ namespace Microsoft.AspNet.Mvc.Localization.Test
|
||||||
Assert.NotNull(exception);
|
Assert.NotNull(exception);
|
||||||
Assert.Equal("Input string was not in a correct format.", exception.Message);
|
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
|
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.
|
// 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.
|
// 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.Globalization;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text.Encodings.Web;
|
||||||
using Microsoft.AspNet.Mvc.Rendering;
|
using Microsoft.AspNet.Mvc.Rendering;
|
||||||
|
using Microsoft.AspNet.Mvc.ViewEngines;
|
||||||
using Microsoft.Extensions.Localization;
|
using Microsoft.Extensions.Localization;
|
||||||
using Microsoft.Extensions.PlatformAbstractions;
|
using Microsoft.Extensions.PlatformAbstractions;
|
||||||
using Microsoft.Extensions.WebEncoders.Testing;
|
using Microsoft.Extensions.WebEncoders.Testing;
|
||||||
using Moq;
|
using Moq;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
using Microsoft.AspNet.Mvc.ViewEngines;
|
|
||||||
|
|
||||||
namespace Microsoft.AspNet.Mvc.Localization.Test
|
namespace Microsoft.AspNet.Mvc.Localization.Test
|
||||||
{
|
{
|
||||||
|
|
@ -77,5 +81,248 @@ namespace Microsoft.AspNet.Mvc.Localization.Test
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Equal(localizedString, actualLocalizedString);
|
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