| # |
| # This file is part of pyasn1 software. |
| # |
| # Copyright (c) 2005-2018, Ilya Etingof <etingof@gmail.com> |
| # License: http://snmplabs.com/pyasn1/license.html |
| # |
| import sys |
| |
| try: |
| import unittest2 as unittest |
| |
| except ImportError: |
| import unittest |
| |
| from tests.base import BaseTestCase |
| |
| from pyasn1.type import univ |
| from pyasn1.type import tag |
| from pyasn1.type import namedtype |
| from pyasn1.type import opentype |
| from pyasn1.compat.octets import str2octs |
| from pyasn1.error import PyAsn1Error |
| |
| |
| class UntaggedAnyTestCase(BaseTestCase): |
| |
| def setUp(self): |
| BaseTestCase.setUp(self) |
| |
| class Sequence(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('id', univ.Integer()), |
| namedtype.NamedType('blob', univ.Any()) |
| ) |
| |
| self.s = Sequence() |
| |
| def testTypeCheckOnAssignment(self): |
| |
| self.s.clear() |
| |
| self.s['blob'] = univ.Any(str2octs('xxx')) |
| |
| # this should succeed because Any is untagged and unconstrained |
| self.s['blob'] = univ.Integer(123) |
| |
| |
| class TaggedAnyTestCase(BaseTestCase): |
| |
| def setUp(self): |
| BaseTestCase.setUp(self) |
| |
| self.taggedAny = univ.Any().subtype(implicitTag=tag.Tag(tag.tagClassPrivate, tag.tagFormatSimple, 20)) |
| |
| class Sequence(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('id', univ.Integer()), |
| namedtype.NamedType('blob', self.taggedAny) |
| ) |
| |
| self.s = Sequence() |
| |
| def testTypeCheckOnAssignment(self): |
| |
| self.s.clear() |
| |
| self.s['blob'] = self.taggedAny.clone('xxx') |
| |
| try: |
| self.s.setComponentByName('blob', univ.Integer(123)) |
| |
| except PyAsn1Error: |
| pass |
| |
| else: |
| assert False, 'non-open type assignment tolerated' |
| |
| |
| class TaggedAnyOpenTypeTestCase(BaseTestCase): |
| |
| def setUp(self): |
| BaseTestCase.setUp(self) |
| |
| self.taggedAny = univ.Any().subtype(implicitTag=tag.Tag(tag.tagClassPrivate, tag.tagFormatSimple, 20)) |
| |
| class Sequence(univ.Sequence): |
| componentType = namedtype.NamedTypes( |
| namedtype.NamedType('id', univ.Integer()), |
| namedtype.NamedType('blob', self.taggedAny, openType=opentype.OpenType(name='id')) |
| ) |
| |
| self.s = Sequence() |
| |
| def testTypeCheckOnAssignment(self): |
| |
| self.s.clear() |
| |
| self.s['blob'] = univ.Any(str2octs('xxx')) |
| self.s['blob'] = univ.Integer(123) |
| |
| |
| suite = unittest.TestLoader().loadTestsFromModule(sys.modules[__name__]) |
| |
| |
| if __name__ == '__main__': |
| unittest.TextTestRunner(verbosity=2).run(suite) |