ModernUO/Projects/Server.Tests/Buffers/CircularBufferReaderTests.cs
Kamron Batman 525cda5413
Cleanup & Fixes for .NET 5 (#309)
- [X] Fixes several bugs
- [X] Updates more ordinal issues
- [X] Cleans up the code a bit
- [X] Turns classes static that should have been
- [X] Changes TcpServer.Instances to a HashSet

Bumps release version
2020-11-15 10:03:50 -08:00

118 lines
4.9 KiB
C#

using System;
using System.IO;
using System.Text;
using Server.Network;
using Xunit;
namespace Server.Tests.Network
{
public class CircularBufferReaderTests
{
[Theory, InlineData("Test String", "us-ascii", false, -1, 1024, 1024, 0),
InlineData("Test String", "utf-u", false, -1, 1024, 1024, 0),
InlineData("Test String", "utf-16BE", false, -1, 1024, 1024, 0),
InlineData("Test String", "utf-16", false, -1, 1024, 1024, 0),
InlineData("Test String", "us-ascii", false, -1, 1024, 1024, 1030),
InlineData("Test String", "utf-u", false, -1, 1024, 1024, 1030),
InlineData("Test String", "utf-16BE", false, -1, 1024, 1024, 1030),
InlineData("Test String", "utf-16", false, -1, 1024, 1024, 1030),
InlineData("Test String", "us-ascii", false, -1, 1024, 1024, 1020),
InlineData("Test String", "utf-u", false, -1, 1024, 1024, 1020),
InlineData("Test String", "utf-16BE", false, -1, 1024, 1024, 1020),
InlineData("Test String", "utf-16", false, -1, 1024, 1024, 1020),
InlineData("Test String", "us-ascii", false, 8, 1024, 1024, 0),
InlineData("Test String", "utf-u", false, 8, 1024, 1024, 0),
InlineData("Test String", "utf-16BE", false, 8, 1024, 1024, 0),
InlineData("Test String", "utf-16", false, 8, 1024, 1024, 0),
InlineData("Test String", "us-ascii", false, 8, 1024, 1024, 1030),
InlineData("Test String", "utf-u", false, 8, 1024, 1024, 1030),
InlineData("Test String", "utf-16BE", false, 8, 1024, 1024, 1030),
InlineData("Test String", "utf-16", false, 8, 1024, 1024, 1030),
InlineData("Test String", "us-ascii", false, 8, 1024, 1024, 1020),
InlineData("Test String", "utf-u", false, 8, 1024, 1024, 1020),
InlineData("Test String", "utf-16BE", false, 8, 1024, 1024, 1020),
InlineData("Test String", "utf-16", false, 8, 1024, 1024, 1020),
InlineData("Test String", "us-ascii", false, 20, 1024, 1024, 0),
InlineData("Test String", "utf-u", false, 20, 1024, 1024, 0),
InlineData("Test String", "utf-16BE", false, 20, 1024, 1024, 0),
InlineData("Test String", "utf-16", false, 20, 1024, 1024, 0),
InlineData("Test String", "us-ascii", false, 20, 1024, 1024, 1030),
InlineData("Test String", "utf-u", false, 20, 1024, 1024, 1030),
InlineData("Test String", "utf-16BE", false, 20, 1024, 1024, 1030),
InlineData("Test String", "utf-16", false, 20, 1024, 1024, 1030),
InlineData("Test String", "us-ascii", false, 20, 1024, 1024, 1020),
InlineData("Test String", "utf-u", false, 20, 1024, 1024, 1020),
InlineData("Test String", "utf-16BE", false, 20, 1024, 1024, 1020),
InlineData("Test String", "utf-16", false, 20, 1024, 1024, 1020)]
// First only, beginning
// Second only
// Split
// First only, beginning, fixed length smaller
// Second only, fixed length smaller
// Split, fixed length smaller
// First only, beginning, fixed length bigger
// Second only, fixed length bigger
// Split, fixed length bigger
public void TestReadString(
string value,
string encodingStr,
bool isSafe,
int fixedLength,
int firstSize,
int secondSize,
int offset
)
{
Span<byte> buffer = stackalloc byte[firstSize + secondSize];
buffer.Clear();
var encoding = EncodingHelpers.GetEncoding(encodingStr);
var strLength = fixedLength > -1 ? Math.Min(value.Length, fixedLength) : value.Length;
var chars = value.AsSpan(0, strLength);
;
encoding.GetBytes(chars, buffer.Slice(offset));
var reader = new CircularBufferReader(buffer.Slice(0, firstSize), buffer.Slice(firstSize));
reader.Seek(offset, SeekOrigin.Begin);
var actual = reader.ReadString(encoding, isSafe, fixedLength);
Assert.Equal(value.Substring(0, strLength), actual);
}
[Fact]
public void TestReadStringBetween()
{
Span<byte> expected = stackalloc byte[19];
expected[0] = 0x1;
expected[1] = 0x1;
expected[2] = 0x1;
expected[3] = 0x1;
Encoding.ASCII.GetBytes("TestString", expected.Slice(4, 10));
expected[14] = 0x0; // Null
expected[15] = 0x2;
expected[16] = 0x2;
expected[17] = 0x2;
expected[18] = 0x2;
var reader = new CircularBufferReader(expected, stackalloc byte[0]);
var num1 = reader.ReadInt32();
var str = reader.ReadAscii();
var num2 = reader.ReadInt32();
Assert.Equal(0x01010101, num1);
Assert.Equal("TestString", str);
Assert.Equal(0x02020202, num2);
}
}
}