from fontTools.misc.testTools import parseXML
from fontTools.misc.xmlWriter import XMLWriter
from io import BytesIO
import struct
import unittest
from fontTools.ttLib import newTable


class Test_l_t_a_g(unittest.TestCase):
    DATA_ = (
        struct.pack(b">LLLHHHHHH", 1, 0, 3, 24 + 0, 2, 24 + 2, 7, 24 + 2, 2)
        + b"enzh-Hant"
    )
    TAGS_ = ["en", "zh-Hant", "zh"]

    def test_addTag(self):
        table = newTable("ltag")
        self.assertEqual(table.addTag("de-CH"), 0)
        self.assertEqual(table.addTag("gsw-LI"), 1)
        self.assertEqual(table.addTag("de-CH"), 0)
        self.assertEqual(table.tags, ["de-CH", "gsw-LI"])

    def test_decompile_compile(self):
        table = newTable("ltag")
        table.decompile(self.DATA_, ttFont=None)
        self.assertEqual(1, table.version)
        self.assertEqual(0, table.flags)
        self.assertEqual(self.TAGS_, table.tags)
        compiled = table.compile(ttFont=None)
        self.assertEqual(self.DATA_, compiled)
        self.assertIsInstance(compiled, bytes)

    def test_fromXML(self):
        table = newTable("ltag")
        for name, attrs, content in parseXML(
            '<version value="1"/>'
            '<flags value="777"/>'
            '<LanguageTag tag="sr-Latn"/>'
            '<LanguageTag tag="fa"/>'
        ):
            table.fromXML(name, attrs, content, ttFont=None)
        self.assertEqual(1, table.version)
        self.assertEqual(777, table.flags)
        self.assertEqual(["sr-Latn", "fa"], table.tags)

    def test_toXML(self):
        writer = XMLWriter(BytesIO())
        table = newTable("ltag")
        table.decompile(self.DATA_, ttFont=None)
        table.toXML(writer, ttFont=None)
        expected = (
            "\n".join(
                [
                    '<?xml version="1.0" encoding="UTF-8"?>',
                    '<version value="1"/>',
                    '<flags value="0"/>',
                    '<LanguageTag tag="en"/>',
                    '<LanguageTag tag="zh-Hant"/>',
                    '<LanguageTag tag="zh"/>',
                ]
            )
            + "\n"
        )
        self.assertEqual(expected.encode("utf_8"), writer.file.getvalue())


if __name__ == "__main__":
    import sys

    sys.exit(unittest.main())
