예제 #1
0
class TestTrac_0060(unittest.TestCase):
    def setUp(self):
        self.__basis_log = logging.getLogger('pyxb.binding.basis')
        self.__basis_loglevel = self.__basis_log.level

    def tearDown(self):
        self.__basis_log.level = self.__basis_loglevel
        XSI.ProcessTypeAttribute(XSI.PT_strict)

    AString = 'hi'
    NotAnInteger = 'not an integer'
    AnInteger = 34
    BaseUntyped = '<base><child>%s</child></base>' % (NotAnInteger, )
    BaseString = '<base xsi:type="String" xmlns:xsi="%s"><child>%s</child></base>' % (
        XSI.uri(), NotAnInteger)
    BaseInteger = '<base xsi:type="Integer" xmlns:xsi="%s"><child>%d</child></base>' % (
        XSI.uri(), AnInteger)
    BaseForeign = '<base xsi:type="Foreign" xmlns:xsi="%s"><child>%s</child></base>' % (
        XSI.uri(), NotAnInteger)
    BaseUnknown = '<base xsi:type="Unknown" xmlns:xsi="%s"><child>%s</child></base>' % (
        XSI.uri(), NotAnInteger)
    CorrectString = '<string><child>%s</child></string>' % (AString, )
    CorrectInteger = '<integer><child>%d</child></integer>' % (AnInteger, )
    BadInteger = '<integer><child>%s</child></integer>' % (NotAnInteger, )
    ConflictString = '<integer xsi:type="String" xmlns:xsi="%s"><child>%s</child></integer>' % (
        XSI.uri(), NotAnInteger)
    ConflictStringInteger = '<integer xsi:type="String" xmlns:xsi="%s"><child>%d</child></integer>' % (
        XSI.uri(), AnInteger)
    UntypedIntegerElement = '<element><child>%d</child></element>' % (
        AnInteger, )
    TypedElement = '<element xsi:type="Integer" xmlns:xsi="%s"><child>%d</child></element>' % (
        XSI.uri(), AnInteger)
    # There is no type Float in the schema
    BogusTypedElement = '<element xsi:type="Float" xmlns:xsi="%s"><child>%d</child></element>' % (
        XSI.uri(), AnInteger)
    BogusTypedInteger = '<integer xsi:type="Float" xmlns:xsi="%s"><child>%d</child></integer>' % (
        XSI.uri(), AnInteger)

    def makeWC(self, body):
        return '<wildcard>%s</wildcard>' % (body, )

    def testWildcardString(self):
        xmls = '<wildcard>%s</wildcard>' % (self.CorrectString, )
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, String))
        self.assertEqual(self.AString, instance.child)

    def testWildcardInteger(self):
        xmls = '<wildcard>%s</wildcard>' % (self.CorrectInteger, )
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, Integer))
        self.assertTrue(isinstance(instance.child, long))
        self.assertEqual(self.AnInteger, instance.child)

    def testWildcardIntegerBad(self):
        xmls = '<wildcard>%s</wildcard>' % (self.BadInteger, )
        self.assertRaises(pyxb.SimpleTypeValueError, CreateFromDocument, xmls)

    def testWildcardUntyped(self):
        # Inhibit warning about conversion; we get a DOM node out of this.
        self.__basis_log.level = logging.ERROR
        xmls = '<wildcard>%s</wildcard>' % (self.UntypedIntegerElement, )
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertFalse(
            isinstance(instance, pyxb.binding.basis._TypeBinding_mixin))

    def testWildcardTyped(self):
        xmls = '<wildcard>%s</wildcard>' % (self.TypedElement, )
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, Integer))

    def testBase(self):
        xmls = self.makeWC(self.BaseString)
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, String))
        self.assertEqual(self.NotAnInteger, instance.child)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        wc = CreateFromDOM(dom)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, String))
        self.assertEqual(self.NotAnInteger, instance.child)

        xmls = '<wildcard>%s</wildcard>' % (self.BaseInteger, )
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, Integer))
        self.assertTrue(isinstance(instance.child, long))
        self.assertEqual(self.AnInteger, instance.child)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        wc = CreateFromDOM(dom)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, Integer))
        self.assertTrue(isinstance(instance.child, long))
        self.assertEqual(self.AnInteger, instance.child)

    def testStrict(self):
        self.assertEqual(XSI.ProcessTypeAttribute(), XSI.PT_strict)
        xmls = '<wildcard>%s</wildcard>' % (self.ConflictString, )
        self.assertRaises(pyxb.BadDocumentError, CreateFromDocument, xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.BadDocumentError, CreateFromDOM, dom)

        xmls = '<wildcard>%s</wildcard>' % (self.ConflictStringInteger, )
        self.assertRaises(pyxb.BadDocumentError, CreateFromDocument, xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.BadDocumentError, CreateFromDOM, dom)

        xmls = '<wildcard>%s</wildcard>' % (self.BogusTypedElement, )
        # This only raises with saxer, which treats the bogus xsi:type as
        # a content failure.  With saxdom and minidom, that error gets
        # lost by the code that thinks it's ok to pass a DOM node where
        # no binding could be created.  This should be reconciled.
        self.assertRaises(pyxb.BadDocumentError, CreateFromDocument, xmls)

        xmls = '<wildcard>%s</wildcard>' % (self.BogusTypedInteger, )
        self.assertRaises(pyxb.BadDocumentError, CreateFromDocument, xmls)

        xmls = self.makeWC(self.BaseUntyped)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDocument,
                          xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDOM, dom)

        xmls = self.makeWC(self.BaseForeign)
        self.assertRaises(pyxb.BadDocumentError, CreateFromDocument, xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.BadDocumentError, CreateFromDOM, dom)

        xmls = self.makeWC(self.BaseUnknown)
        self.assertRaises(pyxb.BadDocumentError, CreateFromDocument, xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.BadDocumentError, CreateFromDOM, dom)

    def testLax(self):
        # Lax won't convert DOM nodes
        self.__basis_log.level = logging.ERROR
        self.assertEqual(XSI.ProcessTypeAttribute(), XSI.PT_strict)
        XSI.ProcessTypeAttribute(XSI.PT_lax)
        xmls = '<wildcard>%s</wildcard>' % (self.ConflictString, )
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, String))
        self.assertEqual(self.NotAnInteger, instance.child)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        wc = CreateFromDOM(dom)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, String))
        self.assertEqual(self.NotAnInteger, instance.child)

        xmls = '<wildcard>%s</wildcard>' % (self.ConflictStringInteger, )
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, String))
        self.assertEqual('%d' % (self.AnInteger, ), instance.child)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        wc = CreateFromDOM(dom)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, String))
        self.assertEqual('%d' % (self.AnInteger, ), instance.child)

        xmls = '<wildcard>%s</wildcard>' % (self.BogusTypedElement, )
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertFalse(
            isinstance(instance, pyxb.binding.basis._TypeBinding_mixin))
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        wc = CreateFromDOM(dom)
        instance = wc.wildcardElements()[0]
        self.assertFalse(
            isinstance(instance, pyxb.binding.basis._TypeBinding_mixin))

        xmls = '<wildcard>%s</wildcard>' % (self.BogusTypedInteger, )
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, Integer))
        self.assertTrue(isinstance(instance.child, long))
        self.assertEqual(self.AnInteger, instance.child)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        wc = CreateFromDOM(dom)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, Integer))
        self.assertTrue(isinstance(instance.child, long))
        self.assertEqual(self.AnInteger, instance.child)

        xmls = self.makeWC(self.BaseUntyped)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDocument,
                          xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDOM, dom)

        xmls = self.makeWC(self.BaseForeign)
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, Foreign))
        self.assertEqual(self.NotAnInteger, instance.child)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        wc = CreateFromDOM(dom)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, Foreign))
        self.assertEqual(self.NotAnInteger, instance.child)

        xmls = self.makeWC(self.BaseUnknown)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDocument,
                          xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDOM, dom)

    def testSkip(self):
        # Skip won't convert DOM nodes
        self.__basis_log.level = logging.ERROR
        self.assertEqual(XSI.ProcessTypeAttribute(), XSI.PT_strict)
        XSI.ProcessTypeAttribute(XSI.PT_skip)

        # skip uses element name to force to integer, which content doesn't match
        xmls = '<wildcard>%s</wildcard>' % (self.ConflictString, )
        self.assertRaises(pyxb.SimpleTypeValueError, CreateFromDocument, xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.SimpleTypeValueError, CreateFromDOM, dom)

        xmls = '<wildcard>%s</wildcard>' % (self.ConflictStringInteger, )
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, Integer))
        self.assertEqual(self.AnInteger, instance.child)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        wc = CreateFromDOM(dom)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, Integer))
        self.assertEqual(self.AnInteger, instance.child)

        xmls = '<wildcard>%s</wildcard>' % (self.BogusTypedElement, )
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertFalse(
            isinstance(instance, pyxb.binding.basis._TypeBinding_mixin))
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        wc = CreateFromDOM(dom)
        instance = wc.wildcardElements()[0]
        self.assertFalse(
            isinstance(instance, pyxb.binding.basis._TypeBinding_mixin))

        xmls = '<wildcard>%s</wildcard>' % (self.BogusTypedInteger, )
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, Integer))
        self.assertTrue(isinstance(instance.child, long))
        self.assertEqual(self.AnInteger, instance.child)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        wc = CreateFromDOM(dom)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, Integer))
        self.assertTrue(isinstance(instance.child, long))
        self.assertEqual(self.AnInteger, instance.child)

        xmls = self.makeWC(self.BaseUntyped)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDocument,
                          xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDOM, dom)

        xmls = self.makeWC(self.BaseString)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDocument,
                          xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDOM, dom)

        xmls = self.makeWC(self.BaseInteger)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDocument,
                          xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDOM, dom)

        xmls = self.makeWC(self.BaseForeign)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDocument,
                          xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDOM, dom)

        xmls = self.makeWC(self.BaseUnknown)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDocument,
                          xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDOM, dom)
예제 #2
0
class TestTrac_0060(unittest.TestCase):
    def tearDown(self):
        XSI.ProcessTypeAttribute(XSI.PT_strict)

    AString = 'hi'
    NotAnInteger = 'not an integer'
    AnInteger = 34
    BaseUntyped = '<base><child>%s</child></base>' % (NotAnInteger, )
    BaseString = '<base xsi:type="String" xmlns:xsi="%s"><child>%s</child></base>' % (
        XSI.uri(), NotAnInteger)
    BaseInteger = '<base xsi:type="Integer" xmlns:xsi="%s"><child>%d</child></base>' % (
        XSI.uri(), AnInteger)
    BaseForeign = '<base xsi:type="Foreign" xmlns:xsi="%s"><child>%s</child></base>' % (
        XSI.uri(), NotAnInteger)
    BaseUnknown = '<base xsi:type="Unknown" xmlns:xsi="%s"><child>%s</child></base>' % (
        XSI.uri(), NotAnInteger)
    CorrectString = '<string><child>%s</child></string>' % (AString, )
    CorrectInteger = '<integer><child>%d</child></integer>' % (AnInteger, )
    BadInteger = '<integer><child>%s</child></integer>' % (NotAnInteger, )
    ConflictString = '<integer xsi:type="String" xmlns:xsi="%s"><child>%s</child></integer>' % (
        XSI.uri(), NotAnInteger)
    ConflictStringInteger = '<integer xsi:type="String" xmlns:xsi="%s"><child>%d</child></integer>' % (
        XSI.uri(), AnInteger)
    UntypedIntegerElement = '<element><child>%d</child></element>' % (
        AnInteger, )
    TypedElement = '<element xsi:type="Integer" xmlns:xsi="%s"><child>%d</child></element>' % (
        XSI.uri(), AnInteger)
    BogusTypedElement = '<element xsi:type="Float" xmlns:xsi="%s"><child>%d</child></element>' % (
        XSI.uri(), AnInteger)
    BogusTypedInteger = '<integer xsi:type="Float" xmlns:xsi="%s"><child>%d</child></integer>' % (
        XSI.uri(), AnInteger)

    def makeWC(self, body):
        return '<wildcard>%s</wildcard>' % (body, )

    def testWildcardString(self):
        xmls = '<wildcard>%s</wildcard>' % (self.CorrectString, )
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, String))
        self.assertEqual(self.AString, instance.child)

    def testWildcardInteger(self):
        xmls = '<wildcard>%s</wildcard>' % (self.CorrectInteger, )
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, Integer))
        self.assertTrue(isinstance(instance.child, long))
        self.assertEqual(self.AnInteger, instance.child)

    def testWildcardIntegerBad(self):
        xmls = '<wildcard>%s</wildcard>' % (self.BadInteger, )
        self.assertRaises(pyxb.BadTypeValueError, CreateFromDocument, xmls)

    def testWildcardUntyped(self):
        xmls = '<wildcard>%s</wildcard>' % (self.UntypedIntegerElement, )
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertFalse(
            isinstance(instance, pyxb.binding.basis._TypeBinding_mixin))

    def testWildcardTyped(self):
        xmls = '<wildcard>%s</wildcard>' % (self.TypedElement, )
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, Integer))

    def testBase(self):
        xmls = self.makeWC(self.BaseString)
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, String))
        self.assertEqual(self.NotAnInteger, instance.child)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        wc = CreateFromDOM(dom)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, String))
        self.assertEqual(self.NotAnInteger, instance.child)

        xmls = '<wildcard>%s</wildcard>' % (self.BaseInteger, )
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, Integer))
        self.assertTrue(isinstance(instance.child, long))
        self.assertEqual(self.AnInteger, instance.child)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        wc = CreateFromDOM(dom)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, Integer))
        self.assertTrue(isinstance(instance.child, long))
        self.assertEqual(self.AnInteger, instance.child)

    def testStrict(self):
        self.assertEqual(XSI.ProcessTypeAttribute(), XSI.PT_strict)
        xmls = '<wildcard>%s</wildcard>' % (self.ConflictString, )
        self.assertRaises(pyxb.BadDocumentError, CreateFromDocument, xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.BadDocumentError, CreateFromDOM, dom)

        xmls = '<wildcard>%s</wildcard>' % (self.ConflictStringInteger, )
        self.assertRaises(pyxb.BadDocumentError, CreateFromDocument, xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.BadDocumentError, CreateFromDOM, dom)

        xmls = '<wildcard>%s</wildcard>' % (self.BogusTypedElement, )
        self.assertRaises(pyxb.BadDocumentError, CreateFromDocument, xmls)

        xmls = '<wildcard>%s</wildcard>' % (self.BogusTypedInteger, )
        self.assertRaises(pyxb.BadDocumentError, CreateFromDocument, xmls)

        xmls = self.makeWC(self.BaseUntyped)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDocument,
                          xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDOM, dom)

        xmls = self.makeWC(self.BaseForeign)
        self.assertRaises(pyxb.BadDocumentError, CreateFromDocument, xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.BadDocumentError, CreateFromDOM, dom)

        xmls = self.makeWC(self.BaseUnknown)
        self.assertRaises(pyxb.BadDocumentError, CreateFromDocument, xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.BadDocumentError, CreateFromDOM, dom)

    def testLax(self):
        self.assertEqual(XSI.ProcessTypeAttribute(), XSI.PT_strict)
        XSI.ProcessTypeAttribute(XSI.PT_lax)
        xmls = '<wildcard>%s</wildcard>' % (self.ConflictString, )
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, String))
        self.assertEqual(self.NotAnInteger, instance.child)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        wc = CreateFromDOM(dom)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, String))
        self.assertEqual(self.NotAnInteger, instance.child)

        xmls = '<wildcard>%s</wildcard>' % (self.ConflictStringInteger, )
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, String))
        self.assertEqual('%d' % (self.AnInteger, ), instance.child)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        wc = CreateFromDOM(dom)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, String))
        self.assertEqual('%d' % (self.AnInteger, ), instance.child)

        xmls = '<wildcard>%s</wildcard>' % (self.BogusTypedElement, )
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertFalse(
            isinstance(instance, pyxb.binding.basis._TypeBinding_mixin))
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        wc = CreateFromDOM(dom)
        instance = wc.wildcardElements()[0]
        self.assertFalse(
            isinstance(instance, pyxb.binding.basis._TypeBinding_mixin))

        xmls = '<wildcard>%s</wildcard>' % (self.BogusTypedInteger, )
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, Integer))
        self.assertTrue(isinstance(instance.child, long))
        self.assertEqual(self.AnInteger, instance.child)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        wc = CreateFromDOM(dom)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, Integer))
        self.assertTrue(isinstance(instance.child, long))
        self.assertEqual(self.AnInteger, instance.child)

        xmls = self.makeWC(self.BaseUntyped)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDocument,
                          xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDOM, dom)

        xmls = self.makeWC(self.BaseForeign)
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, Foreign))
        self.assertEqual(self.NotAnInteger, instance.child)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        wc = CreateFromDOM(dom)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, Foreign))
        self.assertEqual(self.NotAnInteger, instance.child)

        xmls = self.makeWC(self.BaseUnknown)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDocument,
                          xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDOM, dom)

    def testSkip(self):
        self.assertEqual(XSI.ProcessTypeAttribute(), XSI.PT_strict)
        XSI.ProcessTypeAttribute(XSI.PT_skip)

        # skip uses element name to force to integer, which content doesn't match
        xmls = '<wildcard>%s</wildcard>' % (self.ConflictString, )
        self.assertRaises(pyxb.BadTypeValueError, CreateFromDocument, xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.BadTypeValueError, CreateFromDOM, dom)

        xmls = '<wildcard>%s</wildcard>' % (self.ConflictStringInteger, )
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, Integer))
        self.assertEqual(self.AnInteger, instance.child)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        wc = CreateFromDOM(dom)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, Integer))
        self.assertEqual(self.AnInteger, instance.child)

        xmls = '<wildcard>%s</wildcard>' % (self.BogusTypedElement, )
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertFalse(
            isinstance(instance, pyxb.binding.basis._TypeBinding_mixin))
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        wc = CreateFromDOM(dom)
        instance = wc.wildcardElements()[0]
        self.assertFalse(
            isinstance(instance, pyxb.binding.basis._TypeBinding_mixin))

        xmls = '<wildcard>%s</wildcard>' % (self.BogusTypedInteger, )
        wc = CreateFromDocument(xmls)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, Integer))
        self.assertTrue(isinstance(instance.child, long))
        self.assertEqual(self.AnInteger, instance.child)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        wc = CreateFromDOM(dom)
        instance = wc.wildcardElements()[0]
        self.assertTrue(isinstance(instance, Integer))
        self.assertTrue(isinstance(instance.child, long))
        self.assertEqual(self.AnInteger, instance.child)

        xmls = self.makeWC(self.BaseUntyped)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDocument,
                          xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDOM, dom)

        xmls = self.makeWC(self.BaseString)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDocument,
                          xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDOM, dom)

        xmls = self.makeWC(self.BaseInteger)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDocument,
                          xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDOM, dom)

        xmls = self.makeWC(self.BaseForeign)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDocument,
                          xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDOM, dom)

        xmls = self.makeWC(self.BaseUnknown)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDocument,
                          xmls)
        dom = pyxb.utils.domutils.StringToDOM(xmls)
        self.assertRaises(pyxb.AbstractInstantiationError, CreateFromDOM, dom)