#!/usr/bin/env python import unittest from tempfile import mkstemp, mktemp import os from xml_tools import * class Test_xml_tools(unittest.TestCase): def setUp(self): pass def tearDown(self): pass def test_generate_xml(self): """Test that xml code is generated from XMLobject model """ X1 = XML_element(tag='first element', value=XML_element(tag='some text', value='hello world')) text_elements = [] for i in range(10): X = XML_element(tag='title %d' %i, value='example text %d' %i) text_elements.append(X) X2 = XML_element(tag='second element', value=XML_element(tag='texts', value=text_elements)) X3 = XML_element(tag='third element', value='42') doc = XML_element(value=[X1, X2, X3]) #print doc.pretty_print() #print doc assert doc['second element']['texts']['title 4'] == 'example text 4' assert doc.has_key('first element') def test_xml2object(self): """Test that XML_document can be generated from file """ tmp_fd , tmp_name = mkstemp(suffix='.xml', dir='.') fid = os.fdopen(tmp_fd, 'w') xml_string = """ Ole Nielsen $Author$ $Date$ $Revision$ $URL:$ $Id$ bathymetry.asc %s Yes Jane Sexton Unknown Geoscience Australia This is a test """ %('1234') fid.write(xml_string) fid.close() fid = open(tmp_name) reference = fid.read() reflines = reference.split('\n') xmlobject = xml2object(fid, verbose=True) #print xmlobject.pretty_print() xmllines = str(xmlobject).split('\n') #for line in reflines: # print line #print #for line in xmllines: # print line assert len(reflines) == len(xmllines) for i, refline in enumerate(reflines): msg = '%s != %s' %(refline.strip(), xmllines[i].strip()) assert refline.strip() == xmllines[i].strip(), msg # Check dictionary behaviour for tag in xmlobject['ga_license_file'].keys(): xmlobject['ga_license_file'][tag] assert xmlobject['ga_license_file']['datafile']['accountable'] == 'Jane Sexton' #print #print xmlobject['ga_license_file']['datafile'] #print xmlobject['ga_license_file']['metadata'] #print xmlobject['ga_license_file']['datafile'] #print xmlobject['ga_license_file']['datafile']['accountable'] #print xmlobject['ga_license_file']['datafile'].keys() #for tag in xmlobject['ga_license_file'].keys(): # print xmlobject['ga_license_file'][tag] # Clean up fid.close() os.remove(tmp_name) def test_xml2object_empty_fields(self): """Test that XML_document can be generated from file This on tests that empty fields are treated as '' """ tmp_fd , tmp_name = mkstemp(suffix='.xml', dir='.') fid = os.fdopen(tmp_fd, 'w') xml_string = """ Ole Nielsen $Author$ $Date$ $Revision$ $URL:$ $Id$ bathymetry.asc %s Jane Sexton Unknown Geoscience Australia This is a test """ %('1234') fid.write(xml_string) fid.close() fid = open(tmp_name) reference = fid.read() reflines = reference.split('\n') xmlobject = xml2object(fid, verbose=True) #print xmlobject.pretty_print() xmllines = str(xmlobject).split('\n') #for line in reflines: # print line #print #for line in xmllines: # print line ##assert len(reflines) == len(xmllines) x = xmlobject['ga_license_file']['datafile']['publishable'] msg = 'Got %s, should have been an empty string' %x assert x == '', msg for i, refline in enumerate(reflines): msg = '%s != %s' %(refline.strip(), xmllines[i].strip()) assert refline.strip() == xmllines[i].strip(), msg # Check dictionary behaviour for tag in xmlobject['ga_license_file'].keys(): xmlobject['ga_license_file'][tag] assert xmlobject['ga_license_file']['datafile']['accountable'] == 'Jane Sexton' #print #print xmlobject['ga_license_file']['datafile'] #print xmlobject['ga_license_file']['metadata'] #print xmlobject['ga_license_file']['datafile'] #print xmlobject['ga_license_file']['datafile']['accountable'] #print xmlobject['ga_license_file']['datafile'].keys() #for tag in xmlobject['ga_license_file'].keys(): # print xmlobject['ga_license_file'][tag] # Clean up fid.close() os.remove(tmp_name) def test_generate_and_read_back(self): """Test that xml code generated from XMLobject model can be read back. """ X1 = XML_element(tag='first_element', value=XML_element(tag='some_text', value='hello world')) text_elements = [] for i in range(10): X = XML_element(tag='title_%d' %i, value='example text %d' %i) text_elements.append(X) X2 = XML_element(tag='second_element', value=XML_element(tag='texts', value=text_elements)) X3 = XML_element(tag='third_element', value='42') # Need to have one main element according to minidom main = XML_element(tag='all', value=[X1, X2, X3]) xmldoc = XML_element(value=main) #print xmldoc tmp_fd , tmp_name = mkstemp(suffix='.xml', dir='.') fid = os.fdopen(tmp_fd, 'w') fid.write(str(xmldoc)) fid.close() # Now read it back xmlobject = xml2object(tmp_name, verbose=True) #print xmlobject assert str(xmldoc) == str(xmlobject) os.remove(tmp_name) def test_duplicate_tags(self): """Test handling of duplicate tags. """ X1 = XML_element(tag='datafile', value=XML_element(tag='some_text', value='hello world')) X2 = XML_element(tag='second_element', value=XML_element(tag='texts', value='egg and spam')) X3 = XML_element(tag='datafile', value='42') # Need to have one main element according to minidom main = XML_element(tag='all', value=[X1, X2, X3]) xmldoc = XML_element(value=main) #print xmldoc tmp_fd , tmp_name = mkstemp(suffix='.xml', dir='.') fid = os.fdopen(tmp_fd, 'w') fid.write(str(xmldoc)) fid.close() # Now read it back xmlobject = xml2object(tmp_name, verbose=True) #print xmlobject assert str(xmldoc) == str(xmlobject) assert xmlobject['all'].has_key('datafile') assert len(xmlobject['all']['datafile']) == 2 #print xmlobject['all']['datafile'] os.remove(tmp_name) ################################################################################ if __name__ == "__main__": suite = unittest.makeSuite(Test_xml_tools, 'test') runner = unittest.TextTestRunner() runner.run(suite)