def test_readonly(self): x = ClassAlias(Spam, readonly_attrs=['foo', 'bar'], defer=True) self.assertEqual(x.readonly_attrs, ['foo', 'bar']) x.compile() self.assertEqual(x.readonly_attrs, ['bar', 'foo'])
def test_synonym_attrs(self): x = ClassAlias(Spam, synonym_attrs={'foo': 'bar'}, defer=True) self.assertEqual(x.synonym_attrs, {'foo': 'bar'}) x.compile() self.assertEqual(x.synonym_attrs, {'foo': 'bar'})
def test_static(self): x = ClassAlias(Spam, static_attrs=['foo', 'bar'], defer=True) self.assertEqual(x.static_attrs, ['foo', 'bar']) x.compile() self.assertEqual(x.static_attrs, ['bar', 'foo'])
def test_exclude(self): x = ClassAlias(Spam, exclude_attrs=['foo', 'bar'], defer=True) self.assertEqual(x.exclude_attrs, ['foo', 'bar']) x.compile() self.assertEqual(x.exclude_attrs, ['bar', 'foo'])
def test_anonymous(self): x = ClassAlias(Spam, None) x.compile() self.assertTrue(x.anonymous) self.assertTrue(x._compiled) self.assertEqual(x.klass, Spam) self.assertEqual(x.alias, '')
def test_compiled(self): x = ClassAlias(Spam, defer=True) self.assertFalse(x._compiled) x._compiled = True o = x.static_properties = object() x.compile() self.assertTrue(o is x.static_properties)
def test_sealed_external(self): class A(object): __slots__ = ('foo', ) class __amf__: external = True def __readamf__(self, foo): pass def __writeamf__(self, foo): pass x = ClassAlias(A) x.compile() self.assertTrue(x.sealed)
class GetEncodableAttributesTestCase(unittest.TestCase): """ Tests for L{ClassAlias.getEncodableAttributes} """ def setUp(self): self.alias = ClassAlias(Spam, 'foo', defer=True) self.obj = Spam() def test_empty(self): attrs = self.alias.getEncodableAttributes(self.obj) self.assertEqual(attrs, {}) def test_static(self): self.alias.static_attrs = ['foo', 'bar'] self.alias.compile() self.obj.foo = 'bar' # leave self.obj.bar self.assertFalse(hasattr(self.obj, 'bar')) attrs = self.alias.getEncodableAttributes(self.obj) self.assertEqual(attrs, {'foo': 'bar', 'bar': miniamf.Undefined}) def test_not_dynamic(self): self.alias.compile() self.alias.dynamic = False self.assertEqual(self.alias.getEncodableAttributes(self.obj), {}) def test_dynamic(self): self.alias.compile() self.assertEqual(self.alias.encodable_properties, None) self.obj.foo = 'bar' self.obj.bar = 'foo' attrs = self.alias.getEncodableAttributes(self.obj) self.assertEqual(attrs, {'foo': 'bar', 'bar': 'foo'}) def test_synonym(self): self.alias.synonym_attrs = {'foo': 'bar'} self.alias.compile() self.assertFalse(self.alias.shortcut_encode) self.assertFalse(self.alias.shortcut_decode) self.obj.foo = 'bar' self.obj.spam = 'eggs' ret = self.alias.getEncodableAttributes(self.obj) self.assertEqual(ret, {'bar': 'bar', 'spam': 'eggs'})
class GetDecodableAttributesTestCase(unittest.TestCase): """ Tests for L{ClassAlias.getDecodableAttributes} """ def setUp(self): self.alias = ClassAlias(Spam, 'foo', defer=True) self.obj = Spam() def test_compile(self): self.assertFalse(self.alias._compiled) self.alias.applyAttributes(self.obj, {}) self.assertTrue(self.alias._compiled) def test_missing_static_property(self): self.alias.static_attrs = ['foo', 'bar'] self.alias.compile() attrs = {'foo': None} # missing bar key .. with self.assertRaises(AttributeError): self.alias.getDecodableAttributes(self.obj, attrs) def test_no_static(self): self.alias.compile() attrs = {'foo': None, 'bar': [1, 2, 3]} ret = self.alias.getDecodableAttributes(self.obj, attrs) self.assertEqual(ret, {'foo': None, 'bar': [1, 2, 3]}) def test_readonly(self): self.alias.compile() self.alias.readonly_attrs = ['bar'] attrs = {'foo': None, 'bar': [1, 2, 3]} ret = self.alias.getDecodableAttributes(self.obj, attrs) self.assertEqual(ret, {'foo': None}) def test_not_dynamic(self): self.alias.compile() self.alias.decodable_properties = set(['bar']) self.alias.dynamic = False attrs = {'foo': None, 'bar': [1, 2, 3]} ret = self.alias.getDecodableAttributes(self.obj, attrs) self.assertEqual(ret, {'bar': [1, 2, 3]}) def test_dynamic(self): self.alias.compile() self.alias.static_properties = ['bar'] self.alias.dynamic = True attrs = {'foo': None, 'bar': [1, 2, 3]} ret = self.alias.getDecodableAttributes(self.obj, attrs) self.assertEqual(ret, {'foo': None, 'bar': [1, 2, 3]}) def test_complex(self): self.alias.compile() self.alias.static_properties = ['foo', 'bar'] self.alias.exclude_attrs = ['baz', 'gak'] self.alias.readonly_attrs = ['spam', 'eggs'] attrs = { 'foo': 'foo', 'bar': 'bar', 'baz': 'baz', 'gak': 'gak', 'spam': 'spam', 'eggs': 'eggs', 'dyn1': 'dyn1', 'dyn2': 'dyn2' } ret = self.alias.getDecodableAttributes(self.obj, attrs) self.assertEqual(ret, { 'foo': 'foo', 'bar': 'bar', 'dyn2': 'dyn2', 'dyn1': 'dyn1' }) def test_complex_not_dynamic(self): self.alias.compile() self.alias.decodable_properties = ['foo', 'bar'] self.alias.exclude_attrs = ['baz', 'gak'] self.alias.readonly_attrs = ['spam', 'eggs'] self.alias.dynamic = False attrs = { 'foo': 'foo', 'bar': 'bar', 'baz': 'baz', 'gak': 'gak', 'spam': 'spam', 'eggs': 'eggs', 'dyn1': 'dyn1', 'dyn2': 'dyn2' } ret = self.alias.getDecodableAttributes(self.obj, attrs) self.assertEqual(ret, {'foo': 'foo', 'bar': 'bar'}) def test_static(self): self.alias.dynamic = False self.alias.compile() self.alias.decodable_properties = set(['foo', 'bar']) attrs = { 'foo': 'foo', 'bar': 'bar', 'baz': 'baz', 'gak': 'gak', } ret = self.alias.getDecodableAttributes(self.obj, attrs) self.assertEqual(ret, {'foo': 'foo', 'bar': 'bar'}) def test_synonym(self): self.alias.synonym_attrs = {'foo': 'bar'} self.alias.compile() self.assertFalse(self.alias.shortcut_encode) self.assertFalse(self.alias.shortcut_decode) attrs = {'bar': 'foo', 'spam': 'eggs'} ret = self.alias.getDecodableAttributes(self.obj, attrs) self.assertEqual(ret, {'foo': 'foo', 'spam': 'eggs'}) def test_complex_synonym(self): self.alias.synonym_attrs = {'foo_syn': 'bar_syn'} self.alias.compile() self.alias.static_properties = [ 'foo_syn', ] self.alias.exclude_attrs = ['baz', 'gak'] self.alias.readonly_attrs = ['spam_rd_1', 'spam_rd_2'] self.assertFalse(self.alias.shortcut_encode) self.assertFalse(self.alias.shortcut_decode) attrs = { 'bar_syn': 'foo', 'spam': 'eggs', 'spam_rd_1': 'eggs', 'spam_rd_2': 'eggs', 'baz': 'remove me', 'gak': 'remove me' } ret = self.alias.getDecodableAttributes(self.obj, attrs) self.assertEqual(ret, {'foo_syn': 'foo', 'spam': 'eggs'})