public static void ReadEndMap_DefiniteLengthNotMet_WithNestedData_ShouldThrowInvalidOperationException(string hexEncoding, int expectedLength) { byte[] encoding = hexEncoding.HexToByteArray(); var reader = new CborReader(encoding); ulong?length = reader.ReadStartMap(); Assert.Equal(expectedLength, (int)length !.Value); for (int i = 1; i < expectedLength; i++) { reader.ReadInt64(); // key ulong?nestedLength = reader.ReadStartMap(); Assert.Equal(1, (int)nestedLength !.Value); reader.ReadInt64(); reader.ReadInt64(); reader.ReadEndMap(); } int bytesRemaining = reader.BytesRemaining; Assert.Throws <InvalidOperationException>(() => reader.ReadEndMap()); Assert.Equal(bytesRemaining, reader.BytesRemaining); }
public static void VerifyMap(CborReader reader, object[] expectedValues, bool expectDefiniteLengthCollections = true) { if (!CborWriterTests.Helpers.IsCborMapRepresentation(expectedValues)) { throw new ArgumentException($"cbor map expected values missing '{CborWriterTests.Helpers.MapPrefixIdentifier}' prefix."); } Assert.Equal(CborReaderState.StartMap, reader.Peek()); ulong?length = reader.ReadStartMap(); if (expectDefiniteLengthCollections) { Assert.NotNull(length); Assert.Equal((expectedValues.Length - 1) / 2, (int)length !.Value); } else { Assert.Null(length); } foreach (object value in expectedValues.Skip(1)) { VerifyValue(reader, value); } Assert.Equal(CborReaderState.EndMap, reader.Peek()); reader.ReadEndMap(); }
internal static void ReadMap_NonCanonicalLengths_SupportedConformanceLevel_ShouldSucceed(CborConformanceLevel level, string hexEncoding) { byte[] encoding = hexEncoding.HexToByteArray(); var reader = new CborReader(encoding, level); int? length = reader.ReadStartMap(); Assert.NotNull(length); Assert.Equal(0, length !.Value); reader.ReadEndMap(); }
public static void ReadEndMap_ImbalancedCall_ShouldThrowInvalidOperationException(string hexEncoding, int depth) { byte[] encoding = hexEncoding.HexToByteArray(); var reader = new CborReader(encoding); for (int i = 0; i < depth; i++) { reader.ReadStartArray(); } Assert.Throws <InvalidOperationException>(() => reader.ReadEndMap()); }
internal static void ReadMap_UnsortedKeys_ConformanceNotRequiringSortedKeys_ShouldSucceed(CborConformanceLevel level, object[] keySequence, string hexEncoding) { var reader = new CborReader(hexEncoding.HexToByteArray(), level); reader.ReadStartMap(); foreach (object key in keySequence) { Helpers.VerifyValue(reader, key); // verify key reader.ReadInt32(); // value is always an integer } reader.ReadEndMap(); }
public static void ReadMap_IndefiniteLength_OddKeyValuePairs_ShouldThrowFormatException(string hexEncoding, int length) { byte[] encoding = hexEncoding.HexToByteArray(); var reader = new CborReader(encoding); reader.ReadStartMap(); for (int i = 0; i < length; i++) { reader.ReadInt64(); } Assert.Equal(CborReaderState.FormatError, reader.Peek()); // don't want this to fail Assert.Throws <FormatException>(() => reader.ReadEndMap()); }
public static void ReadMap_IndefiniteLength_PrematureEndArrayCall_ShouldThrowInvalidOperationException(string hexEncoding, int length) { byte[] encoding = hexEncoding.HexToByteArray(); var reader = new CborReader(encoding); reader.ReadStartMap(); for (int i = 1; i < length; i++) { reader.ReadInt64(); } Assert.Equal(CborReaderState.UnsignedInteger, reader.Peek()); Assert.Throws <InvalidOperationException>(() => reader.ReadEndMap()); }