holyfills
Version:
No more "Holy Sxxt!!" when writting ES5/ES6
92 lines (78 loc) • 7.59 kB
JavaScript
;
describe("parse", function () {
before(function() {
require("../../lib/date/date_constructor");
});
it("should be a polyfill", function () {
Date.parse.toString().should.not.containEql("[native code]");
});
// TODO: Write the rest of the test.
it("should support extended years", function () {
Date.parse("0001-01-01T00:00:00Z").should.equal(-62135596800000);
Date.parse("+275760-09-13T00:00:00.000Z").should.equal(8.64e15);
Date.parse("+033658-09-27T01:46:40.000Z").should.equal(1e15);
Date.parse("-000001-01-01T00:00:00Z").should.equal(-62198755200000);
Date.parse("+002009-12-15T00:00:00Z").should.equal(1260835200000);
});
it("should be an invalid date", function () { //Chrome 19 Opera 12 Firefox 11 IE 9 Safari 5.1.1
Date.parse("2012-11-31T23:59:59.000Z").should.not.be.ok; //1354406399000 NaN NaN 1354406399000 NaN
Date.parse("2012-12-31T23:59:60.000Z").should.not.be.ok; //NaN NaN NaN NaN 1356998400000
Date.parse("2012-04-04T24:00:00.500Z").should.not.be.ok; //NaN NaN 1333584000500 1333584000500 NaN
Date.parse("2012-12-31T10:08:60.000Z").should.not.be.ok; //NaN NaN NaN NaN 1356948540000
Date.parse("2012-13-01T12:00:00.000Z").should.not.be.ok; //NaN NaN NaN NaN NaN
Date.parse("2012-12-32T12:00:00.000Z").should.not.be.ok; //NaN NaN NaN NaN NaN
Date.parse("2012-12-31T25:00:00.000Z").should.not.be.ok; //NaN NaN NaN NaN NaN
Date.parse("2012-12-31T24:01:00.000Z").should.not.be.ok; //NaN NaN NaN 1356998460000 NaN
Date.parse("2012-12-31T12:60:00.000Z").should.not.be.ok; //NaN NaN NaN NaN NaN
Date.parse("2012-12-31T12:00:60.000Z").should.not.be.ok; //NaN NaN NaN NaN 1356955260000
Date.parse("2012-00-31T23:59:59.000Z").should.not.be.ok; //NaN NaN NaN NaN NaN
Date.parse("2012-12-00T23:59:59.000Z").should.not.be.ok; //NaN NaN NaN NaN NaN
Date.parse("2011-02-29T12:00:00.000Z").should.not.be.ok; //1298980800000 NaN NaN 1298980800000 NaN
});
it("should work", function () { //Chrome 19 Opera 12 Firefox 11 IE 9 Safari 5.1.1
Date.parse("2012-12-31T23:59:59.000Z").should.equal(1356998399000); //1356998399000 1356998399000 1356998399000 1356998399000 1356998399000
Date.parse("2012-04-04T05:02:02.170Z").should.equal(1333515722170); //1333515722170 1333515722170 1333515722170 1333515722170 1333515722170
Date.parse("2012-04-04T05:02:02.170999Z").should.equal(1333515722170);//1333515722170 1333515722170 1333515722170 1333515722170 1333515722170
Date.parse("2012-04-04T05:02:02.17Z").should.equal(1333515722170); //1333515722170 1333515722170 1333515722170 1333515722170 1333515722170
Date.parse("2012-04-04T05:02:02.1Z").should.equal(1333515722100); //1333515722170 1333515722170 1333515722170 1333515722170 1333515722170
Date.parse("2012-04-04T24:00:00.000Z").should.equal(1333584000000); //NaN 1333584000000 1333584000000 1333584000000 1333584000000
Date.parse("2012-02-29T12:00:00.000Z").should.equal(1330516800000); //1330516800000 1330516800000 1330516800000 1330516800000 1330516800000
Date.parse("2011-03-01T12:00:00.000Z").should.equal(1298980800000); //1298980800000 1298980800000 1298980800000 1298980800000 1298980800000
// https://github.com/es-shims/es5-shim/issues/80 Safari bug with leap day
(Date.parse("2034-03-01T00:00:00.000Z") -
Date.parse("2034-02-27T23:59:59.999Z")).should.equal(86400001); //86400001 86400001 86400001 86400001 1
});
it("should support extended years", function () { //Chrome 19 Opera 12 Firefox 11 IE 9 Safari 5.1.1
Date.parse("0000-01-01T00:00:00.000Z").should.equal(-621672192e5); //-621672192e5 -621672192e5 -621672192e5 -621672192e5 -621672192e5
Date.parse("+275760-09-13T00:00:00.000Z").should.equal(8.64e15); //8.64e15 NaN 8.64e15 8.64e15 8.64e15
Date.parse("-271821-04-20T00:00:00.000Z").should.equal(-8.64e15); //-8.64e15 NaN -8.64e15 -8.64e15 -8.6400000864e15
Date.parse("+275760-09-13T00:00:00.001Z").should.not.be.ok; //NaN NaN NaN 8.64e15 + 1 8.64e15 + 1
Date.parse("-271821-04-19T23:59:59.999Z").should.not.be.ok; //NaN NaN NaN -8.64e15 - 1 -8.6400000864e15 - 1
});
it("works with timezone offsets", function () { //Chrome 19 Opera 12 Firefox 11 IE 9 Safari 5.1.1
Date.parse("2012-01-29T12:00:00.000+01:00").should.equal(132783480e4);//132783480e4 132783480e4 132783480e4 132783480e4 132783480e4
Date.parse("2012-01-29T12:00:00.000-00:00").should.equal(132783840e4);//132783840e4 132783840e4 132783840e4 132783840e4 132783840e4
Date.parse("2012-01-29T12:00:00.000+00:00").should.equal(132783840e4);//132783840e4 132783840e4 132783840e4 132783840e4 132783840e4
Date.parse("2012-01-29T12:00:00.000+23:59").should.equal(132775206e4);//132775206e4 132775206e4 132775206e4 132775206e4 132775206e4
Date.parse("2012-01-29T12:00:00.000-23:59").should.equal(132792474e4);//132792474e4 132792474e4 132792474e4 132792474e4 132792474e4
Date.parse("2012-01-29T12:00:00.000+24:00").should.not.be.ok; //NaN 1327752e6 NaN 1327752000000 1327752000000
Date.parse("2012-01-29T12:00:00.000+24:01").should.not.be.ok; //NaN NaN NaN 1327751940000 1327751940000
Date.parse("2012-01-29T12:00:00.000+24:59").should.not.be.ok; //NaN NaN NaN 1327748460000 1327748460000
Date.parse("2012-01-29T12:00:00.000+25:00").should.not.be.ok; //NaN NaN NaN NaN NaN
Date.parse("2012-01-29T12:00:00.000+00:60").should.not.be.ok; //NaN NaN NaN NaN NaN
Date.parse("-271821-04-20T00:00:00.000+00:01").should.not.be.ok; //NaN NaN NaN -864000000006e4 -864000008646e4
Date.parse("-271821-04-20T00:01:00.000+00:01").should.equal(-8.64e15);//-8.64e15 NaN -8.64e15 -8.64e15 -864000008640e4
// When time zone is missed, local offset should be used (ES 5.1 bug)
// see https://bugs.ecmascript.org/show_bug.cgi?id=112
var tzOffset = Number(new Date(1970, 0));
// same as (new Date().getTimezoneOffset() * 60000)
Date.parse("1970-01-01T00:00:00").should.equal(tzOffset); //tzOffset 0 0 0 NaN
});
it("should be able to coerce to a number", function () {
var actual = Number(new Date(1970, 0));
var expected = parseInt(actual, 10);
(null != actual).should.be.ok;
actual.should.equal(expected);
isNaN(actual).should.not.be.ok;
});
});