Compatibility with Hardened JavaScript (#4088)

This PR proposes changes to existing test262 tests to allow them to pass under Hardened JavaScript (see Secure ECMAScript proposal and Hardened JavaScript). Moddable uses Hardened JavaScript for JavaScript runtimes on resource constrained embedded devices, including those targeted by ECMA-419.

The changes fall into four groups:

1. Replace use of new Date() with new Date(1970). Scripts running inside a Compartment cannot retrieve the current time, so new Date() throws but new Date(1970) succeeds. Very few tests need the current time, but instead simply need a Date instance.
2. Use Object.defineProperty instead of setting existing built-in properties directly, such as toString and toValue. In Hardened JavaScript, prototypes of built-in objects are frozen. Consequently, setting properties of an instance that exist on the prototype throw (Hardened JavaScript is always in strict mode).
3. Eliminate use of Math.random(). Scripts running inside a Compartment cannot generate random numbers. One test identified so far uses Math.random() in a way that can easily be replaced with a counter.
4. Narrow the scope of exception tests. Consider the following

assert.throws(TypeError, () => {
  var s1 = new Date();
  s1.toString = Boolean.prototype.toString;
  s1.toString();
});

This test passes, but only because new Date() fails by throwing a TypeError. If the invocation of the Date constructor is resolved by (1) above, then the assignment to toString fails as per (2) above. The script should be modified as below to ensure that assert.throws only tests the intended statement, s1.toString(). The modified script tests the intended functionality and passes under Hardened JavaScript

var s1 = new Date(1970);
Object.defineProperty(s1, "toString", {
  value: Boolean.prototype.toString
});
assert.throws(TypeError, () => {
  s1.toString();
});

This is an initial PR to begin the process of adapting test262 for use with Hardened JavaScript. Further changes are expected, with the vast majority likely to fall into the four groups described above.

Thank you to gibson042, kriskowal, and erights for their advice on this work.
This commit is contained in:
Peter Hoddie 2024-07-04 08:19:23 -07:00 committed by GitHub
parent 3f805a1383
commit e4f4abdcb2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
113 changed files with 161 additions and 150 deletions

View File

@ -4,9 +4,11 @@
/*---
esid: sec-ecmascript-standard-built-in-objects
desc: >
new SubDate() instanceof Date
new SubDate(0) instanceof Date
template: default
---*/
//- builtin
Date
//- args
0

View File

@ -15,19 +15,19 @@ features: [Symbol]
var date;
date = new Date();
date = new Date(0);
assert.sameValue(date.setYear(), NaN, 'return value (no argument)');
assert.sameValue(
date.valueOf(), NaN, '[[DateValue]] internal slot (no argument)'
);
date = new Date();
date = new Date(0);
assert.sameValue(date.setYear(NaN), NaN, 'return value (literal NaN)');
assert.sameValue(
date.valueOf(), NaN, '[[DateValue]] internal slot (literal NaN)'
);
date = new Date();
date = new Date(0);
assert.sameValue(
date.setYear('not a number'), NaN, 'return value (NaN from ToNumber)'
);

View File

@ -12,7 +12,7 @@ info: |
features: [Symbol]
---*/
var date = new Date();
var date = new Date(0);
var symbol = Symbol('');
var year = {
valueOf: function() {

View File

@ -7,4 +7,4 @@ es5id: 15.4.3.2-1-9
description: Array.isArray applied to Date object
---*/
assert.sameValue(Array.isArray(new Date()), false, 'Array.isArray(new Date()) must return false');
assert.sameValue(Array.isArray(new Date(0)), false, 'Array.isArray(new Date(0)) must return false');

View File

@ -10,7 +10,7 @@ function callbackfn(val, idx, obj) {
return !(obj instanceof Date);
}
var obj = new Date();
var obj = new Date(0);
obj.length = 1;
obj[0] = 1;

View File

@ -31,10 +31,12 @@ Con.prototype = proto;
var child = new Con();
child.toString = function() {
toStringAccessed = true;
return '1';
};
Object.defineProperty(child, "toString", {
value: function() {
toStringAccessed = true;
return '1';
}
});
var obj = {
0: 12,

View File

@ -8,7 +8,7 @@ description: Array.prototype.every - Date Object can be used as thisArg
---*/
var accessed = false;
var objDate = new Date();
var objDate = new Date(0);
function callbackfn(val, idx, obj) {
accessed = true;

View File

@ -10,7 +10,7 @@ var accessed = false;
function callbackfn(val, idx, obj) {
accessed = true;
return new Date();
return new Date(0);
}
assert([11].every(callbackfn), '[11].every(callbackfn) !== true');

View File

@ -10,7 +10,7 @@ function callbackfn(val, idx, obj) {
return obj instanceof Date;
}
var obj = new Date();
var obj = new Date(0);
obj.length = 1;
obj[0] = 1;

View File

@ -8,7 +8,7 @@ description: Array.prototype.filter - Date Object can be used as thisArg
var accessed = false;
var objDate = new Date();
var objDate = new Date(0);
function callbackfn(val, idx, obj) {
accessed = true;

View File

@ -9,7 +9,7 @@ description: >
---*/
function callbackfn(val, idx, obj) {
return new Date();
return new Date(0);
}
var newArr = [11].filter(callbackfn);

View File

@ -12,7 +12,7 @@ function callbackfn(val, idx, obj) {
result = obj instanceof Date;
}
var obj = new Date();
var obj = new Date(0);
obj.length = 1;
obj[0] = 1;

View File

@ -7,7 +7,7 @@ description: Array.prototype.forEach - Date Object can be used as thisArg
---*/
var result = false;
var objDate = new Date();
var objDate = new Date(0);
function callbackfn(val, idx, obj) {
result = (this === objDate);

View File

@ -6,7 +6,7 @@ esid: sec-array.prototype.indexof
description: Array.prototype.indexOf applied to Date object
---*/
var obj = new Date();
var obj = new Date(0);
obj.length = 2;
obj[1] = true;

View File

@ -6,7 +6,7 @@ esid: sec-array.prototype.lastindexof
description: Array.prototype.lastIndexOf applied to Date object
---*/
var obj = new Date();
var obj = new Date(0);
obj.length = 2;
obj[1] = true;

View File

@ -10,7 +10,7 @@ function callbackfn(val, idx, obj) {
return obj instanceof Date;
}
var obj = new Date();
var obj = new Date(0);
obj.length = 1;
obj[0] = 1;

View File

@ -6,7 +6,7 @@ esid: sec-array.prototype.map
description: Array.prototype.map - Date object can be used as thisArg
---*/
var objDate = new Date();
var objDate = new Date(0);
function callbackfn(val, idx, obj) {
return this === objDate;

View File

@ -10,7 +10,7 @@ function callbackfn(prevVal, curVal, idx, obj) {
return obj instanceof Date;
}
var obj = new Date();
var obj = new Date(0);
obj.length = 1;
obj[0] = 1;

View File

@ -6,7 +6,7 @@ esid: sec-array.prototype.reduce
description: Array.prototype.reduce - Date object can be used as accumulator
---*/
var objDate = new Date();
var objDate = new Date(0);
var accessed = false;

View File

@ -6,7 +6,7 @@ esid: sec-array.prototype.reduceright
description: Array.prototype.reduceRight applied to Date object
---*/
var obj = new Date();
var obj = new Date(0);
obj.length = 1;
obj[0] = 1;
var accessed = false;

View File

@ -35,10 +35,12 @@ function callbackfn(prevVal, curVal, idx, obj) {
return false;
}
child.toString = function() {
toStringAccessed = true;
return '1';
};
Object.defineProperty(child, "toString", {
value: function() {
toStringAccessed = true;
return '1';
}
});
var obj = {
0: 12,

View File

@ -9,7 +9,7 @@ description: >
---*/
var accessed = false;
var objDate = new Date();
var objDate = new Date(0);
function callbackfn(prevVal, curVal, idx, obj) {
accessed = true;

View File

@ -10,7 +10,7 @@ function callbackfn(val, idx, obj) {
return obj instanceof Date;
}
var obj = new Date();
var obj = new Date(0);
obj.length = 2;
obj[0] = 11;
obj[1] = 9;

View File

@ -6,7 +6,7 @@ esid: sec-array.prototype.some
description: Array.prototype.some - Date object can be used as thisArg
---*/
var objDate = new Date();
var objDate = new Date(0);
function callbackfn(val, idx, obj) {
return this === objDate;

View File

@ -7,7 +7,7 @@ description: Array.prototype.some - return value of callbackfn is a Date object
---*/
function callbackfn(val, idx, obj) {
return new Date();
return new Date(0);
}
assert([11].some(callbackfn), '[11].some(callbackfn) !== true');

View File

@ -11,14 +11,14 @@ es5id: 15.6.4.2_A2_T3
description: transferring to the Date objects
---*/
var s1 = new Date(0);
Object.defineProperty(s1, "toString", {value: Boolean.prototype.toString});
assert.throws(TypeError, () => {
var s1 = new Date();
s1.toString = Boolean.prototype.toString;
s1.toString();
});
var s2 = new Date(0);
s2.myToString = Boolean.prototype.toString;
assert.throws(TypeError, () => {
var s2 = new Date();
s2.myToString = Boolean.prototype.toString;
s2.myToString();
});

View File

@ -20,5 +20,5 @@ features: [Reflect.construct]
---*/
assert.sameValue(isConstructor(Date), true, 'isConstructor(Date) must return true');
new Date();
new Date(0);

View File

@ -25,6 +25,6 @@ var other = $262.createRealm().global;
var C = new other.Function();
C.prototype = null;
var o = Reflect.construct(Date, [], C);
var o = Reflect.construct(Date, [0], C);
assert.sameValue(Object.getPrototypeOf(o), other.Date.prototype);

View File

@ -14,7 +14,7 @@ info: |
features: [Symbol.toPrimitive]
---*/
var d = new Date();
var d = new Date(0);
assert.sameValue(typeof d[Symbol.toPrimitive], 'function');

View File

@ -8,7 +8,7 @@ info: |
2. Let dt be ? ToNumber(date).
---*/
var date = new Date();
var date = new Date(0);
var originalValue = date.getTime();
var obj = {
valueOf: function() {

View File

@ -13,7 +13,7 @@ info: |
? ToNumber(date).
---*/
var date = new Date();
var date = new Date(0);
var originalValue = date.getTime();
var obj = {
valueOf: function() {

View File

@ -11,7 +11,7 @@ info: |
? ToNumber(month).
---*/
var date = new Date();
var date = new Date(0);
var callCount = 0;
var originalValue = date.getTime();
var obj = {

View File

@ -9,7 +9,7 @@ info: |
3. Let y be ? ToNumber(year).
---*/
var date = new Date();
var date = new Date(0);
var callCount = 0;
var originalValue = date.getTime();
var obj = {

View File

@ -8,7 +8,7 @@ info: |
2. Let dt be ? ToNumber(hour).
---*/
var date = new Date();
var date = new Date(0);
var callCount = 0;
var originalValue = date.getTime();
var obj = {

View File

@ -10,7 +10,7 @@ info: |
ToNumber(min).
---*/
var date = new Date();
var date = new Date(0);
var callCount = 0;
var originalValue = date.getTime();
var obj = {

View File

@ -14,7 +14,7 @@ info: |
be ? ToNumber(ms).
---*/
var date = new Date();
var date = new Date(0);
var originalValue = date.getTime();
var obj = {
valueOf: function() {

View File

@ -12,7 +12,7 @@ info: |
ToNumber(sec).
---*/
var date = new Date();
var date = new Date(0);
var callCount = 0;
var originalValue = date.getTime();
var obj = {

View File

@ -8,7 +8,7 @@ info: |
2. Let dt be ? ToNumber(date).
---*/
var date = new Date();
var date = new Date(0);
var originalValue = date.getTime();
var obj = {
valueOf: function() {

View File

@ -8,7 +8,7 @@ info: |
2. Let m be ? ToNumber(min).
---*/
var date = new Date();
var date = new Date(0);
var callCount = 0;
var originalValue = date.getTime();
var obj = {

View File

@ -12,7 +12,7 @@ info: |
be ? ToNumber(ms).
---*/
var date = new Date();
var date = new Date(0);
var originalValue = date.getTime();
var obj = {
valueOf: function() {

View File

@ -10,7 +10,7 @@ info: |
ToNumber(sec).
---*/
var date = new Date();
var date = new Date(0);
var callCount = 0;
var originalValue = date.getTime();
var obj = {

View File

@ -10,7 +10,7 @@ info: |
? ToNumber(date).
---*/
var date = new Date();
var date = new Date(0);
var originalValue = date.getTime();
var obj = {
valueOf: function() {

View File

@ -11,7 +11,7 @@ info: |
? ToNumber(month).
---*/
var date = new Date();
var date = new Date(0);
var callCount = 0;
var originalValue = date.getTime();
var obj = {

View File

@ -10,7 +10,7 @@ info: |
be ? ToNumber(ms).
---*/
var date = new Date();
var date = new Date(0);
var originalValue = date.getTime();
var obj = {
valueOf: function() {

View File

@ -8,7 +8,7 @@ info: |
2. Let s be ? ToNumber(sec).
---*/
var date = new Date();
var date = new Date(0);
var callCount = 0;
var originalValue = date.getTime();
var obj = {

View File

@ -8,7 +8,7 @@ info: |
2. Let t be ? ToNumber(time).
---*/
var date = new Date();
var date = new Date(0);
var originalValue = date.getTime();
var obj = {
valueOf: function() {

View File

@ -17,7 +17,7 @@ info: |
---*/
var maxMs = 8.64e15;
var date = new Date();
var date = new Date(0);
var returnValue;
assert.notSameValue(date.getTime(), NaN);

View File

@ -11,7 +11,7 @@ info: |
---*/
let dateRegExp = /^(Sun|Mon|Tue|Wed|Thu|Fri|Sat) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{2} [0-9]{4}$/
let match = dateRegExp.exec(new Date().toDateString());
let match = dateRegExp.exec(new Date(0).toDateString());
assert.notSameValue(null, match);
// Years are padded to the left with zeroes

View File

@ -9,7 +9,7 @@ description: >
UTC(0)
---*/
var timeZoneMinutes = new Date().getTimezoneOffset() * (-1);
var timeZoneMinutes = new Date(0).getTimezoneOffset() * (-1);
var date, dateStr;
if (timeZoneMinutes > 0) {

View File

@ -9,7 +9,7 @@ description: >
UTC(0)
---*/
var timeZoneMinutes = new Date().getTimezoneOffset() * (-1);
var timeZoneMinutes = new Date(0).getTimezoneOffset() * (-1);
var date, dateStr;
date = new Date(1970, 0, 100000001, 0, 0 + timeZoneMinutes - 60, 0, -1);

View File

@ -9,7 +9,7 @@ description: >
UTC(0)
---*/
var timeZoneMinutes = new Date().getTimezoneOffset() * (-1);
var timeZoneMinutes = new Date(0).getTimezoneOffset() * (-1);
var date, dateStr;
date = new Date(1970, 0, 100000001, 0, 0 + timeZoneMinutes - 60, 0, 0);

View File

@ -8,6 +8,6 @@ description: >
zone(0)
---*/
var dateStr = (new Date()).toISOString();
var dateStr = (new Date(0)).toISOString();
assert.sameValue(dateStr[dateStr.length - 1], "Z", 'dateStr[dateStr.length - 1]');

View File

@ -9,7 +9,7 @@ description: >
UTC(0)
---*/
var timeZoneMinutes = new Date().getTimezoneOffset() * (-1);
var timeZoneMinutes = new Date(0).getTimezoneOffset() * (-1);
var date, dateStr;
assert.throws(RangeError, function() {
if (timeZoneMinutes > 0) {

View File

@ -9,7 +9,7 @@ description: >
UTC(0)
---*/
var timeZoneMinutes = new Date().getTimezoneOffset() * (-1);
var timeZoneMinutes = new Date(0).getTimezoneOffset() * (-1);
var date, dateStr;
if (timeZoneMinutes > 0) {

View File

@ -17,7 +17,7 @@ info: |
4. Return ? Call(func, V, argumentsList).
---*/
var date = new Date();
var date = new Date(0);
assert.sameValue(date.toJSON(), date.toISOString());
var result = {};

View File

@ -12,7 +12,7 @@ info: |
---*/
let stringRegExp = /^(Sun|Mon|Tue|Wed|Thu|Fri|Sat) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{2} [0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2} GMT[+-][0-9]{4}( \(.+\))?$/
let match = stringRegExp.exec(new Date().toString());
let match = stringRegExp.exec(new Date(0).toString());
assert.notSameValue(null, match);
// Years are padded to the left with zeroes

View File

@ -11,5 +11,5 @@ info: |
---*/
let timeRegExp = /^[0-9]{2}:[0-9]{2}:[0-9]{2} GMT[+-][0-9]{4}( \(.+\))?$/
let match = timeRegExp.exec(new Date().toTimeString());
let match = timeRegExp.exec(new Date(0).toTimeString());
assert.notSameValue(null, match);

View File

@ -11,7 +11,7 @@ info: |
---*/
let utcRegExp = /^(Sun|Mon|Tue|Wed|Thu|Fri|Sat), [0-9]{2} (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2} GMT$/
let match = utcRegExp.exec(new Date().toUTCString());
let match = utcRegExp.exec(new Date(0).toUTCString());
assert.notSameValue(null, match);
// Years are padded to the left with zeroes

View File

@ -10,9 +10,9 @@ es5id: 15.7.4.2_A4_T03
description: transferring to the Date objects
---*/
var s1 = new Date(0);
Object.defineProperty(s1, "toString", {value: Number.prototype.toString});
try {
var s1 = new Date();
s1.toString = Number.prototype.toString;
var v1 = s1.toString();
throw new Test262Error('#1: Number.prototype.toString on not a Number object should throw TypeError');
}
@ -20,9 +20,9 @@ catch (e) {
assert(e instanceof TypeError, 'The result of evaluating (e instanceof TypeError) is expected to be true');
}
var s2 = new Date(0);
s2.myToString = Number.prototype.toString;
try {
var s2 = new Date();
s2.myToString = Number.prototype.toString;
var v2 = s2.myToString();
throw new Test262Error('#2: Number.prototype.toString on not a Number object should throw TypeError');
}

View File

@ -10,9 +10,9 @@ es5id: 15.7.4.4_A2_T03
description: transferring to the Date objects
---*/
var s1 = new Date(0);
Object.defineProperty(s1, "valueOf", {value: Number.prototype.valueOf});
try {
var s1 = new Date();
s1.valueOf = Number.prototype.valueOf;
var v1 = s1.valueOf();
throw new Test262Error('#1: Number.prototype.valueOf on not a Number object should throw TypeError');
}
@ -20,9 +20,9 @@ catch (e) {
assert(e instanceof TypeError, 'The result of evaluating (e instanceof TypeError) is expected to be true');
}
var s2 = new Date(0);
s2.myValueOf = Number.prototype.valueOf;
try {
var s2 = new Date();
s2.myValueOf = Number.prototype.valueOf;
var v2 = s2.myValueOf();
throw new Test262Error('#2: Number.prototype.valueOf on not a Number object should throw TypeError');
}

View File

@ -8,7 +8,7 @@ description: >
step 2)
---*/
var props = new Date();
var props = new Date(0);
var result = false;
Object.defineProperty(props, "prop", {

View File

@ -9,7 +9,7 @@ description: >
(8.10.5 step 4.a)
---*/
var descObj = new Date();
var descObj = new Date(0);
descObj.configurable = true;

View File

@ -10,7 +10,7 @@ description: >
var newObj = Object.create({}, {
prop: {
configurable: new Date()
configurable: new Date(0)
}
});

View File

@ -9,7 +9,7 @@ description: >
(8.10.5 step 5.a)
---*/
var dateObj = new Date();
var dateObj = new Date(0);
dateObj.value = "DateValue";

View File

@ -9,7 +9,7 @@ description: >
(8.10.5 step 6.a)
---*/
var dateObj = new Date();
var dateObj = new Date(0);
dateObj.writable = true;

View File

@ -10,7 +10,7 @@ description: >
var newObj = Object.create({}, {
prop: {
writable: new Date()
writable: new Date(0)
}
});
var hasProperty = newObj.hasOwnProperty("prop");

View File

@ -9,7 +9,7 @@ description: >
step 7.a)
---*/
var dateObj = new Date();
var dateObj = new Date(0);
dateObj.get = function() {
return "VerifyDateObject";

View File

@ -9,7 +9,7 @@ description: >
step 8.a)
---*/
var dateObj = new Date();
var dateObj = new Date(0);
var data = "data";
dateObj.set = function(value) {
data = value;

View File

@ -12,7 +12,7 @@ description: >
assert.throws(TypeError, function() {
Object.create({}, {
prop: {
set: new Date()
set: new Date(0)
}
});
});

View File

@ -9,7 +9,7 @@ description: >
5.a)
---*/
var props = new Date();
var props = new Date(0);
props.prop = {
value: 12,
enumerable: true

View File

@ -10,7 +10,7 @@ description: >
---*/
var accessed = false;
var descObj = new Date();
var descObj = new Date(0);
descObj.enumerable = true;

View File

@ -12,7 +12,7 @@ var accessed = false;
var newObj = Object.create({}, {
prop: {
enumerable: new Date()
enumerable: new Date(0)
}
});
for (var property in newObj) {

View File

@ -7,7 +7,7 @@ description: Object.defineProperties - argument 'Properties' is a Date object
---*/
var obj = {};
var props = new Date();
var props = new Date(0);
var result = false;
Object.defineProperty(props, "prop", {

View File

@ -9,7 +9,7 @@ description: >
---*/
var obj = {};
var props = new Date();
var props = new Date(0);
Object.defineProperty(props, "prop", {
value: {

View File

@ -12,7 +12,7 @@ var obj = {};
Object.defineProperties(obj, {
property: {
configurable: new Date()
configurable: new Date(0)
}
});
var preCheck = obj.hasOwnProperty("property");

View File

@ -11,7 +11,7 @@ description: >
var obj = {};
var descObj = new Date();
var descObj = new Date(0);
descObj.value = "Date";

View File

@ -12,7 +12,7 @@ includes: [propertyHelper.js]
var obj = {};
var descObj = new Date();
var descObj = new Date(0);
descObj.writable = false;

View File

@ -12,7 +12,7 @@ var obj = {};
Object.defineProperties(obj, {
property: {
writable: new Date()
writable: new Date(0)
}
});

View File

@ -11,7 +11,7 @@ description: >
var obj = {};
var descObj = new Date();
var descObj = new Date(0);
descObj.get = function() {
return "Date";

View File

@ -10,7 +10,7 @@ description: >
---*/
var data = "data";
var descObj = new Date();
var descObj = new Date(0);
var setFun = function(value) {
data = value;
};

View File

@ -10,7 +10,7 @@ description: >
---*/
var obj = {};
var descObj = new Date();
var descObj = new Date(0);
var accessed = false;
descObj.enumerable = true;

View File

@ -13,7 +13,7 @@ var accessed = false;
Object.defineProperties(obj, {
prop: {
enumerable: new Date()
enumerable: new Date(0)
}
});
for (var property in obj) {

View File

@ -11,7 +11,7 @@ description: >
var obj = {};
var descObj = new Date();
var descObj = new Date(0);
descObj.configurable = true;
Object.defineProperties(obj, {

View File

@ -10,7 +10,7 @@ includes: [propertyHelper.js]
---*/
var obj = new Date();
var obj = new Date(0);
Object.defineProperty(obj, "prop", {
value: 11,

View File

@ -11,7 +11,7 @@ description: >
var obj = {};
Object.defineProperty(obj, "property", {
configurable: new Date()
configurable: new Date(0)
});
var beforeDeleted = obj.hasOwnProperty("property");

View File

@ -11,7 +11,7 @@ description: >
var obj = {};
var dateObj = new Date();
var dateObj = new Date(0);
dateObj.value = "Date";

View File

@ -11,7 +11,7 @@ description: >
var obj = {};
var dateObj = new Date();
var dateObj = new Date(0);
dateObj.writable = true;

View File

@ -11,7 +11,7 @@ description: >
var obj = {};
Object.defineProperty(obj, "property", {
writable: new Date()
writable: new Date(0)
});
var beforeWrite = obj.hasOwnProperty("property");

View File

@ -11,7 +11,7 @@ description: >
var obj = {};
var dateObj = new Date();
var dateObj = new Date(0);
dateObj.get = function() {
return "dateGetProperty";

View File

@ -11,7 +11,7 @@ description: >
var obj = {};
var data = "data";
var dateObj = new Date();
var dateObj = new Date(0);
dateObj.set = function(value) {
data = value;

View File

@ -12,7 +12,7 @@ description: >
var obj = {};
var accessed = false;
var dateObj = new Date();
var dateObj = new Date(0);
dateObj.enumerable = true;
Object.defineProperty(obj, "property", dateObj);

View File

@ -12,7 +12,7 @@ var obj = {};
var accessed = false;
Object.defineProperty(obj, "property", {
enumerable: new Date()
enumerable: new Date(0)
});
for (var prop in obj) {

View File

@ -11,7 +11,7 @@ description: >
var obj = {};
var dateObj = new Date();
var dateObj = new Date(0);
dateObj.configurable = true;

View File

@ -9,7 +9,7 @@ description: >
step 1)
---*/
var desc = new Date();
var desc = new Date(0);
Object.defineProperty(desc, "foo", {
value: 12,

View File

@ -9,7 +9,7 @@ description: >
---*/
var obj = {};
var dateObj = new Date();
var dateObj = new Date(0);
Object.defineProperty(obj, "prop", {
value: dateObj

View File

@ -6,7 +6,7 @@ es5id: 15.2.3.9-2-d-6
description: Object.freeze - 'O' is a Date object
---*/
var dateObj = new Date();
var dateObj = new Date(0);
Object.freeze(dateObj);

View File

@ -8,6 +8,6 @@ description: >
(Date object)
---*/
var obj = new Date();
var obj = new Date(0);
assert.sameValue(Object.getPrototypeOf(obj), Date.prototype, 'Object.getPrototypeOf(obj)');

View File

@ -8,7 +8,7 @@ description: >
with the order of properties in 'O' (any other built-in object)
---*/
var obj = new Date();
var obj = new Date(0);
obj.prop1 = 100;
obj.prop2 = "prop2";

View File

@ -9,7 +9,7 @@ description: >
includes: [propertyHelper.js]
---*/
var obj = new Date();
var obj = new Date(0);
assert(Object.isExtensible(obj));
Object.preventExtensions(obj);

View File

@ -9,7 +9,7 @@ description: >
includes: [propertyHelper.js]
---*/
var obj = new Date();
var obj = new Date(0);
assert(Object.isExtensible(obj));
Object.preventExtensions(obj);

Some files were not shown because too many files have changed in this diff Show More