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

1"""Tests for the serializer module""" 

2 

3import gws 

4import gws.test.util as u 

5 

6import gws.lib.xmlx as xmlx 

7 

8 

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']]]] 

17 

18 

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') 

22 

23 el = xmlx.tag( 

24 'aaa:a/bbb:b', 

25 { 

26 'a1': 'A1', 

27 'aaa:a2': 'A2', 

28 }, 

29 ['{http://bbb}sub'], 

30 ) 

31 

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 """) 

47 

48def test_to_string_with_unknown_namespace(): 

49 el = xmlx.tag( 

50 'aaa:a/bbb:b', 

51 ) 

52 

53 with u.raises(Exception): 

54 el.to_string() 

55 

56 

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') 

60 

61 el = xmlx.tag( 

62 'aaa:a/bbb:b', 

63 { 

64 'a1': 'A1', 

65 'aaa:a2': 'A2', 

66 }, 

67 ['bbb:sub'], 

68 ) 

69 

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 """) 

86