Beispiel #1
0
        public static void WriteTag_NoValueInNestedContext_ShouldThrowInvalidOperationException()
        {
            var writer = new CborWriter();

            writer.WriteStartArray(null);
            writer.WriteTag(CborTag.Uri);
            Assert.Throws <InvalidOperationException>(() => writer.WriteEndArray());
        }
Beispiel #2
0
 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());
 }
Beispiel #3
0
            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()}");
                }
                ;
            }
Beispiel #4
0
        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());
        }
Beispiel #5
0
 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());
 }
Beispiel #6
0
        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());
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        public virtual CborWriter Write(CborWriter writer)
        {
            if (this.Tag != null)
            {
                writer.WriteTag(this.Tag);
            }

            return writer;
        }