summaryrefslogtreecommitdiff
path: root/tests/type
diff options
context:
space:
mode:
authorIlya Etingof <etingof@gmail.com>2017-11-23 01:26:53 +0100
committerGitHub <noreply@github.com>2017-11-23 01:26:53 +0100
commit3d7f65f52b1a4b38f7ca561d460a78125dd31df1 (patch)
tree75dc1f31a5eb88702223cfa9ef0ca85f1cb493e6 /tests/type
parentfa6dda62e11698a2b0f6482c41e7d1d83d6c6404 (diff)
downloadpyasn1-git-3d7f65f52b1a4b38f7ca561d460a78125dd31df1.tar.gz
relax open type field type check on assignment (#105)
Diffstat (limited to 'tests/type')
-rw-r--r--tests/type/__main__.py1
-rw-r--r--tests/type/test_opentype.py111
-rw-r--r--tests/type/test_univ.py7
3 files changed, 118 insertions, 1 deletions
diff --git a/tests/type/__main__.py b/tests/type/__main__.py
index 984cb84..12ff7c3 100644
--- a/tests/type/__main__.py
+++ b/tests/type/__main__.py
@@ -12,6 +12,7 @@ except ImportError:
suite = unittest.TestLoader().loadTestsFromNames(
['tests.type.test_constraint.suite',
+ 'tests.type.test_opentype.suite',
'tests.type.test_namedtype.suite',
'tests.type.test_namedval.suite',
'tests.type.test_tag.suite',
diff --git a/tests/type/test_opentype.py b/tests/type/test_opentype.py
new file mode 100644
index 0000000..f6cbcb9
--- /dev/null
+++ b/tests/type/test_opentype.py
@@ -0,0 +1,111 @@
+#
+# This file is part of pyasn1 software.
+#
+# Copyright (c) 2005-2017, 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 constraint
+from pyasn1.type import namedtype
+from pyasn1.type import namedval
+from pyasn1.type import opentype
+from pyasn1.type import error
+from pyasn1.compat.octets import str2octs
+from pyasn1.compat.octets import ints2octs
+from pyasn1.compat.octets import octs2ints
+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)
diff --git a/tests/type/test_univ.py b/tests/type/test_univ.py
index 6819251..ea6c4d0 100644
--- a/tests/type/test_univ.py
+++ b/tests/type/test_univ.py
@@ -16,7 +16,12 @@ except ImportError:
from tests.base import BaseTestCase
-from pyasn1.type import univ, tag, constraint, namedtype, namedval, error
+from pyasn1.type import univ
+from pyasn1.type import tag
+from pyasn1.type import constraint
+from pyasn1.type import namedtype
+from pyasn1.type import namedval
+from pyasn1.type import error
from pyasn1.compat.octets import str2octs, ints2octs, octs2ints
from pyasn1.error import PyAsn1Error