Пример #1
0
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
Пример #2
0
 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)
Пример #3
0
 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)
Пример #4
0
 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)
Пример #5
0
 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)
Пример #6
0
 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)