Skip to content

Commit

Permalink
Added some basic test coverage for reading binary strings.
Browse files Browse the repository at this point in the history
  • Loading branch information
MeltyPlayer committed Apr 29, 2024
1 parent 3178534 commit d77d81c
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 2 deletions.
64 changes: 64 additions & 0 deletions Schema Tests/binary/SchemaBinaryReaderStringTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
using System.Text;

using NUnit.Framework;

using schema.testing;

namespace schema.binary {
public class SchemaBinaryReaderStringTests {
[Test]
public void TestAssertChar() {
var br = new SchemaBinaryReader(SchemaMemoryStream.From(['c']));
br.AssertChar('c');
}

[Test]
public void TestAssertCharUtf16() {
var br = new SchemaBinaryReader(SchemaMemoryStream.From(['é']));
br.AssertChar(Encoding.Unicode, 'é');
}

[Test]
public void TestAssertString() {
var br = new SchemaBinaryReader(SchemaMemoryStream.From("cat"));
br.AssertString("cat");
}

[Test]
public void TestAssertStringUtf16() {
var br = new SchemaBinaryReader(
SchemaMemoryStream.From("félin", Encoding.Unicode));
br.AssertString(Encoding.Unicode, "félin");
}

[Test]
public void TestAssertStringNT() {
var br = new SchemaBinaryReader(SchemaMemoryStream.From("cat\0"));
br.AssertStringNT("cat");
}

[Test]
public void TestAssertStringNTUtf16() {
var br = new SchemaBinaryReader(
SchemaMemoryStream.From($"félin\0", Encoding.Unicode));
br.AssertStringNT(Encoding.Unicode, "félin");
}

[Test]
[TestCase("\n")]
[TestCase("\r\n")]
public void TestReadLine(string newline) {
var br = new SchemaBinaryReader(SchemaMemoryStream.From($"cat{newline}"));
Assert.AreEqual("cat", br.ReadLine());
}

[Test]
[TestCase("\n")]
[TestCase("\r\n")]
public void TestReadLineUtf16(string newline) {
var br = new SchemaBinaryReader(
SchemaMemoryStream.From($"félin{newline}", Encoding.Unicode));
Assert.AreEqual("félin", br.ReadLine(Encoding.Unicode));
}
}
}
13 changes: 11 additions & 2 deletions Schema/src/testing/SchemaMemoryStream.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using System;
using System.IO;
using System.Text;

using CommunityToolkit.HighPerformance;

Expand All @@ -9,16 +10,24 @@
namespace schema.testing {
public class SchemaMemoryStream(MemoryStream impl)
: ISeekableReadableStream, ISeekableWritableStream {
public static unsafe SchemaMemoryStream From<T>(T[] src)
public static unsafe SchemaMemoryStream From<T>(ReadOnlySpan<T> src)
where T : unmanaged {
var size = sizeof(T);
var data = new byte[size * src.Length];
src.AsSpan().AsBytes().CopyTo(data);
src.AsBytes().CopyTo(data);

var ms = new MemoryStream(data);
return new SchemaMemoryStream(ms);
}

public static SchemaMemoryStream From(string src)
=> From(src, Encoding.ASCII);

public static SchemaMemoryStream From(string src, Encoding encoding) {
var ms = new MemoryStream(encoding.GetBytes(src));
return new SchemaMemoryStream(ms);
}

public IBinaryReader GetBinaryReader()
=> new SchemaBinaryReader(this, this.Endianness);

Expand Down

0 comments on commit d77d81c

Please sign in to comment.