blob: bf0d34ca52bef9c739d69f92b1776fe1823554c2 [file] [log] [blame]
# -*- coding: utf-8 -*-
#
# Copyright (c) The PyAMF Project.
# See LICENSE.txt for details.
"""
Tests for XML library integration
@since: 0.4
"""
import unittest
import pyamf.xml
from pyamf import util
class ElementTreeTestCase(unittest.TestCase):
"""
Tests the type mappings.
"""
xml = '<foo bar="baz" />'
def check_amf0(self, bytes, xml):
b = util.BufferedByteStream(bytes)
self.assertEqual(b.read_char(), 15)
l = b.read_ulong()
self.assertEqual(l, b.remaining())
self.assertEqual(b.read(), xml)
def check_amf3(self, bytes, xml):
b = util.BufferedByteStream(bytes)
self.assertEqual(b.read_char(), 11)
l = b.read_uchar()
self.assertEqual(l >> 1, b.remaining())
self.assertEqual(b.read(), xml)
for mod in pyamf.xml.ETREE_MODULES:
name = 'test_' + mod.replace('.', '_')
def check_etree(self):
# holy hack batman
import inspect
mod = inspect.stack()[1][0].f_locals['testMethod'].__name__[5:]
mod = mod.replace('_', '.')
try:
etree = util.get_module(mod)
except ImportError:
self.skipTest('%r is not available' % (mod,))
element = etree.fromstring(self.xml)
xml = etree.tostring(element)
old = pyamf.set_default_etree(etree)
if old:
self.addCleanup(lambda x: pyamf.set_default_etree(x), old)
bytes = pyamf.encode(element, encoding=pyamf.AMF0).getvalue()
self.check_amf0(bytes, xml)
new_element = pyamf.decode(bytes, encoding=pyamf.AMF0).next()
self.assertIdentical(type(element), type(new_element))
bytes = pyamf.encode(element, encoding=pyamf.AMF3).getvalue()
self.check_amf3(bytes, xml)
new_element = pyamf.decode(bytes, encoding=pyamf.AMF3).next()
self.assertIdentical(type(element), type(new_element))
check_etree.__name__ = name
setattr(ElementTreeTestCase, name, check_etree)