-
Notifications
You must be signed in to change notification settings - Fork 171
Expand file tree
/
Copy pathjsonPathParser.spec.ts
More file actions
64 lines (57 loc) · 3.12 KB
/
jsonPathParser.spec.ts
File metadata and controls
64 lines (57 loc) · 3.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import { parseJsonPath } from './jsonPathParser'
describe('parseJsonPath', () => {
it('should extract selectors from dot notation', () => {
expect(parseJsonPath('a')).toEqual(['a'])
expect(parseJsonPath('foo.bar')).toEqual(['foo', 'bar'])
expect(parseJsonPath('foo.bar.qux')).toEqual(['foo', 'bar', 'qux'])
})
it('should parse extract selectors from bracket notation', () => {
expect(parseJsonPath(String.raw`['a']`)).toEqual(['a'])
expect(parseJsonPath(String.raw`["a"]`)).toEqual(['a'])
expect(parseJsonPath(String.raw`['foo']["bar"]`)).toEqual(['foo', 'bar'])
expect(parseJsonPath(String.raw`['foo']["bar"]['qux']`)).toEqual(['foo', 'bar', 'qux'])
})
it('should extract selectors from mixed notations', () => {
expect(parseJsonPath(String.raw`['foo'].bar['qux']`)).toEqual(['foo', 'bar', 'qux'])
})
it('should extract name and index selectors', () => {
expect(parseJsonPath('[0]')).toEqual(['0'])
expect(parseJsonPath('foo[12]')).toEqual(['foo', '12'])
expect(parseJsonPath(String.raw`['foo'][12]`)).toEqual(['foo', '12'])
})
it('should extract name selectors replacing escaped sequence by equivalent character', () => {
expect(parseJsonPath(String.raw`['foo\n']`)).toEqual(['foo\n'])
expect(parseJsonPath(String.raw`['foo\b']`)).toEqual(['foo\b'])
expect(parseJsonPath(String.raw`['foo\t']`)).toEqual(['foo\t'])
expect(parseJsonPath(String.raw`['foo\f']`)).toEqual(['foo\f'])
expect(parseJsonPath(String.raw`['foo\r']`)).toEqual(['foo\r'])
expect(parseJsonPath(String.raw`["foo\u03A9"]`)).toEqual(['fooΩ'])
expect(parseJsonPath(String.raw`["\u03A9A"]`)).toEqual(['ΩA'])
expect(parseJsonPath(String.raw`["\t\u03A9\n"]`)).toEqual(['\tΩ\n'])
expect(parseJsonPath(String.raw`['foo\'']`)).toEqual([String.raw`foo'`])
expect(parseJsonPath(String.raw`["foo\""]`)).toEqual([String.raw`foo"`])
expect(parseJsonPath(String.raw`["foo\/"]`)).toEqual([String.raw`foo/`])
})
it('should extract name selectors containing characters not supported in name shorthands', () => {
expect(parseJsonPath(String.raw`['foo[]']`)).toEqual([String.raw`foo[]`])
expect(parseJsonPath(String.raw`['foo.']`)).toEqual([String.raw`foo.`])
})
it('should return an empty array for an invalid path', () => {
expect(parseJsonPath('.foo')).toEqual([])
expect(parseJsonPath('.')).toEqual([])
expect(parseJsonPath('foo.')).toEqual([])
expect(parseJsonPath('foo..bar')).toEqual([])
expect(parseJsonPath('[1')).toEqual([])
expect(parseJsonPath('foo]')).toEqual([])
expect(parseJsonPath(String.raw`[['foo']`)).toEqual([])
expect(parseJsonPath(String.raw`['foo'`)).toEqual([])
expect(parseJsonPath(String.raw`['foo]`)).toEqual([])
expect(parseJsonPath(String.raw`[foo']`)).toEqual([])
expect(parseJsonPath(String.raw`['foo''bar']`)).toEqual([])
expect(parseJsonPath(String.raw`['foo\o']`)).toEqual([])
expect(parseJsonPath(String.raw`["\u03Z9"]`)).toEqual([])
expect(parseJsonPath(String.raw`['foo\u12']`)).toEqual([])
expect(parseJsonPath(String.raw`['foo']a`)).toEqual([])
expect(parseJsonPath(String.raw`["foo']`)).toEqual([])
})
})