# -*- 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__":
    import sys
    sys.exit(unittest.main())
