-
Notifications
You must be signed in to change notification settings - Fork 93
/
process-args.test.js
118 lines (93 loc) · 3.47 KB
/
process-args.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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/* eslint-env mocha */
const assert = require('assert')
const processArgs = require('./process-args')
describe('Process Args', function () {
const args = [1, 2]
const argNames = ['arg1', 'arg2']
it('promise', () => {
const r = processArgs(args, argNames)
r.callback()
return r.returnPromise
})
it('arg array', () => {
const r1 = processArgs(args, argNames, 'method')
assert.equal(r1.params.arg1, 1)
assert.equal(r1.params.arg2, 2)
})
it('arg object', () => {
const r1 = processArgs([{arg1: 1, arg2: 2}], argNames, 'method')
assert.equal(r1.params.arg1, 1)
assert.equal(r1.params.arg2, 2)
})
it('options', () => {
const argsOption = [1, 2, {options: true}]
// has option but no optionFormater
throws(() => processArgs(argsOption, argNames, 'method'),
/expecting 2 parameters but 3 where provided/)
const optionsFormatter = option => option
const r = processArgs(argsOption, argNames, 'method', optionsFormatter)
assert.deepEqual(r.params, {arg1: 1, arg2: 2})
assert.deepEqual(r.options, {options: true})
})
it('callback', done => {
const callback = (err, res) => {if(!err) {done()} else {console.error(err)}}
const argsCallback = [1, 2, callback]
const r = processArgs(argsCallback, argNames)
assert.deepEqual(r.params, {arg1: 1, arg2: 2})
r.callback()
})
it('callback object', done => {
const callback = (err, res) => {if(!err) {done()} else {console.error(err)}}
const argsCallback = [{arg1: 1, arg2: 2, arg3: 3}, callback]
const r = processArgs(argsCallback, ['arg1', 'arg2', 'arg3'])
assert.deepEqual(r.params, {arg1: 1, arg2: 2, arg3: 3})
r.callback()
})
it('callback error', done => {
const callback = (err, res) => {if(err) {} else {throw 'expecting error'}}
const argsCallback = [1, 2, callback]
const r = processArgs(argsCallback, argNames)
assert.deepEqual(r.params, {arg1: 1, arg2: 2})
r.callback('error')
done()
// r.returnPromise.catch(error => {done()})
})
it('array with options and callback', (done) => {
const callback = (err, res) => {if(!err) {done()} else {console.error(err)}}
const argsOptionCallback = [1, 2, {options: true}, callback]
const optionsFormatter = option => option
const r = processArgs(argsOptionCallback, argNames, 'method', optionsFormatter)
assert.deepEqual(r.params, {arg1: 1, arg2: 2})
assert.equal(r.options.options, true)
r.callback()
})
it('object with options and callback', (done) => {
const callback = (err, res) => {if(!err) {done()} else {console.error(err)}}
const argsOptionCallback = [{arg1: 1, arg2: 2}, {options: true}, callback]
const optionsFormatter = option => option
const r = processArgs(argsOptionCallback, argNames, 'method', optionsFormatter)
assert.deepEqual(r.params, {arg1: 1, arg2: 2})
assert.equal(r.options.options, true)
r.callback()
})
it('object with missing options', () => {
const argsOptionCallback = [{arg1: 1, arg2: 2}]
const optionsFormatter = option => option
const r = processArgs(argsOptionCallback, argNames, 'method', optionsFormatter)
assert.deepEqual(r.params, {arg1: 1, arg2: 2})
r.callback()
return r.returnPromise
})
})
/* istanbul ignore next */
function throws (fn, match) {
try {
fn()
assert(false, 'Expecting error')
} catch (error) {
if (!match.test(error)) {
error.message = `Error did not match ${match}\n${error.message}`
throw error
}
}
}