Coverage for gws-app/gws/lib/xmlx/_test/parser_test.py: 100%
0 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-17 01:37 +0200
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-17 01:37 +0200
1# @TODO fix me
2# """Tests for the parser module"""
4# import gws
5# import gws.test.util as u
7# import gws.lib.xmlx as xmlx
9# xmlstr = '''
10# <Root
11# xmlns:gml="http://www.opengis.net/gml/3.0"
12# >
13# <a xmlns:foo="http://www.opengis.net/cat/csw">
14# <gml:a test="gml1"/>
15# <a Test="just"/>
16# <A TEST="CASESENSITIVE"/>
17# <foo:A TEST="gml2"/>
18# </a>
19# </Root>
21# '''
24# def test_from_path():
25# with open('/tmp/myfile.xml', 'w') as f:
26# f.write(xmlstr)
27# f.close()
28# test = xmlx.parser.from_path('/tmp/myfile.xml')
29# assert test.to_string(with_namespace_declarations=True) == '''<Root xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml/3.2">
30# <a>
31# <gml:a test="gml1"/>
32# <a Test="just"/>
33# <A TEST="CASESENSITIVE"/>
34# <csw:A TEST="gml2"/>
35# </a>
36# </Root>'''
39# def test_from_path_case():
40# with open('/tmp/myfile.xml', 'w') as f:
41# f.write(xmlstr)
42# f.close()
43# test = xmlx.parser.from_path('/tmp/myfile.xml', case_insensitive=True)
44# assert test.to_string() == '''<root>
45# <a>
46# <gml:a test="gml1"/>
47# <a test="just"/>
48# <a test="CASESENSITIVE"/>
49# <csw:a test="gml2"/>
50# </a>
51# </root>'''
54# def test_from_path_compact():
55# with open('/tmp/myfile.xml', 'w') as f:
56# f.write(xmlstr)
57# f.close()
58# test = xmlx.parser.from_path('/tmp/myfile.xml', compact_whitespace=True)
59# assert test.to_string() == '<Root><a><gml:a test="gml1"/><a Test="just"/><A TEST="CASESENSITIVE"/><csw:A TEST="gml2"/></a></Root>'
62# # no clue what it does
63# def test_from_path_normalize():
64# with open('/tmp/myfile.xml', 'w') as f:
65# f.write(xmlstr)
66# f.close()
67# test = xmlx.parser.from_path('/tmp/myfile.xml', normalize_namespaces=True)
68# assert test.to_string(with_namespace_declarations=True) == '''<Root xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml/3.2">
69# <a>
70# <gml:a test="gml1"/>
71# <a Test="just"/>
72# <A TEST="CASESENSITIVE"/>
73# <csw:A TEST="gml2"/>
74# </a>
75# </Root>'''
78# def test_from_path_remove():
79# with open('/tmp/myfile.xml', 'w') as f:
80# f.write(xmlstr)
81# f.close()
82# test = xmlx.parser.from_path('/tmp/myfile.xml', remove_namespaces=True)
83# assert test.to_string(with_namespace_declarations=True) == '''<Root>
84# <a>
85# <a test="gml1"/>
86# <a Test="just"/>
87# <A TEST="CASESENSITIVE"/>
88# <A TEST="gml2"/>
89# </a>
90# </Root>'''
93# def test_from_string():
94# test = xmlx.parser.from_string(xmlstr)
95# assert test.to_string(with_namespace_declarations=True) == '''<Root xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml/3.2">
96# <a>
97# <gml:a test="gml1"/>
98# <a Test="just"/>
99# <A TEST="CASESENSITIVE"/>
100# <csw:A TEST="gml2"/>
101# </a>
102# </Root>'''
105# def test_from_string_case():
106# test = xmlx.parser.from_string(xmlstr, case_insensitive=True)
107# assert test.to_string() == '''<root>
108# <a>
109# <gml:a test="gml1"/>
110# <a test="just"/>
111# <a test="CASESENSITIVE"/>
112# <csw:a test="gml2"/>
113# </a>
114# </root>'''
117# def test_from_string_compact():
118# test = xmlx.parser.from_string(xmlstr, compact_whitespace=True)
119# assert test.to_string() == '<Root><a><gml:a test="gml1"/><a Test="just"/><A TEST="CASESENSITIVE"/><csw:A TEST="gml2"/></a></Root>'
122# def test_from_string_remove():
123# test = xmlx.parser.from_string(xmlstr, remove_namespaces=True)
124# assert test.to_string() == '''<Root>
125# <a>
126# <a test="gml1"/>
127# <a Test="just"/>
128# <A TEST="CASESENSITIVE"/>
129# <A TEST="gml2"/>
130# </a>
131# </Root>'''
135# def test_from_string_normalize():
136# test = xmlx.parser.from_string(xmlstr, normalize_namespaces=True)
137# assert test.to_string(with_namespace_declarations=True) == '''<Root xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml/3.2">
138# <a>
139# <gml:a test="gml1"/>
140# <a Test="just"/>
141# <A TEST="CASESENSITIVE"/>
142# <csw:A TEST="gml2"/>
143# </a>
144# </Root>'''
147# # encoded in iso-8859-1 and declared utf-8 but declaration still shows utf-8
148# def test_from_string_decode_1():
149# xml_decode = '<?xml version="1.0" encoding="UTF-8"?>\n' + xmlstr
150# test = xmlx.parser.from_string(xml_decode)
151# assert test.to_string(with_xml_declaration=True, with_namespace_declarations=True) == ('''<?xml version="1.0" encoding="UTF-8"?><Root xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml/3.2">
152# <a>
153# <gml:a test="gml1"/>
154# <a Test="just"/>
155# <A TEST="CASESENSITIVE"/>
156# <csw:A TEST="gml2"/>
157# </a>
158# </Root>''')
161# # encoded in utf-8 and declared as iso-8859-1 encoding but shows utf-8 encoding
162# def test_from_string_decode_2():
163# xml_decode = '<?xml version="1.0" encoding="iso-8859-1"?>\n' + xmlstr
164# test = xmlx.parser.from_string(xml_decode)
165# assert test.to_string(with_xml_declaration=True, with_namespace_declarations=True) == ('''<?xml version="1.0" encoding="UTF-8"?><Root xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml/3.2">
166# <a>
167# <gml:a test="gml1"/>
168# <a Test="just"/>
169# <A TEST="CASESENSITIVE"/>
170# <csw:A TEST="gml2"/>
171# </a>
172# </Root>''')
175# def test_from_bytes():
176# test = xmlx.parser.from_string(xmlstr.encode('utf-8'))
177# assert test.to_string(with_namespace_declarations=True) == '''<Root xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml/3.2">
178# <a>
179# <gml:a test="gml1"/>
180# <a Test="just"/>
181# <A TEST="CASESENSITIVE"/>
182# <csw:A TEST="gml2"/>
183# </a>
184# </Root>'''
187# def test_from_bytes_case():
188# test = xmlx.parser.from_string(xmlstr.encode('utf-8'), case_insensitive=True)
189# assert test.to_string() == '''<root>
190# <a>
191# <gml:a test="gml1"/>
192# <a test="just"/>
193# <a test="CASESENSITIVE"/>
194# <csw:a test="gml2"/>
195# </a>
196# </root>'''
199# def test_from_bytes_compact():
200# test = xmlx.parser.from_string(xmlstr.encode('utf-8'), compact_whitespace=True)
201# assert test.to_string() == '<Root><a><gml:a test="gml1"/><a Test="just"/><A TEST="CASESENSITIVE"/><csw:A TEST="gml2"/></a></Root>'
204# def test_from_bytes_remove():
205# test = xmlx.parser.from_string(xmlstr.encode('utf-8'), remove_namespaces=True)
206# assert test.to_string() == '''<Root>
207# <a>
208# <a test="gml1"/>
209# <a Test="just"/>
210# <A TEST="CASESENSITIVE"/>
211# <A TEST="gml2"/>
212# </a>
213# </Root>'''
217# def test_from_bytes_normalize():
218# test = xmlx.parser.from_string(xmlstr.encode('utf-8'), normalize_namespaces=True)
219# assert test.to_string(with_namespace_declarations=True) == '''<Root xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml/3.2">
220# <a>
221# <gml:a test="gml1"/>
222# <a Test="just"/>
223# <A TEST="CASESENSITIVE"/>
224# <csw:A TEST="gml2"/>
225# </a>
226# </Root>'''
229# # encoded in iso-8859-1 and declared utf-8 but declaration still shows utf-8
230# def test_from_bytes_decode_1():
231# xml_decode = '<?xml version="1.0" encoding="UTF-8"?>\n' + xmlstr
232# test = xmlx.parser.from_string(xml_decode.encode('iso-8859-1'))
233# assert test.to_string(with_xml_declaration=True, with_namespace_declarations=True) == ('''<?xml version="1.0" encoding="UTF-8"?><Root xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml/3.2">
234# <a>
235# <gml:a test="gml1"/>
236# <a Test="just"/>
237# <A TEST="CASESENSITIVE"/>
238# <csw:A TEST="gml2"/>
239# </a>
240# </Root>''')
243# # encoded in utf-8 and declared as iso-8859-1 encoding but shows utf-8 encoding
244# def test_from_bytes_decode_2():
245# xml_decode = '<?xml version="1.0" encoding="iso-8859-1"?>\n' + xmlstr
246# test = xmlx.parser.from_string(xml_decode.encode('UTF-8'))
247# assert test.to_string(with_xml_declaration=True, with_namespace_declarations=True) == ('''<?xml version="1.0" encoding="UTF-8"?><Root xmlns:csw="http://www.opengis.net/cat/csw/2.0.2" xmlns:gml="http://www.opengis.net/gml/3.2">
248# <a>
249# <gml:a test="gml1"/>
250# <a Test="just"/>
251# <A TEST="CASESENSITIVE"/>
252# <csw:A TEST="gml2"/>
253# </a>
254# </Root>''')
257# def test_parser_convert_name():
258# p = xmlx.parser._ParserTarget(case_insensitive=False,
259# compact_whitespace=False,
260# normalize_namespaces=False,
261# remove_namespaces=False)
262# assert p.convert_name('foo') == 'foo'
263# p.remove_namespaces = True
264# assert p.convert_name('{http://www.opengis.net/cat/csw}foo') == 'foo'
265# assert p.convert_name('gml:foo') == 'foo'
266# p.remove_namespaces = False
267# p.normalize_namespaces = True
268# assert p.convert_name('{http://www.opengis.net/gml/999}foo') == '{http://www.opengis.net/gml}foo'
269# assert p.convert_name('gml:foo') == '{}foo'
270# p.normalize_namespaces = False
271# assert p.convert_name('{http://www.opengis.net/cat/csw}foo') == '{http://www.opengis.net/cat/csw}foo'
272# assert p.convert_name('gml:foo') == '{}foo'
275# def test_parser_make():
276# p = xmlx.parser._ParserTarget(case_insensitive=False,
277# compact_whitespace=False,
278# normalize_namespaces=False,
279# remove_namespaces=False)
280# t = 'tag'
281# a = {'attribute': 'foo'}
282# assert p.make(t, a).to_string() == '<tag attribute="foo"/>'
285# def test_parser_make_noattr():
286# p = xmlx.parser._ParserTarget(case_insensitive=False,
287# compact_whitespace=False,
288# normalize_namespaces=False,
289# remove_namespaces=False)
290# t = 'tag'
291# a = {}
292# assert p.make(t, a).to_string() == '<tag/>'
295# def test_parser_flush():
296# p = xmlx.parser._ParserTarget(case_insensitive=False,
297# compact_whitespace=False,
298# normalize_namespaces=False,
299# remove_namespaces=False)
300# p.buf = ['a']
301# p.stack = [xmlx.parser.from_string('<Root><a test="attr"/></Root>')]
302# p.flush()
303# assert p.buf == []
304# assert p.stack[-1].text == ''
307# def test_parser_start():
308# p = xmlx.parser._ParserTarget(case_insensitive=False,
309# compact_whitespace=False,
310# normalize_namespaces=False,
311# remove_namespaces=False)
312# p.start('root', {})
313# p.start('child', {'test': 'a'})
314# assert p.stack[0].to_string() == '<root><child test="a"/></root>'
315# assert p.stack[1].to_string() == '<child test="a"/>'
318# def test_parser_end():
319# p = xmlx.parser._ParserTarget(case_insensitive=False,
320# compact_whitespace=False,
321# normalize_namespaces=False,
322# remove_namespaces=False)
323# p.start('root', {})
324# p.start('child', {'test':'a'})
325# p.data('foo')
326# p.data(' bar')
327# p.end('child')
328# assert p.buf == []
329# assert len(p.stack) == 1
330# assert p.stack[0].to_string() == '<root><child test="a">foo bar</child></root>'
333# def test_parser_data():
334# p = xmlx.parser._ParserTarget(case_insensitive=False,
335# compact_whitespace=False,
336# normalize_namespaces=False,
337# remove_namespaces=False)
338# p.data('d1')
339# p.data('d2')
340# p.data('d3')
341# assert p.buf == ['d1', 'd2', 'd3']
344# def test_parser_close():
345# p = xmlx.parser._ParserTarget(case_insensitive=False,
346# compact_whitespace=False,
347# normalize_namespaces=False,
348# remove_namespaces=False)
349# p.root = 'test'
350# assert p.close() == 'test'