# vim: set fileencoding=utf-8
import unittest
from bemani.protocol.xml import XmlDecoder
class TestXmlDecoder(unittest.TestCase):
def test_detect_encoding(self) -> None:
xml = XmlDecoder(b'', 'ascii')
tree = xml.get_tree()
self.assertEqual(xml.encoding, 'utf-8')
self.assertEqual(tree, None)
xml = XmlDecoder(b'', 'ascii')
tree = xml.get_tree()
self.assertEqual(xml.encoding, 'utf-8')
self.assertEqual(tree, None)
def test_decode_void(self) -> None:
xml = XmlDecoder(b'', 'ascii')
tree = xml.get_tree()
self.assertEqual(tree.children, [])
self.assertEqual(tree.name, 'node')
self.assertEqual(tree.attributes, {})
self.assertEqual(tree.data_type, 'void')
self.assertEqual(tree.value, None)
xml = XmlDecoder(b'', 'ascii')
tree = xml.get_tree()
self.assertEqual(tree.children, [])
self.assertEqual(tree.name, 'node')
self.assertEqual(tree.attributes, {})
self.assertEqual(tree.data_type, 'void')
self.assertEqual(tree.value, None)
def test_decode_attributes(self) -> None:
xml = XmlDecoder(b'', 'ascii')
tree = xml.get_tree()
self.assertEqual(tree.children, [])
self.assertEqual(tree.name, 'node')
self.assertEqual(tree.attributes, {'attr1': 'foo', 'attr2': 'bar'})
self.assertEqual(tree.data_type, 'void')
self.assertEqual(tree.value, None)
xml = XmlDecoder(b'', 'ascii')
tree = xml.get_tree()
self.assertEqual(tree.children, [])
self.assertEqual(tree.name, 'node')
self.assertEqual(tree.attributes, {'attr1': 'foo', 'attr2': 'bar'})
self.assertEqual(tree.data_type, 'void')
self.assertEqual(tree.value, None)
xml = XmlDecoder(b'', 'ascii')
tree = xml.get_tree()
self.assertEqual(tree.children, [])
self.assertEqual(tree.name, 'node')
self.assertEqual(tree.attributes, {'attr1': 'foo', 'attr2': 'bar'})
self.assertEqual(tree.data_type, 'void')
self.assertEqual(tree.value, None)
def test_decode_bin(self) -> None:
xml = XmlDecoder(b'DEADBEEF', 'ascii')
tree = xml.get_tree()
self.assertEqual(tree.children, [])
self.assertEqual(tree.name, 'node')
self.assertEqual(tree.attributes, {})
self.assertEqual(tree.data_type, 'bin')
self.assertEqual(tree.value, b'\xDE\xAD\xBE\xEF')
xml = XmlDecoder(b'\nDEADBEEF\n', 'ascii')
tree = xml.get_tree()
self.assertEqual(tree.children, [])
self.assertEqual(tree.name, 'node')
self.assertEqual(tree.attributes, {})
self.assertEqual(tree.data_type, 'bin')
self.assertEqual(tree.value, b'\xDE\xAD\xBE\xEF')
xml = XmlDecoder(b' D E A D B E E F ', 'ascii')
tree = xml.get_tree()
self.assertEqual(tree.children, [])
self.assertEqual(tree.name, 'node')
self.assertEqual(tree.attributes, {})
self.assertEqual(tree.data_type, 'bin')
self.assertEqual(tree.value, b'\xDE\xAD\xBE\xEF')
def test_decode_array(self) -> None:
xml = XmlDecoder(b'1 2 3 4', 'ascii')
tree = xml.get_tree()
self.assertEqual(tree.children, [])
self.assertEqual(tree.name, 'node')
self.assertEqual(tree.attributes, {})
self.assertEqual(tree.data_type, 'u32')
self.assertEqual(tree.value, [1, 2, 3, 4])
xml = XmlDecoder(b'\n1\n2\n3\n4\n', 'ascii')
tree = xml.get_tree()
self.assertEqual(tree.children, [])
self.assertEqual(tree.name, 'node')
self.assertEqual(tree.attributes, {})
self.assertEqual(tree.data_type, 'u32')
self.assertEqual(tree.value, [1, 2, 3, 4])