コード例 #1
0
 def test_writing_overflow(self):
     with self.assertRaises(OverflowError):
         self.assertFieldToStreamEqual(None, 1000,
                                       IntegerField(1, 'little'))
     with self.assertRaises(OverflowError):
         self.assertFieldToStreamEqual(None, -1000,
                                       IntegerField(1, 'little'))
コード例 #2
0
 def test_override_on_inner_field(self):
     self.assertEqual(
         3,
         ConstantField(0xf1, base_field=IntegerField(length=1,
                                                     override=3)).override)
     self.assertEqual(
         3,
         ConstantField(0xf1, base_field=IntegerField(length=1),
                       override=3).override)
コード例 #3
0
 def test_basic(self):
     self.assertFieldStreamEqual(b'\x01\0', 256, IntegerField(2, 'big'))
     self.assertFieldStreamEqual(b'\x01\0', 1, IntegerField(2, 'little'))
     self.assertFieldStreamEqual(b'\xff\xfe', -257,
                                 IntegerField(2, 'little', signed=True))
     self.assertFieldStreamEqual(b'\xff\xfe', 65534,
                                 IntegerField(2, 'big', signed=False))
     self.assertFieldStreamEqual(b'\xfe\xff', -257,
                                 IntegerField(2, 'big', signed=True))
コード例 #4
0
 def test_based_on_other_field(self):
     self.assertFieldStreamEqual(
         b"\xf1", 0xf1,
         ConstantField(0xf1, base_field=IntegerField(length=1)))
     with self.assertRaises(WrongMagicError):
         self.call_field_from_stream(
             ConstantField(0xf1, base_field=IntegerField(length=1)),
             b"\xf2")
     with self.assertRaises(WriteError):
         self.call_field_to_stream(
             ConstantField(0xf1, base_field=IntegerField(length=1)), 12)
コード例 #5
0
 def test_encode_on_inner_field(self):
     self.assertFieldStreamEqual(
         b'\x24', 0x12,
         ConstantField(0x12,
                       base_field=IntegerField(length=1,
                                               encoder=lambda x: x + 0x12,
                                               decoder=lambda x: x - 0x12)))
コード例 #6
0
 def test_conditional_field_encoder(self):
     self.assertFieldStreamEqual(
         b'\x11', 0x01,
         ConditionalField(IntegerField(1,
                                       encoder=lambda x: x + 0x10,
                                       decoder=lambda x: x - 0x10),
                          condition=True))
コード例 #7
0
 def test_incorrect_length(self):
     with self.assertRaises(StreamExhaustedError):
         self.call_field_from_stream(ArrayField(IntegerField(1),
                                                length=2,
                                                name='field'),
                                     b"\x01",
                                     field_values={'field': None})
     with self.assertRaises(WriteError):
         self.call_field_to_stream(ArrayField(IntegerField(1),
                                              length=2,
                                              name='field'), [2],
                                   field_values={'field': None})
     with self.assertRaises(WriteError):
         self.call_field_to_stream(ArrayField(IntegerField(1),
                                              length=2,
                                              name='field'), [2, 3, 4],
                                   field_values={'field': None})
コード例 #8
0
 def test_until(self):
     self.assertFieldFromStreamEqual(b"\x01\x01\x02\x01", [1, 1, 2],
                                     ArrayField(IntegerField(1),
                                                until=lambda c, v: v == 2,
                                                name='field'),
                                     parsed_fields={'field': None})
     with self.assertRaises(StreamExhaustedError):
         self.assertFieldFromStreamEqual(b"\x01\x01\x02\x01", [1, 1, 2],
                                         ArrayField(
                                             IntegerField(1),
                                             until=lambda c, v: False,
                                             name='field'),
                                         parsed_fields={'field': None})
     self.assertFieldFromStreamEqual(b"\x01\x01\x02\x01", [1, 1, 2],
                                     ArrayField(IntegerField(1),
                                                count=3,
                                                until=lambda c, v: False,
                                                name='field'),
                                     parsed_fields={'field': None})
コード例 #9
0
 def test_length(self):
     self.assertFieldStreamEqual(b"\x02\x01\x00\x01", [513, 1],
                                 ArrayField(IntegerField(2, 'big'),
                                            length=4,
                                            name='field'),
                                 parsed_fields={'field': None})
     self.assertFieldStreamEqual(b"\x02\x01\x00\x01", [b"\x02\x01\x00\x01"],
                                 ArrayField(FixedLengthField(-1),
                                            length=4,
                                            name='field'),
                                 parsed_fields={'field': None})
     self.assertFieldStreamEqual(b"\x02\x01\x00\x01",
                                 [b"\x02\x01", b"\x00\x01"],
                                 ArrayField(FixedLengthField(2),
                                            length=4,
                                            name='field'),
                                 parsed_fields={'field': None})
     self.assertFieldStreamEqual(b"\x02\x01\x00\x01",
                                 [b"\x02\x01", b"\x00\x01"],
                                 ArrayField(FixedLengthField(2),
                                            length=-1,
                                            name='field'),
                                 parsed_fields={'field': None})
コード例 #10
0
 def test_basic_switch(self):
     self.assertFieldStreamEqual(
         b"\x01", 1,
         SwitchField(cases={
             1: IntegerField(1),
             2: IntegerField(2, 'little')
         },
                     switch=1))
     self.assertFieldStreamEqual(
         b"\x01\x01", 0x0101,
         SwitchField(cases={
             1: IntegerField(1),
             2: IntegerField(2, 'little')
         },
                     switch=2))
     self.assertFieldStreamEqual(b"\x01",
                                 1,
                                 SwitchField(cases={
                                     1: IntegerField(1),
                                     2: IntegerField(2, 'little')
                                 },
                                             switch='c'),
                                 parsed_fields={'c': 1})
コード例 #11
0
        class Struct3(Structure):
            num = IntegerField(2)

            class Meta:
                byte_order = 'big'
コード例 #12
0
 class ConditionalStructure(Structure):
     condition = ByteField()
     value = ConditionalField(ConstantField(1, IntegerField(1)),
                              condition='condition')
コード例 #13
0
        class Struct2(Structure):
            num = IntegerField(2)

            class Meta:
                byte_order = 'little'
コード例 #14
0
        class Struct(Structure):
            x = ArrayField(IntegerField(2), count=2)

            class Meta:
                byte_order = 'big'
コード例 #15
0
 class Struct(Structure):
     len = IntegerField(length=1,
                        byte_order='little',
                        override=lambda c, v: v)
     str1 = BytesField(length='len')
コード例 #16
0
 class TestStruct(Structure):
     length = IntegerField(1, signed=False)
     numbers = ArrayField(IntegerField(length=1), count='length')
コード例 #17
0
 class Struct(Structure):
     len = IntegerField(length=1, byte_order='little')
     str1 = BytesField(length='len')
コード例 #18
0
 def test_count(self):
     self.assertFieldStreamEqual(b"\x02\x01\x00\x01", [513, 1],
                                 ArrayField(IntegerField(2, 'big'),
                                            count=2,
                                            name='field'),
                                 parsed_fields={'field': None})
コード例 #19
0
 class ConditionalStructure(Structure):
     condition = ByteField()
     value = ConditionalField(IntegerField(2, 'big'),
                              condition='condition')
コード例 #20
0
 class TestStructure(Structure):
     field1 = IntegerField(length=1,
                           decoder=lambda x: x + 10,
                           lazy=True)
コード例 #21
0
 class SubStructure(Structure):
     length = IntegerField(1, signed=False)
     numbers = ArrayField(FixedLengthField(length=lambda s: s.length),
                          count='length')
コード例 #22
0
 def test_switch_other(self):
     self.assertFieldStreamEqual(
         b"\x01", 1, SwitchField(cases={}, other=IntegerField(1), switch=1))
コード例 #23
0
 class EnumStructure(Structure):
     flag = EnumField(IntegerField(1), enum=Flags)
コード例 #24
0
 def test_len(self):
     self.assertEqual(50, len(ArrayField(IntegerField(2, 'big'), count=25)))
コード例 #25
0
 class Struct(Structure):
     num = IntegerField(1)
コード例 #26
0
 class Struct2(Structure):
     length = IntegerField(length=1, override=lambda c, v: len(c.s2.b))
     s2 = StructureField(Struct1)
コード例 #27
0
 class EnumStructure(Structure):
     flag = EnumField(IntegerField(1, default=Flags.X), enum=Flags)
コード例 #28
0
 class TestStruct(Structure):
     numbers = ArrayField(IntegerField(length=1), count=3)
コード例 #29
0
 class TestStruct(Structure):
     length = IntegerField(1)
     content = FixedLengthField(this.length)
コード例 #30
0
 class TestStructure(Structure):
     field2 = FixedLengthField(length='length', lazy=True)
     field3 = FixedLengthField(length=1)
     length = IntegerField(offset=-1, length=1, lazy=True)