lin
2025-08-01 633231e833e21d5b8b1c00cb15aedb62b3b78e8f
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#
# 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)