blob: 0788a38d628f3acdda0e3759796505dd187a365e [file] [log] [blame]
# -*- coding: utf-8 -*-
#
# Copyright (c) The PyAMF Project.
# See LICENSE.txt for details.
"""
Flex compatibility tests.
@since: 0.1.0
"""
import unittest
import pyamf
from pyamf import flex, util, amf3, amf0
from pyamf.tests.util import EncoderMixIn
class ArrayCollectionTestCase(unittest.TestCase, EncoderMixIn):
"""
Tests for L{flex.ArrayCollection}
"""
amf_type = pyamf.AMF3
def setUp(self):
unittest.TestCase.setUp(self)
EncoderMixIn.setUp(self)
def test_create(self):
self.assertEqual(flex.ArrayCollection(), [])
self.assertEqual(flex.ArrayCollection([1, 2, 3]), [1, 2, 3])
self.assertEqual(flex.ArrayCollection(('a', 'b', 'b')), ['a', 'b', 'b'])
class X(object):
def __iter__(self):
return iter(['foo', 'bar', 'baz'])
self.assertEqual(flex.ArrayCollection(X()), ['foo', 'bar', 'baz'])
self.assertRaises(TypeError, flex.ArrayCollection,
{'first': 'Matt', 'last': 'Matthews'})
def test_encode_amf3(self):
x = flex.ArrayCollection()
x.append('eggs')
self.assertEncoded(x,
'\n\x07Cflex.messaging.io.ArrayCollection\t\x03\x01\x06\teggs')
def test_encode_amf0(self):
self.encoder = pyamf.get_encoder(pyamf.AMF0)
self.buf = self.encoder.stream
x = flex.ArrayCollection()
x.append('eggs')
self.assertEncoded(x,
'\x11\n\x07Cflex.messaging.io.ArrayCollection\t\x03\x01\x06\teggs')
def test_decode_amf3(self):
stream = util.BufferedByteStream(
'\n\x07Cflex.messaging.io.ArrayCollection\t\x03\x01\x06\teggs')
decoder = amf3.Decoder(stream)
x = decoder.readElement()
self.assertEqual(x.__class__, flex.ArrayCollection)
self.assertEqual(x, ['eggs'])
def test_decode_proxy(self):
stream = util.BufferedByteStream(
'\x0a\x07;flex.messaging.io.ObjectProxy\x09\x01\x03a\x06\x09spam'
'\x03b\x04\x05\x01')
decoder = amf3.Decoder(stream)
decoder.use_proxies = True
x = decoder.readElement()
self.assertEqual(x.__class__, pyamf.MixedArray)
self.assertEqual(x, {'a': 'spam', 'b': 5})
def test_decode_amf0(self):
stream = util.BufferedByteStream(
'\x11\n\x07Cflex.messaging.io.ArrayCollection\t\x03\x01\x06\teggs')
decoder = amf0.Decoder(stream)
x = decoder.readElement()
self.assertEqual(x.__class__, flex.ArrayCollection)
self.assertEqual(x, ['eggs'])
def test_source_attr(self):
s = ('\n\x07Cflex.messaging.io.ArrayCollection\n\x0b\x01\rsource'
'\t\x05\x01\x06\x07foo\x06\x07bar\x01')
x = pyamf.decode(s, encoding=pyamf.AMF3).next()
self.assertTrue(isinstance(x, flex.ArrayCollection))
self.assertEqual(x, ['foo', 'bar'])
def test_readonly_length_property(self):
a = flex.ArrayCollection()
self.assertRaises(AttributeError, setattr, a, 'length', 3)
class ArrayCollectionAPITestCase(unittest.TestCase):
def test_addItem(self):
a = flex.ArrayCollection()
self.assertEqual(a, [])
self.assertEqual(a.length, 0)
a.addItem('hi')
self.assertEqual(a, ['hi'])
self.assertEqual(a.length, 1)
def test_addItemAt(self):
a = flex.ArrayCollection()
self.assertEqual(a, [])
self.assertRaises(IndexError, a.addItemAt, 'foo', -1)
self.assertRaises(IndexError, a.addItemAt, 'foo', 1)
a.addItemAt('foo', 0)
self.assertEqual(a, ['foo'])
a.addItemAt('bar', 0)
self.assertEqual(a, ['bar', 'foo'])
self.assertEqual(a.length, 2)
def test_getItemAt(self):
a = flex.ArrayCollection(['a', 'b', 'c'])
self.assertEqual(a.getItemAt(0), 'a')
self.assertEqual(a.getItemAt(1), 'b')
self.assertEqual(a.getItemAt(2), 'c')
self.assertRaises(IndexError, a.getItemAt, -1)
self.assertRaises(IndexError, a.getItemAt, 3)
def test_getItemIndex(self):
a = flex.ArrayCollection(['a', 'b', 'c'])
self.assertEqual(a.getItemIndex('a'), 0)
self.assertEqual(a.getItemIndex('b'), 1)
self.assertEqual(a.getItemIndex('c'), 2)
self.assertEqual(a.getItemIndex('d'), -1)
def test_removeAll(self):
a = flex.ArrayCollection(['a', 'b', 'c'])
self.assertEqual(a.length, 3)
a.removeAll()
self.assertEqual(a, [])
self.assertEqual(a.length, 0)
def test_removeItemAt(self):
a = flex.ArrayCollection(['a', 'b', 'c'])
self.assertRaises(IndexError, a.removeItemAt, -1)
self.assertRaises(IndexError, a.removeItemAt, 3)
self.assertEqual(a.removeItemAt(1), 'b')
self.assertEqual(a, ['a', 'c'])
self.assertEqual(a.length, 2)
self.assertEqual(a.removeItemAt(1), 'c')
self.assertEqual(a, ['a'])
self.assertEqual(a.length, 1)
self.assertEqual(a.removeItemAt(0), 'a')
self.assertEqual(a, [])
self.assertEqual(a.length, 0)
def test_setItemAt(self):
a = flex.ArrayCollection(['a', 'b', 'c'])
self.assertEqual(a.setItemAt('d', 1), 'b')
self.assertEqual(a, ['a', 'd', 'c'])
self.assertEqual(a.length, 3)
class ObjectProxyTestCase(unittest.TestCase, EncoderMixIn):
amf_type = pyamf.AMF3
def setUp(self):
unittest.TestCase.setUp(self)
EncoderMixIn.setUp(self)
def test_encode(self):
x = flex.ObjectProxy(pyamf.MixedArray(a='spam', b=5))
self.assertEncoded(x, '\n\x07;flex.messaging.io.ObjectProxy\n\x0b\x01',
('\x03a\x06\tspam', '\x03b\x04\x05', '\x01'))
def test_decode(self):
stream = util.BufferedByteStream(
'\x0a\x07;flex.messaging.io.ObjectProxy\x09\x01\x03a\x06\x09spam'
'\x03b\x04\x05\x01')
decoder = amf3.Decoder(stream)
x = decoder.readElement()
self.assertEqual(x.__class__, flex.ObjectProxy)
self.assertEqual(x._amf_object, {'a': 'spam', 'b': 5})
def test_decode_proxy(self):
stream = util.BufferedByteStream(
'\x0a\x07;flex.messaging.io.ObjectProxy\x09\x01\x03a\x06\x09spam'
'\x03b\x04\x05\x01')
decoder = amf3.Decoder(stream)
decoder.use_proxies = True
x = decoder.readElement()
self.assertEqual(x.__class__, pyamf.MixedArray)
self.assertEqual(x, {'a': 'spam', 'b': 5})
def test_get_attrs(self):
x = flex.ObjectProxy()
self.assertEqual(x._amf_object, pyamf.ASObject())
x._amf_object = None
self.assertEqual(x._amf_object, None)
def test_repr(self):
x = flex.ObjectProxy()
self.assertEqual(repr(x), '<flex.messaging.io.ObjectProxy {}>')
x = flex.ObjectProxy(u'ƒøø')
self.assertEqual(repr(x), "<flex.messaging.io.ObjectProxy u'\\u0192\\xf8\\xf8'>")