Add specs for mock date
This commit is contained in:
139
spec/core/MockDateSpec.js
Normal file
139
spec/core/MockDateSpec.js
Normal file
@@ -0,0 +1,139 @@
|
||||
describe("FakeDate", function() {
|
||||
it("does not fail if no global date is found", function() {
|
||||
var fakeGlobal = {},
|
||||
mockDate = new j$.MockDate(fakeGlobal);
|
||||
|
||||
mockDate.install();
|
||||
|
||||
fakeGlobal.Date = jasmine.createSpy("Date");
|
||||
|
||||
mockDate.tick(0);
|
||||
|
||||
expect(fakeGlobal.Date).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("does not replace global Date if it is not installed", function() {
|
||||
var fakeDate = jasmine.createSpy("global Date"),
|
||||
fakeGlobal = { Date: fakeDate },
|
||||
mockDate = new j$.MockDate(fakeGlobal);
|
||||
|
||||
fakeDate.now = function(){};
|
||||
|
||||
expect(fakeDate).toEqual(fakeGlobal.Date);
|
||||
mockDate.install();
|
||||
|
||||
expect(fakeDate).not.toEqual(fakeGlobal.Date);
|
||||
});
|
||||
|
||||
it("replaces the global Date on uninstall", function() {
|
||||
var fakeDate = jasmine.createSpy("global Date"),
|
||||
fakeGlobal = { Date: fakeDate },
|
||||
mockDate = new j$.MockDate(fakeGlobal);
|
||||
|
||||
fakeDate.now = function(){};
|
||||
|
||||
mockDate.install();
|
||||
mockDate.uninstall();
|
||||
|
||||
expect(fakeDate).toEqual(fakeGlobal.Date);
|
||||
|
||||
});
|
||||
|
||||
it("takes the current time as the base when installing without parameters", function() {
|
||||
var fakeDate = jasmine.createSpy("global Date"),
|
||||
fakeGlobal = { Date: fakeDate },
|
||||
mockDate = new j$.MockDate(fakeGlobal);
|
||||
|
||||
fakeGlobal.Date.prototype.getTime = function() {
|
||||
return 1000;
|
||||
};
|
||||
fakeDate.now = function(){ return 1000; };
|
||||
|
||||
mockDate.install();
|
||||
|
||||
expect(new fakeGlobal.Date().getTime()).toEqual(1000);
|
||||
});
|
||||
|
||||
it("can accept a date as time base when installing", function() {
|
||||
var fakeGlobal = { Date: Date },
|
||||
mockDate = new j$.MockDate(fakeGlobal),
|
||||
baseDate = new Date(2013, 9, 23);
|
||||
|
||||
mockDate.install(baseDate);
|
||||
|
||||
expect(new fakeGlobal.Date().getTime()).toEqual(baseDate.getTime());
|
||||
});
|
||||
|
||||
|
||||
it("fakes current time when using Date.now()", function() {
|
||||
var fakeGlobal = { Date: Date },
|
||||
mockDate = new j$.MockDate(fakeGlobal),
|
||||
baseDate = new Date(2013, 9, 23);
|
||||
|
||||
mockDate.install(baseDate);
|
||||
|
||||
expect(fakeGlobal.Date.now()).toEqual(baseDate.getTime());
|
||||
});
|
||||
|
||||
it("makes time passes using tick", function() {
|
||||
var fakeDate = jasmine.createSpy("global Date"),
|
||||
fakeGlobal = { Date: fakeDate },
|
||||
mockDate = new j$.MockDate(fakeGlobal);
|
||||
|
||||
fakeDate.now = function(){ return 1000; };
|
||||
|
||||
mockDate.install();
|
||||
|
||||
mockDate.tick(100);
|
||||
|
||||
expect(fakeGlobal.Date.now()).toEqual(1100);
|
||||
|
||||
mockDate.tick(1000);
|
||||
|
||||
expect(fakeGlobal.Date.now()).toEqual(2100);
|
||||
});
|
||||
|
||||
it("allows to increase 0 milliseconds using tick", function() {
|
||||
var fakeDate = jasmine.createSpy("global Date"),
|
||||
fakeGlobal = { Date: fakeDate },
|
||||
mockDate = new j$.MockDate(fakeGlobal);
|
||||
|
||||
fakeDate.now = function(){ return 1000; };
|
||||
|
||||
mockDate.install();
|
||||
|
||||
mockDate.tick(0);
|
||||
expect(fakeGlobal.Date.now()).toEqual(1000);
|
||||
|
||||
mockDate.tick();
|
||||
expect(fakeGlobal.Date.now()).toEqual(1000);
|
||||
});
|
||||
|
||||
it("allows to create a Date in a different time than now", function() {
|
||||
var fakeGlobal = { Date: Date },
|
||||
mockDate = new j$.MockDate(fakeGlobal),
|
||||
baseDate = new Date(2013, 9, 23, 0, 0, 0, 0);
|
||||
|
||||
mockDate.install(baseDate);
|
||||
|
||||
var otherDate = new fakeGlobal.Date(2013, 9, 23, 0, 0, 1, 0);
|
||||
|
||||
mockDate.tick(1000);
|
||||
|
||||
expect(fakeGlobal.Date.now()).toEqual(otherDate.getTime());
|
||||
});
|
||||
|
||||
it("copies all Date properties to the mocked date", function() {
|
||||
var fakeGlobal = { Date: Date },
|
||||
mockDate = new j$.MockDate(fakeGlobal),
|
||||
baseDate = new Date(2013, 9, 23, 0, 0, 0, 0);
|
||||
|
||||
mockDate.install(baseDate);
|
||||
|
||||
var otherDate = new fakeGlobal.Date();
|
||||
|
||||
expect(otherDate).toEqual(jasmine.any(Date));
|
||||
|
||||
expect(fakeGlobal.Date.UTC(2013, 9, 23)).toEqual(Date.UTC(2013, 9, 23));
|
||||
});
|
||||
});
|
||||
@@ -15,14 +15,6 @@ getJasmineRequireObj().Clock = function() {
|
||||
},
|
||||
installed = false;
|
||||
|
||||
if (date) {
|
||||
var realDate = {
|
||||
Date: global.Date
|
||||
},
|
||||
fakeDate = {
|
||||
Date: date.Date
|
||||
};
|
||||
}
|
||||
|
||||
self.install = function(mockDate) {
|
||||
replace(global, fakeTimingFunctions);
|
||||
@@ -31,15 +23,13 @@ getJasmineRequireObj().Clock = function() {
|
||||
|
||||
if (date && mockDate) {
|
||||
date.install(mockDate);
|
||||
replace(global, fakeDate);
|
||||
}
|
||||
};
|
||||
|
||||
self.uninstall = function() {
|
||||
delayedFunctionScheduler.reset();
|
||||
if (date) {
|
||||
date.reset();
|
||||
replace(global, realDate);
|
||||
date.uninstall();
|
||||
}
|
||||
replace(global, realTimingFunctions);
|
||||
|
||||
|
||||
@@ -6,16 +6,20 @@ getJasmineRequireObj().MockDate = function() {
|
||||
if (!global || !global.Date) {
|
||||
self.install = function() {};
|
||||
self.tick = function() {};
|
||||
self.reset = function() {};
|
||||
self.uninstall = function() {};
|
||||
return self;
|
||||
}
|
||||
|
||||
var GlobalDate = global.Date;
|
||||
|
||||
self.install = function(mockDate) {
|
||||
if (mockDate instanceof Date) {
|
||||
currentTime = mockDate.getTime();
|
||||
} else {
|
||||
currentTime = global.Date.now();
|
||||
currentTime = GlobalDate.now();
|
||||
}
|
||||
|
||||
global.Date = FakeDate;
|
||||
};
|
||||
|
||||
self.tick = function(millis) {
|
||||
@@ -23,35 +27,34 @@ getJasmineRequireObj().MockDate = function() {
|
||||
currentTime = currentTime + millis;
|
||||
};
|
||||
|
||||
self.reset = function() {
|
||||
self.uninstall = function() {
|
||||
currentTime = 0;
|
||||
global.Date = GlobalDate;
|
||||
};
|
||||
|
||||
self.Date = FakeDate;
|
||||
|
||||
createDateProperties();
|
||||
|
||||
return self;
|
||||
|
||||
function FakeDate() {
|
||||
if (arguments.length === 0) {
|
||||
return new global.Date(currentTime);
|
||||
return new GlobalDate(currentTime);
|
||||
} else {
|
||||
return global.Date.apply(this, arguments);
|
||||
return new GlobalDate(arguments[0], arguments[1], arguments[2],
|
||||
arguments[3], arguments[4], arguments[5], arguments[6]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function createDateProperties() {
|
||||
FakeDate.prototype = global.Date.prototype;
|
||||
|
||||
FakeDate.now = function() {
|
||||
return currentTime;
|
||||
}
|
||||
};
|
||||
|
||||
FakeDate.toSource = global.Date.toSource;
|
||||
FakeDate.toString = global.Date.toString;
|
||||
FakeDate.parse = global.Date.parse;
|
||||
FakeDate.UTC = global.Date.UTC;
|
||||
FakeDate.toSource = GlobalDate.toSource;
|
||||
FakeDate.toString = GlobalDate.toString;
|
||||
FakeDate.parse = GlobalDate.parse;
|
||||
FakeDate.UTC = GlobalDate.UTC;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user