def test_fail_on_dynamic_length(self): union = UnionTemplate('NotLegal', 'dymagic', parent=None) union.add(UInt(2, 'bar', None)) struct = StructTemplate('Foo', 'foo', parent=None) struct.add(UInt(1, 'len', 22)) struct.add(Char('len', 'dymagic', 'foo')) self.assertRaises(Exception, union.add, struct)
def get_empty_recursive_struct(): str_str = StructTemplate('StructStruct', '3pairs', parent=None) pair1 = get_empty_pair('pair1') pair2 = get_empty_pair('pair2') pair3 = get_empty_pair('pair3') str_str.add(pair1) str_str.add(pair2) str_str.add(pair3) return str_str
def test_dynamic_field_validation(self): struct = StructTemplate('Foo', 'foo', parent=None) struct.add(UInt(2, 'len', None)) struct.add(Char('len', 'text', None)) encoded = struct.encode({'foo.len': 6, 'foo.text': 'fobba'}) self._should_pass( struct.validate({'foo': encoded}, {'foo.text': 'fobba'})) self._should_fail( struct.validate({'foo': encoded}, {'foo.text': 'fob'}), 1)
def test_dynamic_field_validation(self): struct = StructTemplate('Foo', 'foo', parent=None) struct.add(UInt(2, 'len', None)) struct.add(Char('len', 'text', None)) encoded = struct.encode({'foo.len': 6, 'foo.text': 'fobba'}) self._should_pass(struct.validate({'foo': encoded}, {'foo.text': 'fobba'})) self._should_fail(struct.validate({'foo': encoded}, {'foo.text': 'fob'}), 1)
def test_add_field_with_length_reference_to_parent(self): tmp = MessageTemplate('Dymagic', self._protocol, {}) tmp.add(UInt(2, 'len', None)) str = StructTemplate('FooType', 'foo', tmp) str.add(Char('len', "bar"))
def get_struct_with_two_lists(name='pair'): struct = StructTemplate('PairOfLists', name, parent=None) struct.add(get_list_of_three('first_list', None)) struct.add(get_list_of_three('second_list', None)) return struct
def get_struct_with_length_and_alignment(): struct = StructTemplate('Pair', 'pair', parent=None, align=4) struct.add(UInt(2, 'first', 1)) struct.add(UInt(1, 'second', 2)) return struct
def get_empty_pair(name='pair'): struct = StructTemplate('Pair', name, parent=None) struct.add(UInt(2, 'first', None)) struct.add(UInt(2, 'second', None)) return struct
def get_recursive_struct(): str_str = StructTemplate('StructStruct', 'str_str', parent=None) inner = get_pair() str_str.add(inner) return str_str
def get_pair(): struct = StructTemplate('Pair', 'pair', parent=None) struct.add(UInt(2, 'first', 1)) struct.add(UInt(2, 'second', 2)) return struct
def test_add_field_with_length_reference_missing(self): tmp = MessageTemplate('Dymagic', self._protocol, {}) tmp.add(UInt(2, 'len', None)) str = StructTemplate('FooType', 'foo', tmp) self.assertRaises(AssertionError, str.add, Char('notfound', "bar"))