diff options
author | Ilya Etingof <etingof@gmail.com> | 2017-09-18 09:48:29 +0200 |
---|---|---|
committer | Ilya Etingof <etingof@gmail.com> | 2017-09-19 20:37:38 +0200 |
commit | fc87382dd490810c6a4ba2cf803703b7f557dee2 (patch) | |
tree | 7691b2060fc8e411343d5d2e698f9ac390261783 /tests | |
parent | d6c09ffbb51518669c0889ff1081888aebfcb16e (diff) | |
download | pyasn1-fc87382dd490810c6a4ba2cf803703b7f557dee2.tar.gz |
Set/Sequence & SetOf/SequenceOf subscription to raise Key/IndexError (#73)
Diffstat (limited to 'tests')
-rw-r--r-- | tests/type/test_univ.py | 114 |
1 files changed, 112 insertions, 2 deletions
diff --git a/tests/type/test_univ.py b/tests/type/test_univ.py index 23f269e..f5124df 100644 --- a/tests/type/test_univ.py +++ b/tests/type/test_univ.py @@ -896,6 +896,37 @@ class SequenceOf(BaseTestCase): assert self.s1.clone().setComponents('abc', 'def') == \ self.s1.setComponentByPosition(0, 'abc').setComponentByPosition(1, 'def') + def testGetItem(self): + s = self.s1.clone() + s.append('xxx') + assert s[0] + + try: + s[2] + + except IndexError: + pass + + else: + assert False, 'IndexError not raised' + + # this is a deviation from standart sequence protocol + assert not s[1] + + def testSetItem(self): + s = self.s1.clone() + s.append('xxx') + + try: + + s[2] = 'xxx' + + except IndexError: + pass + + else: + assert False, 'IndexError not raised' + def testAppend(self): self.s1.clear() self.s1.setComponentByPosition(0, univ.OctetString('abc')) @@ -1071,6 +1102,54 @@ class Sequence(BaseTestCase): assert s[0] == univ.OctetString('') assert s[2] == univ.Integer(34) + def testGetItem(self): + s = self.s1.clone() + s['name'] = 'xxx' + assert s['name'] + assert s[0] + + try: + s['xxx'] + + except KeyError: + pass + + else: + assert False, 'KeyError not raised' + + try: + s[100] + + except IndexError: + pass + + else: + assert False, 'IndexError not raised' + + def testSetItem(self): + s = self.s1.clone() + s['name'] = 'xxx' + + try: + + s['xxx'] = 'xxx' + + except KeyError: + pass + + else: + assert False, 'KeyError not raised' + + try: + + s[100] = 'xxx' + + except IndexError: + pass + + else: + assert False, 'IndexError not raised' + def testIter(self): assert list(self.s1) == ['name', 'nick', 'age'] @@ -1118,6 +1197,37 @@ class Sequence(BaseTestCase): class SequenceWithoutSchema(BaseTestCase): + def testGetItem(self): + s = univ.Sequence() + s.setComponentByPosition(0, univ.OctetString('abc')) + s[0] = 'abc' + assert s['field-0'] + assert s[0] + + try: + s['field-1'] + + except KeyError: + pass + + else: + assert False, 'KeyError not raised' + + def testSetItem(self): + s = univ.Sequence() + s.setComponentByPosition(0, univ.OctetString('abc')) + s['field-0'] = 'xxx' + + try: + + s['field-1'] = 'xxx' + + except KeyError: + pass + + else: + assert False, 'KeyError not raised' + def testIter(self): s = univ.Sequence() s.setComponentByPosition(0, univ.OctetString('abc')) @@ -1157,7 +1267,7 @@ class SequenceWithoutSchema(BaseTestCase): assert list(s.values()) == [str2octs('def'), str2octs('ghi')] try: s['field-2'] = univ.OctetString('xxx') - except error.PyAsn1Error: + except KeyError: pass else: assert False, 'unknown field at schema-less object tolerated' @@ -1390,4 +1500,4 @@ class Choice(BaseTestCase): suite = unittest.TestLoader().loadTestsFromModule(sys.modules[__name__]) if __name__ == '__main__': - unittest.TextTestRunner(verbosity=2).run(suite)
\ No newline at end of file + unittest.TextTestRunner(verbosity=2).run(suite) |