def test_serialize_versioned_none(self):
        obj = DummyADTObjectWithVersions()
        marshal = Marshal()

        with self.assertRaises(RuntimeError) as caught:
            xml = marshal.serialize(obj)

        self.assertEqual(
            str(caught.exception),
            'The XML item mock:elemverfst specifies but its parent class does not'
        )
    def test_serialize_versioned_ver3(self):
        obj = DummyADTObjectWithVersions()
        marshal = Marshal(object_schema_version='V3')
        xml = marshal.serialize(obj)

        self.maxDiff = None

        self.assertEqual(
            xml, '''<?xml version="1.0" encoding="UTF-8"?>
<mock:versioned xmlns:mock="https://github.com/jfilak/sapcli/mock" mock:attrverall="Init-attr-all">
<adtcore:packageRef/>
<mock:elemverall>Init-elem-all</mock:elemverall>
</mock:versioned>''')
    def test_deserialization(self):
        obj = Dummy()
        marshal = Marshal()
        xml_data = marshal.serialize(obj)

        clone = DummyWithSetters()
        ret = Marshal.deserialize(xml_data, clone)
        self.assertEqual(clone, ret)

        self.assertEqual(obj.first, clone.first)
        self.assertEqual(obj.second, clone.second)
        self.assertEqual('EEE', clone.third)
        self.assertEqual(obj.value.first, clone.value.first)
        self.assertEqual(obj.value.second, clone.value.second)
        self.assertEqual(obj.value.supernested.yetanother,
                         clone.value.supernested.yetanother)