UNPKG

zurvan

Version:

A library for simulating time in Node.js

128 lines (107 loc) 4.27 kB
'use strict'; var TimeUnit = require('../TimeUnit'); var TypeChecks = require('../detail/utils/TypeChecks'); var zurvan = require('../zurvan'); var assert = require('assert'); describe('zurvan', function() { describe('when faking Date', function() { beforeEach(function() { return zurvan.interceptTimers(); }); afterEach(function() { return zurvan.releaseTimers(); }); it('intercepts Date and by default resets timestamp to 0', function(done) { var now = Date.now(); var nowDate = new Date(); assert.equal(now, 0); assert.equal(nowDate.toISOString(), '1970-01-01T00:00:00.000Z'); done(); }); it('behaves the same as original in all cases that do not require referring to current time', function(done) { var orig = new Date(0); var now = new Date(); assert.equal(orig.toISOString(), now.toISOString()); done(); }); it('adjusts to how far time is moved', function(done) { zurvan .advanceTime(TimeUnit.days(10)) .then(function() { var nowDate = new Date(); assert.equal(nowDate.toISOString(), '1970-01-11T00:00:00.000Z'); return zurvan.advanceTime(TimeUnit.nanoseconds(17e9 + 673e6)); }) .then(function() { var nowDate = new Date(); assert.equal(nowDate.toISOString(), '1970-01-11T00:00:17.673Z'); return zurvan.advanceTime(TimeUnit.minutes(86)); }) .then(function() { var nowDate = new Date(); var origFromString = new Date(Date.UTC(2020, 3, 5, 2, 5, 6, 78)); assert.equal(nowDate.toISOString(), '1970-01-11T01:26:17.673Z'); assert.equal( origFromString.toISOString(), '2020-04-05T02:05:06.078Z' ); var origFromWhole = new Date(1995, 4, 1, 9, 12, 5, 854); assert.equal(origFromWhole.getFullYear(), 1995); assert.equal(origFromWhole.getMonth(), 4); assert.equal(origFromWhole.getDate(), 1); assert.equal(origFromWhole.getHours(), 9); assert.equal(origFromWhole.getMinutes(), 12); assert.equal(origFromWhole.getSeconds(), 5); assert.equal(origFromWhole.getMilliseconds(), 854); }) .then(function() {}) .then(done, done); }); it('allows Date to be called as function as in original', function(done) { var date = Date(); assert(TypeChecks.isString(date)); var dateObj = new Date(date); assert(TypeChecks.isObject(dateObj)); done(); }); it('makes it possible to set system timer to arbitrary date', function(done) { zurvan.setSystemTime(new Date(Date.UTC(2010, 5, 6, 2, 1, 3))); var nowDate = new Date(); assert.equal(nowDate.toISOString(), '2010-06-06T02:01:03.000Z'); done(); }); it('makes it possible to set system timer to arbitrary date from parseable string', function(done) { zurvan.setSystemTime( new Date(Date.UTC(2005, 5, 6, 2, 1, 3)).toISOString() ); var nowDate = new Date(); assert.equal(nowDate.toISOString(), '2005-06-06T02:01:03.000Z'); done(); }); it('makes it possible to set system timer to arbitrary date from timestamp', function(done) { zurvan.setSystemTime(Date.UTC(2005, 5, 13, 2, 1, 3)); var nowDate = new Date(); assert.equal(nowDate.toISOString(), '2005-06-13T02:01:03.000Z'); done(); }); it('properly synchronizes system timer even if changed after startup', function(done) { zurvan .advanceTime(TimeUnit.days(10)) .then(function() { zurvan.setSystemTime(Date.UTC(1990, 1, 1)); var nowDate = new Date(); assert.equal(nowDate.toISOString(), '1990-02-01T00:00:00.000Z'); setTimeout(function() { var nowDate = new Date(); assert.equal(nowDate.toISOString(), '1990-02-01T01:00:00.000Z'); }, TimeUnit.hours(1).toMilliseconds()); return zurvan.advanceTime(TimeUnit.days(10)); }) .then(function() { var nowDate = new Date(); assert.equal(nowDate.toISOString(), '1990-02-11T00:00:00.000Z'); }) .then(done, done); }); }); });