source: branches/numpy/anuga/utilities/test_xml_tools.py @ 7092

Last change on this file since 7092 was 6360, checked in by rwilson, 15 years ago

Ongoing conversion changes.

File size: 8.6 KB
Line 
1#!/usr/bin/env python
2
3
4import unittest
5from tempfile import mkstemp, mktemp
6
7import os
8
9from xml_tools import *
10
11class Test_xml_tools(unittest.TestCase):
12
13    def setUp(self):
14        pass
15
16    def tearDown(self):
17        pass
18
19    def test_generate_xml(self):
20        """Test that xml code is generated from XMLobject model
21        """
22
23           
24        X1 = XML_element(tag='first element',
25                         value=XML_element(tag='some text',
26                                           value='hello world'))
27
28        text_elements = []
29        for i in range(10):
30            X = XML_element(tag='title %d' %i,
31                            value='example text %d' %i)
32            text_elements.append(X)
33
34       
35        X2 = XML_element(tag='second element',
36                         value=XML_element(tag='texts',
37                                           value=text_elements))
38        X3 = XML_element(tag='third element',
39                         value='42')       
40       
41           
42
43        doc = XML_element(value=[X1, X2, X3])
44
45        #print doc.pretty_print()       
46        #print doc
47
48        assert doc['second element']['texts']['title 4'] == 'example text 4'
49       
50        assert doc.has_key('first element')
51
52       
53
54    def test_xml2object(self):
55        """Test that XML_document can be generated from file
56        """
57
58        tmp_fd , tmp_name = mkstemp(suffix='.xml', dir='.')
59        fid = os.fdopen(tmp_fd, 'w')
60       
61        xml_string = """<?xml version="1.0" encoding="iso-8859-1"?>
62  <ga_license_file>
63    <metadata>
64      <author>Ole Nielsen</author>
65      <svn_keywords>
66        <author>$Author$</author> 
67        <date>$Date$</date>
68        <revision>$Revision$</revision>
69        <url>$URL:$</url>
70        <id>$Id$</id>
71      </svn_keywords>
72    </metadata>
73    <datafile>
74      <filename>bathymetry.asc</filename>
75      <checksum>%s</checksum>
76      <publishable>Yes</publishable>
77      <accountable>Jane Sexton</accountable>
78      <source>Unknown</source>
79      <IP_owner>Geoscience Australia</IP_owner>
80      <IP_info>This is a test</IP_info>
81    </datafile>
82  </ga_license_file>
83""" %('1234')
84
85        fid.write(xml_string)
86        fid.close()
87
88        fid = open(tmp_name)
89        reference = fid.read()
90        reflines = reference.split('\n')
91       
92        xmlobject = xml2object(fid, verbose=True)
93
94
95        #print xmlobject.pretty_print()
96       
97        xmllines = str(xmlobject).split('\n')
98
99        #for line in reflines:
100        #    print line
101        #print   
102        #for line in xmllines:
103        #    print line           
104
105           
106        assert len(reflines) == len(xmllines)
107
108        for i, refline in enumerate(reflines):
109            msg = '%s != %s' %(refline.strip(), xmllines[i].strip())
110            assert refline.strip() == xmllines[i].strip(), msg
111
112        # Check dictionary behaviour   
113        for tag in xmlobject['ga_license_file'].keys():
114            xmlobject['ga_license_file'][tag]
115
116        assert xmlobject['ga_license_file']['datafile']['accountable'] == 'Jane Sexton'
117
118        #print
119        #print xmlobject['ga_license_file']['datafile']
120        #print xmlobject['ga_license_file']['metadata']
121        #print xmlobject['ga_license_file']['datafile']
122        #print xmlobject['ga_license_file']['datafile']['accountable']       
123        #print xmlobject['ga_license_file']['datafile'].keys()
124
125        #for tag in xmlobject['ga_license_file'].keys():
126        #    print xmlobject['ga_license_file'][tag]
127               
128        # Clean up
129        fid.close()
130        os.remove(tmp_name)
131
132
133
134
135    def test_xml2object_empty_fields(self):
136        """Test that XML_document can be generated from file
137        This on tests that empty fields are treated as ''
138        """
139
140        tmp_fd , tmp_name = mkstemp(suffix='.xml', dir='.')
141        fid = os.fdopen(tmp_fd, 'w')
142       
143        xml_string = """<?xml version="1.0" encoding="iso-8859-1"?>
144  <ga_license_file>
145    <metadata>
146      <author>Ole Nielsen</author>
147      <svn_keywords>
148        <author>$Author$</author> 
149        <date>$Date$</date>
150        <revision>$Revision$</revision>
151        <url>$URL:$</url>
152        <id>$Id$</id>
153      </svn_keywords>
154    </metadata>
155    <datafile>
156      <filename>bathymetry.asc</filename>
157      <checksum>%s</checksum>
158      <publishable></publishable>
159      <accountable>Jane Sexton</accountable>
160      <source>Unknown</source>
161      <IP_owner>Geoscience Australia</IP_owner>
162      <IP_info>This is a test</IP_info>
163    </datafile>
164  </ga_license_file>
165""" %('1234')
166
167        fid.write(xml_string)
168        fid.close()
169
170        fid = open(tmp_name)
171        reference = fid.read()
172        reflines = reference.split('\n')
173       
174        xmlobject = xml2object(fid, verbose=True)
175
176
177        #print xmlobject.pretty_print()
178       
179        xmllines = str(xmlobject).split('\n')
180
181        #for line in reflines:
182        #    print line
183        #print   
184        #for line in xmllines:
185        #    print line           
186
187           
188        ##assert len(reflines) == len(xmllines)
189        x = xmlobject['ga_license_file']['datafile']['publishable']
190        msg = 'Got %s, should have been an empty string' %x
191        assert x == '', msg
192       
193
194        for i, refline in enumerate(reflines):
195            msg = '%s != %s' %(refline.strip(), xmllines[i].strip())
196            assert refline.strip() == xmllines[i].strip(), msg
197
198        # Check dictionary behaviour   
199        for tag in xmlobject['ga_license_file'].keys():
200            xmlobject['ga_license_file'][tag]
201
202        assert xmlobject['ga_license_file']['datafile']['accountable'] == 'Jane Sexton'
203
204
205       
206
207        #print
208        #print xmlobject['ga_license_file']['datafile']
209        #print xmlobject['ga_license_file']['metadata']
210        #print xmlobject['ga_license_file']['datafile']
211        #print xmlobject['ga_license_file']['datafile']['accountable']       
212        #print xmlobject['ga_license_file']['datafile'].keys()
213
214        #for tag in xmlobject['ga_license_file'].keys():
215        #    print xmlobject['ga_license_file'][tag]
216               
217        # Clean up
218        fid.close()
219        os.remove(tmp_name)
220
221
222       
223
224    def test_generate_and_read_back(self):
225        """Test that xml code generated from XMLobject model
226        can be read back.
227        """
228
229           
230        X1 = XML_element(tag='first_element',
231                         value=XML_element(tag='some_text',
232                                           value='hello world'))
233
234        text_elements = []
235        for i in range(10):
236            X = XML_element(tag='title_%d' %i,
237                            value='example text %d' %i)
238            text_elements.append(X)
239
240       
241        X2 = XML_element(tag='second_element',
242                         value=XML_element(tag='texts',
243                                           value=text_elements))
244        X3 = XML_element(tag='third_element',
245                         value='42')       
246       
247           
248        # Need to have one main element according to minidom
249        main = XML_element(tag='all', value=[X1, X2, X3])
250        xmldoc = XML_element(value=main)
251        #print xmldoc
252
253        tmp_fd , tmp_name = mkstemp(suffix='.xml', dir='.')
254        fid = os.fdopen(tmp_fd, 'w')
255
256        fid.write(str(xmldoc))
257        fid.close()
258
259        # Now read it back
260        xmlobject = xml2object(tmp_name, verbose=True)       
261        #print xmlobject
262
263        assert str(xmldoc) == str(xmlobject)
264
265        os.remove(tmp_name)
266
267
268    def test_duplicate_tags(self):
269        """Test handling of duplicate tags.
270        """
271
272        X1 = XML_element(tag='datafile',
273                         value=XML_element(tag='some_text',
274                                           value='hello world'))
275
276       
277        X2 = XML_element(tag='second_element',
278                         value=XML_element(tag='texts',
279                                           value='egg and spam'))
280        X3 = XML_element(tag='datafile',
281                         value='42')       
282
283
284        # Need to have one main element according to minidom
285        main = XML_element(tag='all', value=[X1, X2, X3])
286        xmldoc = XML_element(value=main)
287        #print xmldoc
288
289        tmp_fd , tmp_name = mkstemp(suffix='.xml', dir='.')
290        fid = os.fdopen(tmp_fd, 'w')
291
292        fid.write(str(xmldoc))
293        fid.close()
294
295        # Now read it back
296        xmlobject = xml2object(tmp_name, verbose=True)       
297        #print xmlobject
298
299        assert str(xmldoc) == str(xmlobject)
300
301        assert xmlobject['all'].has_key('datafile')
302
303       
304        assert len(xmlobject['all']['datafile']) == 2
305        #print xmlobject['all']['datafile']
306
307        os.remove(tmp_name)
308
309################################################################################
310
311if __name__ == "__main__":
312    suite = unittest.makeSuite(Test_xml_tools, 'test')
313    runner = unittest.TextTestRunner()
314    runner.run(suite)
315       
316
Note: See TracBrowser for help on using the repository browser.