# -*- coding: utf-8 -*-
from __future__ import print_function, division, absolute_import
from __future__ import unicode_literals
from fontTools.misc.py23 import *
import fontTools.misc.testTools as testTools
import unittest


class TestToolsTest(unittest.TestCase):

    def test_parseXML_str(self):
        self.assertEqual(testTools.parseXML(
            '<Foo n="1"/>'
            '<Foo n="2">'
            '    some ünıcòðe text'
            '    <Bar color="red"/>'
            '    some more text'
            '</Foo>'
            '<Foo n="3"/>'), [
                ("Foo", {"n": "1"}, []),
                ("Foo", {"n": "2"}, [
                    "    some ünıcòðe text    ",
                    ("Bar", {"color": "red"}, []),
                    "    some more text",
                ]),
                ("Foo", {"n": "3"}, [])
            ])

    def test_parseXML_bytes(self):
        self.assertEqual(testTools.parseXML(
            b'<Foo n="1"/>'
            b'<Foo n="2">'
            b'    some \xc3\xbcn\xc4\xb1c\xc3\xb2\xc3\xb0e text'
            b'    <Bar color="red"/>'
            b'    some more text'
            b'</Foo>'
            b'<Foo n="3"/>'), [
                ("Foo", {"n": "1"}, []),
                ("Foo", {"n": "2"}, [
                    "    some ünıcòðe text    ",
                    ("Bar", {"color": "red"}, []),
                    "    some more text",
                ]),
                ("Foo", {"n": "3"}, [])
            ])

    def test_parseXML_str_list(self):
        self.assertEqual(testTools.parseXML(
            ['<Foo n="1"/>'
             '<Foo n="2"/>']), [
                ("Foo", {"n": "1"}, []),
                ("Foo", {"n": "2"}, [])
            ])

    def test_parseXML_bytes_list(self):
        self.assertEqual(testTools.parseXML(
            [b'<Foo n="1"/>'
             b'<Foo n="2"/>']), [
                ("Foo", {"n": "1"}, []),
                ("Foo", {"n": "2"}, [])
            ])

    def test_getXML(self):
        def toXML(writer, ttFont):
            writer.simpletag("simple")
            writer.newline()
            writer.begintag("tag", attr='value')
            writer.newline()
            writer.write("hello world")
            writer.newline()
            writer.endtag("tag")
            writer.newline()  # toXML always ends with a newline

        self.assertEqual(testTools.getXML(toXML),
                         ['<simple/>',
                          '<tag attr="value">',
                          '  hello world',
                          '</tag>'])


if __name__ == "__main__":
    unittest.main()
