Esempio n. 1
0
    def test_recursive_common(self):
        # Test a recursive parser to decode xml style data

        embedded = Sequence('embedded', [])
        digit = Field('data', 8, constraints=[Minimum(ord('0')), Maximum(ord('9'))])
        item = Choice('item', [embedded, digit])
        embedded.children = [
                Field('', length=8, format=Field.TEXT, constraints=[Equals('<')]),
                item,
                Field('', length=8, format=Field.TEXT, constraints=[Equals('>')])]

        # Lets just test that we can decode things correctly...
        list(item.decode(Data('8')))
        list(item.decode(Data('<5>')))
        list(item.decode(Data('<<7>>')))
        self.assertRaises(bdec.DecodeError, list, item.decode(Data('a')))
        self.assertRaises(bdec.DecodeError, list, item.decode(Data('<5')))

        lookup = ResultParameters([item])
        self.assertEqual([Param('result', Param.OUT, EntryType(item))], lookup.get_params(item))
        self.assertEqual([Param('result', Param.OUT, EntryType(embedded))], lookup.get_params(embedded))