Exemple #1
0
        public void ReadObject_Objects_ReferenceCaching_AMF3()
        {
            // Read an array with multiple copies of each kind of object and including a self-reference
            SetStreamContents(new byte[] {
                (byte)AMF0ObjectTypeCode.AMF3Data, (byte)AMF3ObjectTypeCode.Array, 0x0d,
                0x03, 0x61, (byte)AMF3ObjectTypeCode.Array, 0x00,                  // array by reference
                0x01,                                                              // end of mixed values
                (byte)AMF3ObjectTypeCode.Object, 0x0b, 0x01, 0x01,                 // obj
                (byte)AMF3ObjectTypeCode.ByteArray, 0x01,                          // byte array
                (byte)AMF3ObjectTypeCode.Date, 0x01, 0x3f, 0xf0, 0, 0, 0, 0, 0, 0, // date
                (byte)AMF3ObjectTypeCode.Object, 0x02,                             // obj by reference
                (byte)AMF3ObjectTypeCode.ByteArray, 0x04,                          // byte array by reference
                (byte)AMF3ObjectTypeCode.Date, 0x06,                               // date by reference
            });

            input.BeginObjectStream();
            ASArray array = (ASArray)input.ReadObject();

            Assert.AreEqual(AMFObjectEncoding.AMF3, input.ObjectEncoding);
            input.EndObjectStream();

            Assert.AreEqual(6, array.IndexedValues.Count);
            Assert.AreEqual(1, array.DynamicProperties.Count);

            ASObject    obj       = (ASObject)array.IndexedValues[0];
            ASByteArray byteArray = (ASByteArray)array.IndexedValues[1];
            ASDate      date      = (ASDate)array.IndexedValues[2];

            Assert.AreSame(obj, array.IndexedValues[3]);
            Assert.AreSame(byteArray, array.IndexedValues[4]);
            Assert.AreSame(date, array.IndexedValues[5]);
            Assert.AreSame(array, array.DynamicProperties["a"]);
        }
Exemple #2
0
        private IASValue ReadByteArray()
        {
            int bits = input.ReadVWInt29();
            int lengthOrReferenceId = bits >> 1;

            // Handle cached objects.
            if ((bits & 1) == 0)
            {
                return(GetObjectFromCache(AMF3ObjectTypeCode.ByteArray, lengthOrReferenceId));
            }

            // Read out the whole byte array.
            if (lengthOrReferenceId < 0)
            {
                throw new AMFException(String.Format(CultureInfo.CurrentCulture,
                                                     ExceptionPrefix + "Encountered ByteArray token with invalid length '{0}'.", lengthOrReferenceId));
            }

            byte[] bytes;

            if (lengthOrReferenceId != 0)
            {
                bytes = new byte[lengthOrReferenceId];
                input.ReadBytes(bytes, 0, lengthOrReferenceId);
            }
            else
            {
                bytes = EmptyArray <byte> .Instance;
            }

            ASByteArray result = new ASByteArray(bytes);

            AddObjectToCache(AMF3ObjectTypeCode.ByteArray, result);
            return(result);
        }
Exemple #3
0
        public void ConstructorWithByteArraySegment()
        {
            ArraySegment <byte> segment   = new ArraySegment <byte>(new byte[] { 1, 2, 3 }, 1, 1);
            ASByteArray         byteArray = new ASByteArray(segment);

            Assert.AreEqual(segment, byteArray.Bytes);
            Assert.AreEqual(1, byteArray.Count);
        }
Exemple #4
0
        public void IndexerGetAndSet()
        {
            ArraySegment <byte> segment   = new ArraySegment <byte>(new byte[] { 1, 2, 3, 4, 5 }, 1, 3);
            ASByteArray         byteArray = new ASByteArray(segment);

            Assert.AreEqual(3, byteArray[1]);
            byteArray[1] = 42;
            Assert.AreEqual(42, byteArray[1]);
        }
Exemple #5
0
        public void ConstructorWithByteArray(byte[] bytes)
        {
            ASByteArray byteArray = new ASByteArray(bytes);

            Assert.AreSame(bytes, byteArray.Bytes.Array);
            Assert.AreEqual(0, byteArray.Bytes.Offset);
            Assert.AreEqual(3, byteArray.Bytes.Count);
            Assert.AreEqual(3, byteArray.Count);
        }
Exemple #6
0
        public void WriteObject_ByteArrays(AMFObjectEncoding objectEncoding, byte[] expected, byte[] bytes)
        {
            ASByteArray byteArray = new ASByteArray(bytes);

            output.ObjectEncoding = objectEncoding;
            output.BeginObjectStream();
            output.WriteObject(byteArray);
            output.EndObjectStream();

            CollectionAssert.AreElementsEqual(expected, stream.ToArray());
        }
Exemple #7
0
        public void ReadObject_ByteArrays_AMF3()
        {
            byte[] bytes = new byte[] { (byte)AMF0ObjectTypeCode.AMF3Data, (byte)AMF3ObjectTypeCode.ByteArray,
                                        0x1f, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };
            byte[] expectedValue = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f };

            SetStreamContents(bytes);

            input.BeginObjectStream();
            ASByteArray result = (ASByteArray)input.ReadObject();

            Assert.AreEqual(AMFObjectEncoding.AMF3, input.ObjectEncoding);
            input.EndObjectStream();

            CollectionAssert.AreElementsEqual(expectedValue, result.Bytes.Array);
        }
Exemple #8
0
        public void WriteObject_Objects_ReferenceCaching(AMFObjectEncoding objectEncoding, byte[] expected)
        {
            // Create an array with multiple copies of each kind of object and including a self-reference
            ASObject    obj       = new ASObject();
            ASByteArray byteArray = new ASByteArray(new byte[0]);
            ASDate      date      = new ASDate(1, 0);
            ASArray     array     = new ASArray(6);

            array.IndexedValues[0]       = obj;
            array.IndexedValues[1]       = byteArray;
            array.IndexedValues[2]       = date;
            array.IndexedValues[3]       = obj;
            array.IndexedValues[4]       = byteArray;
            array.IndexedValues[5]       = date;
            array.DynamicProperties["a"] = array;

            output.ObjectEncoding = objectEncoding;
            output.BeginObjectStream();
            output.WriteObject(array);
            output.EndObjectStream();

            CollectionAssert.AreElementsEqual(expected, stream.ToArray());
        }
Exemple #9
0
        public void IndexerSetThrowsWhenIndexOutOfRange(int index)
        {
            ASByteArray byteArray = new ASByteArray(new byte[] { 1, 2, 3 });

            byteArray[index] = 42;
        }
Exemple #10
0
        public void IndexerGetThrowsWhenIndexOutOfRange(int index)
        {
            ASByteArray byteArray = new ASByteArray(new byte[] { 1, 2, 3 });

            GC.KeepAlive(byteArray[index]);
        }