summaryrefslogtreecommitdiff
path: root/tests/drivers/test-ctd-extension.py
blob: 590f8bb49858a9316bd6a1ff9d15909d0b6880ea (plain)
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
import pyxb.binding.generate
import pyxb.utils.domutils
from xml.dom import Node

import os.path
schema_path = '%s/../schemas/test-ctd-extension.xsd' % (os.path.dirname(__file__),)
code = pyxb.binding.generate.GeneratePython(schema_location=schema_path)
rv = compile(code, 'test', 'exec')
eval(rv)

from pyxb.exceptions_ import *

import unittest

class TestCTDExtension (unittest.TestCase):

    def testStructure (self):
        # Extension should be a subclass of parent
        self.assert_(issubclass(extendedName, personName))
        # References in subclass to parent class elements/attributes
        # should be the same, unless content model requires they be
        # different.
        self.assertEqual(extendedName.title, personName.title)

    def testPersonName (self):
        xml = '''<oldAddressee pAttr="old">
   <forename>Albert</forename>
   <forename>Arnold</forename>
   <surname>Gore</surname>
  </oldAddressee>'''
        doc = pyxb.utils.domutils.StringToDOM(xml)
        instance = oldAddressee.createFromDOM(doc.documentElement)
        self.assertEqual(2, len(instance.forename))
        # Note double dereference required because xs:anyType was used
        # as the element type
        self.assertEqual('Albert', instance.forename[0].content()[0])
        self.assertEqual('Arnold', instance.forename[1].content()[0])
        self.assertEqual('Gore', instance.surname.content()[0])
        self.assertEqual('old', instance.pAttr)

    def testExtendedName (self):
        xml = '''<addressee pAttr="new" eAttr="add generation">
   <forename>Albert</forename>
   <forename>Arnold</forename>
   <surname>Gore</surname>
   <generation>Jr</generation>
  </addressee>'''
        doc = pyxb.utils.domutils.StringToDOM(xml)
        instance = addressee.createFromDOM(doc.documentElement)
        self.assertEqual(2, len(instance.forename))
        self.assertEqual('Albert', instance.forename[0].content()[0])
        self.assertEqual('Arnold', instance.forename[1].content()[0])
        self.assertEqual('Gore', instance.surname.content()[0])
        self.assertEqual('Jr', instance.generation.content()[0])
        self.assertEqual('new', instance.pAttr)
        self.assertEqual('add generation', instance.eAttr)

    def testMidWildcard (self):
        xml = '<defs xmlns:other="other"><documentation/><other:something/><message/><message/><import/><message/></defs>'
        doc = pyxb.utils.domutils.StringToDOM(xml)
        instance = defs.createFromDOM(doc.documentElement)
        self.assertFalse(instance.documentation is None)
        self.assertEqual(3, len(instance.message))
        self.assertEqual(1, len(instance.import_))
        self.assertEqual(1, len(instance.wildcardElements()))

        xml = '<defs xmlns:other="other"><other:something/><other:else/><message/><message/><import/><message/></defs>'
        doc = pyxb.utils.domutils.StringToDOM(xml)
        instance = defs.createFromDOM(doc.documentElement)
        self.assertTrue(instance.documentation is None)
        self.assertEqual(3, len(instance.message))
        self.assertEqual(1, len(instance.import_))
        self.assertEqual(2, len(instance.wildcardElements()))

    def testEndWildcard (self):
        xml = '<defs xmlns:other="other"><message/><other:something/></defs>'
        doc = pyxb.utils.domutils.StringToDOM(xml)
        self.assertRaises(ExtraContentError, defs.createFromDOM, doc.documentElement)

if __name__ == '__main__':
    unittest.main()