fix #2819: Add more unit tests for ViewLocalizer and HtmlLocalizer

This commit is contained in:
Kirthi Krishnamraju 2015-11-03 14:27:01 -08:00
parent d17db92e19
commit 3da2c35e3e
3 changed files with 418 additions and 1 deletions

View File

@ -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

View File

@ -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);
}
}
}

View File

@ -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());
}
}
}
}