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())
