import unittest, sys, os cur_dir = os.path.dirname(os.path.abspath(sys.argv[0])) lib_dir = os.path.abspath(os.path.join(cur_dir, '..', 'scripts')) sys.path.append(lib_dir) import docutils_to_docbook import validate_docbook from xml.dom import minidom class TestDocutilsToXml(unittest.TestCase): def setUp(self): pass def isEqualXML(self, a, b): da, db= minidom.parseString(a), minidom.parseString(b) return self.isEqualElement(da.documentElement, db.documentElement) def isEqualElement(self, a, b): ignored_atts = ['source'] a_atts = a.attributes.items() b_atts = b.attributes.items() def delete_ignored(att_list): temp = [] for tup in att_list: if tup[0] not in ignored_atts: temp.append(tup) return temp a_atts = delete_ignored(a_atts) b_atts = delete_ignored(b_atts) if sorted(a_atts) != sorted(b_atts): return False if a.tagName!=b.tagName: return False if len(a.childNodes)!=len(b.childNodes): return False for ac, bc in zip(a.childNodes, b.childNodes): if ac.nodeType!=bc.nodeType: return False if ac.nodeType==ac.TEXT_NODE and ac.data.strip()!=bc.data.strip(): return False if ac.nodeType==ac.ELEMENT_NODE and not self.isEqualElement(ac, bc): return False return True def _get_file(self, name): in_file = os.path.join(os.path.dirname(sys.argv[0]), 'data', name) if not os.path.isfile(in_file): raise IOError('file "{0}"does not exist'.format(in_file)) return in_file def _file_to_string(self, in_file): if not os.path.isfile(in_file): raise IOError('file "{0}"does not exist'.format(in_file)) with open(in_file, 'r') as read_obj: lines = ''.join(read_obj.readlines()) return lines def _fix_line(self, line): return line def test_utf8(self): convert_obj = docutils_to_docbook.ToXml(in_file = None) in_file = self._get_file('utf8.rst') needed = """\n\nLATIN CAPITAL LETTER O WITH DIAERESIS: Ö""" return_string = convert_obj.rst_to_xml(in_file = in_file, in_encoding='utf8') same = self.isEqualXML(return_string, needed) self.assertTrue(same) def test_utf16(self): convert_obj = docutils_to_docbook.ToXml(in_file = None) in_file = self._get_file('utf16.rst') needed = """\n\nLATIN CAPITAL LETTER O WITH DIAERESIS: Ö""" return_string = convert_obj.rst_to_xml(in_file = in_file, in_encoding='utf16') same = self.isEqualXML(return_string, needed) self.assertTrue(same) def test_math_no_conversion(self): convert_obj = docutils_to_docbook.ToXml(in_file = None) in_file = self._get_file('math.rst') needed=""" Document tests math directive.quad quad x = (-b +- sqrt(b^2-4ac))/(2a)""" return_string = convert_obj.rst_to_xml(in_file = in_file, in_encoding='utf8') same = self.isEqualXML(return_string, needed) self.assertTrue(same) def test_math_conversion(self): convert_obj = docutils_to_docbook.ToXml(in_file = None) in_string = """ Document tests math directive.quad quad x = (-b +- sqrt(b^2-4ac))/(2a)""" needed = """\nDocument tests math directive.    x=-b±b2-4ac2a""" return_string = convert_obj.insert_math_elements(xml_string = in_string) same = self.isEqualXML(return_string, needed) self.assertTrue(same) def test_to_docbook_simple(self): in_file = os.path.join('data', 'simple_docbook_res.xml') convert_obj = docutils_to_docbook.ToXml(in_file = in_file ) raw_path = os.path.join('data', 'simple_raw.xml') result_file = convert_obj.to_docbook(raw_path = raw_path) return_string = self._file_to_string(result_file) needed = self._file_to_string(in_file) same = self.isEqualXML(return_string, needed) self.assertTrue(same) def test_validate_docbook(self): valid_obj = validate_docbook.ValidateDocbook() in_files = os.path.join('data', 'simple_docbook.xml') valid = valid_obj.is_valid(in_files = in_files) self.assertTrue(valid) def test_validate_invalid_docbook(self): valid_obj = validate_docbook.ValidateDocbook() in_files = os.path.join('data', 'invalid_docbook.xml') valid = valid_obj.is_valid(in_files = in_files) self.assertFalse(valid) if __name__ == '__main__': unittest.main()