public static void WriteTag_NoValueInNestedContext_ShouldThrowInvalidOperationException() { var writer = new CborWriter(); writer.WriteStartArray(null); writer.WriteTag(CborTag.Uri); Assert.Throws <InvalidOperationException>(() => writer.WriteEndArray()); }
public static void WriteTag_SingleValue_HappyPath(ulong tag, object value, string hexExpectedEncoding) { byte[] expectedEncoding = hexExpectedEncoding.HexToByteArray(); using var writer = new CborWriter(); writer.WriteTag((CborTag)tag); Helpers.WriteValue(writer, value); AssertHelper.HexEqual(expectedEncoding, writer.GetEncoding()); }
public static void WriteValue(CborWriter writer, object value, bool useDefiniteLengthCollections = true) { switch (value) { case null: writer.WriteNull(); break; case bool b: writer.WriteBoolean(b); break; case int i: writer.WriteInt32(i); break; case long i: writer.WriteInt64(i); break; case ulong i: writer.WriteUInt64(i); break; case float f: writer.WriteSingle(f); break; case double d: writer.WriteDouble(d); break; case decimal d: writer.WriteDecimal(d); break; case string s: writer.WriteTextString(s); break; case BigInteger i: writer.WriteBigInteger(i); break; case DateTimeOffset d: writer.WriteDateTimeOffset(d); break; case byte[] b: writer.WriteByteString(b); break; case byte[][] chunks: WriteChunkedByteString(writer, chunks); break; case string[] chunks when IsIndefiniteLengthByteString(chunks): byte[][] byteChunks = chunks.Skip(1).Select(ch => ch.HexToByteArray()).ToArray(); WriteChunkedByteString(writer, byteChunks); break; case string[] chunks: WriteChunkedTextString(writer, chunks); break; case object[] nested when IsCborMapRepresentation(nested): WriteMap(writer, nested, useDefiniteLengthCollections); break; case object[] nested when IsEncodedValueRepresentation(nested): byte[] encodedValue = ((string)nested[1]).HexToByteArray(); writer.WriteEncodedValue(encodedValue); break; case object[] nested when IsTaggedValueRepresentation(nested): writer.WriteTag((CborTag)nested[0]); WriteValue(writer, nested[1]); break; case object[] nested: WriteArray(writer, nested, useDefiniteLengthCollections); break; default: throw new ArgumentException($"Unrecognized argument type {value.GetType()}"); } ; }
public static void WriteTag_NoValue_ShouldThrowInvalidOperationException(ulong[] tags) { var writer = new CborWriter(); foreach (ulong tag in tags) { writer.WriteTag((CborTag)tag); } Assert.Throws <InvalidOperationException>(() => writer.Encode()); }
public static void WriteTag_NestedTags_HappyPath(ulong[] tags, object value, string hexExpectedEncoding) { byte[] expectedEncoding = hexExpectedEncoding.HexToByteArray(); using var writer = new CborWriter(); foreach (ulong tag in tags) { writer.WriteTag((CborTag)tag); } Helpers.WriteValue(writer, value); AssertHelper.HexEqual(expectedEncoding, writer.GetEncoding()); }
public static void Write_TaggedEmptyMap_ShouldSucceed() { var writer = new CborWriter(); writer.WriteTag(CborTag.DateTimeString); writer.WriteStartMap(0); writer.WriteEndMap(); byte[] encoding = writer.Encode(); Assert.Equal("C0A0", encoding.ByteArrayToHex()); }
public static void WriteTag_NoValue_ShouldThrowInvalidOperationException(ulong[] tags) { using var writer = new CborWriter(); foreach (ulong tag in tags) { writer.WriteTag((CborTag)tag); } InvalidOperationException exn = Assert.Throws <InvalidOperationException>(() => writer.GetEncoding()); Assert.Equal("Buffer contains incomplete CBOR document.", exn.Message); }
public virtual CborWriter Write(CborWriter writer) { if (this.Tag != null) { writer.WriteTag(this.Tag); } return writer; }