source: anuga_core/source/anuga/utilities/test_xml_tools.py @ 5053

Last change on this file since 5053 was 5022, checked in by ole, 17 years ago

Added cairns license stub and fixed problem with empty xml tags.

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