rework: remove *PropertyAttributes fns

- this change hits all files that use
dataPropertyAttributesAreCorrect or
acccessorPropertyAttributesAreCorrect

Major changes:
- remove include of runTestCase.js,
dataPropertyAttributesAreCorrect.js and
acccessorPropertyAttributesAreCorrect.js
- add include of propertyHelper.js
- remove function testCase() and call to
function runTestCase()
- instead of collecting test state into booleans,
which are eventually returned from runTestCase,
test conditions and throw errors immediately
- use negative: to check error types instead of
using `instanceof` in a catch() block

Selected commit logs follow:

manual conversion of accessorPropertyAttributesAreCorrect() test
 - remove runTestCase
 - remove wrapping testCase function
 - unindent
 - remove includes of runTestCase & accessor...
 - add include of propertyHelper.js
 - unpack final two args 'true, false' to explicit inline
   tests of isEnumerable and isConfigurable
 - unpack setter test into inline logic
 - unpack getter test into inline logic

used script to replace includes: frontmatter
with propertyHelper.js ; manually added back
references to fnGlobalObject() where needed

additional helper functions

add helper functions for get and writable
duplicate runTestCase so can remove runTestCase.js from
includes of all tests in batch

use keyboard macros to simplify repetitive conversions
remove auto-save file accidentaly committed

minor changes, manually remove runTestCase from remaining files
lint etc. fixes

remove now-obsolete harness files

make strict/nonstrict variants

tests where behavior is different in strict/nonstrict
need two variants

- strict mode throws on assign to read-only element (no setter fn)
- strict mode separates named arguments from arguments[]

fix indentation

cleanup minor issues

reviewing 15.2.3.7-9 tests, found some minor issues

- indentation/spacing
- duplicate test (eg, direct test of value and dataProp...)
- remove needless try/finally
- use assert.. helpers in place of if(is..
- rename some assertions to 'e'

rename assertX to verifyX
new helper fn sameValue
test "set" as well as get
reverse order of checks
restore test of desc2
restore test of length
restore test of ownProperty
incorporate suggestions re order of ops, Object.prototype
add test of sameValue helper
restore return value in getter
restore second defineProperty call
restore check of explicit "false"
restore explicit test of TypeError
set noStrict flag on arguments changes
rename catch var to "e"	b4ad0e6
remove dataPropertyAttributesAreCorrect from tests	0d83ff2
remove accessorPropertyAttributesAreCorrect from tests	bb926f3
remove {data,accessor}Property... fns from harness

fix writable check on array.length

call $ERROR if expected exception not thrown
fix Epected => Expected typo

use assert._isSamevalue
This commit is contained in:
smikes 2014-11-12 06:41:09 -07:00 committed by Brian Terlson
parent 5318ee7b1f
commit 49abae4f5e
502 changed files with 11688 additions and 10145 deletions

View File

@ -1,74 +0,0 @@
//-----------------------------------------------------------------------------
//Verify all attributes specified accessor property of given object:
//get, set, enumerable, configurable
//If all attribute values are expected, return true, otherwise, return false
function accessorPropertyAttributesAreCorrect(obj,
name,
get,
set,
setVerifyHelpProp,
enumerable,
configurable) {
var attributesCorrect = true;
if (get !== undefined) {
if (obj[name] !== get()) {
if (typeof obj[name] === "number" &&
isNaN(obj[name]) &&
typeof get() === "number" &&
isNaN(get())) {
// keep empty
} else {
attributesCorrect = false;
}
}
} else {
if (obj[name] !== undefined) {
attributesCorrect = false;
}
}
try {
var desc = Object.getOwnPropertyDescriptor(obj, name);
if (typeof desc.set === "undefined") {
if (typeof set !== "undefined") {
attributesCorrect = false;
}
} else {
obj[name] = "toBeSetValue";
if (obj[setVerifyHelpProp] !== "toBeSetValue") {
attributesCorrect = false;
}
}
} catch (se) {
throw se;
}
var enumerated = false;
for (var prop in obj) {
if (obj.hasOwnProperty(prop) && prop === name) {
enumerated = true;
}
}
if (enumerated !== enumerable) {
attributesCorrect = false;
}
var deleted = false;
try {
delete obj[name];
} catch (de) {
throw de;
}
if (!obj.hasOwnProperty(name)) {
deleted = true;
}
if (deleted !== configurable) {
attributesCorrect = false;
}
return attributesCorrect;
}

View File

@ -1,74 +0,0 @@
//-----------------------------------------------------------------------------
//Verify all attributes specified data property of given object:
//value, writable, enumerable, configurable
//If all attribute values are expected, return true, otherwise, return false
function dataPropertyAttributesAreCorrect(obj,
name,
value,
writable,
enumerable,
configurable) {
var attributesCorrect = true;
if (obj[name] !== value) {
if (typeof obj[name] === "number" &&
isNaN(obj[name]) &&
typeof value === "number" &&
isNaN(value)) {
// keep empty
} else {
attributesCorrect = false;
}
}
try {
if (obj[name] === "oldValue") {
obj[name] = "newValue";
} else {
obj[name] = "OldValue";
}
} catch (we) {
}
var overwrited = false;
if (obj[name] !== value) {
if (typeof obj[name] === "number" &&
isNaN(obj[name]) &&
typeof value === "number" &&
isNaN(value)) {
// keep empty
} else {
overwrited = true;
}
}
if (overwrited !== writable) {
attributesCorrect = false;
}
var enumerated = false;
for (var prop in obj) {
if (obj.hasOwnProperty(prop) && prop === name) {
enumerated = true;
}
}
if (enumerated !== enumerable) {
attributesCorrect = false;
}
var deleted = false;
try {
delete obj[name];
} catch (de) {
}
if (!obj.hasOwnProperty(name)) {
deleted = true;
}
if (deleted !== configurable) {
attributesCorrect = false;
}
return attributesCorrect;
}

91
harness/propertyHelper.js Normal file
View File

@ -0,0 +1,91 @@
function isConfigurable(obj, name) {
try {
delete obj[name];
} catch (e) {
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
}
return !Object.prototype.hasOwnProperty.call(obj, name);
}
function isEnumerable(obj, name) {
for (var prop in obj) {
if (Object.prototype.hasOwnProperty.call(obj, prop) &&
assert._isSameValue(prop, name)) {
return true;
}
}
return false;
}
function isEqualTo(obj, name, expectedValue) {
var actualValue = obj[name];
return assert._isSameValue(actualValue, expectedValue);
}
function isWritable(obj, name, verifyProp, value) {
var newValue = value || "unlikelyValue";
try {
obj[name] = newValue;
} catch (e) {
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
}
if ((verifyProp && isEqualTo(obj, verifyProp, newValue)) ||
isEqualTo(obj, name, newValue)) {
return true;
}
return false;
}
function verifyEqualTo(obj, name, value) {
if (!isEqualTo(obj, name, value)) {
$ERROR("Expected obj[" + String(name) + "] to equal " + value +
", actually " + obj[name]);
}
}
function verifyWritable(obj, name, verifyProp, value) {
if (!isWritable(obj, name, verifyProp, value)) {
$ERROR("Expected obj[" + String(name) + "] to be writable, but was not.");
}
}
function verifyNotWritable(obj, name, verifyProp, value) {
if (isWritable(obj, name, verifyProp)) {
$ERROR("Expected obj[" + String(name) + "] NOT to be writable, but was.");
}
}
function verifyEnumerable(obj, name) {
if (!isEnumerable(obj, name)) {
$ERROR("Expected obj[" + String(name) + "] to be enumerable, but was not.");
}
}
function verifyNotEnumerable(obj, name) {
if (isEnumerable(obj, name)) {
$ERROR("Expected obj[" + String(name) + "] NOT to be enumerable, but was.");
}
}
function verifyConfigurable(obj, name) {
if (!isConfigurable(obj, name)) {
$ERROR("Expected obj[" + String(name) + "] to be configurable, but was not.");
}
}
function verifyNotConfigurable(obj, name) {
if (isConfigurable(obj, name)) {
$ERROR("Expected obj[" + String(name) + "] NOT to be configurable, but was.");
}
}

View File

@ -9,37 +9,44 @@ es5id: 15.2.3.5-4-315
description: >
Object.create - all properties in 'Properties' are enumerable
(data property and accessor property) (15.2.3.7 step 7)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var newObj = {};
function getFunc() {
return 10;
}
function setFunc(value) {
newObj.setVerifyHelpProp = value;
}
var newObj = {};
function getFunc() {
return 10;
}
function setFunc(value) {
newObj.setVerifyHelpProp = value;
}
newObj = Object.create({}, {
foo1: {
value: 200,
enumerable: true,
writable: true,
configurable: true
},
foo2: {
get: getFunc,
set: setFunc,
enumerable: true,
configurable: true
}
});
return dataPropertyAttributesAreCorrect(newObj, "foo1", 200, true, true, true) &&
accessorPropertyAttributesAreCorrect(newObj, "foo2", getFunc, setFunc, "setVerifyHelpProp", true, true);
newObj = Object.create({}, {
foo1: {
value: 200,
enumerable: true,
writable: true,
configurable: true
},
foo2: {
get: getFunc,
set: setFunc,
enumerable: true,
configurable: true
}
runTestCase(testcase);
});
verifyEqualTo(newObj, "foo1", 200);
verifyWritable(newObj, "foo1");
verifyEnumerable(newObj, "foo1");
verifyConfigurable(newObj, "foo1");
verifyEqualTo(newObj, "foo2", getFunc());
verifyWritable(newObj, "foo2", "setVerifyHelpProp");
verifyEnumerable(newObj, "foo2");
verifyConfigurable(newObj, "foo2");

View File

@ -9,28 +9,29 @@ es5id: 15.2.3.7-6-a-100
description: >
Object.defineProperties - 'P' is data property, several attributes
values of P and properties are different (8.12.9 step 12)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var obj = {};
var obj = {};
Object.defineProperty(obj, "foo", {
value: 100,
writable: true,
configurable: true
});
Object.defineProperty(obj, "foo", {
value: 100,
writable: true,
configurable: true
});
Object.defineProperties(obj, {
foo: {
value: 200,
writable: false,
configurable: false
}
});
return dataPropertyAttributesAreCorrect(obj, "foo", 200, false, false, false);
Object.defineProperties(obj, {
foo: {
value: 200,
writable: false,
configurable: false
}
runTestCase(testcase);
});
verifyEqualTo(obj, "foo", 200);
verifyNotWritable(obj, "foo");
verifyNotEnumerable(obj, "foo");
verifyNotConfigurable(obj, "foo");

View File

@ -10,38 +10,39 @@ description: >
Object.defineProperties - 'P' is accessor property, both
properties.[[Get]] and P.[[Get]] are two different values (8.12.9
step 12)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var obj = {};
var obj = {};
function get_func() {
return 10;
}
function set_func(value) {
obj.setVerifyHelpProp = value;
}
function get_func() {
return 10;
}
function set_func(value) {
obj.setVerifyHelpProp = value;
}
Object.defineProperty(obj, "foo", {
get: get_func,
set: set_func,
enumerable: true,
configurable: true
});
Object.defineProperty(obj, "foo", {
get: get_func,
set: set_func,
enumerable: true,
configurable: true
});
function get_func2() {
return 20;
}
function get_func2() {
return 20;
}
Object.defineProperties(obj, {
foo: {
get: get_func2
}
});
return accessorPropertyAttributesAreCorrect(obj, "foo", get_func2, set_func, "setVerifyHelpProp", true, true);
Object.defineProperties(obj, {
foo: {
get: get_func2
}
runTestCase(testcase);
});
verifyEqualTo(obj, "foo", get_func2());
verifyWritable(obj, "foo", "setVerifyHelpProp");
verifyEnumerable(obj, "foo");
verifyConfigurable(obj, "foo");

View File

@ -9,34 +9,33 @@ es5id: 15.2.3.7-6-a-102
description: >
Object.defineProperties - 'P' is accessor property, P.[[Get]] is
present and properties.[[Get]] is undefined (8.12.9 step 12)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var obj = {};
var obj = {};
function get_func() {
return 10;
}
function set_func(value) {
obj.setVerifyHelpProp = value;
}
function get_func() {
return 10;
}
function set_func(value) {
obj.setVerifyHelpProp = value;
}
Object.defineProperty(obj, "foo", {
get: get_func,
set: set_func,
enumerable: true,
configurable: true
});
Object.defineProperty(obj, "foo", {
get: get_func,
set: set_func,
enumerable: true,
configurable: true
});
Object.defineProperties(obj, {
foo: {
get: undefined
}
});
return accessorPropertyAttributesAreCorrect(obj, "foo", undefined, set_func, "setVerifyHelpProp", true, true);
Object.defineProperties(obj, {
foo: {
get: undefined
}
runTestCase(testcase);
});
verifyWritable(obj, "foo", "setVerifyHelpProp");
verifyEnumerable(obj, "foo");
verifyConfigurable(obj, "foo");

View File

@ -9,35 +9,36 @@ es5id: 15.2.3.7-6-a-103
description: >
Object.defineProperties - 'P' is accessor property, P.[[Get]] is
undefined and properties.[[Get]] is normal value (8.12.9 step 12)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var obj = {};
var obj = {};
function set_func(value) {
obj.setVerifyHelpProp = value;
}
function set_func(value) {
obj.setVerifyHelpProp = value;
}
Object.defineProperty(obj, "foo", {
get: undefined,
set: set_func,
enumerable: true,
configurable: true
});
Object.defineProperty(obj, "foo", {
get: undefined,
set: set_func,
enumerable: true,
configurable: true
});
function get_func() {
return 10;
}
function get_func() {
return 10;
}
Object.defineProperties(obj, {
foo: {
get: get_func
}
});
return accessorPropertyAttributesAreCorrect(obj, "foo", get_func, set_func, "setVerifyHelpProp", true, true);
Object.defineProperties(obj, {
foo: {
get: get_func
}
runTestCase(testcase);
});
verifyEqualTo(obj, "foo", get_func());
verifyWritable(obj, "foo", "setVerifyHelpProp");
verifyEnumerable(obj, "foo");
verifyConfigurable(obj, "foo");

View File

@ -10,39 +10,40 @@ description: >
Object.defineProperties - 'P' is accessor property, both
properties.[[Set]] and P.[[Set]] are two different values (8.12.9
step 12)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var obj = {};
var obj = {};
function get_func() {
return 10;
}
function get_func() {
return 10;
}
function set_func() {
return 10;
}
function set_func() {
return 10;
}
Object.defineProperty(obj, "foo", {
get: get_func,
set: set_func,
enumerable: true,
configurable: true
});
Object.defineProperty(obj, "foo", {
get: get_func,
set: set_func,
enumerable: true,
configurable: true
});
function set_func2(value) {
obj.setVerifyHelpProp = value;
}
function set_func2(value) {
obj.setVerifyHelpProp = value;
}
Object.defineProperties(obj, {
foo: {
set: set_func2
}
});
return accessorPropertyAttributesAreCorrect(obj, "foo", get_func, set_func2, "setVerifyHelpProp", true, true);
Object.defineProperties(obj, {
foo: {
set: set_func2
}
runTestCase(testcase);
});
verifyEqualTo(obj, "foo", get_func());
verifyWritable(obj, "foo", "setVerifyHelpProp");
verifyEnumerable(obj, "foo");
verifyConfigurable(obj, "foo");

View File

@ -9,35 +9,36 @@ es5id: 15.2.3.7-6-a-106
description: >
Object.defineProperties - 'P' is accessor property, P.[[Set]] is
undefined and properties.[[Set]] is normal value (8.12.9 step 12)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var obj = {};
var obj = {};
function get_func() {
return 10;
}
function get_func() {
return 10;
}
Object.defineProperty(obj, "foo", {
get: get_func,
set: undefined,
enumerable: true,
configurable: true
});
Object.defineProperty(obj, "foo", {
get: get_func,
set: undefined,
enumerable: true,
configurable: true
});
function set_func(value) {
obj.setVerifyHelpProp = value;
}
function set_func(value) {
obj.setVerifyHelpProp = value;
}
Object.defineProperties(obj, {
foo: {
set: set_func
}
});
return accessorPropertyAttributesAreCorrect(obj, "foo", get_func, set_func, "setVerifyHelpProp", true, true);
Object.defineProperties(obj, {
foo: {
set: set_func
}
runTestCase(testcase);
});
verifyEqualTo(obj, "foo", get_func());
verifyWritable(obj, "foo", "setVerifyHelpProp");
verifyEnumerable(obj, "foo");
verifyConfigurable(obj, "foo");

View File

@ -9,34 +9,35 @@ es5id: 15.2.3.7-6-a-107
description: >
Object.defineProperties - 'P' is accessor property, P.enumerable
and properties.enumerable are different values (8.12.9 step 12)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var obj = {};
var obj = {};
function get_func() {
return 10;
}
function set_func(value) {
obj.setVerifyHelpProp = value;
}
function get_func() {
return 10;
}
function set_func(value) {
obj.setVerifyHelpProp = value;
}
Object.defineProperty(obj, "foo", {
get: get_func,
set: set_func,
enumerable: true,
configurable: true
});
Object.defineProperty(obj, "foo", {
get: get_func,
set: set_func,
enumerable: true,
configurable: true
});
Object.defineProperties(obj, {
foo: {
enumerable: false
}
});
return accessorPropertyAttributesAreCorrect(obj, "foo", get_func, set_func, "setVerifyHelpProp", false, true);
Object.defineProperties(obj, {
foo: {
enumerable: false
}
runTestCase(testcase);
});
verifyEqualTo(obj, "foo", get_func());
verifyWritable(obj, "foo", "setVerifyHelpProp");
verifyNotEnumerable(obj, "foo");
verifyConfigurable(obj, "foo");

View File

@ -9,34 +9,35 @@ es5id: 15.2.3.7-6-a-108
description: >
Object.defineProperties - 'P' is accessor property, P.configurable
is true and properties.configurable is false
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var obj = {};
var obj = {};
function get_func() {
return 10;
}
function set_func(value) {
obj.setVerifyHelpProp = value;
}
function get_func() {
return 10;
}
function set_func(value) {
obj.setVerifyHelpProp = value;
}
Object.defineProperty(obj, "foo", {
get: get_func,
set: set_func,
enumerable: true,
configurable: true
});
Object.defineProperty(obj, "foo", {
get: get_func,
set: set_func,
enumerable: true,
configurable: true
});
Object.defineProperties(obj, {
foo: {
configurable: false
}
});
return accessorPropertyAttributesAreCorrect(obj, "foo", get_func, set_func, "setVerifyHelpProp", true, false);
Object.defineProperties(obj, {
foo: {
configurable: false
}
runTestCase(testcase);
});
verifyEqualTo(obj, "foo", get_func());
verifyWritable(obj, "foo", "setVerifyHelpProp");
verifyEnumerable(obj, "foo");
verifyNotConfigurable(obj, "foo");

View File

@ -10,40 +10,41 @@ description: >
Object.defineProperties - 'P' is accessor property, several
attributes values of P and properties are different (8.12.9 step
12)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var obj = {};
var obj = {};
function get_func1() {
return 10;
}
function set_func1() { }
function get_func1() {
return 10;
}
function set_func1() { }
Object.defineProperty(obj, "foo", {
get: get_func1,
set: set_func1,
configurable: true
});
Object.defineProperty(obj, "foo", {
get: get_func1,
set: set_func1,
configurable: true
});
function get_func2() {
return 20;
}
function set_func2(value) {
obj.setVerifyHelpProp = value;
}
function get_func2() {
return 20;
}
function set_func2(value) {
obj.setVerifyHelpProp = value;
}
Object.defineProperties(obj, {
foo: {
get: get_func2,
set: set_func2,
configurable: false
}
});
return accessorPropertyAttributesAreCorrect(obj, "foo", get_func2, set_func2, "setVerifyHelpProp", false, false);
Object.defineProperties(obj, {
foo: {
get: get_func2,
set: set_func2,
configurable: false
}
runTestCase(testcase);
});
verifyEqualTo(obj, "foo", get_func2());
verifyWritable(obj, "foo", "setVerifyHelpProp");
verifyNotEnumerable(obj, "foo");
verifyNotConfigurable(obj, "foo");

View File

@ -9,40 +9,47 @@ es5id: 15.2.3.7-6-a-110
description: >
Object.defineProperties - all own properties (data property and
accessor property)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var obj = {};
var obj = {};
function get_func() {
return 10;
}
function set_func(value) {
obj.setVerifyHelpProp = value;
}
var properties = {
foo1: {
value: 200,
enumerable: true,
writable: true,
configurable: true
},
foo2: {
get: get_func,
set: set_func,
enumerable: true,
configurable: true
}
};
Object.defineProperties(obj, properties);
return dataPropertyAttributesAreCorrect(obj, "foo1", 200, true, true, true) && accessorPropertyAttributesAreCorrect(obj, "foo2", get_func, set_func, "setVerifyHelpProp", true, true);
function get_func() {
return 10;
}
function set_func(value) {
obj.setVerifyHelpProp = value;
}
var properties = {
foo1: {
value: 200,
enumerable: true,
writable: true,
configurable: true
},
foo2: {
get: get_func,
set: set_func,
enumerable: true,
configurable: true
}
runTestCase(testcase);
};
Object.defineProperties(obj, properties);
verifyEqualTo(obj, "foo1", 200);
verifyWritable(obj, "foo1");
verifyEnumerable(obj, "foo1");
verifyConfigurable(obj, "foo1");
verifyEqualTo(obj, "foo2", get_func());
verifyWritable(obj, "foo2", "setVerifyHelpProp");
verifyEnumerable(obj, "foo2");
verifyConfigurable(obj, "foo2");

View File

@ -0,0 +1,30 @@
// Copyright (c) 2012 Ecma International. All rights reserved.
// Ecma International makes this code available under the terms and conditions set
// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
// "Use Terms"). Any redistribution of this code must retain the above
// copyright and this notice and otherwise comply with the Use Terms.
/*---
es5id: 15.2.3.7-6-a-114-b
description: >
Object.defineProperties - 'O' is an Array, 'P' is the length
property of 'O', the [[Value]] field of 'desc' is absent, test
every field in 'desc' is absent (15.4.5.1 step 3.a.i)
includes: [propertyHelper.js]
---*/
var arr = [];
Object.defineProperties(arr, { length: {} });
if (arr.length !== 0) {
$ERROR("Expected arr.length to be 0, actually " + arr.length);
}
verifyEqualTo(arr, "length", 0);
verifyWritable(arr, "length", "length", 1);
verifyNotEnumerable(arr, "length");
verifyNotConfigurable(arr, "length");

View File

@ -10,32 +10,23 @@ description: >
Object.defineProperties - 'O' is an Array, 'P' is the length
property of 'O', the [[Value]] field of 'desc' is absent, test
every field in 'desc' is absent (15.4.5.1 step 3.a.i)
includes: [runTestCase.js]
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperties(arr, { length: {} });
Object.defineProperties(arr, { length: {} });
var verifyValue = false;
verifyValue = (arr.length === 0);
if (arr.length !== 0) {
$ERROR("Expected arr.length to be 0, actually " + arr.length);
}
var verifyWritable = false;
arr.length = 2;
verifyWritable = (arr.length === 2);
arr.length = 2;
var verifyEnumerable = false;
for (var p in arr) {
if (p === "length") {
verifyEnumerable = true;
}
}
verifyEqualTo(arr, "length", 2);
var verifyConfigurable = false;
delete arr.length;
verifyConfigurable = arr.hasOwnProperty("length");
verifyWritable(arr, "length", "length", 5);
return verifyValue && verifyWritable && !verifyEnumerable && verifyConfigurable;
}
runTestCase(testcase);
verifyNotEnumerable(arr, "length");
verifyNotConfigurable(arr, "length");

View File

@ -10,29 +10,35 @@ description: >
Object.defineProperties - 'O' is a Function object which
implements its own [[GetOwnProperty]] method to get 'P' (8.12.9
step 1 )
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var fun = function () { };
var fun = function () { };
Object.defineProperty(fun, "prop", {
value: 11,
configurable: false
});
Object.defineProperty(fun, "prop", {
value: 11,
configurable: false
});
try {
Object.defineProperties(fun, {
prop: {
value: 12,
configurable: true
}
});
return false;
} catch (e) {
return e instanceof TypeError && dataPropertyAttributesAreCorrect(fun, "prop", 11, false, false, false);
try {
Object.defineProperties(fun, {
prop: {
value: 12,
configurable: true
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(fun, "prop", 11);
verifyNotWritable(fun, "prop");
verifyNotEnumerable(fun, "prop");
verifyNotConfigurable(fun, "prop");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -11,23 +11,20 @@ description: >
property of 'O', the [[Value]] field of 'desc' is absent, test
updating the [[Writable]] attribute of the length property from
true to false (15.4.5.1 step 3.a.i)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperties(arr, {
length: { writable: false }
});
try {
Object.defineProperties(arr, {
length: { writable: false }
});
verifyEqualTo(arr, "length", 0);
verifyNotWritable(arr, "length");
verifyNotEnumerable(arr, "length");
verifyNotConfigurable(arr, "length");
return dataPropertyAttributesAreCorrect(arr, "length", 0, false, false, false);
} catch (e) {
return false;
}
}
runTestCase(testcase);

View File

@ -9,29 +9,35 @@ es5id: 15.2.3.7-6-a-13
description: >
Object.defineProperties - 'O' is an Array object which implements
its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 )
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "prop", {
value: 11,
configurable: false
});
Object.defineProperty(arr, "prop", {
value: 11,
configurable: false
});
try {
Object.defineProperties(arr, {
prop: {
value: 12,
configurable: true
}
});
return false;
} catch (e) {
return e instanceof TypeError && dataPropertyAttributesAreCorrect(arr, "prop", 11, false, false, false);
try {
Object.defineProperties(arr, {
prop: {
value: 12,
configurable: true
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(arr, "prop", 11);
verifyNotWritable(arr, "prop");
verifyNotEnumerable(arr, "prop");
verifyNotConfigurable(arr, "prop");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -9,29 +9,35 @@ es5id: 15.2.3.7-6-a-14
description: >
Object.defineProperties - 'O' is a String object which implements
its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 )
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var str = new String();
var str = new String();
Object.defineProperty(str, "prop", {
value: 11,
configurable: false
});
Object.defineProperty(str, "prop", {
value: 11,
configurable: false
});
try {
Object.defineProperties(str, {
prop: {
value: 12,
configurable: true
}
});
return false;
} catch (e) {
return e instanceof TypeError && dataPropertyAttributesAreCorrect(str, "prop", 11, false, false, false);
try {
Object.defineProperties(str, {
prop: {
value: 12,
configurable: true
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(str, "prop", 11);
verifyNotWritable(str, "prop");
verifyNotEnumerable(str, "prop");
verifyNotConfigurable(str, "prop");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -9,30 +9,36 @@ es5id: 15.2.3.7-6-a-15
description: >
Object.defineProperties - 'O' is a Boolean object which implements
its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 )
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var obj = new Boolean(false);
Object.defineProperty(obj, "prop", {
value: 11,
configurable: false
});
var obj = new Boolean(false);
try {
Object.defineProperties(obj, {
prop: {
value: 12,
configurable: true
}
});
return false;
} catch (e) {
return e instanceof TypeError && dataPropertyAttributesAreCorrect(obj, "prop", 11, false, false, false);
Object.defineProperty(obj, "prop", {
value: 11,
configurable: false
});
try {
Object.defineProperties(obj, {
prop: {
value: 12,
configurable: true
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(obj, "prop", 11);
verifyNotWritable(obj, "prop");
verifyNotEnumerable(obj, "prop");
verifyNotConfigurable(obj, "prop");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -9,30 +9,36 @@ es5id: 15.2.3.7-6-a-16
description: >
Object.defineProperties - 'O' is a Number object which implements
its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 )
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var obj = new Number(-9);
var obj = new Number(-9);
Object.defineProperty(obj, "prop", {
value: 11,
configurable: false
});
Object.defineProperty(obj, "prop", {
value: 11,
configurable: false
});
try {
Object.defineProperties(obj, {
prop: {
value: 12,
configurable: true
}
});
return false;
} catch (e) {
return e instanceof TypeError && dataPropertyAttributesAreCorrect(obj, "prop", 11, false, false, false);
try {
Object.defineProperties(obj, {
prop: {
value: 12,
configurable: true
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(obj, "prop", 11);
verifyNotWritable(obj, "prop");
verifyNotEnumerable(obj, "prop");
verifyNotConfigurable(obj, "prop");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -9,30 +9,36 @@ es5id: 15.2.3.7-6-a-18
description: >
Object.defineProperties - 'O' is a Date object which implements
its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 )
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var obj = new Date();
var obj = new Date();
Object.defineProperty(obj, "prop", {
value: 11,
configurable: false
});
Object.defineProperty(obj, "prop", {
value: 11,
configurable: false
});
try {
Object.defineProperties(obj, {
prop: {
value: 12,
configurable: true
}
});
return false;
} catch (e) {
return e instanceof TypeError && dataPropertyAttributesAreCorrect(obj, "prop", 11, false, false, false);
try {
Object.defineProperties(obj, {
prop: {
value: 12,
configurable: true
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(obj, "prop", 11);
verifyNotWritable(obj, "prop");
verifyNotEnumerable(obj, "prop");
verifyNotConfigurable(obj, "prop");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -9,30 +9,36 @@ es5id: 15.2.3.7-6-a-19
description: >
Object.defineProperties - 'O' is a RegExp object which implements
its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 )
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var obj = new RegExp();
var obj = new RegExp();
Object.defineProperty(obj, "prop", {
value: 11,
configurable: false
});
Object.defineProperty(obj, "prop", {
value: 11,
configurable: false
});
try {
Object.defineProperties(obj, {
prop: {
value: 12,
configurable: true
}
});
return false;
} catch (e) {
return e instanceof TypeError && dataPropertyAttributesAreCorrect(obj, "prop", 11, false, false, false);
try {
Object.defineProperties(obj, {
prop: {
value: 12,
configurable: true
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(obj, "prop", 11);
verifyNotWritable(obj, "prop");
verifyNotEnumerable(obj, "prop");
verifyNotConfigurable(obj, "prop");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -11,20 +11,21 @@ description: >
named property, 'P' property doesn't exist in 'O', test 'P' is
defined as data property when 'desc' is generic descriptor
(15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperties(arr, {
"0": {
enumerable: true
}
});
return dataPropertyAttributesAreCorrect(arr, "0", undefined, false, true, false);
Object.defineProperties(arr, {
"0": {
enumerable: true
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", undefined);
verifyNotWritable(arr, "0");
verifyEnumerable(arr, "0");
verifyNotConfigurable(arr, "0");

View File

@ -9,30 +9,31 @@ es5id: 15.2.3.7-6-a-2
description: >
Object.defineProperties - 'P' is inherited data property (8.12.9
step 1 )
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var proto = {};
Object.defineProperty(proto, "prop", {
value: 11,
configurable: false
});
var Con = function () { };
Con.prototype = proto;
var proto = {};
Object.defineProperty(proto, "prop", {
value: 11,
configurable: false
});
var Con = function () { };
Con.prototype = proto;
var obj = new Con();
Object.defineProperties(obj, {
prop: {
value: 12,
configurable: true
}
});
return dataPropertyAttributesAreCorrect(obj, "prop", 12, false, false, true);
var obj = new Con();
Object.defineProperties(obj, {
prop: {
value: 12,
configurable: true
}
runTestCase(testcase);
});
verifyEqualTo(obj, "prop", 12);
verifyNotWritable(obj, "prop");
verifyNotEnumerable(obj, "prop");
verifyConfigurable(obj, "prop");

View File

@ -10,23 +10,25 @@ description: >
Object.defineProperties - 'O' is an Array, 'P' is an array index
named property, 'desc' is data descriptor, test updating all
attribute values of 'P' (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [1]; // default value of attributes: writable: true, configurable: true, enumerable: true
var arr = [1]; // default value of attributes: writable: true, configurable: true, enumerable: true
Object.defineProperties(arr, {
"0": {
value: 1001,
writable: false,
enumerable: false,
configurable: false
}
});
return dataPropertyAttributesAreCorrect(arr, "0", 1001, false, false, false);
Object.defineProperties(arr, {
"0": {
value: 1001,
writable: false,
enumerable: false,
configurable: false
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", 1001);
verifyNotWritable(arr, "0");
verifyNotEnumerable(arr, "0");
verifyNotConfigurable(arr, "0");

View File

@ -12,33 +12,34 @@ description: >
[[Configurable]] of 'P' property in 'Attributes' is set as false
value if [[Configurable]] is absent in accessor descriptor 'desc'
(15.4.5.1 step 4.c)
includes: [runTestCase.js]
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var beforeDeleted = false;
var afterDeleted = false;
arr.verifySetter = 100;
var arr = [];
arr.verifySetter = 100;
Object.defineProperties(arr, {
"0": {
set: function (value) {
arr.verifySetter = value;
},
get: function () {
return arr.verifySetter;
},
enumerable: true
}
});
beforeDeleted = arr.hasOwnProperty("0");
delete arr[0];
afterDeleted = arr.hasOwnProperty("0");
arr[0] = 101;
return beforeDeleted && afterDeleted && arr[0] === 101 && arr.verifySetter === 101;
Object.defineProperties(arr, {
"0": {
set: function (value) {
arr.verifySetter = value;
},
get: function () {
return arr.verifySetter;
},
enumerable: true
}
runTestCase(testcase);
});
if (!Object.prototype.hasOwnProperty.call(arr, "0")) {
$ERROR("Expected hasOwnProperty to return true.");
}
arr[0] = 101;
verifyEqualTo(arr, 0, 101);
if (arr.verifySetter !== 101) {
$ERROR('Expected arr.verifySetter === 101, actually ' + arr.verifySetter);
}
verifyNotConfigurable(arr, 0);

View File

@ -10,40 +10,41 @@ description: >
Object.defineProperties - 'O' is an Array, 'P' is an array index
named property, 'desc' is accessor descriptor, test updating all
attribute values of 'P' (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperties(arr, {
"0": {
get: function () {
return 11;
},
set: function () { },
configurable: true,
enumerable: true
}
});
var setFun = function (value) {
arr.setVerifyHelpProp = value;
};
var getFun = function () {
return 14;
};
Object.defineProperties(arr, {
"0": {
get: getFun,
set: setFun,
configurable: false,
enumerable: false
}
});
return accessorPropertyAttributesAreCorrect(arr, "0", getFun, setFun, "setVerifyHelpProp", false, false);
Object.defineProperties(arr, {
"0": {
get: function () {
return 11;
},
set: function () { },
configurable: true,
enumerable: true
}
runTestCase(testcase);
});
var setFun = function (value) {
arr.setVerifyHelpProp = value;
};
var getFun = function () {
return 14;
};
Object.defineProperties(arr, {
"0": {
get: getFun,
set: setFun,
configurable: false,
enumerable: false
}
});
verifyEqualTo(arr, "0", getFun());
verifyWritable(arr, "0", "setVerifyHelpProp");
verifyNotEnumerable(arr, "0");
verifyNotConfigurable(arr, "0");

View File

@ -10,23 +10,21 @@ description: >
Object.defineProperties - 'O' is an Array, 'P' is an array index
named property, 'P' makes no change if every field in 'desc' is
absent (name is data property) (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
arr[0] = 101; // default value of attributes: writable: true, configurable: true, enumerable: true
arr[0] = 101; // default value of attributes: writable: true, configurable: true, enumerable: true
try {
Object.defineProperties(arr, {
"0": {}
});
return dataPropertyAttributesAreCorrect(arr, "0", 101, true, true, true);
} catch (e) {
return false;
}
}
runTestCase(testcase);
Object.defineProperties(arr, {
"0": {}
});
verifyEqualTo(arr, "0", 101);
verifyWritable(arr, "0");
verifyEnumerable(arr, "0");
verifyConfigurable(arr, "0");

View File

@ -10,35 +10,33 @@ description: >
Object.defineProperties - 'O' is an Array, 'P' is an array index
named property, 'P' makes no change if every field in 'desc' is
absent (name is accessor property) (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
function get_func() {
return 11;
}
function set_func(value) {
arr.setVerifyHelpProp = value;
}
function get_func() {
return 11;
}
function set_func(value) {
arr.setVerifyHelpProp = value;
}
Object.defineProperty(arr, "0", {
get: get_func,
set: set_func,
enumerable: true,
configurable: true
});
Object.defineProperty(arr, "0", {
get: get_func,
set: set_func,
enumerable: true,
configurable: true
});
Object.defineProperties(arr, {
"0": {}
});
verifyEqualTo(arr, "0", get_func());
verifyWritable(arr, "0", "setVerifyHelpProp");
verifyEnumerable(arr, "0");
verifyConfigurable(arr, "0");
try {
Object.defineProperties(arr, {
"0": {}
});
return accessorPropertyAttributesAreCorrect(arr, "0", get_func, set_func, "setVerifyHelpProp", true, true);
} catch (e) {
return false;
}
}
runTestCase(testcase);

View File

@ -11,25 +11,26 @@ description: >
named property, 'P' makes no change if the value of every field in
'desc' is the same value as the corresponding field in 'P'(desc is
data property) (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
arr[0] = 100; // default value of attributes: writable: true, configurable: true, enumerable: true
arr[0] = 100; // default value of attributes: writable: true, configurable: true, enumerable: true
Object.defineProperties(arr, {
"0": {
value: 100,
writable: true,
enumerable: true,
configurable: true
}
});
return dataPropertyAttributesAreCorrect(arr, "0", 100, true, true, true);
Object.defineProperties(arr, {
"0": {
value: 100,
writable: true,
enumerable: true,
configurable: true
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", 100);
verifyWritable(arr, "0");
verifyEnumerable(arr, "0");
verifyConfigurable(arr, "0");

View File

@ -11,35 +11,36 @@ description: >
named property, 'P' makes no change if the value of every field in
'desc' is the same value as the corresponding field in 'P'(desc is
accessor property) (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var get_func = function () {
return "100";
};
var set_func = function (value) {
arr.setVerifyHelpProp = value;
};
var arr = [];
var get_func = function () {
return "100";
};
var set_func = function (value) {
arr.setVerifyHelpProp = value;
};
var descObj = {
get: get_func,
set: set_func,
enumerable: true,
configurable: true
};
var properties = {
"0": descObj
};
var descObj = {
get: get_func,
set: set_func,
enumerable: true,
configurable: true
};
Object.defineProperty(arr, "0", descObj);
var properties = {
"0": descObj
};
Object.defineProperties(arr, properties);
Object.defineProperty(arr, "0", descObj);
return accessorPropertyAttributesAreCorrect(arr, "0", get_func, set_func, "setVerifyHelpProp", true, true);
}
runTestCase(testcase);
Object.defineProperties(arr, properties);
verifyEqualTo(arr, "0", get_func());
verifyWritable(arr, "0", "setVerifyHelpProp");
verifyEnumerable(arr, "0");
verifyConfigurable(arr, "0");

View File

@ -9,30 +9,36 @@ es5id: 15.2.3.7-6-a-21
description: >
Object.defineProperties - 'O' is an Error object which implements
its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 )
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var obj = new Error();
var obj = new Error();
Object.defineProperty(obj, "prop", {
value: 11,
configurable: false
});
Object.defineProperty(obj, "prop", {
value: 11,
configurable: false
});
try {
Object.defineProperties(obj, {
prop: {
value: 12,
configurable: true
}
});
return false;
} catch (e) {
return e instanceof TypeError && dataPropertyAttributesAreCorrect(obj, "prop", 11, false, false, false);
try {
Object.defineProperties(obj, {
prop: {
value: 12,
configurable: true
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(obj, "prop", 11);
verifyNotWritable(obj, "prop");
verifyNotEnumerable(obj, "prop");
verifyNotConfigurable(obj, "prop");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -11,23 +11,24 @@ description: >
index property, both the [[Value]] field of 'desc' and the
[[Value]] attribute value of 'name' are undefined (15.4.5.1 step
4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "0", {
value: undefined
});
Object.defineProperty(arr, "0", {
value: undefined
});
Object.defineProperties(arr, {
"0": {
value: undefined
}
});
return dataPropertyAttributesAreCorrect(arr, "0", undefined, false, false, false);
Object.defineProperties(arr, {
"0": {
value: undefined
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", undefined);
verifyNotWritable(arr, "0");
verifyNotEnumerable(arr, "0");
verifyNotConfigurable(arr, "0");

View File

@ -10,23 +10,24 @@ description: >
Object.defineProperties - 'O' is an Array, 'name' is an array
index property, both the [[Value]] field of 'desc' and the
[[Value]] attribute value of 'name' are null (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "0", {
value: null
});
Object.defineProperty(arr, "0", {
value: null
});
Object.defineProperties(arr, {
"0": {
value: null
}
});
return dataPropertyAttributesAreCorrect(arr, "0", null, false, false, false);
Object.defineProperties(arr, {
"0": {
value: null
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", null);
verifyNotWritable(arr, "0");
verifyNotEnumerable(arr, "0");
verifyNotConfigurable(arr, "0");

View File

@ -10,24 +10,25 @@ description: >
Object.defineProperties - 'O' is an Array, 'name' is an array
index property, both the [[Value]] field of 'desc' and the
[[Value]] attribute value of 'name' are NaN (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "0", {
value: NaN
});
Object.defineProperty(arr, "0", {
value: NaN
});
Object.defineProperties(arr, {
"0": {
value: NaN
}
});
return dataPropertyAttributesAreCorrect(arr, "0", NaN, false, false, false);
Object.defineProperties(arr, {
"0": {
value: NaN
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", NaN);
verifyNotWritable(arr, "0");
verifyNotEnumerable(arr, "0");
verifyNotConfigurable(arr, "0");

View File

@ -10,27 +10,33 @@ description: >
Object.defineProperties - 'O' is an Array, 'name' is an array
index property, the [[Value]] field of 'desc' is +0, and the
[[Value]] attribute value of 'name' is -0 (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "0", {
value: -0
});
Object.defineProperty(arr, "0", {
value: -0
});
try {
Object.defineProperties(arr, {
"0": {
value: +0
}
});
return false;
} catch (e) {
return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "0", -0, false, false, false);
try {
Object.defineProperties(arr, {
"0": {
value: +0
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(arr, "0", -0);
verifyNotWritable(arr, "0");
verifyNotEnumerable(arr, "0");
verifyNotConfigurable(arr, "0");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -10,27 +10,33 @@ description: >
Object.defineProperties - 'O' is an Array, 'name' is an array
index property, the [[Value]] field of 'desc' is -0, and the
[[Value]] attribute value of 'name' is +0 (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "0", {
value: +0
});
Object.defineProperty(arr, "0", {
value: +0
});
try {
Object.defineProperties(arr, {
"0": {
value: -0
}
});
return false;
} catch (e) {
return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "0", +0, false, false, false);
try {
Object.defineProperties(arr, {
"0": {
value: -0
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(arr, "0", +0);
verifyNotWritable(arr, "0");
verifyNotEnumerable(arr, "0");
verifyNotConfigurable(arr, "0");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -11,27 +11,24 @@ description: >
index property, the [[Value]] field of 'desc' and the [[Value]]
attribute value of 'name' are two numbers with same vaule
(15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "0", {
value: 101
});
Object.defineProperty(arr, "0", {
value: 101
});
try {
Object.defineProperties(arr, {
"0": {
value: 101
}
});
return dataPropertyAttributesAreCorrect(arr, "0", 101, false, false, false);
} catch (e) {
return false;
}
Object.defineProperties(arr, {
"0": {
value: 101
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", 101);
verifyNotWritable(arr, "0");
verifyNotEnumerable(arr, "0");
verifyNotConfigurable(arr, "0");

View File

@ -11,27 +11,25 @@ description: >
index property, the [[Value]] field of 'desc' and the [[Value]]
attribute value of 'name' are two strings which have same length
and same characters in corresponding positions (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "0", {
value: "abcd"
});
Object.defineProperty(arr, "0", {
value: "abcd"
});
try {
Object.defineProperties(arr, {
"0": {
value: "abcd"
}
});
return dataPropertyAttributesAreCorrect(arr, "0", "abcd", false, false, false);
} catch (e) {
return false;
}
Object.defineProperties(arr, {
"0": {
value: "abcd"
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", "abcd");
verifyNotWritable(arr, "0");
verifyNotEnumerable(arr, "0");
verifyNotConfigurable(arr, "0");

View File

@ -11,27 +11,25 @@ description: >
index property, the [[Value]] field of 'desc' and the [[Value]]
attribute value of 'name' are two booleans with same value
(15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "0", {
value: true
});
Object.defineProperty(arr, "0", {
value: true
});
try {
Object.defineProperties(arr, {
"0": {
value: true
}
});
return dataPropertyAttributesAreCorrect(arr, "0", true, false, false, false);
} catch (e) {
return false;
}
Object.defineProperties(arr, {
"0": {
value: true
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", true);
verifyNotWritable(arr, "0");
verifyNotEnumerable(arr, "0");
verifyNotConfigurable(arr, "0");

View File

@ -11,29 +11,28 @@ description: >
index property, the [[Value]] field of 'desc' and the [[Value]]
attribute value of 'name' are two objects which refer to the same
object (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
var obj1 = { length: 10 };
Object.defineProperty(arr, "0", {
value: obj1
});
var obj1 = { length: 10 };
Object.defineProperty(arr, "0", {
value: obj1
});
var properties = {
"0": {
value: obj1
}
};
try {
Object.defineProperties(arr, properties);
return dataPropertyAttributesAreCorrect(arr, "0", obj1, false, false, false);
} catch (e) {
return false;
}
var properties = {
"0": {
value: obj1
}
runTestCase(testcase);
};
Object.defineProperties(arr, properties);
verifyEqualTo(arr, "0", obj1);
verifyNotWritable(arr, "0");
verifyNotEnumerable(arr, "0");
verifyNotConfigurable(arr, "0");

View File

@ -10,27 +10,25 @@ description: >
Object.defineProperties - 'O' is an Array, 'P' is an array index
property that already exists on 'O' with [[Writable]] true, and
the [[Writable]] field of 'desc' is true (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "0", {
writable: true
});
Object.defineProperty(arr, "0", {
writable: true
});
try {
Object.defineProperties(arr, {
"0": {
writable: true
}
});
return dataPropertyAttributesAreCorrect(arr, "0", undefined, true, false, false);
} catch (e) {
return false;
}
Object.defineProperties(arr, {
"0": {
writable: true
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", undefined);
verifyWritable(arr, "0");
verifyNotEnumerable(arr, "0");
verifyNotConfigurable(arr, "0");

View File

@ -10,28 +10,26 @@ description: >
Object.defineProperties - 'O' is an Array, 'P' is an array index
property that already exists on 'O' with [[Writable]] true, and
the [[Writable]] field of 'desc' is false (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "0", {
writable: true,
configurable: true
});
Object.defineProperty(arr, "0", {
writable: true,
configurable: true
});
try {
Object.defineProperties(arr, {
"0": {
writable: false
}
});
return dataPropertyAttributesAreCorrect(arr, "0", undefined, false, false, true);
} catch (e) {
return false;
}
Object.defineProperties(arr, {
"0": {
writable: false
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", undefined);
verifyNotWritable(arr, "0");
verifyNotEnumerable(arr, "0");
verifyConfigurable(arr, "0");

View File

@ -11,27 +11,26 @@ description: >
property, the [[Get]] field of 'desc' and the [[Get]] attribute
value of 'P' are two objects which refer to the same object
(15.4.5.1 step 4.c)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
function get_func() {
return 10;
}
function get_func() {
return 10;
}
Object.defineProperty(arr, "0", {
get: get_func
});
Object.defineProperty(arr, "0", {
get: get_func
});
Object.defineProperties(arr, {
"0": {
get: get_func
}
});
return accessorPropertyAttributesAreCorrect(arr, "0", get_func, undefined, undefined, false, false);
Object.defineProperties(arr, {
"0": {
get: get_func
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", get_func());
verifyNotEnumerable(arr, "0");
verifyNotConfigurable(arr, "0");

View File

@ -11,31 +11,26 @@ description: >
property, the [[Set]] field of 'desc' and the [[Set]] attribute
value of 'P' are two objects which refer to the same object
(15.4.5.1 step 4.c)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
function set_func(value) {
arr.setVerifyHelpProp = value;
}
function set_func(value) {
arr.setVerifyHelpProp = value;
}
Object.defineProperty(arr, "0", {
set: set_func
});
Object.defineProperty(arr, "0", {
set: set_func
});
try {
Object.defineProperties(arr, {
"0": {
set: set_func
}
});
return accessorPropertyAttributesAreCorrect(arr, "0", undefined, set_func, "setVerifyHelpProp", false, false);
} catch (e) {
return false;
}
Object.defineProperties(arr, {
"0": {
set: set_func
}
runTestCase(testcase);
});
verifyWritable(arr, "0", "setVerifyHelpProp");
verifyNotEnumerable(arr, "0");
verifyNotConfigurable(arr, "0");

View File

@ -10,27 +10,25 @@ description: >
Object.defineProperties - 'O' is an Array, 'P' is an array index
property that already exists on 'O' with [[Enumerable]] true, the
[[Enumerable]] field of 'desc' is true (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "0", {
enumerable: true
});
Object.defineProperty(arr, "0", {
enumerable: true
});
try {
Object.defineProperties(arr, {
"0": {
enumerable: true
}
});
return dataPropertyAttributesAreCorrect(arr, "0", undefined, false, true, false);
} catch (e) {
return false;
}
Object.defineProperties(arr, {
"0": {
enumerable: true
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", undefined);
verifyNotWritable(arr, "0");
verifyEnumerable(arr, "0");
verifyNotConfigurable(arr, "0");

View File

@ -10,28 +10,26 @@ description: >
Object.defineProperties - 'O' is an Array, 'P' is an array index
property that already exists on 'O' with [[Enumerable]] true, the
[[Enumerable]] field of 'desc' is false (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "0", {
enumerable: true,
configurable: true
});
Object.defineProperty(arr, "0", {
enumerable: true,
configurable: true
});
try {
Object.defineProperties(arr, {
"0": {
enumerable: false
}
});
return dataPropertyAttributesAreCorrect(arr, "0", undefined, false, false, true);
} catch (e) {
return false;
}
Object.defineProperties(arr, {
"0": {
enumerable: false
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", undefined);
verifyNotWritable(arr, "0");
verifyNotEnumerable(arr, "0");
verifyConfigurable(arr, "0");

View File

@ -10,27 +10,25 @@ description: >
Object.defineProperties - 'O' is an Array, 'P' is an array index
property that already exists on 'O' with [[Configurable]] true,
the [[Configurable]] field of 'desc' is true (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "0", {
configurable: true
});
Object.defineProperty(arr, "0", {
configurable: true
});
try {
Object.defineProperties(arr, {
"0": {
configurable: true
}
});
return dataPropertyAttributesAreCorrect(arr, "0", undefined, false, false, true);
} catch (e) {
return false;
}
Object.defineProperties(arr, {
"0": {
configurable: true
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", undefined);
verifyNotWritable(arr, "0");
verifyNotEnumerable(arr, "0");
verifyConfigurable(arr, "0");

View File

@ -10,27 +10,25 @@ description: >
Object.defineProperties - 'O' is an Array, 'P' is an array index
property that already exists on 'O' with [[Configurable]] true,
the [[Configurable]] field of 'desc' is false (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "0", {
configurable: true
});
Object.defineProperty(arr, "0", {
configurable: true
});
try {
Object.defineProperties(arr, {
"0": {
configurable: false
}
});
return dataPropertyAttributesAreCorrect(arr, "0", undefined, false, false, false);
} catch (e) {
return false;
}
Object.defineProperties(arr, {
"0": {
configurable: false
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", undefined);
verifyNotWritable(arr, "0");
verifyNotEnumerable(arr, "0");
verifyNotConfigurable(arr, "0");

View File

@ -11,30 +11,35 @@ description: >
property, TypeError is thrown if the [[Configurable]] attribute
value of 'P' is false and the [[Configurable]] field of 'desc' is
true (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "1", {
value: 3,
configurable: false
});
Object.defineProperty(arr, "1", {
value: 3,
configurable: false
});
try {
Object.defineProperties(arr, {
"1": {
value: 13,
configurable: true
}
});
return false;
} catch (ex) {
return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "1", 3, false, false, false);
try {
Object.defineProperties(arr, {
"1": {
value: 13,
configurable: true
}
});
} catch (e) {
verifyEqualTo(arr, "1", 3);
verifyNotWritable(arr, "1");
verifyNotEnumerable(arr, "1");
verifyNotConfigurable(arr, "1");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -12,32 +12,38 @@ description: >
value of 'P' is false, and [[Enumerable]] of 'desc' is present and
its value is different from the [[Enumerable]] attribute value of
'P' (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "1", {
value: 3,
configurable: false,
enumerable: false
Object.defineProperty(arr, "1", {
value: 3,
configurable: false,
enumerable: false
});
});
try {
Object.defineProperties(arr, {
"1": {
value: 13,
enumerable: true
}
});
return false;
} catch (ex) {
return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "1", 3, false, false, false);
try {
Object.defineProperties(arr, {
"1": {
value: 13,
enumerable: true
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(arr, "1", 3);
verifyNotWritable(arr, "1");
verifyNotEnumerable(arr, "1");
verifyNotConfigurable(arr, "1");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -11,35 +11,39 @@ description: >
property, TypeError is thrown if 'P' is accessor property, and
'desc' is data descriptor, and the [[Configurable]] attribute
value of 'P' is false (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
function set_fun(value) {
arr.setVerifyHelpProp = value;
function set_fun(value) {
arr.setVerifyHelpProp = value;
}
Object.defineProperty(arr, "1", {
set: set_fun,
configurable: false
});
try {
Object.defineProperties(arr, {
"1": {
value: 13
}
});
$ERROR("Expected an exception.");
Object.defineProperty(arr, "1", {
set: set_fun,
configurable: false
} catch (e) {
verifyWritable(arr, "1", "setVerifyHelpProp");
});
verifyNotEnumerable(arr, "1");
try {
Object.defineProperties(arr, {
"1": {
value: 13
}
});
return false;
verifyNotConfigurable(arr, "1");
} catch (ex) {
return (ex instanceof TypeError) && accessorPropertyAttributesAreCorrect(arr, "1", undefined, set_fun, "setVerifyHelpProp", false, false);
}
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -11,29 +11,35 @@ description: >
property, TypeError is thrown if 'P' is data property, and'desc'
is accessor descriptor, and the [[Configurable]] attribute value
of 'P' is false (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "1", {
value: 3,
configurable: false
});
Object.defineProperty(arr, "1", {
value: 3,
configurable: false
});
try {
Object.defineProperties(arr, {
"1": {
set: function () { }
}
});
return false;
} catch (ex) {
return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "1", 3, false, false, false);
try {
Object.defineProperties(arr, {
"1": {
set: function () { }
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(arr, "1", 3);
verifyNotWritable(arr, "1");
verifyNotEnumerable(arr, "1");
verifyNotConfigurable(arr, "1");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -12,25 +12,24 @@ description: >
and the [[Configurable]] attribute value of 'P' is true, test 'P'
is converted from data property to accessor property (15.4.5.1
step 4.c)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
arr[1] = 3; // default value of attributes: writable: true, configurable: true, enumerable: true
var arr = [];
arr[1] = 3; // default value of attributes: writable: true, configurable: true, enumerable: true
function set_fun(value) {
arr.setVerifyHelpProp = value;
}
function set_fun(value) {
arr.setVerifyHelpProp = value;
}
Object.defineProperties(arr, {
"1": {
set: set_fun
}
});
return accessorPropertyAttributesAreCorrect(arr, "1", undefined, set_fun, "setVerifyHelpProp", true, true);
Object.defineProperties(arr, {
"1": {
set: set_fun
}
runTestCase(testcase);
});
verifyWritable(arr, "1", "setVerifyHelpProp");
verifyEnumerable(arr, "1");
verifyConfigurable(arr, "1");

View File

@ -12,28 +12,29 @@ description: >
and the [[Configurable]] attribute value of 'P' is true, test 'P'
is converted from accessor property to data property (15.4.5.1
step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "1", {
get: function () {
return 3;
},
configurable: true
Object.defineProperty(arr, "1", {
get: function () {
return 3;
},
configurable: true
});
});
Object.defineProperties(arr, {
"1": {
value: 12
}
});
return dataPropertyAttributesAreCorrect(arr, "1", 12, false, false, true);
Object.defineProperties(arr, {
"1": {
value: 12
}
runTestCase(testcase);
});
verifyEqualTo(arr, "1", 12);
verifyNotWritable(arr, "1");
verifyNotEnumerable(arr, "1");
verifyConfigurable(arr, "1");

View File

@ -13,30 +13,36 @@ description: >
TypeError is thrown if the [[Writable]] attribute value of 'P' is
false and the [[Writable]] field of 'desc' is true. (15.4.5.1
step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "1", {
configurable: false,
writable: false
Object.defineProperty(arr, "1", {
configurable: false,
writable: false
});
});
try {
Object.defineProperties(arr, {
"1": {
writable: true
}
});
return false;
} catch (ex) {
return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "1", undefined, false, false, false);
try {
Object.defineProperties(arr, {
"1": {
writable: true
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(arr, "1", undefined);
verifyNotWritable(arr, "1");
verifyNotEnumerable(arr, "1");
verifyNotConfigurable(arr, "1");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -14,31 +14,37 @@ description: >
false, and the type of the [[Value]] field of 'desc' is different
from the type of the [[Value]] attribute value of 'P' (15.4.5.1
step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "1", {
value: 3,
configurable: false,
writable: false
});
Object.defineProperty(arr, "1", {
value: 3,
configurable: false,
writable: false
});
try {
try {
Object.defineProperties(arr, {
"1": {
value: "abc"
}
});
return false;
} catch (ex) {
return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "1", 3, false, false, false);
Object.defineProperties(arr, {
"1": {
value: "abc"
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(arr, "1", 3);
verifyNotWritable(arr, "1");
verifyNotEnumerable(arr, "1");
verifyNotConfigurable(arr, "1");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -12,27 +12,33 @@ description: >
data property with [[Configurable]], [[Writable]] false, 'desc'
is data descriptor, [[Value]] field of 'desc' is +0, and the
[[Value]] attribute value of 'P' is -0 (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "1", {
value: +0
});
Object.defineProperty(arr, "1", {
value: +0
});
try {
Object.defineProperties(arr, {
"1": {
value: -0
}
});
return false;
} catch (ex) {
return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "1", +0, false, false, false);
try {
Object.defineProperties(arr, {
"1": {
value: -0
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(arr, "1", +0);
verifyNotWritable(arr, "1");
verifyNotEnumerable(arr, "1");
verifyNotConfigurable(arr, "1");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -12,28 +12,34 @@ description: >
data property with [[Configurable]], [[Writable]] false, 'desc'
is data descriptor, [[Value]] field of 'desc' is -0, and the
[[Value]] attribute value of 'P' is +0 (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "1", {
value: -0
});
Object.defineProperty(arr, "1", {
value: -0
});
try {
Object.defineProperties(arr, {
"1": {
value: +0
}
});
return false;
} catch (ex) {
return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "1", -0, false, false, false);
try {
Object.defineProperties(arr, {
"1": {
value: +0
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(arr, "1", -0);
verifyNotWritable(arr, "1");
verifyNotEnumerable(arr, "1");
verifyNotConfigurable(arr, "1");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -13,27 +13,34 @@ description: >
is data descriptor, [[Value]] field of 'desc' and the [[Value]]
attribute value of 'P' are two numbers with different vaule
(15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
Object.defineProperty(arr, "1", {
value: 12
});
var arr = [];
try {
Object.defineProperties(arr, {
"1": {
value: 36
}
});
return false;
} catch (ex) {
return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "1", 12, false, false, false);
Object.defineProperty(arr, "1", {
value: 12
});
try {
Object.defineProperties(arr, {
"1": {
value: 36
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(arr, "1", 12);
verifyNotWritable(arr, "1");
verifyNotEnumerable(arr, "1");
verifyNotConfigurable(arr, "1");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -13,27 +13,33 @@ description: >
is data descriptor, [[Value]] field of 'desc' and the [[Value]]
attribute value of 'P' are two strings with different values
(15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "1", {
value: "abcd"
});
Object.defineProperty(arr, "1", {
value: "abcd"
});
try {
Object.defineProperties(arr, {
"1": {
value: "efgh"
}
});
return false;
} catch (ex) {
return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "1", "abcd", false, false, false);
try {
Object.defineProperties(arr, {
"1": {
value: "efgh"
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(arr, "1", "abcd");
verifyNotWritable(arr, "1");
verifyNotEnumerable(arr, "1");
verifyNotConfigurable(arr, "1");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -13,28 +13,34 @@ description: >
is data descriptor, [[Value]] field of 'desc' and the [[Value]]
attribute value of 'P' are two booleans with different values
(15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "1", {
value: true
});
Object.defineProperty(arr, "1", {
value: true
});
try {
Object.defineProperties(arr, {
"1": {
value: false
}
});
return false;
} catch (ex) {
return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "1", true, false, false, false);
try {
Object.defineProperties(arr, {
"1": {
value: false
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(arr, "1", true);
verifyNotWritable(arr, "1");
verifyNotEnumerable(arr, "1");
verifyNotConfigurable(arr, "1");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -10,30 +10,29 @@ description: >
Object.defineProperties - 'O' is the global object which
implements its own [[GetOwnProperty]] method to get 'P' (8.12.9
step 1 )
includes:
- runTestCase.js
- fnGlobalObject.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js, fnGlobalObject.js]
---*/
function testcase() {
try {
Object.defineProperty(fnGlobalObject(), "prop", {
value: 11,
writable: true,
enumerable: true,
configurable: true
});
Object.defineProperty(fnGlobalObject(), "prop", {
value: 11,
writable: true,
enumerable: true,
configurable: true
});
Object.defineProperties(fnGlobalObject(), {
prop: {
value: 12
}
});
return dataPropertyAttributesAreCorrect(fnGlobalObject(), "prop", 12, true, true, true);
} finally {
delete fnGlobalObject().prop;
}
Object.defineProperties(fnGlobalObject(), {
prop: {
value: 12
}
runTestCase(testcase);
});
verifyEqualTo(fnGlobalObject(), "prop", 12);
verifyWritable(fnGlobalObject(), "prop");
verifyEnumerable(fnGlobalObject(), "prop");
verifyConfigurable(fnGlobalObject(), "prop");
delete fnGlobalObject().prop;

View File

@ -13,30 +13,36 @@ description: >
is data descriptor, [[Value]] field of 'desc' and the [[Value]]
attribute value of 'P' are two objects which refer to the
different objects (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var obj1 = { value: 12 };
var obj2 = { value: 36 };
var arr = [];
var obj1 = { value: 12 };
var obj2 = { value: 36 };
Object.defineProperty(arr, "1", {
value: obj1
});
Object.defineProperty(arr, "1", {
value: obj1
});
try {
Object.defineProperties(arr, {
"1": {
value: obj2
}
});
return false;
} catch (ex) {
return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "1", obj1, false, false, false);
try {
Object.defineProperties(arr, {
"1": {
value: obj2
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(arr, "1", obj1);
verifyNotWritable(arr, "1");
verifyNotEnumerable(arr, "1");
verifyNotConfigurable(arr, "1");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -14,31 +14,35 @@ description: >
[[Set]] field of 'desc' and the [[Set]] attribute value of 'P' are
two objects which refer to the different objects (15.4.5.1 step
4.c)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
function set_fun(value) {
arr.setVerifyHelpProp = value;
function set_fun(value) {
arr.setVerifyHelpProp = value;
}
Object.defineProperty(arr, "1", {
set: set_fun
});
try {
Object.defineProperties(arr, {
"1": {
set: function () { }
}
Object.defineProperty(arr, "1", {
set: set_fun
});
});
try {
Object.defineProperties(arr, {
"1": {
set: function () { }
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyWritable(arr, "1", "setVerifyHelpProp");
return false;
} catch (ex) {
return (ex instanceof TypeError) && accessorPropertyAttributesAreCorrect(arr, "1", undefined, set_fun, "setVerifyHelpProp", false, false);
}
verifyNotEnumerable(arr, "1");
verifyNotConfigurable(arr, "1");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -13,31 +13,35 @@ description: >
descriptor, the [[Set]] field of 'desc' is present, and the
[[Set]] field of 'desc' is an object and the [[Set]] attribute
value of 'P' is undefined (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
function set_fun(value) {
arr.setVerifyHelpProp = value;
function set_fun(value) {
arr.setVerifyHelpProp = value;
}
Object.defineProperty(arr, "1", {
set: set_fun
});
try {
Object.defineProperties(arr, {
"1": {
set: undefined
}
Object.defineProperty(arr, "1", {
set: set_fun
});
});
try {
Object.defineProperties(arr, {
"1": {
set: undefined
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyWritable(arr, "1", "setVerifyHelpProp");
return false;
} catch (ex) {
return (ex instanceof TypeError) && accessorPropertyAttributesAreCorrect(arr, "1", undefined, set_fun, "setVerifyHelpProp", false, false);
}
verifyNotEnumerable(arr, "1");
verifyNotConfigurable(arr, "1");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -13,24 +13,21 @@ description: >
accessor descriptor, the [[Set]] field of 'desc' is present, and
the [[Set]] field of 'desc' and the [[Set]] attribute value of 'P'
are undefined (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "1", {
set: undefined
});
Object.defineProperty(arr, "1", {
set: undefined
});
Object.defineProperties(arr, {
"1": {
set: undefined
}
});
return accessorPropertyAttributesAreCorrect(arr, "1", undefined, undefined, undefined, false, false);
Object.defineProperties(arr, {
"1": {
set: undefined
}
runTestCase(testcase);
});
verifyNotEnumerable(arr, "1");
verifyNotConfigurable(arr, "1");

View File

@ -14,33 +14,37 @@ description: >
[[Get]] field of 'desc' and the [[Get]] attribute value of 'P' are
two objects which refer to the different objects (15.4.5.1 step
4.c)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
function get_fun() {
return 36;
function get_fun() {
return 36;
}
Object.defineProperty(arr, "1", {
get: get_fun
});
try {
Object.defineProperties(arr, {
"1": {
get: function () {
return 12;
}
}
Object.defineProperty(arr, "1", {
get: get_fun
});
});
try {
Object.defineProperties(arr, {
"1": {
get: function () {
return 12;
}
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(arr, "1", get_fun());
return false;
} catch (ex) {
return (ex instanceof TypeError) && accessorPropertyAttributesAreCorrect(arr, "1", get_fun, undefined, undefined, false, false);
}
verifyNotEnumerable(arr, "1");
verifyNotConfigurable(arr, "1");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -13,30 +13,34 @@ description: >
descriptor, the [[Get]] field of 'desc' is present, and the
[[Get]] field of 'desc' is an object and the [[Get]] attribute
value of 'P' is undefined (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
function get_fun() {
return 36;
}
Object.defineProperty(arr, "1", {
get: get_fun
});
function get_fun() {
return 36;
}
Object.defineProperty(arr, "1", {
get: get_fun
});
try {
Object.defineProperties(arr, {
"1": {
get: undefined
}
});
return false;
} catch (ex) {
return (ex instanceof TypeError) && accessorPropertyAttributesAreCorrect(arr, "1", get_fun, undefined, undefined, false, false);
try {
Object.defineProperties(arr, {
"1": {
get: undefined
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(arr, "1", get_fun());
verifyNotEnumerable(arr, "1");
verifyNotConfigurable(arr, "1");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -14,28 +14,22 @@ description: >
field of 'desc' is present, and the [[Get]] field of 'desc' and
the [[Get]] attribute value of 'P' are undefined (15.4.5.1 step
4.c)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "1", {
get: undefined
});
Object.defineProperty(arr, "1", {
get: undefined
});
try {
Object.defineProperties(arr, {
"1": {
get: undefined
}
});
return accessorPropertyAttributesAreCorrect(arr, "1", undefined, undefined, undefined, false, false);
} catch (ex) {
return false;
}
Object.defineProperties(arr, {
"1": {
get: undefined
}
runTestCase(testcase);
});
verifyNotEnumerable(arr, "1");
verifyNotConfigurable(arr, "1");

View File

@ -11,24 +11,22 @@ description: >
named property that already exists on 'O' is data property and
'desc' is data descriptor, test updating the [[Value]] attribute
value of 'P' (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [12];
var arr = [12];
try {
Object.defineProperties(arr, {
"0": {
value: 36
}
});
return dataPropertyAttributesAreCorrect(arr, "0", 36, true, true, true);
} catch (ex) {
return false;
}
Object.defineProperties(arr, {
"0": {
value: 36
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", 36);
verifyWritable(arr, "0");
verifyEnumerable(arr, "0");
verifyConfigurable(arr, "0");

View File

@ -11,24 +11,21 @@ description: >
named property that already exists on 'O' is data property and
'desc' is data descriptor, test setting the [[Value]] attribute
value of 'P' as undefined (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [12];
var arr = [12];
try {
Object.defineProperties(arr, {
"0": {
value: undefined
}
});
return dataPropertyAttributesAreCorrect(arr, "0", undefined, true, true, true);
} catch (ex) {
return false;
}
Object.defineProperties(arr, {
"0": {
value: undefined
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", undefined);
verifyWritable(arr, "0");
verifyEnumerable(arr, "0");
verifyConfigurable(arr, "0");

View File

@ -11,24 +11,22 @@ description: >
named property that already exists on 'O' is data property and
'desc' is data descriptor, test setting the [[Value]] attribute
value of 'P' from undefined to normal value (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [undefined];
var arr = [undefined];
try {
Object.defineProperties(arr, {
"0": {
value: 12
}
});
return dataPropertyAttributesAreCorrect(arr, "0", 12, true, true, true);
} catch (ex) {
return false;
}
Object.defineProperties(arr, {
"0": {
value: 12
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", 12);
verifyWritable(arr, "0");
verifyEnumerable(arr, "0");
verifyConfigurable(arr, "0");

View File

@ -11,24 +11,22 @@ description: >
named property that already exists on 'O' is data property and
'desc' is data descriptor, test updating the [[Writable]]
attribute value of 'P' (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [100];
var arr = [100];
try {
Object.defineProperties(arr, {
"0": {
writable: false
}
});
return dataPropertyAttributesAreCorrect(arr, "0", 100, false, true, true);
} catch (ex) {
return false;
}
Object.defineProperties(arr, {
"0": {
writable: false
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", 100);
verifyNotWritable(arr, "0");
verifyEnumerable(arr, "0");
verifyConfigurable(arr, "0");

View File

@ -11,24 +11,21 @@ description: >
named property that already exists on 'O' is data property and
'desc' is data descriptor, test updating the [[Enumerable]]
attribute value of 'P' (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [12];
var arr = [12];
try {
Object.defineProperties(arr, {
"0": {
enumerable: false
}
});
return dataPropertyAttributesAreCorrect(arr, "0", 12, true, false, true);
} catch (ex) {
return false;
}
Object.defineProperties(arr, {
"0": {
enumerable: false
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", 12);
verifyWritable(arr, "0");
verifyNotEnumerable(arr, "0");
verifyConfigurable(arr, "0");

View File

@ -11,24 +11,22 @@ description: >
named property that already exists on 'O' is data property and
'desc' is data descriptor, test updating the [[Configurable]]
attribute value of 'P' (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [12];
var arr = [12];
try {
Object.defineProperties(arr, {
"0": {
configurable: false
}
});
return dataPropertyAttributesAreCorrect(arr, "0", 12, true, true, false);
} catch (ex) {
return false;
}
Object.defineProperties(arr, {
"0": {
configurable: false
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", 12);
verifyWritable(arr, "0");
verifyEnumerable(arr, "0");
verifyNotConfigurable(arr, "0");

View File

@ -11,26 +11,24 @@ description: >
named property that already exists on 'O' is data property and
'desc' is data descriptor, test updating multiple attribute values
of 'P' (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [12];
var arr = [12];
try {
Object.defineProperties(arr, {
"0": {
value: 36,
writable: false,
configurable: false
}
});
return dataPropertyAttributesAreCorrect(arr, "0", 36, false, true, false);
} catch (ex) {
return false;
}
Object.defineProperties(arr, {
"0": {
value: 36,
writable: false,
configurable: false
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", 36);
verifyNotWritable(arr, "0");
verifyEnumerable(arr, "0");
verifyNotConfigurable(arr, "0");

View File

@ -11,31 +11,30 @@ description: >
named property that already exists on 'O' is accessor property and
'desc' is accessor descriptor, test updating the [[Get]] attribute
value of 'P' with different getter function (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
function get_fun() {
return 36;
}
function get_fun() {
return 36;
}
Object.defineProperty(arr, "0", {
get: function () {
return 12;
},
configurable: true
});
Object.defineProperty(arr, "0", {
get: function () {
return 12;
},
configurable: true
});
Object.defineProperties(arr, {
"0": {
get: get_fun
}
});
return accessorPropertyAttributesAreCorrect(arr, "0", get_fun, undefined, undefined, false, true);
Object.defineProperties(arr, {
"0": {
get: get_fun
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", get_fun());
verifyNotEnumerable(arr, "0");
verifyConfigurable(arr, "0");

View File

@ -11,27 +11,24 @@ description: >
named property that already exists on 'O' is accessor property and
'desc' is accessor descriptor, test setting the [[Get]] attribute
value of 'P' as undefined (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "0", {
get: function () {
return 12;
},
configurable: true
});
Object.defineProperty(arr, "0", {
get: function () {
return 12;
},
configurable: true
});
Object.defineProperties(arr, {
"0": {
get: undefined
}
});
return accessorPropertyAttributesAreCorrect(arr, "0", undefined, undefined, undefined, false, true);
Object.defineProperties(arr, {
"0": {
get: undefined
}
runTestCase(testcase);
});
verifyNotEnumerable(arr, "0");
verifyConfigurable(arr, "0");

View File

@ -11,29 +11,28 @@ description: >
named property that already exists on 'O' is accessor property and
'desc' is accessor descriptor, test updating the [[Get]] attribute
value of 'P' from undefined to function (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
function get_fun() {
return 36;
}
function get_fun() {
return 36;
}
Object.defineProperty(arr, "0", {
get: undefined,
configurable: true
});
Object.defineProperty(arr, "0", {
get: undefined,
configurable: true
});
Object.defineProperties(arr, {
"0": {
get: get_fun
}
});
return accessorPropertyAttributesAreCorrect(arr, "0", get_fun, undefined, undefined, false, true);
Object.defineProperties(arr, {
"0": {
get: get_fun
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", get_fun());
verifyNotEnumerable(arr, "0");
verifyConfigurable(arr, "0");

View File

@ -11,33 +11,29 @@ description: >
named property that already exists on 'O' is accessor property and
'desc' is accessor descriptor, test updating the [[Set]] attribute
value of 'P' with different getter function (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
function set_fun(value) {
arr.setVerifyHelpProp = value;
}
function set_fun(value) {
arr.setVerifyHelpProp = value;
}
Object.defineProperty(arr, "0", {
set: function () { },
configurable: true
});
Object.defineProperty(arr, "0", {
set: function () { },
configurable: true
});
try {
Object.defineProperties(arr, {
"0": {
set: set_fun
}
});
return accessorPropertyAttributesAreCorrect(arr, "0", undefined, set_fun, "setVerifyHelpProp", false, true);
} catch (ex) {
return false;
}
Object.defineProperties(arr, {
"0": {
set: set_fun
}
runTestCase(testcase);
});
verifyWritable(arr, "0", "setVerifyHelpProp");
verifyNotEnumerable(arr, "0");
verifyConfigurable(arr, "0");

View File

@ -11,25 +11,22 @@ description: >
named property that already exists on 'O' is accessor property and
'desc' is accessor descriptor, test setting the [[Set]] attribute
value of 'P' as undefined (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "0", {
set: function () { },
configurable: true
});
Object.defineProperty(arr, "0", {
set: function () { },
configurable: true
});
Object.defineProperties(arr, {
"0": {
set: undefined
}
});
return accessorPropertyAttributesAreCorrect(arr, "0", undefined, undefined, undefined, false, true);
Object.defineProperties(arr, {
"0": {
set: undefined
}
runTestCase(testcase);
});
verifyNotEnumerable(arr, "0");
verifyConfigurable(arr, "0");

View File

@ -11,32 +11,27 @@ description: >
named property that already exists on 'O' is accessor property and
'desc' is accessor descriptor, test updating the [[Set]] attribute
value of 'P' from undefined to function (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
function set_fun(value) {
arr.setVerifyHelpProp = value;
}
Object.defineProperty(arr, "0", {
set: undefined,
configurable: true
});
function set_fun(value) {
arr.setVerifyHelpProp = value;
}
Object.defineProperty(arr, "0", {
set: undefined,
configurable: true
});
try {
Object.defineProperties(arr, {
"0": {
set: set_fun
}
});
return accessorPropertyAttributesAreCorrect(arr, "0", undefined, set_fun, "setVerifyHelpProp", false, true);
} catch (ex) {
return false;
}
Object.defineProperties(arr, {
"0": {
set: set_fun
}
runTestCase(testcase);
});
verifyWritable(arr, "0", "setVerifyHelpProp");
verifyNotEnumerable(arr, "0");
verifyConfigurable(arr, "0");

View File

@ -11,33 +11,28 @@ description: >
named property that already exists on 'O' is accessor property and
'desc' is accessor descriptor, test updating the [[Enumerable]]
attribute value of 'P' (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
function set_fun(value) {
arr.setVerifyHelpProp = value;
}
Object.defineProperty(arr, "0", {
set: set_fun,
enumerable: true,
configurable: true
});
function set_fun(value) {
arr.setVerifyHelpProp = value;
}
Object.defineProperty(arr, "0", {
set: set_fun,
enumerable: true,
configurable: true
});
try {
Object.defineProperties(arr, {
"0": {
enumerable: false
}
});
return accessorPropertyAttributesAreCorrect(arr, "0", undefined, set_fun, "setVerifyHelpProp", false, true);
} catch (ex) {
return false;
}
Object.defineProperties(arr, {
"0": {
enumerable: false
}
runTestCase(testcase);
});
verifyWritable(arr, "0", "setVerifyHelpProp");
verifyNotEnumerable(arr, "0");
verifyConfigurable(arr, "0");

View File

@ -11,32 +11,28 @@ description: >
named property that already exists on 'O' is accessor property and
'desc' is accessor descriptor, test updating the [[Configurable]]
attribute value of 'P' (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
function set_fun(value) {
arr.setVerifyHelpProp = value;
}
Object.defineProperty(arr, "0", {
set: set_fun,
configurable: true
});
function set_fun(value) {
arr.setVerifyHelpProp = value;
}
Object.defineProperty(arr, "0", {
set: set_fun,
configurable: true
});
try {
Object.defineProperties(arr, {
"0": {
configurable: false
}
});
return accessorPropertyAttributesAreCorrect(arr, "0", undefined, set_fun, "setVerifyHelpProp", false, false);
} catch (ex) {
return false;
}
Object.defineProperties(arr, {
"0": {
configurable: false
}
runTestCase(testcase);
});
verifyWritable(arr, "0", "setVerifyHelpProp");
verifyNotEnumerable(arr, "0");
verifyNotConfigurable(arr, "0");

View File

@ -11,41 +11,38 @@ description: >
named property that already exists on 'O' is accessor property and
'desc' is accessor descriptor, test updating multiple attribute
values of 'P' (15.4.5.1 step 4.c)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
function get_fun() {
return 36;
}
function set_fun(value) {
arr.setVerifyHelpProp = value;
}
Object.defineProperty(arr, "0", {
get: function () {
return 12;
},
set: set_fun,
enumerable: true,
configurable: true
});
function get_fun() {
return 36;
}
function set_fun(value) {
arr.setVerifyHelpProp = value;
}
Object.defineProperty(arr, "0", {
get: function () {
return 12;
},
set: set_fun,
enumerable: true,
configurable: true
});
try {
Object.defineProperties(arr, {
"0": {
get: get_fun,
enumerable: false,
configurable: false
}
});
return accessorPropertyAttributesAreCorrect(arr, "0", get_fun, set_fun, "setVerifyHelpProp", false, false);
} catch (ex) {
return false;
}
Object.defineProperties(arr, {
"0": {
get: get_fun,
enumerable: false,
configurable: false
}
runTestCase(testcase);
});
verifyEqualTo(arr, "0", get_fun());
verifyWritable(arr, "0", "setVerifyHelpProp");
verifyNotEnumerable(arr, "0");
verifyNotConfigurable(arr, "0");

View File

@ -11,23 +11,29 @@ description: >
that won't exist on 'O', and 'desc' is data descriptor, test 'P'
is defined in 'O' with all correct attribute values (15.4.5.1 step
5)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperties(arr, {
"property": {
value: 12,
writable: true,
enumerable: true,
configurable: true
}
});
return dataPropertyAttributesAreCorrect(arr, "property", 12, true, true, true) && arr.length === 0;
Object.defineProperties(arr, {
"property": {
value: 12,
writable: true,
enumerable: true,
configurable: true
}
runTestCase(testcase);
});
verifyEqualTo(arr, "property", 12);
verifyWritable(arr, "property");
verifyEnumerable(arr, "property");
verifyConfigurable(arr, "property");
if (arr.length !== 0) {
$ERROR('Expected arr.length === 0, actually ' + arr.length);
}

View File

@ -10,31 +10,36 @@ description: >
Object.defineProperties - 'O' is an Array, 'P' is generic
property, and 'desc' is accessor descriptor, test 'P' is defined
in 'O' with all correct attribute values (15.4.5.1 step 5)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
function get_fun() {
return 12;
}
function set_fun(value) {
arr.setVerifyHelpProp = value;
}
function get_fun() {
return 12;
}
function set_fun(value) {
arr.setVerifyHelpProp = value;
}
Object.defineProperties(arr, {
"property": {
get: get_fun,
set: set_fun,
enumerable: true,
configurable: true
}
});
return accessorPropertyAttributesAreCorrect(arr, "property", get_fun, set_fun, "setVerifyHelpProp", true, true) &&
arr.length === 0;
Object.defineProperties(arr, {
"property": {
get: get_fun,
set: set_fun,
enumerable: true,
configurable: true
}
runTestCase(testcase);
});
verifyEqualTo(arr, "property", get_fun());
verifyWritable(arr, "property", "setVerifyHelpProp");
verifyEnumerable(arr, "property");
verifyConfigurable(arr, "property");
if (arr.length !== 0) {
$ERROR('Expected arr.length === 0, actually ' + arr.length);
}

View File

@ -10,34 +10,35 @@ description: >
Object.defineProperties - 'O' is an Array, 'P' is generic own
accessor property of 'O', and 'desc' is accessor descriptor, test
updating multiple attribute values of 'P' (15.4.5.1 step 5)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
function get_fun() {
return 12;
}
function set_fun(value) {
arr.verifySetFun = value;
}
Object.defineProperty(arr, "property", {
get: function () {
return 36;
},
enumerable: true,
configurable: true
});
var arr = [];
function get_fun() {
return 12;
}
function set_fun(value) {
arr.verifySetFun = value;
}
Object.defineProperty(arr, "property", {
get: function () {
return 36;
},
enumerable: true,
configurable: true
});
Object.defineProperties(arr, {
"property": {
get: get_fun,
set: set_fun,
enumerable: false
}
});
return accessorPropertyAttributesAreCorrect(arr, "property", get_fun, set_fun, "verifySetFun", false, true);
Object.defineProperties(arr, {
"property": {
get: get_fun,
set: set_fun,
enumerable: false
}
runTestCase(testcase);
});
verifyEqualTo(arr, "property", get_fun());
verifyWritable(arr, "property", "verifySetFun");
verifyNotEnumerable(arr, "property");
verifyConfigurable(arr, "property");

View File

@ -10,23 +10,29 @@ description: >
Object.defineProperties - 'O' is an Array, 'P' is generic own data
property of 'O', and 'desc' is data descriptor, test updating
multiple attribute values of 'P' (15.4.5.1 step 5)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
arr.property = 12; // default value of attributes: writable: true, configurable: true, enumerable: true
var arr = [];
arr.property = 12; // default value of attributes: writable: true, configurable: true, enumerable: true
Object.defineProperties(arr, {
"property": {
writable: false,
enumerable: false,
configurable: false
}
});
return dataPropertyAttributesAreCorrect(arr, "property", 12, false, false, false) && arr.length === 0;
Object.defineProperties(arr, {
"property": {
writable: false,
enumerable: false,
configurable: false
}
runTestCase(testcase);
});
verifyEqualTo(arr, "property", 12);
verifyNotWritable(arr, "property");
verifyNotEnumerable(arr, "property");
verifyNotConfigurable(arr, "property");
if (arr.length !== 0) {
$ERROR('Expected arr.length === 0, actually ' + arr.length);
}

View File

@ -11,28 +11,34 @@ description: >
property of 'O', test TypeError is thrown when updating the
[[Value]] attribute value of 'P' which is defined as unwritable
and non-configurable (15.4.5.1 step 5)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "property", {
value: 12
});
Object.defineProperty(arr, "property", {
value: 12
});
try {
Object.defineProperties(arr, {
"property": {
value: 36
}
});
return false;
} catch (ex) {
return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "property", 12, false, false, false);
try {
Object.defineProperties(arr, {
"property": {
value: 36
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(arr, "property", 12);
verifyNotWritable(arr, "property");
verifyNotEnumerable(arr, "property");
verifyNotConfigurable(arr, "property");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -11,28 +11,34 @@ description: >
property of 'O', test TypeError is thrown when updating the
[[Writable]] attribute value of 'P' which is defined as
non-configurable (15.4.5.1 step 5)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "property", {
writable: false
});
Object.defineProperty(arr, "property", {
writable: false
});
try {
Object.defineProperties(arr, {
"property": {
writable: true
}
});
return false;
} catch (ex) {
return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "property", undefined, false, false, false);
try {
Object.defineProperties(arr, {
"property": {
writable: true
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(arr, "property", undefined);
verifyNotWritable(arr, "property");
verifyNotEnumerable(arr, "property");
verifyNotConfigurable(arr, "property");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -11,29 +11,35 @@ description: >
property of 'O', test TypeError is thrown when updating the
[[Enumerable]] attribute value of 'P' which is defined as
non-configurable (15.4.5.1 step 5)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "property", {
value: 12,
enumerable: false
});
Object.defineProperty(arr, "property", {
value: 12,
enumerable: false
});
try {
Object.defineProperties(arr, {
"property": {
enumerable: true
}
});
return false;
} catch (ex) {
return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "property", 12, false, false, false);
try {
Object.defineProperties(arr, {
"property": {
enumerable: true
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(arr, "property", 12);
verifyNotWritable(arr, "property");
verifyNotEnumerable(arr, "property");
verifyNotConfigurable(arr, "property");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -11,28 +11,34 @@ description: >
property of 'O', test TypeError is thrown when updating the
[[Configurable]] attribute value of 'P' which is defined as
non-configurable (15.4.5.1 step 5)
includes:
- runTestCase.js
- dataPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
Object.defineProperty(arr, "property", {
value: 12
});
Object.defineProperty(arr, "property", {
value: 12
});
try {
Object.defineProperties(arr, {
"property": {
configurable: true
}
});
return false;
} catch (ex) {
return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "property", 12, false, false, false);
try {
Object.defineProperties(arr, {
"property": {
configurable: true
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(arr, "property", 12);
verifyNotWritable(arr, "property");
verifyNotEnumerable(arr, "property");
verifyNotConfigurable(arr, "property");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -11,37 +11,42 @@ description: >
accessor property of 'O', test TypeError is thrown when updating
the [[Get]] attribute value of 'P' which is defined as
non-configurable (15.4.5.1 step 5)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
function get_fun() {
return 37;
}
function set_fun(value) {
arr.verifySetFun = value;
}
Object.defineProperty(arr, "property", {
get: get_fun,
set: set_fun
});
function get_fun() {
return 37;
}
function set_fun(value) {
arr.verifySetFun = value;
}
Object.defineProperty(arr, "property", {
get: get_fun,
set: set_fun
});
try {
Object.defineProperties(arr, {
"property": {
get: function () {
return 36;
}
}
});
return false;
} catch (ex) {
return (ex instanceof TypeError) &&
accessorPropertyAttributesAreCorrect(arr, "property", get_fun, set_fun, "verifySetFun", false, false);
try {
Object.defineProperties(arr, {
"property": {
get: function () {
return 36;
}
}
});
$ERROR("Expected an exception.");
} catch (e) {
verifyEqualTo(arr, "property", get_fun());
verifyWritable(arr, "property", "verifySetFun");
verifyNotEnumerable(arr, "property");
verifyNotConfigurable(arr, "property");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -11,31 +11,34 @@ description: >
accessor property of 'O', test TypeError is thrown when updating
the [[Set]] attribute value of 'P' which is defined as
non-configurable (15.4.5.1 step 5)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
function set_fun(value) {
arr.setVerifyHelpProp = value;
function set_fun(value) {
arr.setVerifyHelpProp = value;
}
Object.defineProperty(arr, "property", {
set: set_fun
});
try {
Object.defineProperties(arr, {
"property": {
set: function () { }
}
Object.defineProperty(arr, "property", {
set: set_fun
});
});
} catch (e) {
verifyWritable(arr, "property", "setVerifyHelpProp");
try {
Object.defineProperties(arr, {
"property": {
set: function () { }
}
});
return false;
} catch (ex) {
return (ex instanceof TypeError) && accessorPropertyAttributesAreCorrect(arr, "property", undefined, set_fun, "setVerifyHelpProp", false, false);
}
verifyNotEnumerable(arr, "property");
verifyNotConfigurable(arr, "property");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -11,32 +11,36 @@ description: >
accessor property of 'O', test TypeError is thrown when updating
the [[Enumerable]] attribute value of 'P' which is defined as
non-configurable (15.4.5.1 step 5)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
function set_fun(value) {
arr.setVerifyHelpProp = value;
function set_fun(value) {
arr.setVerifyHelpProp = value;
}
Object.defineProperty(arr, "property", {
set: set_fun,
enumerable: false
});
try {
Object.defineProperties(arr, {
"property": {
enumerable: true
}
Object.defineProperty(arr, "property", {
set: set_fun,
enumerable: false
});
});
$ERROR("Expected an exception.");
} catch (e) {
verifyWritable(arr, "property", "setVerifyHelpProp");
try {
Object.defineProperties(arr, {
"property": {
enumerable: true
}
});
return false;
} catch (ex) {
return (ex instanceof TypeError) && accessorPropertyAttributesAreCorrect(arr, "property", undefined, set_fun, "setVerifyHelpProp", false, false);
}
verifyNotEnumerable(arr, "property");
verifyNotConfigurable(arr, "property");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

View File

@ -11,32 +11,36 @@ description: >
accessor property of 'O', test TypeError is thrown when updating
the [[Configurable]] attribute value of 'P' which is defined as
non-configurable (15.4.5.1 step 5)
includes:
- runTestCase.js
- accessorPropertyAttributesAreCorrect.js
includes: [propertyHelper.js]
---*/
function testcase() {
var arr = [];
var arr = [];
function set_fun(value) {
arr.setVerifyHelpProp = value;
function set_fun(value) {
arr.setVerifyHelpProp = value;
}
Object.defineProperty(arr, "property", {
set: set_fun,
configurable: false
});
try {
Object.defineProperties(arr, {
"property": {
configurable: true
}
Object.defineProperty(arr, "property", {
set: set_fun,
configurable: false
});
});
$ERROR("Expected an exception.");
} catch (e) {
verifyWritable(arr, "property", "setVerifyHelpProp");
try {
Object.defineProperties(arr, {
"property": {
configurable: true
}
});
return false;
} catch (ex) {
return (ex instanceof TypeError) && accessorPropertyAttributesAreCorrect(arr, "property", undefined, set_fun, "setVerifyHelpProp", false, false);
}
verifyNotEnumerable(arr, "property");
verifyNotConfigurable(arr, "property");
if (!(e instanceof TypeError)) {
$ERROR("Expected TypeError, got " + e);
}
runTestCase(testcase);
}

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