#
|
# 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 namedtype
|
from pyasn1.type import univ
|
from pyasn1.error import PyAsn1Error
|
|
|
class NamedTypeCaseBase(BaseTestCase):
|
def setUp(self):
|
BaseTestCase.setUp(self)
|
self.e = namedtype.NamedType('age', univ.Integer(0))
|
|
def testIter(self):
|
n, t = self.e
|
assert n == 'age' or t == univ.Integer(), 'unpack fails'
|
|
def testRepr(self):
|
assert 'age' in repr(self.e)
|
|
|
class NamedTypesCaseBase(BaseTestCase):
|
def setUp(self):
|
BaseTestCase.setUp(self)
|
|
self.e = namedtype.NamedTypes(
|
namedtype.NamedType('first-name', univ.OctetString('')),
|
namedtype.OptionalNamedType('age', univ.Integer(0)),
|
namedtype.NamedType('family-name', univ.OctetString(''))
|
)
|
|
def testRepr(self):
|
assert 'first-name' in repr(self.e)
|
|
def testContains(self):
|
assert 'first-name' in self.e
|
assert '<missing>' not in self.e
|
|
# noinspection PyUnusedLocal
|
def testGetItem(self):
|
assert self.e[0] == namedtype.NamedType('first-name', univ.OctetString(''))
|
|
def testIter(self):
|
assert list(self.e) == ['first-name', 'age', 'family-name']
|
|
def testGetTypeByPosition(self):
|
assert self.e.getTypeByPosition(0) == univ.OctetString(''), \
|
'getTypeByPosition() fails'
|
|
def testGetNameByPosition(self):
|
assert self.e.getNameByPosition(0) == 'first-name', \
|
'getNameByPosition() fails'
|
|
def testGetPositionByName(self):
|
assert self.e.getPositionByName('first-name') == 0, \
|
'getPositionByName() fails'
|
|
def testGetTypesNearPosition(self):
|
assert self.e.getTagMapNearPosition(0).presentTypes == {
|
univ.OctetString.tagSet: univ.OctetString('')
|
}
|
assert self.e.getTagMapNearPosition(1).presentTypes == {
|
univ.Integer.tagSet: univ.Integer(0),
|
univ.OctetString.tagSet: univ.OctetString('')
|
}
|
assert self.e.getTagMapNearPosition(2).presentTypes == {
|
univ.OctetString.tagSet: univ.OctetString('')
|
}
|
|
def testGetTagMap(self):
|
assert self.e.tagMap.presentTypes == {
|
univ.OctetString.tagSet: univ.OctetString(''),
|
univ.Integer.tagSet: univ.Integer(0)
|
}
|
|
def testStrTagMap(self):
|
assert 'TagMap' in str(self.e.tagMap)
|
assert 'OctetString' in str(self.e.tagMap)
|
assert 'Integer' in str(self.e.tagMap)
|
|
def testReprTagMap(self):
|
assert 'TagMap' in repr(self.e.tagMap)
|
assert 'OctetString' in repr(self.e.tagMap)
|
assert 'Integer' in repr(self.e.tagMap)
|
|
def testGetTagMapWithDups(self):
|
try:
|
self.e.tagMapUnique[0]
|
except PyAsn1Error:
|
pass
|
else:
|
assert 0, 'Duped types not noticed'
|
|
def testGetPositionNearType(self):
|
assert self.e.getPositionNearType(univ.OctetString.tagSet, 0) == 0
|
assert self.e.getPositionNearType(univ.Integer.tagSet, 1) == 1
|
assert self.e.getPositionNearType(univ.OctetString.tagSet, 2) == 2
|
|
|
class OrderedNamedTypesCaseBase(BaseTestCase):
|
def setUp(self):
|
BaseTestCase.setUp(self)
|
|
self.e = namedtype.NamedTypes(
|
namedtype.NamedType('first-name', univ.OctetString('')),
|
namedtype.NamedType('age', univ.Integer(0))
|
)
|
|
def testGetTypeByPosition(self):
|
assert self.e.getTypeByPosition(0) == univ.OctetString(''), \
|
'getTypeByPosition() fails'
|
|
|
class DuplicateNamedTypesCaseBase(BaseTestCase):
|
def testDuplicateDefaultTags(self):
|
nt = namedtype.NamedTypes(
|
namedtype.NamedType('first-name', univ.Any()),
|
namedtype.NamedType('age', univ.Any())
|
)
|
|
assert isinstance(nt.tagMap, namedtype.NamedTypes.PostponedError)
|
|
|
suite = unittest.TestLoader().loadTestsFromModule(sys.modules[__name__])
|
|
if __name__ == '__main__':
|
unittest.TextTestRunner(verbosity=2).run(suite)
|