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()