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"]); }
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); }
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); }
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]); }
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); }
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()); }
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); }
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()); }
public void IndexerSetThrowsWhenIndexOutOfRange(int index) { ASByteArray byteArray = new ASByteArray(new byte[] { 1, 2, 3 }); byteArray[index] = 42; }
public void IndexerGetThrowsWhenIndexOutOfRange(int index) { ASByteArray byteArray = new ASByteArray(new byte[] { 1, 2, 3 }); GC.KeepAlive(byteArray[index]); }