aspnetcore/test/Microsoft.AspNetCore.Razor..../LargeTextRazorSourceDocumen...

107 lines
4.0 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using Xunit;
namespace Microsoft.AspNetCore.Razor.Evolution.Test
{
public class LargeTextRazorSourceDocumentTest
{
private const int ChunkTestLength = 10;
[Theory]
[InlineData(ChunkTestLength - 1)]
[InlineData(ChunkTestLength)]
[InlineData(ChunkTestLength + 1)]
[InlineData(ChunkTestLength * 2 - 1)]
[InlineData(ChunkTestLength * 2)]
[InlineData(ChunkTestLength * 2 + 1)]
public void Indexer_ProvidesCharacterAccessToContent(int contentLength)
{
// Arrange
var content = new char[contentLength];
for (var i = 0; i < contentLength - 1; i++)
{
content[i] = 'a';
}
content[contentLength - 1] = 'b';
var contentString = new string(content);
var stream = TestRazorSourceDocument.CreateStreamContent(new string(content));
var reader = new StreamReader(stream, true);
var document = new LargeTextRazorSourceDocument(reader, ChunkTestLength, Encoding.UTF8, "file.cshtml");
// Act
var output = new char[contentLength];
for (var i = 0; i < document.Length; i++)
{
output[i] = document[i];
}
var outputString = new string(output);
// Assert
Assert.Equal(contentLength, document.Length);
Assert.Equal(contentString, outputString);
}
[Theory]
[InlineData("test.cshtml")]
[InlineData(null)]
public void Filename(string fileName)
{
// Arrange
var stream = TestRazorSourceDocument.CreateStreamContent("abc");
var reader = new StreamReader(stream, true);
// Act
var document = new LargeTextRazorSourceDocument(reader, ChunkTestLength, Encoding.UTF8, fileName);
// Assert
Assert.Equal(fileName, document.FileName);
}
[Fact]
public void Lines()
{
// Arrange
var stream = TestRazorSourceDocument.CreateStreamContent("abc\ndef\nghi");
var reader = new StreamReader(stream, true);
// Act
var document = new LargeTextRazorSourceDocument(reader, ChunkTestLength, Encoding.UTF8, "file.cshtml");
// Assert
Assert.Equal(3, document.Lines.Count);
}
[Theory]
[InlineData("", 0, 0, 0)] // Nothing to copy
[InlineData("a", 0, 100, 1)] // Destination index different from start
[InlineData("j", ChunkTestLength - 1, 0, 1)] // One char just before the chunk limit
[InlineData("k", ChunkTestLength, 0, 1)] // One char one the chunk limit
[InlineData("l", ChunkTestLength + 1, 0, 1)] // One char just after the chunk limit
[InlineData("jk", ChunkTestLength - 1, 0, 2)] // Two char that are on both chunk sides
[InlineData("abcdefghijklmnopqrstuvwxy", 0, 100, 25)] // Everything except the last
[InlineData("abcdefghijklmnopqrstuvwxyz", 0, 0, 26)] // Copy all
[InlineData("xyz", 23, 0, 3)] // The last chars
public void CopyTo(string expected, int sourceIndex, int destinationIndex, int count)
{
// Arrange
var stream = TestRazorSourceDocument.CreateStreamContent("abcdefghijklmnopqrstuvwxyz");
var reader = new StreamReader(stream, true);
var document = new LargeTextRazorSourceDocument(reader, ChunkTestLength, Encoding.UTF8, "file.cshtml");
// Act
var destination = new char[1000];
document.CopyTo(sourceIndex, destination, destinationIndex, count);
// Assert
var copy = new string(destination, destinationIndex, count);
Assert.Equal(expected, copy);
}
}
}