set.js
4.28 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
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/*eslint-env mocha*/
/*jshint -W100*/
var assert = require('power-assert');
var each = require('foreach');
var helper = require('./_helper');
var cli = require('../index');
describe('set', function () {
it('存在しないプロパティ => エラー', function () {
try {
cli.set('hoge');
throw new Error('not thrown');
} catch (e) {
assert(e.message === 'no such property "hoge"');
}
});
it('存在するプロパティ(プリミティブ型) => プロパティが更新される', function () {
cli.set('timeout', 8888);
assert(cli.timeout === 8888);
});
it('存在するプロパティ(プリミティブ型) + nomerge => プロパティが更新される', function () {
cli.set('gzip', false);
assert(cli.gzip === false);
});
it('存在するプロパティ(オブジェクト) => 指定したキーのみ更新される', function () {
cli.set('headers', {
'accept-language': 'en-US',
referer: 'http://hoge.com/'
}, true);
cli.set('headers', {
'Accept-Language': 'ja'
});
assert.deepEqual(cli.headers, {
'accept-language': 'ja',
referer: 'http://hoge.com/'
});
});
it('存在するプロパティ(オブジェクト) => 値をnullにすると削除される', function () {
cli.set('headers', {
'accept-language': 'en-US',
referer: 'http://hoge.com/'
}, true);
cli.set('headers', {
'Accept-Language': null
});
assert.deepEqual(cli.headers, {
referer: 'http://hoge.com/'
});
});
it('存在するプロパティ(オブジェクト) + nomerge => プロパティそのものが上書きされる', function () {
cli.set('headers', {
'accept-language': 'en-US',
referer: 'http://hoge.com/'
}, true);
cli.set('headers', {
'Accept-Language': 'ja'
}, true);
assert.deepEqual(cli.headers, {
'accept-language': 'ja'
});
});
it('直接値を更新 => 更新できるがDEPRECATEDメッセージが表示される', function () {
cli.set('timeout', 7777);
helper.hookStderr(function (unhook) {
cli.timeout = 3333;
var expected = '[DEPRECATED] direct property update will be refused in the future. use set(key, value)';
var actual = helper.stripMessageDetail(unhook());
assert(actual === expected);
assert(cli.timeout === 3333);
});
});
describe('型チェック', function () {
var types = {
headers: {
ok: [{}], ng: [ 1, true, 'str', null ],
type: 'object'
},
timeout: {
ok: [ 0, 100 ],
ng: [ -1, false, 'str', {}, [], null ],
type: 'number'
},
gzip: {
ok: [ true, false ],
ng: [ 1, 'str', {}, [], null ],
type: 'boolean'
},
referer: {
ok: [ true, false ],
ng: [ 1, 'str', {}, [], null ],
type: 'boolean'
},
followMetaRefresh: {
ok: [ true, false ],
ng: [ 1, 'str', {}, [], null ],
type: 'boolean'
},
maxDataSize: {
ok: [ 0, 100, null ],
ng: [ -1, false, 'str', {}, [] ],
type: 'number or null'
},
forceHtml: {
ok: [ true, false ],
ng: [ 1, 'str', {}, [], null ],
type: 'boolean'
},
debug: {
ok: [ true, false ],
ng: [ 1, 'str', {}, [], null ],
type: 'boolean'
}
};
/*eslint-disable max-nested-callbacks*/
each(types, function (values, name) {
describe(name, function () {
it('OK', function () {
each(values.ok, function (v) {
helper.hookStderr(function (unhook) {
cli.set(name, v);
var expected = '';
var actual = unhook();
assert(actual === expected);
});
});
});
it('NG', function () {
each(values.ng, function (v) {
helper.hookStderr(function (unhook) {
cli.set(name, v);
var expected = '[WARNING] invalid value: ' + String(v) + '. '
+ 'property "' + name + '" can accept only ' + values.type;
var actual = helper.stripMessageDetail(unhook());
assert(actual === expected);
});
});
});
});
});
/*eslint-enable max-nested-callbacks*/
});
});