aspnetcore/test/Microsoft.AspNet.Mvc.ViewFe.../ViewFeatures/StringCollectionTextWriterT...

214 lines
6.7 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.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNet.Mvc.Rendering;
using Microsoft.AspNet.Testing;
using Microsoft.Extensions.Internal;
using Microsoft.Extensions.WebEncoders.Testing;
using Xunit;
namespace Microsoft.AspNet.Mvc.ViewFeatures
{
public class StringCollectionTextWriterTest
{
[Fact]
[ReplaceCulture]
public void Write_WritesDataTypes_ToBuffer()
{
// Arrange
var expected = new[] { "True", "3", "18446744073709551615", "Hello world", "3.14", "2.718", "m" };
var writer = new StringCollectionTextWriter(Encoding.UTF8);
// Act
writer.Write(true);
writer.Write(3);
writer.Write(ulong.MaxValue);
writer.Write(new TestClass());
writer.Write(3.14);
writer.Write(2.718m);
writer.Write('m');
// Assert
Assert.Equal(expected, writer.Entries);
}
[Fact]
[ReplaceCulture]
public void WriteLine_WritesDataTypes_ToBuffer()
{
// Arrange
var newLine = Environment.NewLine;
var expected = new List<object> { "False", newLine, "1.1", newLine, "3", newLine };
var writer = new StringCollectionTextWriter(Encoding.UTF8);
// Act
writer.WriteLine(false);
writer.WriteLine(1.1f);
writer.WriteLine(3L);
// Assert
Assert.Equal(expected, writer.Entries);
}
[Fact]
public async Task Write_WritesCharBuffer()
{
// Arrange
var input1 = new ArraySegment<char>(new char[] { 'a', 'b', 'c', 'd' }, 1, 3);
var input2 = new ArraySegment<char>(new char[] { 'e', 'f' }, 0, 2);
var input3 = new ArraySegment<char>(new char[] { 'g', 'h', 'i', 'j' }, 3, 1);
var writer = new StringCollectionTextWriter(Encoding.UTF8);
// Act
writer.Write(input1.Array, input1.Offset, input1.Count);
await writer.WriteAsync(input2.Array, input2.Offset, input2.Count);
await writer.WriteLineAsync(input3.Array, input3.Offset, input3.Count);
// Assert
var buffer = writer.Entries;
Assert.Equal(4, buffer.Count);
Assert.Equal("bcd", buffer[0]);
Assert.Equal("ef", buffer[1]);
Assert.Equal("j", buffer[2]);
Assert.Equal(Environment.NewLine, buffer[3]);
}
[Fact]
public async Task WriteLines_WritesCharBuffer()
{
// Arrange
var newLine = Environment.NewLine;
var writer = new StringCollectionTextWriter(Encoding.UTF8);
// Act
writer.WriteLine();
await writer.WriteLineAsync();
// Assert
var actual = writer.Entries;
Assert.Equal<object>(new[] { newLine, newLine }, actual);
}
[Fact]
public async Task Write_WritesStringBuffer()
{
// Arrange
var newLine = Environment.NewLine;
var input1 = "Hello";
var input2 = "from";
var input3 = "ASP";
var input4 = ".Net";
var writer = new StringCollectionTextWriter(Encoding.UTF8);
// Act
writer.Write(input1);
writer.WriteLine(input2);
await writer.WriteAsync(input3);
await writer.WriteLineAsync(input4);
// Assert
var actual = writer.Entries;
Assert.Equal(new[] { input1, input2, newLine, input3, input4, newLine }, actual);
}
[Fact]
public void Write_HtmlContent_AddsToEntries()
{
// Arrange
var writer = new StringCollectionTextWriter(Encoding.UTF8);
var content = new HtmlString("Hello, world!");
// Act
writer.Write(content);
// Assert
Assert.Collection(
writer.Entries,
item => Assert.Same(content, item));
}
[Fact]
public void Write_Object_HtmlContent_AddsToEntries()
{
// Arrange
var writer = new StringCollectionTextWriter(Encoding.UTF8);
var content = new HtmlString("Hello, world!");
// Act
writer.Write((object)content);
// Assert
Assert.Collection(
writer.Entries,
item => Assert.Same(content, item));
}
[Fact]
public void WriteLine_Object_HtmlContent_AddsToEntries()
{
// Arrange
var writer = new StringCollectionTextWriter(Encoding.UTF8);
var content = new HtmlString("Hello, world!");
// Act
writer.WriteLine(content);
// Assert
Assert.Collection(
writer.Entries,
item => Assert.Same(content, item),
item => Assert.Equal(Environment.NewLine, item));
}
[Fact]
public void Copy_CopiesContent_IfTargetTextWriterIsAStringCollectionTextWriter()
{
// Arrange
var source = new StringCollectionTextWriter(Encoding.UTF8);
var target = new StringCollectionTextWriter(Encoding.UTF8);
// Act
source.Write("Hello world");
source.Write(new char[1], 0, 1);
source.CopyTo(target, new HtmlTestEncoder());
// Assert
// Make sure content was written to the source.
Assert.Equal(2, source.Entries.Count);
Assert.Equal(1, target.Entries.Count);
var entry = Assert.Single(target.Entries);
Assert.Same(source.Content, entry);
}
[Fact]
public void Copy_WritesContent_IfTargetTextWriterIsNotAStringCollectionTextWriter()
{
// Arrange
var source = new StringCollectionTextWriter(Encoding.UTF8);
var target = new StringWriter();
var expected = @"Hello world" + Environment.NewLine + "abc";
// Act
source.WriteLine("Hello world");
source.Write(new[] { 'x', 'a', 'b', 'c' }, 1, 3);
source.CopyTo(target, new HtmlTestEncoder());
// Assert
Assert.Equal(expected, target.ToString());
}
private class TestClass
{
public override string ToString()
{
return "Hello world";
}
}
}
}