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))