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
|
from xsdata.codegen.container import ClassContainer
from xsdata.codegen.handlers import SanitizeEnumerationClass
from xsdata.models.config import GeneratorConfig
from xsdata.models.enums import DataType, Tag
from xsdata.utils.testing import (
AttrFactory,
AttrTypeFactory,
ClassFactory,
FactoryTestCase,
)
class SanitizeEnumerationClassTests(FactoryTestCase):
def setUp(self):
super().setUp()
self.root_enum = ClassFactory.enumeration(2)
self.inner_enum = ClassFactory.enumeration(2)
self.target = ClassFactory.create(
attrs=[
AttrFactory.create(
name="value",
tag=Tag.UNION,
types=[
AttrTypeFactory.create(qname=self.root_enum.qname),
AttrTypeFactory.create(
qname=self.inner_enum.qname, forward=True
),
],
),
]
)
self.target.inner.append(self.inner_enum)
self.container = ClassContainer(config=GeneratorConfig())
self.container.add(self.target)
self.container.add(self.root_enum)
self.processor = SanitizeEnumerationClass(container=self.container)
def test_filter(self):
target = ClassFactory.elements(2)
self.processor.process(target)
self.assertEqual(2, len(target.attrs))
target.attrs.append(AttrFactory.enumeration())
self.processor.process(target)
self.assertEqual(1, len(target.attrs))
self.assertTrue(target.attrs[0].is_enumeration)
def test_flatten_skip_if_class_has_more_than_one_attribute(self):
self.target.attrs.append(AttrFactory.create())
self.processor.process(self.target)
self.assertFalse(self.target.is_enumeration)
self.assertEqual(2, len(self.target.attrs))
def test_flatten_skip_when_attribute_tag_is_not_union(self):
self.target.attrs[0].tag = Tag.ELEMENT
self.processor.process(self.target)
self.assertFalse(self.target.is_enumeration)
def test_flatten_skip_when_types_is_not_enumeration_union(self):
self.target.attrs[0].types.append(AttrTypeFactory.native(DataType.INT))
self.processor.process(self.target)
self.assertFalse(self.target.is_enumeration)
def test_flatten_merges_enumeration_unions(self):
self.processor.process(self.target)
self.assertTrue(self.target.is_enumeration)
expected = self.root_enum.attrs + self.inner_enum.attrs
self.assertEqual(expected, self.target.attrs)
self.assertEqual(0, len(self.target.inner))
|