def walk_json(data, start: int, end: int) -> Generator: pos = start while 1: # TODO: abstraction breach if file.get_next_non_whitespace_char(data, pos).position == end: break key = file.get_key(data, file.seek_to_key(data, pos)) val_pos = file.seek_to_val(data, key.end) if file.val_is_json_obj(data, val_pos): inner_start = val_pos inner_end = pos = file.find_end_of_json(data, val_pos) val = ljson(data, inner_start, inner_end) else: val = file.get_val(data, val_pos) pos = val.end yield key, val
def test_get_val_null(self): mm = MM pos = 161 gold = file.bound(161, 165) output = file.get_val(mm, pos) self.assertEqual(gold, output)
def test_get_val_bool(self): mm = MM pos = 142 gold = file.bound(142, 146) output = file.get_val(mm, pos) self.assertEqual(gold, output)
def test_get_val_float(self): mm = MM pos = 117 gold = file.bound(117, 125) output = file.get_val(mm, pos) self.assertEqual(gold, output)
def test_get_val_int(self): mm = MM pos = 30 gold = file.bound(30, 31) output = file.get_val(mm, pos) self.assertEqual(gold, output)
def test_get_val_string(self): mm = MM pos = 70 gold = file.bound(70, 97) output = file.get_val(mm, pos) self.assertEqual(gold, output)