Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
358 lines
6.9 KiB
JavaScript
Executable file
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);
|
|
});
|
|
});
|
|
});
|
|
|
|
});
|