#!/usr/bin/env python
# -*- coding: utf-8 -*-
import unittest
import lxml.doctestcompare
import lxml.etree
import os
import doctest

class TestConversion(unittest.TestCase):
    """Class to test docbook to divvun-corpus format conversion
    """
    def setUp(self):
        """Fetch the stylesheet that is used to do the conversion
        """
        xsl = lxml.etree.parse(os.getenv('GTHOME') + '/gt/script/corpus/docbook2corpus2.xsl')
        self.style = lxml.etree.XSLT(xsl)
        
    def applyStyle(self, docbook):
        """Apply the stylesheet to the given docbook
        Return a stringified version of this docbook snippet
        """
        xml = lxml.etree.parse(docbook)
        result = self.style.apply(xml)
        return self.style.tostring(result)

    def assertXmlEqual(self, got, want):
        """Check if two stringified xml snippets are equal
        """
        checker = lxml.doctestcompare.LXMLOutputChecker()
        if not checker.check_output(want, got, 0):
            message = checker.output_difference(doctest.Example("", want), got, 0).encode('utf-8')
            raise AssertionError(message)
        
    def testPara(self):
        got = self.applyStyle("para_db.xml")
        want = lxml.etree.tostring(lxml.etree.parse("para.xml"))
        
        self.assertXmlEqual(got, want)

    def testTitle(self):
        got = self.applyStyle("title_db.xml")
        want = lxml.etree.tostring(lxml.etree.parse("title.xml"))
        
        self.assertXmlEqual(got, want)

    def testParaEmphasis(self):
        got = self.applyStyle("para-emphasis_db.xml")
        want = lxml.etree.tostring(lxml.etree.parse("para-emphasis.xml"))
        
        self.assertXmlEqual(got, want)

    def testParaEmphasisFootnote(self):
        got = self.applyStyle("para-emphasis-footnote_db.xml")
        want = lxml.etree.tostring(lxml.etree.parse("para-emphasis-footnote.xml"))
        
        self.assertXmlEqual(got, want)

    def testParaEmphasisFootnote(self):
        got = self.applyStyle("para-emphasis-footnote_db2.xml")
        want = lxml.etree.tostring(lxml.etree.parse("para-emphasis-footnote2.xml"))
        
        self.assertXmlEqual(got, want)

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