218 lines
6.5 KiB
C#
218 lines
6.5 KiB
C#
// 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.Globalization;
|
|
using System.IO;
|
|
using Microsoft.AspNetCore.Testing;
|
|
using Microsoft.Extensions.WebEncoders.Testing;
|
|
using Xunit;
|
|
|
|
namespace Microsoft.AspNetCore.Html
|
|
{
|
|
public class HtmlFormattableStringTest
|
|
{
|
|
[Fact]
|
|
public void HtmlFormattableString_EmptyArgs()
|
|
{
|
|
// Arrange
|
|
var formattableString = new HtmlFormattableString("Hello, World!");
|
|
|
|
// Act
|
|
var result = HtmlContentToString(formattableString);
|
|
|
|
// Assert
|
|
Assert.Equal("Hello, World!", result);
|
|
}
|
|
|
|
[Fact]
|
|
public void HtmlFormattableString_EmptyArgsAndCulture()
|
|
{
|
|
// Arrange
|
|
var formattableString = new HtmlFormattableString(CultureInfo.CurrentCulture, "Hello, World!");
|
|
|
|
// Act
|
|
var result = HtmlContentToString(formattableString);
|
|
|
|
// Assert
|
|
Assert.Equal("Hello, World!", result);
|
|
}
|
|
|
|
[Fact]
|
|
public void HtmlFormattableString_MultipleArguments()
|
|
{
|
|
// Arrange
|
|
var formattableString = new HtmlFormattableString("{0} {1} {2} {3}!", "First", "Second", "Third", "Fourth");
|
|
|
|
// Act
|
|
var result = HtmlContentToString(formattableString);
|
|
|
|
// Assert
|
|
Assert.Equal(
|
|
"HtmlEncode[[First]] HtmlEncode[[Second]] HtmlEncode[[Third]] HtmlEncode[[Fourth]]!",
|
|
result);
|
|
}
|
|
|
|
[Fact]
|
|
public void HtmlFormattableString_WithHtmlString()
|
|
{
|
|
// Arrange
|
|
var formattableString = new HtmlFormattableString("{0}!", new HtmlString("First"));
|
|
|
|
// Act
|
|
var result = HtmlContentToString(formattableString);
|
|
|
|
// Assert
|
|
Assert.Equal("First!", result);
|
|
}
|
|
|
|
[Fact]
|
|
public void HtmlFormattableString_WithOtherIHtmlContent()
|
|
{
|
|
// Arrange
|
|
var builder = new HtmlContentBuilder();
|
|
builder.Append("First");
|
|
|
|
var formattableString = new HtmlFormattableString("{0}!", builder);
|
|
|
|
// Act
|
|
var result = HtmlContentToString(formattableString);
|
|
|
|
// Assert
|
|
Assert.Equal("HtmlEncode[[First]]!", result);
|
|
}
|
|
|
|
// This test is needed to ensure the shared StringWriter gets cleared.
|
|
[Fact]
|
|
public void HtmlFormattableString_WithMultipleHtmlContentArguments()
|
|
{
|
|
// Arrange
|
|
var formattableString = new HtmlFormattableString(
|
|
"Happy {0}, {1}!",
|
|
new HtmlString("Birthday"),
|
|
new HtmlContentBuilder().Append("Billy"));
|
|
|
|
// Act
|
|
var result = HtmlContentToString(formattableString);
|
|
|
|
// Assert
|
|
Assert.Equal("Happy Birthday, HtmlEncode[[Billy]]!", result);
|
|
}
|
|
|
|
[Fact]
|
|
public void HtmlFormattableString_WithHtmlString_AndOffset()
|
|
{
|
|
// Arrange
|
|
var formattableString = new HtmlFormattableString("{0, 20}!", new HtmlString("First"));
|
|
|
|
// Act
|
|
var result = HtmlContentToString(formattableString);
|
|
|
|
// Assert
|
|
Assert.Equal(" First!", result);
|
|
}
|
|
|
|
[Fact]
|
|
public void HtmlFormattableString_With3Arguments()
|
|
{
|
|
// Arrange
|
|
var formattableString = new HtmlFormattableString("0x{0:X} - {1} equivalent for {2}.", 50, "hex", 50);
|
|
|
|
// Act
|
|
var result = HtmlContentToString(formattableString);
|
|
|
|
// Assert
|
|
Assert.Equal(
|
|
"0xHtmlEncode[[32]] - HtmlEncode[[hex]] equivalent for HtmlEncode[[50]].",
|
|
result);
|
|
}
|
|
|
|
[Fact]
|
|
public void HtmlFormattableString_WithAlignmentComponent()
|
|
{
|
|
// Arrange
|
|
var formattableString = new HtmlFormattableString("{0, -25} World!", "Hello");
|
|
|
|
// Act
|
|
var result = HtmlContentToString(formattableString);
|
|
|
|
// Assert
|
|
Assert.Equal(
|
|
"HtmlEncode[[Hello]] World!", result);
|
|
}
|
|
|
|
[Fact]
|
|
public void HtmlFormattableString_WithFormatStringComponent()
|
|
{
|
|
// Arrange
|
|
var formattableString = new HtmlFormattableString("0x{0:X}", 50);
|
|
|
|
// Act
|
|
var result = HtmlContentToString(formattableString);
|
|
|
|
// Assert
|
|
Assert.Equal("0xHtmlEncode[[32]]", result);
|
|
}
|
|
|
|
[Fact]
|
|
public void HtmlFormattableString_WithCulture()
|
|
{
|
|
// Arrange
|
|
var formattableString = new HtmlFormattableString(
|
|
CultureInfo.InvariantCulture,
|
|
"Numbers in InvariantCulture - {0, -5:N} {1} {2} {3}!",
|
|
1.1,
|
|
2.98,
|
|
145.82,
|
|
32.86);
|
|
|
|
// Act
|
|
var result = HtmlContentToString(formattableString);
|
|
|
|
// Assert
|
|
Assert.Equal(
|
|
"Numbers in InvariantCulture - HtmlEncode[[1.10]] HtmlEncode[[2.98]] " +
|
|
"HtmlEncode[[145.82]] HtmlEncode[[32.86]]!",
|
|
result);
|
|
}
|
|
|
|
[Fact]
|
|
[ReplaceCulture("en-US", "en-US")]
|
|
public void HtmlFormattableString_UsesPassedInCulture()
|
|
{
|
|
// Arrange
|
|
var culture = new CultureInfo("fr-FR");
|
|
var formattableString = new HtmlFormattableString(culture, "{0} in french!", 1.21);
|
|
|
|
// Act
|
|
var result = HtmlContentToString(formattableString);
|
|
|
|
// Assert
|
|
Assert.Equal("HtmlEncode[[1,21]] in french!", result);
|
|
}
|
|
|
|
[Fact]
|
|
[ReplaceCulture("de-DE", "de-DE")]
|
|
public void HtmlFormattableString_UsesCurrentCulture()
|
|
{
|
|
// Arrange
|
|
var formattableString = new HtmlFormattableString("{0:D}", DateTime.Parse("01/02/2015"));
|
|
|
|
// Act
|
|
var result = HtmlContentToString(formattableString);
|
|
|
|
// Assert
|
|
Assert.Equal("HtmlEncode[[Sonntag, 1. Februar 2015]]", result);
|
|
}
|
|
|
|
private static string HtmlContentToString(IHtmlContent content)
|
|
{
|
|
using (var writer = new StringWriter())
|
|
{
|
|
content.WriteTo(writer, new HtmlTestEncoder());
|
|
return writer.ToString();
|
|
}
|
|
}
|
|
}
|
|
}
|