X-Git-Url: http://www.git.cypherpunks.ru/?p=pyderasn.git;a=blobdiff_plain;f=tests%2Ftest_pyderasn.py;h=faa85699fd2d628058d3c9cf5d2ce83d8fbcc218;hp=15f54f90d43dd611b8239c5aa43e4490daf5554d;hb=d8f05bb5f06096c6e061c82d40aeb9f43bbb1a21;hpb=038b5d9eab3e5dc2a203f064f22caa854f5b68ae diff --git a/tests/test_pyderasn.py b/tests/test_pyderasn.py index 15f54f9..faa8569 100644 --- a/tests/test_pyderasn.py +++ b/tests/test_pyderasn.py @@ -64,6 +64,7 @@ from pyderasn import DecodeError from pyderasn import DecodePathDefBy from pyderasn import Enumerated from pyderasn import EOC +from pyderasn import EOC_LEN from pyderasn import GeneralizedTime from pyderasn import GeneralString from pyderasn import GraphicString @@ -607,6 +608,35 @@ class TestBoolean(CommonMixin, TestCase): self.assertTrue(bool(obj)) self.assertTrue(obj.bered) + @given( + integers(min_value=1).map(tag_ctxc), + lists( + booleans(), + min_size=1, + max_size=5, + ), + ) + def test_ber_expl(self, expl, values): + encoded = b"" + for value in values: + encoded += ( + expl + + b"\x80" + + Boolean(value).encode() + + EOC + ) + encoded = SequenceOf.tag_default + len_encode(len(encoded)) + encoded + + class SeqOf(SequenceOf): + schema = Boolean(expl=expl) + seqof, tail = SeqOf().decode(encoded, ctx={"bered": True}) + self.assertSequenceEqual(tail, b"") + self.assertSequenceEqual([bool(v) for v in seqof], values) + self.assertSetEqual( + set((v.tlvlen, v.expl_tlvlen, v.expl_tlen, v.expl_llen) for v in seqof), + set(((3 + EOC_LEN, len(expl) + 1 + 3 + EOC_LEN, len(expl), 1),)), + ) + @composite def integer_values_strategy(draw, do_expl=False):