1 |
|
2 |
|
3 |
|
4 | var should = require('should');
|
5 | var moment = require('moment');
|
6 | require('../lib/moment-range');
|
7 |
|
8 | describe('Moment', function() {
|
9 | var dr = moment.range(new Date(Date.UTC(2011, 2, 5)), new Date(Date.UTC(2011, 5, 5)));
|
10 | var m1 = moment('2011-04-15', 'YYYY-MM-DD');
|
11 | var m2 = moment('2012-12-25', 'YYYY-MM-DD');
|
12 | var mStart = moment('2011-03-05', 'YYYY-MM-DD');
|
13 | var mEnd = moment('2011-06-05', 'YYYY-MM-DD');
|
14 |
|
15 | describe('#range()', function() {
|
16 | it('should a DateRange with start & end properties', function() {
|
17 | dr = moment.range(m1, m2);
|
18 | moment.isMoment(dr.start).should.be.true;
|
19 | moment.isMoment(dr.end).should.be.true;
|
20 | });
|
21 |
|
22 | it('should support string units like `year`, `month`, `week`, `day`, `minute`, `second`, etc...', function() {
|
23 | dr = m1.range('year');
|
24 | dr.start.valueOf().should.equal(moment(m1).startOf('year').valueOf());
|
25 | dr.end.valueOf().should.equal(moment(m1).endOf('year').valueOf());
|
26 | });
|
27 | });
|
28 |
|
29 | describe('#within()', function() {
|
30 | it('should determine if the current moment is within a given range', function() {
|
31 | m1.within(dr).should.be.true;
|
32 | m2.within(dr).should.be.false;
|
33 | });
|
34 |
|
35 | it('should consider the edges to be within the range', function() {
|
36 | mStart.within(dr).should.be.true;
|
37 | mEnd.within(dr).should.be.true;
|
38 | });
|
39 | });
|
40 | });
|
41 |
|
42 | describe('DateRange', function() {
|
43 | var d1 = new Date(Date.UTC(2011, 2, 5));
|
44 | var d2 = new Date(Date.UTC(2011, 5, 5));
|
45 | var d3 = new Date(Date.UTC(2011, 4, 9));
|
46 | var d4 = new Date(Date.UTC(1988, 0, 1));
|
47 | var m1 = moment.utc('06-05-1996', 'MM-DD-YYYY');
|
48 | var m2 = moment.utc('11-05-1996', 'MM-DD-YYYY');
|
49 | var m3 = moment.utc('08-12-1996', 'MM-DD-YYYY');
|
50 | var m4 = moment.utc('01-01-2012', 'MM-DD-YYYY');
|
51 | var sStart = '1996-08-12T00:00:00.000Z';
|
52 | var sEnd = '2012-01-01T00:00:00.000Z';
|
53 |
|
54 | describe('constructor', function() {
|
55 | it('should allow initialization with date string', function() {
|
56 | var dr = moment.range(sStart, sEnd);
|
57 |
|
58 | moment.isMoment(dr.start).should.be.true;
|
59 | moment.isMoment(dr.end).should.be.true;
|
60 | });
|
61 |
|
62 | it('should allow initialization with Date object', function() {
|
63 | var dr = moment.range(d1, d2);
|
64 |
|
65 | moment.isMoment(dr.start).should.be.true;
|
66 | moment.isMoment(dr.end).should.be.true;
|
67 | });
|
68 |
|
69 | it('should allow initialization with Moment object', function() {
|
70 | var dr = moment.range(m1, m2);
|
71 |
|
72 | moment.isMoment(dr.start).should.be.true;
|
73 | moment.isMoment(dr.end).should.be.true;
|
74 | });
|
75 |
|
76 | it('should allow initialization with an ISO 8601 Time Interval string', function() {
|
77 | var start = '2015-01-17T09:50:04+00:00';
|
78 | var end = '2015-04-17T08:29:55+00:00';
|
79 | var dr = moment.range(start + '/' + end);
|
80 |
|
81 | moment.utc(start).isSame(dr.start).should.be.true;
|
82 | moment.utc(end).isSame(dr.end).should.be.true;
|
83 | });
|
84 |
|
85 | it('should allow initialization with an array', function() {
|
86 | var dr = moment.range([m1, m2]);
|
87 |
|
88 | m1.isSame(dr.start).should.be.true;
|
89 | m2.isSame(dr.end).should.be.true;
|
90 | });
|
91 | });
|
92 |
|
93 | describe('#clone()', function() {
|
94 | it('should deep clone range', function() {
|
95 | var dr1 = moment().range(sStart, sEnd);
|
96 | var dr2 = dr1.clone();
|
97 |
|
98 | dr2.start.add(2, 'days');
|
99 | dr1.start.toDate().should.not.equal(dr2.start.toDate());
|
100 | });
|
101 | });
|
102 |
|
103 | describe('#by()', function() {
|
104 | it('should iterate correctly by range', function() {
|
105 | var acc = [];
|
106 | var d1 = new Date(Date.UTC(2012, 2, 1));
|
107 | var d2 = new Date(Date.UTC(2012, 2, 5));
|
108 | var dr1 = moment.range(d1, d2);
|
109 | var dr2 = 1000 * 60 * 60 * 24;
|
110 |
|
111 | dr1.by(dr2, function(m) {
|
112 | acc.push(m);
|
113 | });
|
114 |
|
115 | acc.length.should.eql(5);
|
116 | acc[0].utc().date().should.eql(1);
|
117 | acc[1].utc().date().should.eql(2);
|
118 | acc[2].utc().date().should.eql(3);
|
119 | acc[3].utc().date().should.eql(4);
|
120 | acc[4].utc().date().should.eql(5);
|
121 | });
|
122 |
|
123 | it('should iterate correctly by duration', function() {
|
124 | var acc = [];
|
125 | var d1 = new Date(Date.UTC(2014, 9, 6, 0, 0));
|
126 | var d2 = new Date(Date.UTC(2014, 9, 6, 23, 59));
|
127 | var dr1 = moment.range(d1, d2);
|
128 | var dr2 = moment.duration(15, 'minutes');
|
129 |
|
130 | dr1.by(dr2, function(m) {
|
131 | acc.push(m);
|
132 | });
|
133 |
|
134 | acc.length.should.eql(96);
|
135 | acc[0].minute().should.eql(0);
|
136 | acc[95].minute().should.eql(45);
|
137 | });
|
138 |
|
139 | it('should iterate correctly by shorthand string', function() {
|
140 | var acc = [];
|
141 | var d1 = new Date(Date.UTC(2012, 2, 1));
|
142 | var d2 = new Date(Date.UTC(2012, 2, 5));
|
143 | var dr1 = moment.range(d1, d2);
|
144 | var dr2 = 'days';
|
145 |
|
146 | dr1.by(dr2, function(m) {
|
147 | acc.push(m);
|
148 | });
|
149 |
|
150 | acc.length.should.eql(5);
|
151 | acc[0].utc().date().should.eql(1);
|
152 | acc[1].utc().date().should.eql(2);
|
153 | acc[2].utc().date().should.eql(3);
|
154 | acc[3].utc().date().should.eql(4);
|
155 | acc[4].utc().date().should.eql(5);
|
156 | });
|
157 |
|
158 | it('should iterate correctly by year over a Date-constructed range when leap years are involved', function() {
|
159 | var acc = [];
|
160 | var d1 = new Date(Date.UTC(2011, 1, 1));
|
161 | var d2 = new Date(Date.UTC(2013, 1, 1));
|
162 | var dr1 = moment.range(d1, d2);
|
163 | var dr2 = 'years';
|
164 |
|
165 | dr1.by(dr2, function(m) {
|
166 | acc.push(m.utc().year());
|
167 | });
|
168 |
|
169 | acc.should.eql([2011, 2012, 2013]);
|
170 | });
|
171 |
|
172 | it('should iterate correctly by year over a moment()-constructed range when leap years are involved', function() {
|
173 | var acc = [];
|
174 | var dr1 = moment.range(moment('2011', 'YYYY'), moment('2013', 'YYYY'));
|
175 | var dr2 = 'years';
|
176 |
|
177 | dr1.by(dr2, function(m) {
|
178 | acc.push(m.year());
|
179 | });
|
180 |
|
181 | acc.should.eql([2011, 2012, 2013]);
|
182 | });
|
183 |
|
184 | it('should iterate correctly by month over a moment()-constructed range when leap years are involved', function() {
|
185 | var acc = [];
|
186 | var dr1 = moment.range(moment.utc('2012-01', 'YYYY-MM'), moment.utc('2012-03', 'YYYY-MM'));
|
187 | var dr2 = 'months';
|
188 |
|
189 | dr1.by(dr2, function(m) {
|
190 | acc.push(m.utc().format('YYYY-MM'));
|
191 | });
|
192 |
|
193 | acc.should.eql(['2012-01', '2012-02', '2012-03']);
|
194 | });
|
195 |
|
196 | it('should iterate correctly by month over a Date-contstructed range when leap years are involved', function() {
|
197 | var acc = [];
|
198 | var d1 = new Date(Date.UTC(2012, 0));
|
199 | var d2 = new Date(Date.UTC(2012, 2));
|
200 | var dr1 = moment.range(d1, d2);
|
201 | var dr2 = 'months';
|
202 |
|
203 | dr1.by(dr2, function(m) {
|
204 | acc.push(m.utc().format('YYYY-MM'));
|
205 | });
|
206 |
|
207 | acc.should.eql(['2012-01', '2012-02', '2012-03']);
|
208 | });
|
209 |
|
210 | it('should not include .end in the iteration if exclusive is set to true when iterating by string', function() {
|
211 | var my1 = moment('2014-04-02T00:00:00.000Z');
|
212 | var my2 = moment('2014-04-04T00:00:00.000Z');
|
213 | var dr1 = moment.range(my1, my2);
|
214 | var acc = [];
|
215 |
|
216 | dr1.by('d', (function(d) {
|
217 | acc.push(d.utc().format('YYYY-MM-DD'));
|
218 | }), false);
|
219 |
|
220 | acc.should.eql(['2014-04-02', '2014-04-03', '2014-04-04']);
|
221 |
|
222 | acc = [];
|
223 |
|
224 | dr1.by('d', (function(d) {
|
225 | acc.push(d.utc().format('YYYY-MM-DD'));
|
226 | }), true);
|
227 |
|
228 | acc.should.eql(['2014-04-02', '2014-04-03']);
|
229 |
|
230 | acc = [];
|
231 |
|
232 | dr1.by('d', (function(d) {
|
233 | acc.push(d.utc().format('YYYY-MM-DD'));
|
234 | }));
|
235 |
|
236 | acc.should.eql(['2014-04-02', '2014-04-03', '2014-04-04']);
|
237 | });
|
238 |
|
239 | it('should not include .end in the iteration if exclusive is set to true when iterating by range', function() {
|
240 | var my1 = moment('2014-04-02T00:00:00.000Z');
|
241 | var my2 = moment('2014-04-04T00:00:00.000Z');
|
242 | var dr1 = moment.range(my1, my2);
|
243 | var dr2 = moment.range(my1, moment('2014-04-03T00:00:00.000Z'));
|
244 | var acc = [];
|
245 |
|
246 | dr1.by(dr2, function(d) {
|
247 | acc.push(d.utc().format('YYYY-MM-DD'));
|
248 | });
|
249 |
|
250 | acc.should.eql(['2014-04-02', '2014-04-03', '2014-04-04']);
|
251 |
|
252 | acc = [];
|
253 |
|
254 | dr1.by(dr2, (function(d) {
|
255 | acc.push(d.utc().format('YYYY-MM-DD'));
|
256 | }), false);
|
257 |
|
258 | acc.should.eql(['2014-04-02', '2014-04-03', '2014-04-04']);
|
259 |
|
260 | acc = [];
|
261 |
|
262 | dr1.by(dr2, (function(d) {
|
263 | acc.push(d.utc().format('YYYY-MM-DD'));
|
264 | }), true);
|
265 |
|
266 | acc.should.eql(['2014-04-02', '2014-04-03']);
|
267 | });
|
268 |
|
269 | it('should be exlusive when using by with minutes as well', function() {
|
270 | var d1 = moment('2014-01-01T00:00:00.000Z');
|
271 | var d2 = moment('2014-01-01T00:06:00.000Z');
|
272 | var dr = moment.range(d1, d2);
|
273 | var acc = [];
|
274 |
|
275 | dr.by('m', (function(d) {
|
276 | acc.push(d.utc().format('mm'));
|
277 | }));
|
278 |
|
279 | acc.should.eql(['00', '01', '02', '03', '04', '05', '06']);
|
280 |
|
281 | acc = [];
|
282 |
|
283 | dr.by('m', (function(d) {
|
284 | acc.push(d.utc().format('mm'));
|
285 | }), true);
|
286 |
|
287 | acc.should.eql(['00', '01', '02', '03', '04', '05']);
|
288 | });
|
289 | });
|
290 |
|
291 | describe('#contains()', function() {
|
292 | it('should work with Date objects', function() {
|
293 | var dr = moment.range(d1, d2);
|
294 |
|
295 | dr.contains(d3).should.be.true;
|
296 | dr.contains(d4).should.be.false;
|
297 | });
|
298 |
|
299 | it('should work with Moment objects', function() {
|
300 | var dr = moment.range(m1, m2);
|
301 |
|
302 | dr.contains(m3).should.be.true;
|
303 | dr.contains(m4).should.be.false;
|
304 | });
|
305 |
|
306 | it('should work with DateRange objects', function() {
|
307 | var dr1 = moment.range(m1, m4);
|
308 | var dr2 = moment.range(m3, m2);
|
309 |
|
310 | dr1.contains(dr2).should.be.true;
|
311 | dr2.contains(dr1).should.be.false;
|
312 | });
|
313 |
|
314 | it('should be an inclusive comparison', function() {
|
315 | var dr1 = moment.range(m1, m4);
|
316 |
|
317 | dr1.contains(m1).should.be.true;
|
318 | dr1.contains(m4).should.be.true;
|
319 | dr1.contains(dr1).should.be.true;
|
320 | });
|
321 |
|
322 | it('should be exlusive when the exclusive param is set', function() {
|
323 | var dr1 = moment.range(m1, m2);
|
324 |
|
325 | dr1.contains(dr1, true).should.be.false;
|
326 | dr1.contains(dr1, false).should.be.true;
|
327 | dr1.contains(dr1).should.be.true;
|
328 | dr1.contains(m2, true).should.be.false;
|
329 | dr1.contains(m2, false).should.be.true;
|
330 | dr1.contains(m2).should.be.true;
|
331 | });
|
332 | });
|
333 |
|
334 | describe('#overlaps()', function() {
|
335 | it('should work with DateRange objects', function() {
|
336 | var dr1 = moment.range(m1, m2);
|
337 | var dr2 = moment.range(m3, m4);
|
338 | var dr3 = moment.range(m2, m4);
|
339 | var dr4 = moment.range(m1, m3);
|
340 |
|
341 | dr1.overlaps(dr2).should.be.true;
|
342 | dr1.overlaps(dr3).should.be.false;
|
343 | dr4.overlaps(dr3).should.be.false;
|
344 | });
|
345 | });
|
346 |
|
347 | describe('#intersect()', function() {
|
348 | var d5 = new Date(Date.UTC(2011, 2, 2));
|
349 | var d6 = new Date(Date.UTC(2011, 4, 4));
|
350 | var d7 = new Date(Date.UTC(2011, 6, 6));
|
351 | var d8 = new Date(Date.UTC(2011, 8, 8));
|
352 |
|
353 | it('should work with [---{==]---} overlaps where (a=[], b={})', function() {
|
354 | var dr1 = moment.range(d5, d7);
|
355 | var dr2 = moment.range(d6, d8);
|
356 |
|
357 | dr1.intersect(dr2).isSame(moment.range(d6, d7)).should.be.true;
|
358 | });
|
359 |
|
360 | it('should work with {---[==}---] overlaps where (a=[], b={})', function() {
|
361 | var dr1 = moment.range(d6, d8);
|
362 | var dr2 = moment.range(d5, d7);
|
363 |
|
364 | dr1.intersect(dr2).isSame(moment.range(d6, d7)).should.be.true;
|
365 | });
|
366 |
|
367 | it('should work with [{===]---} overlaps where (a=[], b={})', function() {
|
368 | var dr1 = moment.range(d5, d6);
|
369 | var dr2 = moment.range(d5, d7);
|
370 |
|
371 | dr1.intersect(dr2).isSame(moment.range(d5, d6)).should.be.true;
|
372 | });
|
373 |
|
374 | it('should work with {[===}---] overlaps where (a=[], b={})', function() {
|
375 | var dr1 = moment.range(d5, d7);
|
376 | var dr2 = moment.range(d5, d6);
|
377 |
|
378 | dr1.intersect(dr2).isSame(moment.range(d5, d6)).should.be.true;
|
379 | });
|
380 |
|
381 | it('should work with [---{===]} overlaps where (a=[], b={})', function() {
|
382 | var dr1 = moment.range(d5, d7);
|
383 | var dr2 = moment.range(d6, d7);
|
384 |
|
385 | dr1.intersect(dr2).isSame(moment.range(d6, d7)).should.be.true;
|
386 | });
|
387 |
|
388 | it('should work with {---[===}] overlaps where (a=[], b={})', function() {
|
389 | var dr1 = moment.range(d6, d7);
|
390 | var dr2 = moment.range(d5, d7);
|
391 |
|
392 | dr1.intersect(dr2).isSame(moment.range(d6, d7)).should.be.true;
|
393 | });
|
394 |
|
395 | it('should work with [---] {---} overlaps where (a=[], b={})', function() {
|
396 | var dr1 = moment.range(d5, d6);
|
397 | var dr2 = moment.range(d7, d8);
|
398 |
|
399 | should.strictEqual(dr1.intersect(dr2), null);
|
400 | });
|
401 |
|
402 | it('should work with {---} [---] overlaps where (a=[], b={})', function() {
|
403 | var dr1 = moment.range(d7, d8);
|
404 | var dr2 = moment.range(d5, d6);
|
405 |
|
406 | should.strictEqual(dr1.intersect(dr2), null);
|
407 | });
|
408 |
|
409 | it('should work with [---]{---} overlaps where (a=[], b={})', function() {
|
410 | var dr1 = moment.range(d5, d6);
|
411 | var dr2 = moment.range(d6, d7);
|
412 |
|
413 | should.strictEqual(dr1.intersect(dr2), null);
|
414 | });
|
415 |
|
416 | it('should work with {---}[---] overlaps where (a=[], b={})', function() {
|
417 | var dr1 = moment.range(d6, d7);
|
418 | var dr2 = moment.range(d5, d6);
|
419 | should.strictEqual(dr1.intersect(dr2), null);
|
420 | });
|
421 |
|
422 | it('should work with {--[===]--} overlaps where (a=[], b={})', function() {
|
423 | var dr1 = moment.range(d6, d7);
|
424 | var dr2 = moment.range(d5, d8);
|
425 |
|
426 | dr1.intersect(dr2).isSame(dr1).should.be.true;
|
427 | });
|
428 |
|
429 | it('should work with [--{===}--] overlaps where (a=[], b={})', function() {
|
430 | var dr1 = moment.range(d5, d8);
|
431 | var dr2 = moment.range(d6, d7);
|
432 |
|
433 | dr1.intersect(dr2).isSame(dr2).should.be.true;
|
434 | });
|
435 |
|
436 | it('should work with [{===}] overlaps where (a=[], b={})', function() {
|
437 | var dr1 = moment.range(d5, d6);
|
438 | var dr2 = moment.range(d5, d6);
|
439 |
|
440 | dr1.intersect(dr2).isSame(dr2).should.be.true;
|
441 | });
|
442 |
|
443 | it('should work with [--{}--] overlaps where (a=[], b={})', function() {
|
444 | var dr1 = moment.range(d6, d6);
|
445 | var dr2 = moment.range(d5, d7);
|
446 |
|
447 | dr1.intersect(dr2).isSame(dr1).should.be.true;
|
448 | });
|
449 | });
|
450 |
|
451 | describe('#add()', function() {
|
452 | var d5 = new Date(Date.UTC(2011, 2, 2));
|
453 | var d6 = new Date(Date.UTC(2011, 4, 4));
|
454 | var d7 = new Date(Date.UTC(2011, 6, 6));
|
455 | var d8 = new Date(Date.UTC(2011, 8, 8));
|
456 |
|
457 | it('should add ranges with [---{==]---} overlaps where (a=[], b={})', function() {
|
458 | var dr1 = moment.range(d5, d7);
|
459 | var dr2 = moment.range(d6, d8);
|
460 |
|
461 | dr1.add(dr2).isSame(moment.range(d5, d8)).should.be.true;
|
462 | });
|
463 |
|
464 | it('should add ranges with {---[==}---] overlaps where (a=[], b={})', function() {
|
465 | var dr1 = moment.range(d6, d8);
|
466 | var dr2 = moment.range(d5, d7);
|
467 |
|
468 | dr1.add(dr2).isSame(moment.range(d5, d8)).should.be.true;
|
469 | });
|
470 |
|
471 | it('should add ranges with [{===]---} overlaps where (a=[], b={})', function() {
|
472 | var dr1 = moment.range(d5, d6);
|
473 | var dr2 = moment.range(d5, d7);
|
474 |
|
475 | dr1.add(dr2).isSame(moment.range(d5, d7)).should.be.true;
|
476 | });
|
477 |
|
478 | it('should add ranges with {[===}---] overlaps where (a=[], b={})', function() {
|
479 | var dr1 = moment.range(d5, d7);
|
480 | var dr2 = moment.range(d5, d6);
|
481 |
|
482 | dr1.add(dr2).isSame(moment.range(d5, d7)).should.be.true;
|
483 | });
|
484 |
|
485 | it('should add ranges with [---{===]} overlaps where (a=[], b={})', function() {
|
486 | var dr1 = moment.range(d5, d7);
|
487 | var dr2 = moment.range(d6, d7);
|
488 |
|
489 | dr1.add(dr2).isSame(moment.range(d5, d7)).should.be.true;
|
490 | });
|
491 |
|
492 | it('should add ranges with {---[===}] overlaps where (a=[], b={})', function() {
|
493 | var dr1 = moment.range(d6, d7);
|
494 | var dr2 = moment.range(d5, d7);
|
495 |
|
496 | dr1.add(dr2).isSame(moment.range(d5, d7)).should.be.true;
|
497 | });
|
498 |
|
499 | it('should not add ranges with [---] {---} overlaps where (a=[], b={})', function() {
|
500 | var dr1 = moment.range(d5, d6);
|
501 | var dr2 = moment.range(d7, d8);
|
502 |
|
503 | should.strictEqual(dr1.add(dr2), null);
|
504 | });
|
505 |
|
506 | it('should not add ranges with {---} [---] overlaps where (a=[], b={})', function() {
|
507 | var dr1 = moment.range(d7, d8);
|
508 | var dr2 = moment.range(d5, d6);
|
509 |
|
510 | should.strictEqual(dr1.add(dr2), null);
|
511 | });
|
512 |
|
513 | it('should not add ranges with [---]{---} overlaps where (a=[], b={})', function() {
|
514 | var dr1 = moment.range(d5, d6);
|
515 | var dr2 = moment.range(d6, d7);
|
516 |
|
517 | should.strictEqual(dr1.add(dr2), null);
|
518 | });
|
519 |
|
520 | it('should not add ranges with {---}[---] overlaps where (a=[], b={})', function() {
|
521 | var dr1 = moment.range(d6, d7);
|
522 | var dr2 = moment.range(d5, d6);
|
523 |
|
524 | should.strictEqual(dr1.add(dr2), null);
|
525 | });
|
526 |
|
527 | it('should add ranges {--[===]--} overlaps where (a=[], b={})', function() {
|
528 | var dr1 = moment.range(d6, d7);
|
529 | var dr2 = moment.range(d5, d8);
|
530 |
|
531 | dr1.add(dr2).isSame(moment.range(d5, d8)).should.be.true;
|
532 | });
|
533 |
|
534 | it('should add ranges [--{===}--] overlaps where (a=[], b={})', function() {
|
535 | var dr1 = moment.range(d5, d8);
|
536 | var dr2 = moment.range(d6, d7);
|
537 |
|
538 | dr1.add(dr2).isSame(moment.range(d5, d8)).should.be.true;
|
539 | });
|
540 |
|
541 | it('should add ranges [{===}] overlaps where (a=[], b={})', function() {
|
542 | var dr1 = moment.range(d5, d6);
|
543 | var dr2 = moment.range(d5, d6);
|
544 |
|
545 | dr1.add(dr2).isSame(moment.range(d5, d6)).should.be.true;
|
546 | });
|
547 | });
|
548 |
|
549 | describe('#subtract()', function() {
|
550 | var d5 = new Date(Date.UTC(2011, 2, 2));
|
551 | var d6 = new Date(Date.UTC(2011, 4, 4));
|
552 | var d7 = new Date(Date.UTC(2011, 6, 6));
|
553 | var d8 = new Date(Date.UTC(2011, 8, 8));
|
554 |
|
555 | it('should turn [--{==}--] into (--) (--) where (a=[], b={})', function() {
|
556 | var dr1 = moment.range(d5, d8);
|
557 | var dr2 = moment.range(d6, d7);
|
558 |
|
559 | dr1.subtract(dr2).should.eql([moment.range(d5, d6), moment.range(d7, d8)]);
|
560 | });
|
561 |
|
562 | it('should turn {--[==]--} into () where (a=[], b={})', function() {
|
563 | var dr1 = moment.range(d6, d7);
|
564 | var dr2 = moment.range(d5, d8);
|
565 |
|
566 | dr1.subtract(dr2).should.eql([]);
|
567 | });
|
568 |
|
569 | it('should turn {[==]} into () where (a=[], b={})', function() {
|
570 | var dr1 = moment.range(d5, d6);
|
571 | var dr2 = moment.range(d5, d6);
|
572 |
|
573 | dr1.subtract(dr2).should.eql([]);
|
574 | });
|
575 |
|
576 | it('should turn [--{==]--} into (--) where (a=[], b={})', function() {
|
577 | var dr1 = moment.range(d5, d7);
|
578 | var dr2 = moment.range(d6, d8);
|
579 |
|
580 | dr1.subtract(dr2).should.eql([moment.range(d5, d6)]);
|
581 | });
|
582 |
|
583 | it('should turn [--{==]} into (--) where (a=[], b={})', function() {
|
584 | var dr1 = moment.range(d5, d7);
|
585 | var dr2 = moment.range(d6, d7);
|
586 |
|
587 | dr1.subtract(dr2).should.eql([moment.range(d5, d6)]);
|
588 | });
|
589 |
|
590 | it('should turn {--[==}--] into (--) where (a=[], b={})', function() {
|
591 | var dr1 = moment.range(d6, d8);
|
592 | var dr2 = moment.range(d5, d7);
|
593 |
|
594 | dr1.subtract(dr2).should.eql([moment.range(d7, d8)]);
|
595 | });
|
596 |
|
597 | it('should turn {[==}--] into (--) where (a=[], b={})', function() {
|
598 | var dr1 = moment.range(d6, d8);
|
599 | var dr2 = moment.range(d6, d7);
|
600 |
|
601 | dr1.subtract(dr2).should.eql([moment.range(d7, d8)]);
|
602 | });
|
603 |
|
604 | it('should turn [--] {--} into (--) where (a=[], b={})', function() {
|
605 | var dr1 = moment.range(d5, d6);
|
606 | var dr2 = moment.range(d7, d8);
|
607 |
|
608 | dr1.subtract(dr2).should.eql([dr1]);
|
609 | });
|
610 |
|
611 | it('should turn {--} [--] into (--) where (a=[], b={})', function() {
|
612 | var dr1 = moment.range(d7, d8);
|
613 | var dr2 = moment.range(d5, d6);
|
614 |
|
615 | dr1.subtract(dr2).should.eql([dr1]);
|
616 | });
|
617 | });
|
618 |
|
619 | describe('#isSame()', function() {
|
620 | it('should true if the start and end of both DateRange objects equal', function() {
|
621 | var dr1 = moment.range(d1, d2);
|
622 | var dr2 = moment.range(d1, d2);
|
623 |
|
624 | dr1.isSame(dr2).should.be.true;
|
625 | });
|
626 |
|
627 | it('should false if the starts differ between objects', function() {
|
628 | var dr1 = moment.range(d1, d3);
|
629 | var dr2 = moment.range(d2, d3);
|
630 |
|
631 | dr1.isSame(dr2).should.be.false;
|
632 | });
|
633 |
|
634 | it('should false if the ends differ between objects', function() {
|
635 | var dr1 = moment.range(d1, d2);
|
636 | var dr2 = moment.range(d1, d3);
|
637 |
|
638 | dr1.isSame(dr2).should.be.false;
|
639 | });
|
640 | });
|
641 |
|
642 | describe('#toString()', function() {
|
643 | it('should be a correctly formatted ISO8601 Time Interval', function() {
|
644 | var start = '2015-01-17T09:50:04+00:00';
|
645 | var end = '2015-04-17T08:29:55+00:00';
|
646 | var dr = moment.range(moment.utc(start), moment.utc(end));
|
647 |
|
648 | dr.toString().should.equal(start + '/' + end);
|
649 | });
|
650 | });
|
651 |
|
652 | describe('#valueOf()', function() {
|
653 | it('should be the value of the range in milliseconds', function() {
|
654 | var dr = moment.range(d1, d2);
|
655 |
|
656 | dr.valueOf().should.eql(d2.getTime() - d1.getTime());
|
657 | });
|
658 |
|
659 | it('should correctly coerce to a number', function() {
|
660 | var dr1 = moment.range(d4, d2);
|
661 | var dr2 = moment.range(d3, d2);
|
662 |
|
663 | (dr1 > dr2).should.be.true;
|
664 | });
|
665 | });
|
666 |
|
667 | describe('#toDate()', function() {
|
668 | it('should be a array like [dateObject, dateObject]', function() {
|
669 | var dr = moment.range(d1, d2);
|
670 | var drTodate = dr.toDate();
|
671 |
|
672 | drTodate.length.should.eql(2);
|
673 | drTodate[0].valueOf().should.eql(d1.valueOf());
|
674 | drTodate[1].valueOf().should.eql(d2.valueOf());
|
675 | });
|
676 | });
|
677 |
|
678 | describe('#diff()', function() {
|
679 | it('should use momentjs’ diff method', function() {
|
680 | var dr = moment.range(d1, d2);
|
681 |
|
682 | dr.diff('months').should.equal(3);
|
683 | dr.diff('days').should.equal(92);
|
684 | dr.diff().should.equal(7948800000);
|
685 | });
|
686 | });
|
687 |
|
688 | describe('#center()', function() {
|
689 | it('should use momentjs’ center method', function() {
|
690 | var d1 = new Date(Date.UTC(2011, 2, 5));
|
691 | var d2 = new Date(Date.UTC(2011, 3, 5));
|
692 | var dr = moment.range(d1, d2);
|
693 |
|
694 | dr.center().valueOf().should.equal(1300622400000);
|
695 | });
|
696 | });
|
697 | });
|