Coverage for gws-app/gws/lib/xmlx/_test/serializer_test.py: 100%
24 statements
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-16 23:09 +0200
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-16 23:09 +0200
1"""Tests for the serializer module"""
3import gws
4import gws.test.util as u
6import gws.lib.xmlx as xmlx
9def test_to_list():
10 el = xmlx.tag(
11 'a/b/c',
12 {'attr1': 'a'},
13 ['sub', 'subtext'],
14 attr3='3',
15 )
16 assert el.to_list() == ['a', ['b', ['c', {'attr1': 'a', 'attr3': '3'}, ['sub', 'subtext']]]]
19def test_to_string_with_namespaces():
20 aaa_ns = xmlx.namespace.from_args(uid='aaa', xmlns='aaa', uri='http://aaa')
21 bbb_ns = xmlx.namespace.from_args(uid='bbb', xmlns='bbb', uri='http://bbb')
23 el = xmlx.tag(
24 'aaa:a/bbb:b',
25 {
26 'a1': 'A1',
27 'aaa:a2': 'A2',
28 },
29 ['{http://bbb}sub'],
30 )
32 opts = gws.XmlOptions(
33 namespaces={
34 'aaa': aaa_ns,
35 'bbb': bbb_ns,
36 },
37 withNamespaceDeclarations=True,
38 )
39 xml = el.to_string(opts)
40 assert u.fxml(xml) == u.fxml("""
41 <aaa:a xmlns:aaa="http://aaa" xmlns:bbb="http://bbb">
42 <bbb:b a1="A1" aaa:a2="A2">
43 <bbb:sub/>
44 </bbb:b>
45 </aaa:a>
46 """)
48def test_to_string_with_unknown_namespace():
49 el = xmlx.tag(
50 'aaa:a/bbb:b',
51 )
53 with u.raises(Exception):
54 el.to_string()
57def test_to_string_with_default_namespace():
58 aaa_ns = xmlx.namespace.from_args(uid='aaa', uri='http://aaa')
59 bbb_ns = xmlx.namespace.from_args(uid='bbb', uri='http://bbb')
61 el = xmlx.tag(
62 'aaa:a/bbb:b',
63 {
64 'a1': 'A1',
65 'aaa:a2': 'A2',
66 },
67 ['bbb:sub'],
68 )
70 opts = gws.XmlOptions(
71 namespaces={
72 'aaa': aaa_ns,
73 'bbb': bbb_ns,
74 },
75 defaultNamespace=aaa_ns,
76 withNamespaceDeclarations=True,
77 )
78 xml = el.to_string(opts)
79 assert u.fxml(xml) == u.fxml("""
80 <a xmlns="http://aaa" xmlns:bbb="http://bbb">
81 <bbb:b a1="A1" a2="A2">
82 <bbb:sub/>
83 </bbb:b>
84 </a>
85 """)