-
Notifications
You must be signed in to change notification settings - Fork 26
/
Copy pathnextPrevious.test.ts
97 lines (89 loc) · 2.57 KB
/
nextPrevious.test.ts
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import { getNextOrPrevious } from '../demo/src/json-edit-react/src/helpers'
const getNext = (data: object, path: (string | number)[]) =>
getNextOrPrevious(data, path, 'next', () => {})
const getPrevious = (data: object, path: (string | number)[]) =>
getNextOrPrevious(data, path, 'prev', () => {})
const data = {
a: 1,
b: 'something',
cee: 99,
dee: {
inner: 'value',
inner2: 45,
inner3: {
innerDeep: 2.4,
innerDeep2: [1, 2, 3],
innerBool: false,
innerArray: [
{ one: 1, two: 'two', three: true, four: null, five: true },
{ one: 'one', two: 2, three: 3, four: { one: 1 }, 45: 'Number' },
],
},
},
obj2: { 1: true, 2: 'two' },
arr: [1, 'two', { three: 4 }, false, undefined, null, 7, 8, 9, 10, 11, 12],
}
test('Root level', () => {
const curr = ['a']
expect(getNext(data, curr)).toEqual(['b'])
expect(getPrevious(data, curr)).toEqual(null)
})
test('Inside object', () => {
expect(getNext(data, ['dee', 'inner'])).toEqual(['dee', 'inner2'])
expect(getPrevious(data, ['dee', 'inner2'])).toEqual(['dee', 'inner'])
})
test('Next traverses object, one level', () => {
expect(getNext(data, ['dee', 'inner2'])).toEqual(['dee', 'inner3', 'innerDeep'])
expect(getPrevious(data, ['dee', 'inner3', 'innerDeep'])).toEqual(['dee', 'inner2'])
})
test('Next traverses object, multi-level, incl. Array', () => {
expect(getNext(data, ['dee', 'inner3', 'innerBool'])).toEqual([
'dee',
'inner3',
'innerArray',
0,
'one',
])
expect(getPrevious(data, ['dee', 'inner3', 'innerArray', 0, 'one'])).toEqual([
'dee',
'inner3',
'innerBool',
])
})
test('Traverse from within array', () => {
expect(getNext(data, ['dee', 'inner3', 'innerDeep2', 1])).toEqual([
'dee',
'inner3',
'innerDeep2',
2,
])
expect(getPrevious(data, ['dee', 'inner3', 'innerDeep2', 1])).toEqual([
'dee',
'inner3',
'innerDeep2',
0,
])
expect(getNext(data, ['dee', 'inner3', 'innerDeep2', 2])).toEqual(['dee', 'inner3', 'innerBool'])
expect(getPrevious(data, ['dee', 'inner3', 'innerDeep2', 0])).toEqual([
'dee',
'inner3',
'innerDeep',
])
})
test('Traverse into empty object/array', () => {
const d = {
displayName: 'Default',
styles: {
container: {
backgroundColor: '#f6f6f6',
fontFamily: 'monospace',
},
collection: {},
collectionInner: [],
lastOne: 1,
empty: {},
},
}
expect(getNext(d, ['styles', 'container', 'fontFamily'])).toEqual(['styles', 'lastOne'])
expect(getNext(d, ['styles', 'lastOne'])).toEqual(null)
})