VulpesOS/gaia/apps/calendar/test/unit/common/timespan_test.js
OverSu b38dea0597 Publish Vulpes Preview 15 sources for desktop, Android and Tundra
Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
2026-09-30 23:13:03 +02:00

358 lines
6.9 KiB
JavaScript
Executable file

define(function(require) {
'use strict';
var Calc = require('common/calc');
var Timespan = require('common/timespan');
suite('timespan', function() {
var subject;
var startDate;
var endDate;
setup(function() {
startDate = new Date(2012, 1, 1);
endDate = new Date(2012, 12, 1);
subject = new Timespan(
startDate,
endDate
);
});
test('initializer', function() {
assert.equal(
subject.start,
startDate.valueOf()
);
assert.equal(
subject.end,
endDate.valueOf()
);
});
test('#isEqual', function() {
var span = new Timespan(
new Date(2012, 1, 1),
new Date(2012, 1, 5)
);
var eqlSpan = new Timespan(
new Date(2012, 1, 1),
new Date(2012, 1, 5)
);
var notEqualSpan = new Timespan(
new Date(2012, 1, 1),
new Date(2012, 1, 6)
);
assert.isTrue(span.isEqual(eqlSpan));
assert.isFalse(span.isEqual(notEqualSpan));
});
test('#daysBetween', function() {
var range = new Timespan(
new Date(2012, 1, 1),
new Date(2012, 1, 3)
);
var dates = Calc.daysBetween(range);
assert.deepEqual(
dates[0],
new Date(2012, 1, 1)
);
assert.deepEqual(
dates[1],
new Date(2012, 1, 2)
);
assert.deepEqual(
dates[2],
new Date(2012, 1, 3)
);
});
suite('#trimOverlap', function() {
var before;
var subject;
var none;
setup(function() {
none = new Timespan(
new Date(2012, 5, 1),
new Date(2012, 5, 15)
);
before = new Timespan(
// July 1
new Date(2012, 6, 1),
// Aug 4th
new Date(2012, 7, 4)
);
subject = new Timespan(
// July 29th
new Date(2012, 6, 29),
// Aug 31
new Date(2012, 7, 31)
);
});
test('middle', function() {
var long = new Timespan(
new Date(2012, 0, 1),
new Date(2012, 0, 31)
);
var short = new Timespan(
new Date(2012, 0, 5),
new Date(2012, 0, 10)
);
assert.isNull(
long.trimOverlap(short),
'should return null subject contains given'
);
assert.isNull(
short.trimOverlap(long),
'should return null when given contains subject'
);
});
test('no overlap', function() {
var out = before.trimOverlap(none);
assert.deepEqual(out, none);
});
test('overlaps && input.end > subject.start', function() {
var output = subject.trimOverlap(
before
);
var start = new Date(2012, 6, 1);
var end = new Date(
2012, 6, 29
);
end.setMilliseconds(-1);
var expected = new Timespan(
start, end
);
assert.deepEqual(output, expected);
});
test('overlaps && subject.end > input.start', function() {
var output = before.trimOverlap(
subject
);
var start = new Date(2012, 7, 4);
start.setMilliseconds(
start.getMilliseconds() + 1
);
var end = new Date(
2012, 7, 31
);
var expected = new Timespan(
start, end
);
assert.deepEqual(output, expected);
});
});
suite('#overlaps', function() {
var dates;
suiteSetup(function() {
dates = {
'range: inside': {
assert: true,
value: new Timespan(
startDate,
endDate
)
},
'range: starts on end date': {
assert: false,
value: new Timespan(
endDate,
new Date(2015, 1, 1)
)
},
'range: outside before': {
assert: false,
value: new Timespan(
new Date(1991, 1, 1),
new Date(2000, 1, 1)
)
},
'range: outside after': {
assert: false,
value: new Timespan(
new Date(2015, 1, 1),
new Date(2016, 1, 1)
)
},
'range: greater': {
assert: true,
value: new Timespan(
new Date(2011, 12, 31),
new Date(2012, 12, 2)
)
},
'range overlap: start before': {
assert: true,
value: new Timespan(
new Date(2011, 1, 1),
new Date(2012, 1, 15)
)
},
'range overlap: end before': {
assert: true,
value: new Timespan(
new Date(2012, 1, 2),
new Date(2012, 11, 12)
)
}
};
});
test('overlaping times', function() {
var key;
for (key in dates) {
if (dates.hasOwnProperty(key)) {
var value = dates[key].value;
assert.equal(
subject.overlaps(value),
dates[key].assert,
key
);
}
}
});
test('overlaping times as dates', function() {
var key;
for (key in dates) {
if (dates.hasOwnProperty(key)) {
var value = dates[key].value;
var start = new Date(value.start);
var end = new Date(value.end);
assert.equal(
subject.overlaps(start, end),
dates[key].assert,
key
);
}
}
});
});
suite('#contains', function() {
var dates;
suiteSetup(function() {
dates = {
'day of': {
assert: true,
value: new Date(2012, 1, 1)
},
'one day after': {
assert: true,
value: new Date(2012, 1, 2)
},
'day of end range': {
assert: true,
value: new Date(2012, 12, 1)
},
'day before range': {
assert: false,
value: new Date(2011, 12, 31)
},
'day after range': {
assert: false,
value: new Date(2012, 12, 2)
}
};
});
test('timespan in range', function() {
var span = new Timespan(
new Date(2012, 1, 1),
new Date(2012, 1, 5)
);
assert.isTrue(
subject.contains(span)
);
assert.isFalse(
span.contains(subject)
);
});
function testWith(method, useNumeric) {
var key;
var prefix = '';
if (useNumeric) {
prefix += '[numeric] ';
}
prefix += method;
for (key in dates) {
if (dates.hasOwnProperty(key)) {
var value = dates[key].value.valueOf();
if (useNumeric) {
value = value.valueOf();
}
assert.equal(
subject.contains(value),
dates[key].assert,
prefix + key
);
}
}
}
test('numeric (contains)', function() {
testWith('contains', true);
});
test('numeric (containsNumeric)', function() {
testWith('containsNumeric', true);
});
test('date', function() {
testWith('contains', false);
});
});
});
});