|
8 | 8 | end
|
9 | 9 |
|
10 | 10 | it "scans json" do
|
11 |
| - result = described_class.scan('["1", {"a": 2}]', [[0], [1, "a"], []], false) |
| 11 | + result = described_class.scan('["1", {"a": 2}]', [[0], [1, "a"], []]) |
12 | 12 | expect(result).to eq([[[1, 4, :string]], [[12, 13, :number]], [[0, 15, :array]]])
|
13 |
| - expect(described_class.scan('"2"', [[]], false)).to eq([[[0, 3, :string]]]) |
| 13 | + expect(described_class.scan('"2"', [[]])).to eq([[[0, 3, :string]]]) |
14 | 14 | expect(
|
15 |
| - described_class.scan("[0,1,2,3,4,5,6,7]", [[(0..2)], [(4...6)]], false) |
| 15 | + described_class.scan("[0,1,2,3,4,5,6,7]", [[(0..2)], [(4...6)]]) |
16 | 16 | ).to eq(
|
17 | 17 | [[[1, 2, :number], [3, 4, :number], [5, 6, :number]], [[9, 10, :number], [11, 12, :number]]]
|
18 | 18 | )
|
19 |
| - expect(described_class.scan('{"a": 1}', [["a"], []], false)).to eq( |
| 19 | + expect(described_class.scan('{"a": 1}', [["a"], []])).to eq( |
20 | 20 | [[[6, 7, :number]], [[0, 8, :object]]]
|
21 | 21 | )
|
22 | 22 | end
|
|
28 | 28 | # TODO: investigate
|
29 | 29 | # got "munmap_chunk(): invalid pointer" in in console once after
|
30 | 30 | # JsonScanner.scan '[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]', [[0,0,0,0,0,0,0]], true + Ctrl+D
|
31 |
| - # (last arg wasn't handled at the time) |
| 31 | + # (last arg wasn't handled at the time and was intended for with_path kwarg) |
32 | 32 | # but I don't think it's a problem of tht extension or libyajl, it happened at exit and I free everything before
|
33 | 33 | # `JsonScanner.scan` returns
|
34 |
| - described_class.scan "[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]", [[0, 0, 0, 0, 0, 0, 0]], false |
| 34 | + described_class.scan "[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]", [[0, 0, 0, 0, 0, 0, 0]] |
35 | 35 | ensure
|
36 | 36 | GC.stress = false
|
37 | 37 | end
|
|
40 | 40 |
|
41 | 41 | it "allows to select ranges" do
|
42 | 42 | expect(
|
43 |
| - described_class.scan("[[1,2],[3,4]]", [[described_class::ANY_INDEX, described_class::ANY_INDEX]], false) |
| 43 | + described_class.scan("[[1,2],[3,4]]", [[described_class::ANY_INDEX, described_class::ANY_INDEX]]) |
44 | 44 | ).to eq(
|
45 | 45 | [[[2, 3, :number], [4, 5, :number], [8, 9, :number], [10, 11, :number]]]
|
46 | 46 | )
|
47 | 47 | expect(
|
48 |
| - described_class.scan("[[1,2],[3,4]]", [[described_class::ANY_INDEX, (0...1)]], false) |
| 48 | + described_class.scan("[[1,2],[3,4]]", [[described_class::ANY_INDEX, (0...1)]]) |
49 | 49 | ).to eq(
|
50 | 50 | [[[2, 3, :number], [8, 9, :number]]]
|
51 | 51 | )
|
52 | 52 | end
|
53 | 53 |
|
54 | 54 | it "allows only positive or -1 values" do
|
55 | 55 | expect do
|
56 |
| - described_class.scan("[[1,2],[3,4]]", [[(0...-1)]], false) |
| 56 | + described_class.scan("[[1,2],[3,4]]", [[(0...-1)]]) |
57 | 57 | end.to raise_error ArgumentError
|
58 | 58 | expect do
|
59 |
| - described_class.scan("[[1,2],[3,4]]", [[(0..-2)]], false) |
| 59 | + described_class.scan("[[1,2],[3,4]]", [[(0..-2)]]) |
60 | 60 | end.to raise_error ArgumentError
|
61 | 61 | expect do
|
62 |
| - described_class.scan("[[1,2],[3,4]]", [[(-42..1)]], false) |
| 62 | + described_class.scan("[[1,2],[3,4]]", [[(-42..1)]]) |
63 | 63 | end.to raise_error ArgumentError
|
64 | 64 | end
|
| 65 | + |
| 66 | + it "allows to configure error messages" do |
| 67 | + expect do |
| 68 | + described_class.scan "{1}", [] |
| 69 | + end.to raise_error described_class::ParseError, /invalid object key(?!.*\(right here\))/m |
| 70 | + expect do |
| 71 | + described_class.scan "{1}", [], verbose_error: false |
| 72 | + end.to raise_error described_class::ParseError, /invalid object key(?!.*\(right here\))/m |
| 73 | + expect do |
| 74 | + described_class.scan "{1}", [], verbose_error: true |
| 75 | + end.to raise_error described_class::ParseError, /invalid object key(?=.*\(right here\))/m |
| 76 | + end |
65 | 77 | end
|
0 commit comments