#!/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()