public static void EndReadArray_ImbalancedCall_ShouldThrowInvalidOperationException() { byte[] encoding = "80".HexToByteArray(); // [] var reader = new CborReader(encoding); Assert.Throws <InvalidOperationException>(() => reader.ReadEndArray()); }
public static void EndReadArray_DefiniteLengthNotMet_WithNestedData_ShouldThrowInvalidOperationException(string hexEncoding, int expectedLength) { byte[] encoding = hexEncoding.HexToByteArray(); var reader = new CborReader(encoding); ulong?length = reader.ReadStartArray(); Assert.Equal(expectedLength, (int)length !.Value); for (int i = 1; i < expectedLength; i++) { ulong?nestedLength = reader.ReadStartArray(); Assert.Equal(1, (int)nestedLength !.Value); reader.ReadInt64(); reader.ReadEndArray(); } Assert.Throws <InvalidOperationException>(() => reader.ReadEndArray()); }
public static void ReadTag_NestedTagWithMissingPayload_ShouldThrowFormatException() { byte[] data = "9fc2ff".HexToByteArray(); var reader = new CborReader(data); reader.ReadStartArray(); reader.ReadTag(); Assert.Equal(CborReaderState.FormatError, reader.Peek()); Assert.Throws <FormatException>(() => reader.ReadEndArray()); }
public static void ReadTag_CallingEndReadMapPrematurely_ShouldThrowInvalidOperationException(string hexEncoding) { // encoding is valid CBOR, so should not throw FormatException byte[] data = hexEncoding.HexToByteArray(); var reader = new CborReader(data); reader.ReadStartMap(); reader.ReadInt64(); reader.ReadTag(); Assert.Equal(CborReaderState.UnsignedInteger, reader.Peek()); Assert.Throws <InvalidOperationException>(() => reader.ReadEndArray()); }
public static void SkipValue_NestedValue_HappyPath(string hexEncoding) { byte[] encoding = $"8301{hexEncoding}03".HexToByteArray(); var reader = new CborReader(encoding); reader.ReadStartArray(); reader.ReadInt64(); reader.SkipValue(); reader.ReadInt64(); reader.ReadEndArray(); Assert.Equal(CborReaderState.Finished, reader.Peek()); }
public static void ReadArray_IndefiniteLength_PrematureEndArrayCall_ShouldThrowInvalidOperationException(string hexEncoding, int length) { byte[] encoding = hexEncoding.HexToByteArray(); var reader = new CborReader(encoding); reader.ReadStartArray(); for (int i = 1; i < length; i++) { reader.ReadInt64(); } Assert.Throws <InvalidOperationException>(() => reader.ReadEndArray()); }
public static void VerifyArray(CborReader reader, params object[] expectedValues) { Assert.Equal(CborReaderState.StartArray, reader.Peek()); ulong?length = reader.ReadStartArray(); Assert.NotNull(length); Assert.Equal(expectedValues.Length, (int)length !.Value); foreach (object value in expectedValues) { switch (value) { case int expected: if (expected >= 0) { Assert.Equal(CborReaderState.UnsignedInteger, reader.Peek()); } else { Assert.Equal(CborReaderState.NegativeInteger, reader.Peek()); } long i = reader.ReadInt64(); Assert.Equal(expected, (int)i); break; case string expected: Assert.Equal(CborReaderState.TextString, reader.Peek()); string s = reader.ReadTextString(); Assert.Equal(expected, s); break; case byte[] expected: Assert.Equal(CborReaderState.ByteString, reader.Peek()); byte[] b = reader.ReadByteString(); Assert.Equal(expected, b); break; case object[] nested: VerifyArray(reader, nested); break; default: throw new ArgumentException($"Unrecognized argument type {value.GetType()}"); } } Assert.Equal(CborReaderState.EndArray, reader.Peek()); reader.ReadEndArray(); }
public static void ReadTag_NestedTagWithMissingPayload_ShouldThrowFormatException() { byte[] encoding = "9fc2ff".HexToByteArray(); var reader = new CborReader(encoding); reader.ReadStartArray(); reader.ReadTag(); int bytesRemaining = reader.BytesRemaining; Assert.Equal(CborReaderState.FormatError, reader.PeekState()); Assert.Throws <FormatException>(() => reader.ReadEndArray()); Assert.Equal(bytesRemaining, reader.BytesRemaining); }
public static void CborReader_MultipleRootValuesAllowed_ReadingBeyondEndOfBuffer_ShouldThrowInvalidOperationException() { string hexEncoding = "810102"; var reader = new CborReader(hexEncoding.HexToByteArray(), allowMultipleRootLevelValues: true); Assert.Equal(CborReaderState.StartArray, reader.PeekState()); reader.ReadStartArray(); reader.ReadInt32(); reader.ReadEndArray(); Assert.Equal(CborReaderState.UnsignedInteger, reader.PeekState()); reader.ReadInt32(); Assert.Equal(CborReaderState.Finished, reader.PeekState()); Assert.Throws <InvalidOperationException>(() => reader.ReadInt32()); }
public static void VerifyArray(CborReader reader, params object[] expectedValues) { Assert.Equal(CborReaderState.StartArray, reader.Peek()); ulong?length = reader.ReadStartArray(); Assert.NotNull(length); Assert.Equal(expectedValues.Length, (int)length !.Value); foreach (object value in expectedValues) { VerifyValue(reader, value); } Assert.Equal(CborReaderState.EndArray, reader.Peek()); reader.ReadEndArray(); }
public static void ReadArray_IncorrectDefiniteLength_NestedValues_ShouldThrowFormatException(string hexEncoding, int expectedLength, int actualLength) { byte[] encoding = hexEncoding.HexToByteArray(); var reader = new CborReader(encoding); ulong?length = reader.ReadStartArray(); Assert.Equal(expectedLength, (int)length !.Value); for (int i = 0; i < actualLength; i++) { ulong?innerLength = reader.ReadStartArray(); Assert.Equal(1, (int)innerLength !.Value); reader.ReadInt64(); reader.ReadEndArray(); } Assert.Throws <FormatException>(() => reader.ReadInt64()); }
public static void VerifyArray(CborReader reader, object[] expectedValues, bool expectDefiniteLengthCollections = true) { Assert.Equal(CborReaderState.StartArray, reader.Peek()); ulong?length = reader.ReadStartArray(); if (expectDefiniteLengthCollections) { Assert.NotNull(length); Assert.Equal(expectedValues.Length, (int)length !.Value); } else { Assert.Null(length); } foreach (object value in expectedValues) { VerifyValue(reader, value); } Assert.Equal(CborReaderState.EndArray, reader.Peek()); reader.ReadEndArray(); }