/
test-cases.js
280 lines (266 loc) · 18.8 KB
/
test-cases.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
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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
var TESTS = (test) => {
test('全角空白は半角として解釈される', (bookmark, selected) => bookmark._normalizeSpaces(selected), [
['空白区切り: 1/2 9:00 ★', '空白区切り: 1/2 9:00 ★'],
['空白区切り: 1/2 9:00 ★', '空白区切り: 1/2 9:00 ★'],
['空白区切り: 1/2 9:00 ★', '空白区切り: 1/2 9:00 ★'],
['空白区切り: 1/2 9時 ★', '空白区切り: 1/2 9時 ★'],
['空白区切り: 1/2 9時 ★', '空白区切り: 1/2 9時 ★'],
['空白区切り: 1/2 9時 ★', '空白区切り: 1/2 9時 ★'],
['空白区切り: 1/2 9時 ★', '空白区切り: 1/2 9時 ★'],
['空白区切り: 1/2 9時★', '空白区切り: 1/2 9時★'],
['空白区切り: 1/2 9時★', '空白区切り: 1/2 9時★'],
]);
test('全角空白は半角として解釈される', (bookmark, selected) => bookmark._normalizeWideChars(selected), [
['全角: 10月2日 ★', '全角: 10月2日 ★'],
['全角: 10/2 ★', '全角: 10/2 ★'],
['全角: 10.2 ★', '全角: 10.2 ★'],
['全角: 2017年10月2日 ★', '全角: 2017年10月2日 ★'],
['全角: 2017/10/2 ★', '全角: 2017/10/2 ★'],
['全角: 2017-10-02 ★', '全角: 2017-10-02 ★'],
['全角: 2017.10.2 ★', '全角: 2017.10.2 ★'],
['時分秒区切り: 2016-01-02 9:01:11-10:02:22 ★', '時分秒区切り: 2016-01-02 9:01:11-10:02:22 ★'],
]);
test('日時が抽出される', (bookmark, selected) => bookmark._pickupDate(selected), [
['日付指定: 2016-01-02 ★', [['2016', '01', '02', '', '', '', '']]],
['日付指定: 2017/10/02 ★', [['2017', '10', '02', '', '', '', '']]],
['日付指定: 2017-10-02 ★', [['2017', '10', '02', '', '', '', '']]],
['日付指定: 2017.10.02 ★', [['2017', '10', '02', '', '', '', '']]],
['日付指定: 2017/10/2 ★', [['2017', '10', '2' , '', '', '', '']]],
['日付指定: 2017年10月2日 ★', [['2017', '10', '2', '', '', '', '']]],
['日付指定: 2017年 10月 2日 ★', [['2017', '10', '2', '', '', '', '']]],
['時間範囲: 2016-01-02 09:01-10:02 ★', [['2016', '01', '02', '09', '01', '10', '02']]],
['時間範囲: 2016-01-02 09:01 - 10:02 ★', [['2016', '01', '02', '09', '01', '10', '02']]],
['時間範囲: 2016-01-02 09:01 - 10:02 ★', [['2016', '01', '02', '09', '01', '10', '02']]],
['時間範囲: 2016-01-02 09:01から10:02 ★', [['2016', '01', '02', '09', '01', '10', '02']]],
['時間範囲: 2016-01-02 09:01~10:02 ★', [['2016', '01', '02', '09', '01', '10', '02']]],
['時間範囲: 2016-01-02 09:01-10:02 ★', [['2016', '01', '02', '09', '01', '10', '02']]],
['時間範囲: 2016-01-02 9時1分-10時2分 ★', [['2016', '01', '02', '9' , '1分', '10', '2分']]],
['時間範囲: 2016-01-02 9時-10時2分 ★', [['2016', '01', '02', '9' , '', '10', '2分']]],
['時間範囲: 2016-01-02 9時半-10時半 ★', [['2016', '01', '02', '9' , '半', '10', '半']]],
['時間範囲: 2016-01-02 9-10時 ★', [['2016', '01', '02', '9' , '' , '10', '']]],
['日付範囲: 2017/10/02 ~ 2017/11/03 ★', [
['2017', '10', '02', '', '', '', ''],
['2017', '11', '03', '', '', '', '']
]],
['日付範囲: 2017/10/02 09:01 ~ 2017/10/02 10:02 ★', [
['2017', '10', '02', '09', '01', '', ''],
['2017', '10', '02', '10', '02', '', '']
]],
['年省略: 10/02 09:01 ★', [['', '10', '02', '09', '01', '', '']]],
['年省略: 10.02 09:01 ★', [['', '10', '02', '09', '01', '', '']]],
['年省略: 10/02 ★', [['', '10', '02', '', '', '', '']]],
['年省略: 10.02 ★', [['', '10', '02', '', '', '', '']]],
['年省略: 10/02 ~ 11/03 ★', [['', '10', '02', '' , '', '', ''], ['', '11', '03', '', '', '', '']]],
['年省略: 10/02 09:01 ~ 10/02 10:02 ★', [['', '10', '02', '09', '01', '', ''], ['', '10', '02', '10', '02', '', '']]],
['年省略: 10月2日 ★', [['', '10', '2', '', '', '', '']]],
['年省略: 10月 2日 ★', [['', '10', '2', '', '', '', '']]],
['年省略: 10/2 ★', [['', '10', '2', '', '', '', '']]],
['日にちの後ろに時があっても時間と誤認しない: 1/29時間厳守★', [['', '1', '29', '', '', '', '']]],
['曜日無視: 2016-01-02 (日) 09:00 ★', [['2016', '01', '02', '09', '00', '', '']]],
['曜日無視: 2016-01-02 (月) 09:00 ★', [['2016', '01', '02', '09', '00', '', '']]],
['和暦: 平成30年10月06日 to 平成31年10月06日 ★', [['平成30' , '10', '06', '' , '', '', ''], ['平成31' , '10', '06', '' , '', '', '']]],
['和暦: 平成 30年10月06日 to 平成 31年10月06日 ★', [['平成 30', '10', '06', '' , '', '', ''], ['平成 31', '10', '06', '' , '', '', '']]],
['和暦: 平30年10月06日 to 平31年10月06日 ★', [['平30' , '10', '06', '' , '', '', ''], ['平31' , '10', '06', '' , '', '', '']]],
['和暦: H30.10.06 to H31.10.06 ★', [['H30' , '10', '06', '' , '', '', ''], ['H31' , '10', '06', '' , '', '', '']]],
['和暦: H.30/10/06 to H.31/10/06 ★', [['H.30' , '10', '06', '' , '', '', ''], ['H.31' , '10', '06', '' , '', '', '']]],
['和暦: H. 30/10/06 to H. 31/10/06 ★', [['H. 30' , '10', '06', '' , '', '', ''], ['H. 31' , '10', '06', '' , '', '', '']]],
['和暦: h30.10.06 to h31.10.06 ★', [['h30' , '10', '06', '' , '', '', ''], ['h31' , '10', '06', '' , '', '', '']]],
['和暦: 昭和50年10月06日 to 昭和51年10月06日 ★', [['昭和50' , '10', '06', '' , '', '', ''], ['昭和51' , '10', '06', '' , '', '', '']]],
['和暦: 昭和 50年10月06日 to 昭和 51年10月06日 ★', [['昭和 50', '10', '06', '' , '', '', ''], ['昭和 51', '10', '06', '' , '', '', '']]],
['和暦: 昭50年10月06日 to 昭51年10月06日 ★', [['昭50' , '10', '06', '' , '', '', ''], ['昭51' , '10', '06', '' , '', '', '']]],
['和暦: S50.10.06 to S51.10.06 ★', [['S50' , '10', '06', '' , '', '', ''], ['S51' , '10', '06', '' , '', '', '']]],
['和暦: S.50/10/06 to S.51/10/06 ★', [['S.50' , '10', '06', '' , '', '', ''], ['S.51' , '10', '06', '' , '', '', '']]],
['和暦: S. 50/10/06 to S. 51/10/06 ★', [['S. 50' , '10', '06', '' , '', '', ''], ['S. 51' , '10', '06', '' , '', '', '']]],
['和暦: s50.10.06 to s51.10.06 ★', [['s50' , '10', '06', '' , '', '', ''], ['s51' , '10', '06', '' , '', '', '']]],
//todo
// ['午前午後: 2016/10/06 午前 2時 ★', [['2016', '10', '06', '午前 2', '', '', '']]],
// ['午前午後: 2016/10/06 午後2時 ★', [['2016', '10', '06', '午後2', '', '', '']]],
// ['午前午後: 2016/10/06 AM2時 ★', [['2016', '10', '06', 'PM2', '', '', '']]],
// ['午前午後: 2016/10/06 PM2時 ★', [['2016', '10', '06', 'PM2', '', '', '']]],
// ['午前午後: 2016/10/06 2時 AM ★', [['2016', '10', '06', 'PM2', '', '', '']]],
// ['午前午後: 2016/10/06 2時 PM ★', [['2016', '10', '06', 'PM2', '', '', '']]],
]);
test('時刻-時刻の形式の場合に時刻で分離する', (bookmark, pickups) => bookmark._normalizePickups(pickups), [
[[['', '10', '02', '09', '01', '10', '02']], [['', '10', '02', '09', '01'], ['', '10', '02', '10', '02']]],
]);
test('年省略', (bookmark, y, prev, NOW) => bookmark._normalizeY(y, prev, NOW), [
['2018', {y: '2017'}, new Date('2010-01-01'), '2018'],
['' , {y: '2017'}, new Date('2010-01-01'), '2017'],
['' , {} , new Date('2010-01-01'), '2010'],
]);
test('和暦', (bookmark, y) => bookmark._normalizeY(y, {}, null), [
['平成30' , '2018'],
['平成 30', '2018'],
['平30' , '2018'],
['H30' , '2018'],
['H.30' , '2018'],
['H. 30' , '2018'],
['h30' , '2018'],
['昭和50' , '1975'],
['昭和 50', '1975'],
['昭50' , '1975'],
['S50' , '1975'],
['S.50' , '1975'],
['S. 50' , '1975'],
['s50' , '1975'],
]);
test('月が正規化される', (bookmark, m) => bookmark._normalizeM(m), [
['', ''],
['2', '02'],
['12', '12'],
]);
test('日が正規化される', (bookmark, d) => bookmark._normalizeD(d), [
['' , ''],
['2' , '02'],
['12' , '12'],
]);
test('分が正規化される', (bookmark, i) => bookmark._normalizeI(i), [
['', '00'],
['2', '02'],
['12', '12'],
['2分', '02'],
['12分', '12'],
['半', '30'],
]);
test('Dateへ変換', (bookmark, y, m, d, h, i) => bookmark._createDate(y, m, d, h, i, {}), [
['2017', '01', '02', '09', '01', [new Date('2017-01-02 09:01'), true]],
['2017', '01', '02', '' , '' , [new Date('2017-01-02'), false]],
['2017', '13', '02', '', '' , [null, false]],
]);
test('時間のみ不正なら日付だけで解釈', (bookmark, y, m, d, h, i) => bookmark._createDate(y, m, d, h, i, {}), [
['2017', '01', '02', '99', '01', [new Date('2017-01-02'), false]],
['2016', '01', '02', '25', '01', [new Date('2016-01-02'), false]],
['2016', '01', '02', '01', '60', [new Date('2016-01-02'), false]],
]);
test('前回時刻ありで今回時刻なし→今回日付ごと不採用', (bookmark, first, y, m, d, h, i) => bookmark._createDate(y, m, d, h, i, first), [
[{exists: true, hasHi: true}, '2016', '01', '02', '' , '' , [null, true]],
[{exists: true, hasHi: true}, '2016', '01', '02', '09', '01', [new Date('2016-01-02 09:01'), true]],
]);
test('前回時刻なしで今回時刻あり→今回時刻のみ不採用', (bookmark, first, y, m, d, h, i) => bookmark._createDate(y, m, d, h, i, first), [
[{exists: true, hasHi: false}, '2016', '01', '02', '' , '' , [new Date('2016-01-02'), false]],
[{exists: true, hasHi: false}, '2016', '01', '02', '09', '01', [new Date('2016-01-02'), false]],
]);
test('日付が1つしかなかったら1つ目と同じ日付', (bookmark, dates) => bookmark._normalizeDates(dates), [
[[new Date('2017-01-02 09:01')], [new Date('2017-01-02 09:01'), new Date('2017-01-02 09:01')]],
[[new Date('2017-01-02')], [new Date('2017-01-02'), new Date('2017-01-02')]],
]);
test('googleカレンダーの日時の書式(時刻あり)', (bookmark, date1, date2) => bookmark._formatYmdhi(date1, date2), [
[new Date('2016-01-02 09:01'), new Date('2016-01-02 09:01'), '20160102T000100Z/20160102T000100Z'],
[new Date('2017-01-02 09:01'), new Date('2017-01-02 09:01'), '20170102T000100Z/20170102T000100Z'],
[new Date('2017-01-02 09:01'), new Date('2017-01-03 09:01'), '20170102T000100Z/20170103T000100Z'],
]);
test('googleカレンダーの日時の書式(時刻なし)', (bookmark, date1, date2) => bookmark._formatYmd(date1, date2), [
[new Date('2016-01-02'), new Date('2016-01-02'), '20160102/20160103'],
[new Date('2017-01-02'), new Date('2017-01-02'), '20170102/20170103'],
[new Date('2017-01-02'), new Date('2017-01-03'), '20170102/20170104'],
]);
test('総合', (bookmark, selected) => bookmark.popup(selected, () => {}), [
['2つ目年省略→1つ目と同じ: 2018/10/02 ~ 10/02 ★', '20181002/20181003'],
['2つ目年省略→1つ目と同じ: 2009/01/02 09:01 to 03/04 10:02 ★', '20090102T000100Z/20090304T010200Z'],
['1つ目の日付不正→無視: 2017/10/99 ~ 2017/11/03 ★', '20171103/20171104'],
['1つ目の日付不正→無視: 2017/10/99 09:01 ~ 2017/10/02 10:02 ★', '20171002T010200Z/20171002T010200Z'],
['1つ目の時刻不正→時刻使わない: 2017/10/02 99:99 ~ 2017/11/03 10:02 ★', '20171002/20171104'],
['2つ目の時刻不正→2つ目無視: 2017/10/02 09:01 ~ 2017/11/03 99:99 ★', '20171002T000100Z/20171002T000100Z'],
['3つ目の日付→無視: 2017/10/02 ~ 2017/11/03 ~ 2017/12/04 ★', '20171002/20171104'],
['日付類似: 2017.99.99 / 2017.10.02 ★', '20171002/20171003'],
['日付類似: 99/01 09:01 / 01.02 09:01 ★', '20160102T000100Z/20160102T000100Z'],
['日付類似: 99/01 09:01-09:02 / 01.02 09:01-09:02 ★', '20160102T000100Z/20160102T000200Z'],
]);
test('ポップアップ', (bookmark, selected) => {
let capturedUrl = '';
bookmark.popup(selected, (url) => { capturedUrl = url });
return capturedUrl;
}, [
['全体: 2016-01-02 ★', 'http://www.google.com/calendar/event?action=TEMPLATE&trp=false&details=' +
encodeURIComponent('全体: 2016-01-02 ★') + '&dates=20160102/20160103'],
]);
test('欧米月表記が解釈できる', (bookmark, selected) => {
let [[y, m, d]] = bookmark._pickupDate(selected);
return bookmark._normalizeYmd(y, m, d)
}, [
['欧米月: 15th Jan 2016 ★', ['2016', '01', '15']],
['欧米月: 15th Feb 2016 ★', ['2016', '02', '15']],
['欧米月: 15th Mar 2016 ★', ['2016', '03', '15']],
['欧米月: 15th Apr 2016 ★', ['2016', '04', '15']],
['欧米月: 15th May 2016 ★', ['2016', '05', '15']],
['欧米月: 15th Jun 2016 ★', ['2016', '06', '15']],
['欧米月: 15th Jul 2016 ★', ['2016', '07', '15']],
['欧米月: 15th Aug 2016 ★', ['2016', '08', '15']],
['欧米月: 15th Sep 2016 ★', ['2016', '09', '15']],
['欧米月: 15th Oct 2016 ★', ['2016', '10', '15']],
['欧米月: 15th Nov 2016 ★', ['2016', '11', '15']],
['欧米月: 15th Dec 2016 ★', ['2016', '12', '15']],
['欧米月: 15th January 2016 ★', ['2016', '01', '15']],
['欧米月: 15th February 2016 ★', ['2016', '02', '15']],
['欧米月: 15th March 2016 ★', ['2016', '03', '15']],
['欧米月: 15th April 2016 ★', ['2016', '04', '15']],
['欧米月: 15th May 2016 ★', ['2016', '05', '15']],
['欧米月: 15th June 2016 ★', ['2016', '06', '15']],
['欧米月: 15th July 2016 ★', ['2016', '07', '15']],
['欧米月: 15th August 2016 ★', ['2016', '08', '15']],
['欧米月: 15th September 2016 ★', ['2016', '09', '15']],
['欧米月: 15th October 2016 ★', ['2016', '10', '15']],
['欧米月: 15th November 2016 ★', ['2016', '11', '15']],
['欧米月: 15th December 2016 ★', ['2016', '12', '15']],
['欧米月: 1st Jan 2016 ★', ['2016', '01', '01']],
['欧米月: 2nd Jan 2016 ★', ['2016', '01', '02']],
['欧米月: 3rd Jan 2016 ★', ['2016', '01', '03']],
['欧米月: 4th Jan 2016 ★', ['2016', '01', '04']],
['欧米月: 10th Jan 2016 ★', ['2016', '01', '10']],
['欧米月: 31th Jan 2016 ★', ['2016', '01', '31']],
['欧米月: 1 Jan 2016 ★', ['2016', '01', '01']],
['欧米月: 2 Jan 2016 ★', ['2016', '01', '02']],
['欧米月: 3 Jan 2016 ★', ['2016', '01', '03']],
['欧米月: 4 Jan 2016 ★', ['2016', '01', '04']],
['欧米月: 10 Jan 2016 ★', ['2016', '01', '10']],
['欧米月: 31 Jan 2016 ★', ['2016', '01', '31']],
['欧米月: Jan 1st 2016 ★', ['2016', '01', '01']],
['欧米月: Jan 2nd 2016 ★', ['2016', '01', '02']],
['欧米月: Jan 3rd 2016 ★', ['2016', '01', '03']],
['欧米月: Jan 4th 2016 ★', ['2016', '01', '04']],
['欧米月: Jan 10th 2016 ★', ['2016', '01', '10']],
['欧米月: Jan 31th 2016 ★', ['2016', '01', '31']],
['欧米月: Jan 1 2016 ★', ['2016', '01', '01']],
['欧米月: Jan 2 2016 ★', ['2016', '01', '02']],
['欧米月: Jan 3 2016 ★', ['2016', '01', '03']],
['欧米月: Jan 4 2016 ★', ['2016', '01', '04']],
['欧米月: Jan 10 2016 ★', ['2016', '01', '10']],
['欧米月: Jan 31 2016 ★', ['2016', '01', '31']],
]);
test('会話的表記が解釈できる', (bookmark, selected) => {
let [[y, m, d]] = bookmark._pickupDate(selected);
return bookmark._normalizeYmd(y, m, d)
}, [
// 2016-01-01 は金曜日
['会話的: 来週の日曜日 ★', ['2016', '01', '03']],
['会話的: 来週の月曜日 ★', ['2016', '01', '04']],
['会話的: 来週の火曜日 ★', ['2016', '01', '05']],
['会話的: 来週の水曜日 ★', ['2016', '01', '06']],
['会話的: 来週の木曜日 ★', ['2016', '01', '07']],
['会話的: 来週の金曜日 ★', ['2016', '01', '08']],
['会話的: 来週の土曜日 ★', ['2016', '01', '09']],
['会話的: 再来週の日曜日 ★', ['2016', '01', '10']],
['会話的: 再来週の月曜日 ★', ['2016', '01', '11']],
['会話的: 再来週の火曜日 ★', ['2016', '01', '12']],
['会話的: 再来週の水曜日 ★', ['2016', '01', '13']],
['会話的: 再来週の木曜日 ★', ['2016', '01', '14']],
['会話的: 再来週の金曜日 ★', ['2016', '01', '15']],
['会話的: 再来週の土曜日 ★', ['2016', '01', '16']],
['会話的: 次の日曜日 ★', ['2016', '01', '03']],
['会話的: 次の月曜日 ★', ['2016', '01', '04']],
['会話的: 次の火曜日 ★', ['2016', '01', '05']],
['会話的: 次の水曜日 ★', ['2016', '01', '06']],
['会話的: 次の木曜日 ★', ['2016', '01', '07']],
['会話的: 次の金曜日 ★', ['2016', '01', '08']],
['会話的: 次の土曜日 ★', ['2016', '01', '02']],
['会話的: 次の次の日曜日 ★', ['2016', '01', '10']],
['会話的: 次の次の月曜日 ★', ['2016', '01', '11']],
['会話的: 次の次の火曜日 ★', ['2016', '01', '12']],
['会話的: 次の次の水曜日 ★', ['2016', '01', '13']],
['会話的: 次の次の木曜日 ★', ['2016', '01', '14']],
['会話的: 次の次の金曜日 ★', ['2016', '01', '15']],
['会話的: 次の次の土曜日 ★', ['2016', '01', '09']],
['会話的: 今週の金曜日 ★', ['2016', '01', '01']],
['会話的: 今週の土曜日 ★', ['2016', '01', '02']],
]);
};