File: test_unnest_inner_classes.py

package info (click to toggle)
python-xsdata 24.1-2
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 2,936 kB
  • sloc: python: 29,257; xml: 404; makefile: 27; sh: 6
file content (116 lines) | stat: -rw-r--r-- 3,959 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
from xsdata.codegen.container import ClassContainer
from xsdata.codegen.handlers import UnnestInnerClasses
from xsdata.models.config import GeneratorConfig
from xsdata.utils.testing import (
    AttrFactory,
    AttrTypeFactory,
    ClassFactory,
    FactoryTestCase,
)


class UnnestInnerClassesTests(FactoryTestCase):
    def setUp(self):
        super().setUp()
        self.container = ClassContainer(config=GeneratorConfig())
        self.processor = UnnestInnerClasses(container=self.container)

    def test_process(self):
        self.container.config.output.unnest_classes = False

        enumeration = ClassFactory.enumeration(2)
        local_type = ClassFactory.elements(2)
        target = ClassFactory.create()

        target.inner.append(enumeration)
        target.inner.append(local_type)
        self.container.add(target)

        self.processor.process(target)

        self.assertEqual(1, len(target.inner))
        self.assertTrue(local_type in target.inner)

        self.container.config.output.unnest_classes = True
        self.processor.process(target)
        self.assertEqual(0, len(target.inner))

    def test_promote_with_orphan_inner(self):
        inner = ClassFactory.elements(2)
        target = ClassFactory.create()
        target.inner.append(inner)
        self.container.add(target)

        self.processor.promote(target, inner)

        self.assertEqual(0, len(target.inner))
        self.assertEqual(1, len(self.container.data))

    def test_promote_updates_forward_attr_types(self):
        inner = ClassFactory.elements(2)
        attr = AttrFactory.reference(inner.qname, forward=True)
        target = ClassFactory.create()
        target.attrs.append(attr)
        target.inner.append(inner)
        self.container.add(target)

        self.processor.promote(target, inner)

        self.assertEqual(0, len(target.inner))
        self.assertEqual(2, len(self.container.data))
        self.assertFalse(attr.types[0].forward)
        self.assertEqual("{xsdata}class_C_class_B", attr.types[0].qname)

    def test_clone_attr(self):
        target = ClassFactory.create(qname="{a}b")
        actual = self.processor.clone_class(target, "parent")

        self.assertIsNot(target, actual)
        self.assertTrue(actual.local_type)
        self.assertEqual("{a}parent_b", actual.qname)

    def test_update_types(self):
        attr = AttrFactory.create(
            types=[
                AttrTypeFactory.create(qname="a", forward=True),
                AttrTypeFactory.create(qname="a", forward=False),
                AttrTypeFactory.create(qname="b", forward=False),
            ]
        )

        self.processor.update_types(attr, "a", "c")

        self.assertEqual("c", attr.types[0].qname)
        self.assertFalse(attr.types[0].forward)
        self.assertEqual("a", attr.types[1].qname)
        self.assertFalse(attr.types[1].forward)
        self.assertEqual("b", attr.types[2].qname)
        self.assertFalse(attr.types[2].forward)

    def test_find_forward_attr(self):
        target = ClassFactory.create(
            attrs=[
                AttrFactory.create(
                    types=[
                        AttrTypeFactory.create("a", forward=False),
                        AttrTypeFactory.create("b", forward=False),
                    ]
                ),
                AttrFactory.create(
                    types=[
                        AttrTypeFactory.create("a", forward=True),
                        AttrTypeFactory.create("b", forward=True),
                    ]
                ),
                AttrFactory.create(),
            ]
        )

        actual = self.processor.find_forward_attr(target, "a")
        self.assertEqual(target.attrs[1], actual)

        actual = self.processor.find_forward_attr(target, "b")
        self.assertEqual(target.attrs[1], actual)

        actual = self.processor.find_forward_attr(target, "c")
        self.assertIsNone(actual)