/
githubmirror
/
aspnetcore
Обзор
Документация
Войти
/
githubmirror
/
aspnetcore
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Components/Forms/test/ReverseStringBuilderTest.cs
163 строки
5 KB
Mackinnon Buck
[Blazor] Fix `ExpressionFormatter` sometimes generating malformed expression strings (#58799)
05 ноя 2024, 22:43
Не верифицирован
05 ноя 2024, 22:43
b9b58f1
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. namespace Microsoft.AspNetCore.Components.Forms; public class ReverseStringBuilderTest { [Fact] public void ToString_ReturnsEmptyString_WhenNoWritesOccur() { // Arrange Span<char> initialBuffer = stackalloc char[128]; using var builder = new ReverseStringBuilder(initialBuffer); // Act var result = builder.ToString(); // Assert Assert.Equal(string.Empty, result); Assert.Equal(0, builder.SequenceSegmentCount); } [Fact] public void ToString_ReturnsEmptyString_WhenBufferIsEmpty() { // Arrange using var builder = new ReverseStringBuilder(Span<char>.Empty); // Act var result = builder.ToString(); // Assert Assert.Equal(string.Empty, result); Assert.Equal(0, builder.SequenceSegmentCount); } [Fact] public void ToString_Works_WhenOnlyUsingStackAllocatedBuffer() { // Arrange Span<char> initialBuffer = stackalloc char[128]; using var builder = new ReverseStringBuilder(initialBuffer); // Act builder.InsertFront("world!"); builder.InsertFront(" "); builder.InsertFront(","); builder.InsertFront("Hello"); var result = builder.ToString(); // Assert Assert.Equal("Hello, world!", result); Assert.Equal(0, builder.SequenceSegmentCount); } [Fact] public void ToString_Works_WithNumbers() { // Arrange Span<char> initialBuffer = stackalloc char[128]; using var builder = new ReverseStringBuilder(initialBuffer); // Act builder.InsertFront("worlds!"); builder.InsertFront(" "); builder.InsertFront(123); builder.InsertFront(", "); builder.InsertFront("Hello"); var result = builder.ToString(); // Assert Assert.Equal("Hello, 123 worlds!", result); Assert.Equal(0, builder.SequenceSegmentCount); } [Fact] public void ToString_Works_AfterExceedingStackAllocatedBuffer() { // Arrange Span<char> initialBuffer = stackalloc char[8]; using var builder = new ReverseStringBuilder(initialBuffer); // Act builder.InsertFront("world!"); builder.InsertFront(" "); builder.InsertFront(","); builder.InsertFront("Hello"); var result = builder.ToString(); // Assert Assert.Equal("Hello, world!", result); Assert.Equal(1, builder.SequenceSegmentCount); } [Fact] public void ToString_Works_AfterExceedingStackAllocatedBuffer_WithUnusedSpaceInInitialBuffer() { const int InitialBufferSize = 64; var builder = new ReverseStringBuilder(stackalloc char[InitialBufferSize]); var firstChunk = new string('A', InitialBufferSize - 10); var secondChunk = new string('B', 20); builder.InsertFront(firstChunk); builder.InsertFront(secondChunk); var expected = secondChunk + firstChunk; var actual = builder.ToString(); Assert.Equal(expected, actual); } [Fact] public void ToString_Works_AfterExpandingIntoMultipleBuffersFromEstimatedStringSize() { // Arrange using var builder = new ReverseStringBuilder(8); var padding = new string('A', ReverseStringBuilder.MinimumRentedArraySize - 10); var expected = padding + "Hello, world!"; // Act builder.InsertFront("world!"); builder.InsertFront(" "); builder.InsertFront(","); builder.InsertFront("Hello"); builder.InsertFront(padding); var result = builder.ToString(); // Assert Assert.Equal(expected, result); Assert.Equal(2, builder.SequenceSegmentCount); } [Fact] public void ToString_Works_AfterUsingFallbackBuffer() { // Arrange using var builder = new ReverseStringBuilder(ReverseStringBuilder.MinimumRentedArraySize); var segmentCount = 5; var expected = string.Empty; // Act for (var i = 0; i < segmentCount; i++) { var c = (char)(i + 65); // Update the expected string. expected = new string(c, ReverseStringBuilder.MinimumRentedArraySize) + expected; // Append just one character to ensure we get a buffer with the minimum possible // length. builder.InsertFront(c.ToString()); // Fill up the rest of the buffer. var s = new string(c, ReverseStringBuilder.MinimumRentedArraySize - 1); builder.InsertFront(s); } var actual = builder.ToString(); Assert.Equal(expected, actual); Assert.Equal(segmentCount, builder.SequenceSegmentCount); } }