-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathtest.js
95 lines (74 loc) · 2.93 KB
/
test.js
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
import test from 'ava'
import traph from './index'
/**
* Object's own enumerable keys, without ancestors', sorted.
*/
function objectOwnKeys (obj) {
return Object.keys(obj).sort()
}
/**
* Object's and all its ancestors' enumerable keys, sorted.
*/
function objectAllKeys (obj) {
const keys = []
for (let k in obj) {
keys.push(k)
}
keys.sort()
return keys
}
test('traph with only input', t => {
const transform = traph({
fullName: i => `${i.first} ${i.last}`,
initials: i => `${i.first[0].toUpperCase()}.${i.last[0].toUpperCase()}.`,
})
const output = transform({ first: 'Richard', last: 'Feynman' })
t.deepEqual(output, { fullName: 'Richard Feynman', initials: 'R.F.' })
t.deepEqual(objectAllKeys(output), ['fullName', 'initials'])
})
test('traph with output also', t => {
const transform = traph({
fullName: i => `${i.first} ${i.last}`,
firstInitial: i => i.first[0].toUpperCase(),
lastInitial: i => i.last[0].toUpperCase(),
initials: (i, o) => `${o.firstInitial}.${o.lastInitial}.`,
fullNameBirth: (i, o) => `${o.fullName}, born ${i.birth}`,
})
const output = transform({ first: 'Richard', last: 'Feynman', birth: 'May 11, 1918' })
t.true(output.fullNameBirth === 'Richard Feynman, born May 11, 1918')
t.true(output.initials === 'R.F.')
t.deepEqual(objectAllKeys(output), ['firstInitial', 'fullName', 'fullNameBirth', 'initials', 'lastInitial'])
})
test('traph lazy', t => {
const transform = traph({
fullName: i => `${i.first} ${i.last}`,
firstInitial: i => i.first[0].toUpperCase(),
lastInitial: i => i.last[0].toUpperCase(),
initials: (i, o) => `${o.firstInitial}.${o.lastInitial}.`,
fullNameBirth: (i, o) => `${o.fullName}, born ${i.birth}`,
})
const output = transform.lazy({ first: 'Richard', last: 'Feynman', birth: 'May 11, 1918' })
t.deepEqual(objectOwnKeys(output), [])
t.deepEqual(objectAllKeys(output), ['firstInitial', 'fullName', 'fullNameBirth', 'initials', 'lastInitial'])
// Execute getter
t.true(output.fullName === 'Richard Feynman')
t.deepEqual(objectOwnKeys(output), ['fullName'])
t.deepEqual(objectAllKeys(output), ['firstInitial', 'fullName', 'fullNameBirth', 'initials', 'lastInitial'])
// Execute getter
t.true(output.initials === 'R.F.')
t.deepEqual(objectOwnKeys(output), ['firstInitial', 'fullName', 'initials', 'lastInitial'])
t.deepEqual(objectAllKeys(output), ['firstInitial', 'fullName', 'fullNameBirth', 'initials', 'lastInitial'])
// Execute getter
t.true(output.fullNameBirth === 'Richard Feynman, born May 11, 1918')
t.deepEqual(objectOwnKeys(output), objectAllKeys(output))
})
test('traph doesn\'t use Proxy if not available', t => {
const origProxy = global.Proxy
delete global.Proxy
const transform = traph({
fullName: i => `${i.first} ${i.xxx}`,
})
const output = transform.lazy({ first: 'Richard', last: 'Feynman' })
t.true(output.fullName === 'Richard undefined')
global.Proxy = origProxy
})