'''Test module to thest the xmllib module.
   Sjoerd Mullender
'''

testdoc = """\
<?xml version="1.0" encoding="UTF-8" standalone='yes' ?>
<!-- comments aren't allowed before the <?xml?> tag,
     but they are allowed before the <!DOCTYPE> tag -->
<?processing instructions are allowed in the same places as comments ?>
<!DOCTYPE greeting [
  <!ELEMENT greeting (#PCDATA)>
]>
<greeting>Hello, world!</greeting>
"""

nsdoc = "<foo xmlns='URI' attr='val'/>"

from test import test_support
import unittest
# Silence Py3k warning
xmllib = test_support.import_module('xmllib', deprecated=True)

class XMLParserTestCase(unittest.TestCase):

    def test_simple(self):
        parser = xmllib.XMLParser()
        for c in testdoc:
            parser.feed(c)
        parser.close()

    def test_default_namespace(self):
        class H(xmllib.XMLParser):
            def unknown_starttag(self, name, attr):
                self.name, self.attr = name, attr
        h=H()
        h.feed(nsdoc)
        h.close()
        # The default namespace applies to elements...
        self.assertEqual(h.name, "URI foo")
        # but not to attributes
        self.assertEqual(h.attr, {'attr':'val'})


def test_main():
    test_support.run_unittest(XMLParserTestCase)

if __name__ == "__main__":
    test_main()
