def update(self, variables: list): ranges = [] datas = [] for var in variables: ranges.append(var.range) for range in reduce(ranges): logging.debug("query: %s" % range) res = self.__protocol.query(range) datas.append(Data(range, res)) for var in variables: var.bytes = extract(var.range, datas).bytes
def test_sorted(self): datas = [ Data(Range(0x1234, 1), b'zz'), Data(Range(0x9999, 2), b'aaaa'), Data(Range(0x0000, 1), b'mm'), Data(Range(0x4567, 1), b'aa'), ] self.maxDiff = None self.assertEqual([ Data(Range(0x0000, 1), b'mm'), Data(Range(0x1234, 1), b'zz'), Data(Range(0x4567, 1), b'aa'), Data(Range(0x9999, 2), b'aaaa'), ], sorted(datas))
class ExtractTest(TestCase): @data_provider(lambda: ( ( Range(0x0001, 2), [ Data(Range(0x0000, 10), b'1234567890abcdefghij'), ], Data(Range(0x0001, 2), b'3456'), ), ( Range(0x0001, 2), [ Data(Range(0x0001, 4), b'12345678'), ], Data(Range(0x0001, 2), b'1234'), ), (Range(0x1234, 4), [ Data(Range(0x0000, 10), b'aaaaaaaaaaaaaaaaaaaa'), Data(Range(0x1230, 10), b'mmmmmmmm78901234mmmm'), Data(Range(0x9999, 10), b'zzzzzzzzzzzzzzzzzzzz'), ], Data(Range(0x1234, 4), b'78901234')), )) def test_extract(self, range, datas, expected): self.assertEqual(expected, extract(range, datas)) @data_provider(lambda: ( (Range(0x0000, 10), [Data(Range(0x00010, 10), b'1234567890abcdefghij')]), (Range(0x0010, 12), [Data(Range(0x00010, 10), b'1234567890abcdefghij')]), (Range(0x0011, 5), [Data(Range(0x00010, 5), b'1234567890')]), (Range(0xcafe, 1), [Data(Range(0x00010, 5), b'1234567890')]), )) def test_extract_out_of_range(self, range, datas): with self.assertRaises(NotFoundException) as context: extract(range, datas) self.assertEqual('%s was not found' % range, context.exception.args[0])
def test_bytes_raises_setter(self, range, bytes, expected): data = Data(range) with self.assertRaises(ValidationException) as context: data.bytes = bytes self.assertEqual(expected, context.exception.args[0])
def test_bytes_setter(self, range: Range, bytes: bytes): data = Data(range) data.bytes = bytes self.assertEqual(bytes, data.bytes)
def test_bytes_raises_during_init(self): with self.assertRaises(ValidationException) as context: Data(Range(0x0000, 1), b'1234') self.assertEqual('Unable to store 4 bytes to range requiring 2', context.exception.args[0])
def test_bytes_raises_before_set(self): data = Data(Mock()) with self.assertRaises(NotFoundException) as context: data.bytes self.assertEqual('Unable to read bytes before property is set', context.exception.args[0])
def extract(range: Range, datas: list) -> Data: for data in datas: d = _extract(range, data) if d: return Data(range, d) raise NotFoundException("%s was not found" % (range))