foreign/csharp/Iggy_SDK_Tests/UtilityTests/HeaderValueTests.cs (379 lines of code) (raw):

using Iggy_SDK.Extensions; using Iggy_SDK.Headers; using System.Buffers.Binary; using System.Text; namespace Iggy_SDK_Tests.UtilityTests; public sealed class HeaderValueTests { [Fact] public void Raw_ReturnsCorrectValue() { byte[] data = new byte[] { 1, 2, 3 }; HeaderValue header = HeaderValue.FromBytes(data); Assert.Equal(HeaderKind.Raw, header.Kind); Assert.Equal(data, header.Value); } [Fact] public void String_ThrowsArgumentExceptionForInvalidValue() { Assert.Throws<ArgumentException>(() => HeaderValue.FromString("")); Assert.Throws<ArgumentException>(() => HeaderValue.FromString(new string('a', 256))); } [Fact] public void String_ReturnsCorrectValue() { string value = "TestString"; HeaderValue header = HeaderValue.FromString(value); Assert.Equal(HeaderKind.String, header.Kind); Assert.Equal(value, Encoding.UTF8.GetString(header.Value)); } [Fact] public void Bool_ReturnsCorrectValue() { bool value = true; HeaderValue header = HeaderValue.FromBool(value); Assert.Equal(HeaderKind.Bool, header.Kind); Assert.Equal(BitConverter.GetBytes(value), header.Value); } [Fact] public void Int32_ReturnsCorrectValue() { int value = 42; HeaderValue header = HeaderValue.FromInt32(value); Assert.Equal(HeaderKind.Int32, header.Kind); Assert.Equal(value, BitConverter.ToInt32(header.Value)); } [Fact] public void Int64_ReturnsCorrectValue() { long value = 1234567890L; HeaderValue header = HeaderValue.FromInt64(value); Assert.Equal(HeaderKind.Int64, header.Kind); Assert.Equal(value, BitConverter.ToInt64(header.Value)); } [Fact] public void Int128_ReturnsCorrectValue() { // You should provide a valid Int128 value here for testing. Int128 value = new Int128(123, 456); HeaderValue header = HeaderValue.FromInt128(value); Assert.Equal(HeaderKind.Int128, header.Kind); Assert.Equal(value.GetBytesFromInt128(), header.Value); } [Fact] public void Guid_ReturnsCorrectValue() { Guid value = Guid.NewGuid(); HeaderValue header = HeaderValue.FromGuid(value); Assert.Equal(HeaderKind.Uint128, header.Kind); byte[] guidBytes = value.ToByteArray(); byte[] headerValueBytes = header.Value; Assert.Equal(guidBytes.Length, headerValueBytes.Length); for (int i = 0; i < guidBytes.Length; i++) { Assert.Equal(guidBytes[i], headerValueBytes[i]); } } [Fact] public void UInt32_ReturnsCorrectValue() { uint value = 12345U; HeaderValue header = HeaderValue.FromUInt32(value); Assert.Equal(HeaderKind.Uint32, header.Kind); Assert.Equal(value, BitConverter.ToUInt32(header.Value)); } [Fact] public void UInt64_ReturnsCorrectValue() { ulong value = 9876543210UL; HeaderValue header = HeaderValue.FromUInt64(value); Assert.Equal(HeaderKind.Uint64, header.Kind); Assert.Equal(value, BitConverter.ToUInt64(header.Value)); } [Fact] public void UInt128_ReturnsCorrectValue() { UInt128 value = new UInt128(789, 101112); HeaderValue header = HeaderValue.FromUInt128(value); Assert.Equal(HeaderKind.Uint128, header.Kind); Assert.Equal(value.GetBytesFromUInt128(), header.Value); } [Fact] public void Float32_ReturnsCorrectValue() { float value = 3.14f; HeaderValue header = HeaderValue.FromFloat(value); Assert.Equal(HeaderKind.Float, header.Kind); Assert.Equal(value, BitConverter.ToSingle(header.Value)); } [Fact] public void Float64_ReturnsCorrectValue() { double value = 2.71828; HeaderValue header = HeaderValue.FromDouble(value); Assert.Equal(HeaderKind.Double, header.Kind); Assert.Equal(value, BitConverter.ToDouble(header.Value)); } [Fact] public void ToBytes_ValidKind_ReturnsValue() { // Arrange var headerValue = new HeaderValue { Kind = HeaderKind.Raw, Value = Encoding.UTF8.GetBytes("TestValue") }; // Act var result = headerValue.ToBytes(); // Assert Assert.Equal(Encoding.UTF8.GetBytes("TestValue"), result); } [Fact] public void ToBytes_InvalidKind_ThrowsInvalidOperationException() { // Arrange var headerValue = new HeaderValue { Kind = HeaderKind.String, Value = Encoding.UTF8.GetBytes("TestValue") }; // Act and Assert Assert.Throws<InvalidOperationException>(() => headerValue.ToBytes()); } [Fact] public void ToString_ValidKind_ReturnsDecodedString() { // Arrange var headerValue = new HeaderValue { Kind = HeaderKind.String, Value = Encoding.UTF8.GetBytes("TestValue") }; // Act var result = headerValue.ToString(); // Assert Assert.Equal("TestValue", result); } [Fact] public void ToBool_ValidKind_ReturnsValue() { // Arrange var headerValue = new HeaderValue { Kind = HeaderKind.Bool, Value = BitConverter.GetBytes(true) }; // Act var result = headerValue.ToBool(); // Assert Assert.True(result); } [Fact] public void ToBool_InvalidKind_ThrowsInvalidOperationException() { // Arrange var headerValue = new HeaderValue { Kind = HeaderKind.String, Value = Encoding.UTF8.GetBytes("TestValue") }; // Act and Assert Assert.Throws<InvalidOperationException>(() => headerValue.ToBool()); } [Fact] public void ToInt32_ValidKind_ReturnsValue() { // Arrange var intValue = 42; var bytes = new byte[4]; BinaryPrimitives.WriteInt32LittleEndian(bytes, intValue); var headerValue = new HeaderValue { Kind = HeaderKind.Int32, Value = bytes }; // Act var result = headerValue.ToInt32(); // Assert Assert.Equal(intValue, result); } [Fact] public void ToInt32_InvalidKind_ThrowsInvalidOperationException() { // Arrange var headerValue = new HeaderValue { Kind = HeaderKind.String, Value = Encoding.UTF8.GetBytes("TestValue") }; // Act and Assert Assert.Throws<InvalidOperationException>(() => headerValue.ToInt32()); } [Fact] public void ToInt64_ValidKind_ReturnsValue() { // Arrange var longValue = 1234567890L; var bytes = new byte[8]; BinaryPrimitives.WriteInt64LittleEndian(bytes, longValue); var headerValue = new HeaderValue { Kind = HeaderKind.Int64, Value = bytes }; // Act var result = headerValue.ToInt64(); // Assert Assert.Equal(longValue, result); } [Fact] public void ToInt64_InvalidKind_ThrowsInvalidOperationException() { // Arrange var headerValue = new HeaderValue { Kind = HeaderKind.Float, Value = BitConverter.GetBytes(3.14f) }; // Act and Assert Assert.Throws<InvalidOperationException>(() => headerValue.ToInt64()); } [Fact] public void ToUInt32_ValidKind_ReturnsValue() { // Arrange uint uintValue = 12345; var bytes = new byte[4]; BinaryPrimitives.WriteUInt32LittleEndian(bytes, uintValue); var headerValue = new HeaderValue { Kind = HeaderKind.Uint32, Value = bytes }; // Act var result = headerValue.ToUInt32(); // Assert Assert.Equal(uintValue, result); } [Fact] public void ToUInt32_InvalidKind_ThrowsInvalidOperationException() { // Arrange var headerValue = new HeaderValue { Kind = HeaderKind.Double, Value = BitConverter.GetBytes(3.14) }; // Act and Assert Assert.Throws<InvalidOperationException>(() => headerValue.ToUInt32()); } [Fact] public void ToUInt64_ValidKind_ReturnsValue() { // Arrange ulong ulongValue = 9876543210UL; var bytes = new byte[8]; BinaryPrimitives.WriteUInt64LittleEndian(bytes, ulongValue); var headerValue = new HeaderValue { Kind = HeaderKind.Uint64, Value = bytes }; // Act var result = headerValue.ToUInt64(); // Assert Assert.Equal(ulongValue, result); } [Fact] public void ToUInt64_InvalidKind_ThrowsInvalidOperationException() { // Arrange var headerValue = new HeaderValue { Kind = HeaderKind.Int128, Value = new byte[16] }; // Act and Assert Assert.Throws<InvalidOperationException>(() => headerValue.ToUInt64()); } [Fact] public void ToFloat_ValidKind_ReturnsValue() { // Arrange float floatValue = 3.14f; var bytes = new byte[4]; BinaryPrimitives.TryWriteSingleLittleEndian(bytes, floatValue); var headerValue = new HeaderValue { Kind = HeaderKind.Float, Value = bytes }; // Act var result = headerValue.ToFloat(); // Assert Assert.Equal(floatValue, result); } [Fact] public void ToFloat_InvalidKind_ThrowsInvalidOperationException() { // Arrange var headerValue = new HeaderValue { Kind = HeaderKind.String, Value = Encoding.UTF8.GetBytes("TestValue") }; // Act and Assert Assert.Throws<InvalidOperationException>(() => headerValue.ToFloat()); } [Fact] public void ToDouble_ValidKind_ReturnsValue() { // Arrange double doubleValue = 3.14159265359; var bytes = new byte[8]; BinaryPrimitives.TryWriteDoubleLittleEndian(bytes, doubleValue); var headerValue = new HeaderValue { Kind = HeaderKind.Double, Value = bytes }; // Act var result = headerValue.ToDouble(); // Assert Assert.Equal(doubleValue, result); } [Fact] public void ToDouble_InvalidKind_ThrowsInvalidOperationException() { // Arrange var headerValue = new HeaderValue { Kind = HeaderKind.Bool, Value = BitConverter.GetBytes(true) }; // Act and Assert Assert.Throws<InvalidOperationException>(() => headerValue.ToDouble()); } [Fact] public void ToInt128_ValidKind_ReturnsValue() { // Arrange var int128Value = new Int128(123, 456); var headerValue = new HeaderValue { Kind = HeaderKind.Int128, Value = int128Value.GetBytesFromInt128() }; // Act var result = headerValue.ToInt128(); // Assert Assert.Equal(int128Value, result); } [Fact] public void ToInt128_InvalidKind_ThrowsInvalidOperationException() { // Arrange var headerValue = new HeaderValue { Kind = HeaderKind.Uint64, Value = BitConverter.GetBytes(9876543210UL) }; // Act and Assert Assert.Throws<InvalidOperationException>(() => headerValue.ToInt128()); } [Fact] public void ToUInt128_ValidKind_ReturnsValue() { // Arrange var uint128Value = new UInt128(123, 456); var headerValue = new HeaderValue { Kind = HeaderKind.Uint128, Value = uint128Value.GetBytesFromUInt128() }; // Act var result = headerValue.ToUInt128(); // Assert Assert.Equal(uint128Value, result); } [Fact] public void ToUInt128_InvalidKind_ThrowsInvalidOperationException() { // Arrange var headerValue = new HeaderValue { Kind = HeaderKind.String, Value = Encoding.UTF8.GetBytes("TestValue") }; // Act and Assert Assert.Throws<InvalidOperationException>(() => headerValue.ToUInt128()); } [Fact] public void ToGuid_ValidKind_ReturnsValue() { // Arrange var guidValue = Guid.NewGuid(); var headerValue = new HeaderValue { Kind = HeaderKind.Uint128, Value = guidValue.ToByteArray() }; // Act var result = headerValue.ToGuid(); // Assert Assert.Equal(guidValue, result); } [Fact] public void ToGuid_InvalidKind_ThrowsInvalidOperationException() { // Arrange var headerValue = new HeaderValue { Kind = HeaderKind.Bool, Value = BitConverter.GetBytes(true) }; // Act and Assert Assert.Throws<InvalidOperationException>(() => headerValue.ToGuid()); } }