aboutsummaryrefslogtreecommitdiffstats
path: root/website/resources/scripts/testcases2/15.2.3.7.json
diff options
context:
space:
mode:
Diffstat (limited to 'website/resources/scripts/testcases2/15.2.3.7.json')
-rw-r--r--website/resources/scripts/testcases2/15.2.3.7.json4340
1 files changed, 4340 insertions, 0 deletions
diff --git a/website/resources/scripts/testcases2/15.2.3.7.json b/website/resources/scripts/testcases2/15.2.3.7.json
new file mode 100644
index 000000000..cf127118e
--- /dev/null
+++ b/website/resources/scripts/testcases2/15.2.3.7.json
@@ -0,0 +1,4340 @@
+{
+ "testCollection": {
+ "name": "15.2.3.7",
+ "numTests": 619,
+ "tests": [
+ {
+ "id": "15.2.3.7-0-1",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-0-1.js",
+ "description": "Object.defineProperties must exist as a function",
+ "test": "assertTrue((function testcase() {\n var f = Object.defineProperties;\n if (typeof(f) === \"function\") {\n return true;\n }\n }).call(this));\n"
+ },
+ {
+ "id": "15.2.3.7-0-2",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-0-2.js",
+ "description": "Object.defineProperties must exist as a function taking 2 parameters",
+ "test": "assertTrue((Object.defineProperties.length === 2));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-1-1",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-1-1.js",
+ "description": "Object.defineProperties throws TypeError if 'O' is undefined",
+ "test": "assertTrue((function testcase() {\n\n try {\n Object.defineProperties(undefined, {});\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-1-2",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-1-2.js",
+ "description": "Object.defineProperties throws TypeError if 'O' is null",
+ "test": "assertTrue((function testcase() {\n\n try {\n Object.defineProperties(null, {});\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-1-3",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-1-3.js",
+ "description": "Object.defineProperties throws TypeError if 'O' is a boolean",
+ "test": "assertTrue((function testcase() {\n\n try {\n Object.defineProperties(true, {});\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-1-4",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-1-4.js",
+ "description": "Object.defineProperties throws TypeError if 'O' is a string",
+ "test": "assertTrue((function testcase() {\n\n try {\n Object.defineProperties(\"abc\", {});\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-1",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-1.js",
+ "description": "Object.defineProperties throws TypeError if type of first param is not Object",
+ "test": "assertTrue((function testcase() {\n try {\n Object.defineProperties(0, {});\n }\n catch (e) {\n if (e instanceof TypeError) {\n return true;\n }\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-2-1",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-2-1.js",
+ "description": "Object.defineProperties throws TypeError if 'Properties' is null",
+ "test": "assertTrue((function testcase() {\n\n try {\n Object.defineProperties({}, null);\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-2-10",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-2-10.js",
+ "description": "Object.defineProperties - argument 'Properties' is an Array object",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var props = [];\n var result = false;\n \n Object.defineProperty(props, \"prop\", {\n get: function () {\n result = this instanceof Array;\n return {};\n },\n enumerable: true\n });\n\n Object.defineProperties(obj, props);\n return result;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-2-11",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-2-11.js",
+ "description": "Object.defineProperties - argument 'Properties' is the Math object",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var result = false;\n \n try {\n Object.defineProperty(Math, \"prop\", {\n get: function () {\n result = (this === Math);\n return {};\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperties(obj, Math);\n return result;\n } finally {\n delete Math.prop;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-2-12",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-2-12.js",
+ "description": "Object.defineProperties - argument 'Properties' is a Date object",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var props = new Date();\n var result = false;\n \n Object.defineProperty(props, \"prop\", {\n get: function () {\n result = this instanceof Date;\n return {};\n },\n enumerable: true\n });\n\n Object.defineProperties(obj, props);\n return result;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-2-13",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-2-13.js",
+ "description": "Object.defineProperties - argument 'Properties' is a RegExp object",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var props = new RegExp();\n var result = false;\n \n Object.defineProperty(props, \"prop\", {\n get: function () {\n result = this instanceof RegExp;\n return {};\n },\n enumerable: true\n });\n\n Object.defineProperties(obj, props);\n return result;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-2-14",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-2-14.js",
+ "description": "Object.defineProperties - argument 'Properties' is the JSON object",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var result = false;\n\n try {\n Object.defineProperty(JSON, \"prop\", {\n get: function () {\n result = (this === JSON);\n return {};\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperties(obj, JSON);\n return result;\n } finally {\n delete JSON.prop;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-2-15",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-2-15.js",
+ "description": "Object.defineProperties - argument 'Properties' is an Error object",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var props = new Error(\"test\");\n var obj1 = {\n value: 11\n };\n props.description = obj1;\n props.message = obj1;\n props.name = obj1;\n\n var result = false;\n \n Object.defineProperty(props, \"prop\", {\n get: function () {\n result = this instanceof Error;\n return {};\n },\n enumerable: true\n });\n\n Object.defineProperties(obj, props);\n return result;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-2-16",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-2-16.js",
+ "description": "Object.defineProperties - argument 'Properties' is the Arguments object",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var result = false;\n\n var Fun = function () {\n return arguments;\n }; \n var props = new Fun();\n\n Object.defineProperty(props, \"prop\", {\n get: function () {\n result = ('[object Arguments]' === Object.prototype.toString.call(this));\n return {};\n },\n enumerable: true\n });\n\n Object.defineProperties(obj, props);\n return result;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-2-18",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-2-18.js",
+ "description": "Object.defineProperties - argument 'Properties' is the global object",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var result = false;\n\n try {\n Object.defineProperty(fnGlobalObject(), \"prop\", {\n get: function () {\n result = (this === fnGlobalObject());\n return {};\n },\n enumerable: true,\n\t\t\t\tconfigurable:true\n });\n\n Object.defineProperties(obj, fnGlobalObject());\n return result;\n } catch (e) {\n return (e instanceof TypeError);\n } finally {\n delete fnGlobalObject().prop;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-2-2",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-2-2.js",
+ "description": "Object.defineProperties throws TypeError if 'Properties' is undefined",
+ "test": "assertTrue((function testcase() {\n\n try {\n Object.defineProperties({}, undefined);\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-2-3",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-2-3.js",
+ "description": "Object.defineProperties - argument 'Properties' is a boolean whose value is false",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var obj1 = Object.defineProperties(obj, false);\n return obj === obj1;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-2-4",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-2-4.js",
+ "description": "Object.defineProperties - argument 'Properties' is a Boolean object whose primitive value is true",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var props = new Boolean(true);\n var result = false;\n\n Object.defineProperty(props, \"prop\", {\n get: function () {\n result = this instanceof Boolean;\n return {};\n },\n enumerable: true\n });\n\n Object.defineProperties(obj, props);\n return result;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-2-5",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-2-5.js",
+ "description": "Object.defineProperties - argument 'Properties' is any interesting number",
+ "test": "assertTrue((function testcase() {\n\n var obj = { \"123\": 100 };\n var obj1 = Object.defineProperties(obj, -12);\n return obj === obj1;\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-2-6",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-2-6.js",
+ "description": "Object.defineProperties - argument 'Properties' is a Number object whose primitive value is any interesting number",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var props = new Number(-12);\n var result = false;\n \n Object.defineProperty(props, \"prop\", {\n get: function () {\n result = this instanceof Number;\n return {};\n },\n enumerable: true\n });\n\n Object.defineProperties(obj, props);\n return result;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-2-7",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-2-7.js",
+ "description": "Object.defineProperties - argument 'Properties' is a string whose value is any interesting string",
+ "test": "assertTrue((function testcase() {\n\n var obj = { \"123\": 100 };\n var obj1 = Object.defineProperties(obj, \"\");\n return obj === obj1;\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-2-8",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-2-8.js",
+ "description": "Object.defineProperties - argument 'Properties' is a String object whose primitive value is any interesting string",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var props = new String();\n var result = false;\n \n Object.defineProperty(props, \"prop\", {\n get: function () {\n result = this instanceof String;\n return {};\n },\n enumerable: true\n });\n\n Object.defineProperties(obj, props);\n return result;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-2-9",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-2-9.js",
+ "description": "Object.defineProperties - argument 'Properties' is a Function object",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var props = function () { };\n var result = false;\n \n Object.defineProperty(props, \"prop\", {\n get: function () {\n result = this instanceof Function;\n return {};\n },\n enumerable: true\n });\n\n Object.defineProperties(obj, props);\n return result;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-3-1",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-3-1.js",
+ "description": "Object.defineProperties - enumerable own data property of 'Properties' is defined in 'O' ",
+ "test": "assertTrue((function testcase() {\n\n var obj = {}; \n var props = {};\n Object.defineProperty(props, \"prop\", {\n value: {},\n enumerable: true\n });\n\n Object.defineProperties(obj, props);\n\n return obj.hasOwnProperty(\"prop\");\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-3-2",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-3-2.js",
+ "description": "Object.defineProperties - own data property of 'Properties' which is not enumerable is not defined in 'O' ",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var props = {};\n\n Object.defineProperty(props, \"prop\", {\n value: {},\n enumerable: false\n });\n\n Object.defineProperties(obj, props);\n\n return !obj.hasOwnProperty(\"prop\");\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-3-3",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-3-3.js",
+ "description": "Object.defineProperties - enumerable inherited data property of 'Properties' is not defined in 'O' ",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var proto = {};\n\n Object.defineProperty(proto, \"prop\", {\n value: {},\n enumerable: true\n });\n\n var Con = function () { };\n Con.prototype = proto;\n var child = new Con();\n\n Object.defineProperties(obj, child);\n\n return !obj.hasOwnProperty(\"prop\");\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-3-4",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-3-4.js",
+ "description": "Object.defineProperties - enumerable own accessor property of 'Properties' is defined in 'O' ",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var props = {};\n\n Object.defineProperty(props, \"prop\", {\n get: function () {\n return {};\n },\n enumerable: true\n });\n\n Object.defineProperties(obj, props);\n\n return obj.hasOwnProperty(\"prop\");\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-3-5",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-3-5.js",
+ "description": "Object.defineProperties - own accessor property of 'Properties' which is not enumerable is not defined in 'O' ",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var props = {};\n\n Object.defineProperty(props, \"prop\", {\n get: function () {\n return {};\n },\n enumerable: false\n });\n\n Object.defineProperties(obj, props);\n\n return !obj.hasOwnProperty(\"prop\");\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-3-6",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-3-6.js",
+ "description": "Object.defineProperties - enumerable inherited accessor property of 'Properties' is not defined in 'O' ",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var proto = {};\n\n Object.defineProperty(proto, \"prop\", {\n get: function () {\n return {};\n },\n enumerable: true\n });\n\n var Con = function () { };\n Con.prototype = proto;\n var child = new Con();\n\n Object.defineProperties(obj, child);\n\n return !obj.hasOwnProperty(\"prop\");\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-3-7",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-3-7.js",
+ "description": "Object.defineProperties - no additional property is defined in 'O' when 'Properties' doesn't contain enumerable own property ",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var props = {};\n\n Object.defineProperty(props, \"prop1\", {\n value: {},\n enumerable: false\n });\n\n Object.defineProperty(props, \"prop2\", {\n get: function () {\n return {};\n },\n enumerable: false\n });\n\n Object.defineProperties(obj, props);\n\n return !obj.hasOwnProperty(\"prop1\") && !obj.hasOwnProperty(\"prop2\");\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-3-8",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-3-8.js",
+ "description": "Object.defineProperties - no additional property is defined in 'O' when 'Properties' doesn't contain enumerable own property ",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var props = {};\n\n Object.defineProperty(props, \"prop1\", {\n value: {},\n enumerable: false\n });\n\n Object.defineProperty(props, \"prop2\", {\n get: function () {\n return {};\n },\n enumerable: true\n });\n\n Object.defineProperties(obj, props);\n\n return !obj.hasOwnProperty(\"prop1\") && obj.hasOwnProperty(\"prop2\");\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-a-1",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-a-1.js",
+ "description": "Object.defineProperties - 'P' is own data property that overrides enumerable inherited data property of 'Properties' is defined in 'O' ",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var proto = {};\n\n Object.defineProperty(proto, \"prop\", {\n value: {\n value: 9\n },\n enumerable: true\n });\n\n var Con = function () { };\n Con.prototype = proto;\n\n var child = new Con();\n Object.defineProperty(child, \"prop\", {\n value: {\n value: 12\n },\n enumerable: true\n });\n\n Object.defineProperties(obj, child);\n\n return obj.hasOwnProperty(\"prop\") && obj.prop === 12;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-a-10",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-a-10.js",
+ "description": "Object.defineProperties - 'Properties' is a Boolean object which implements its own [[Get]] method to get enumerable own property",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var props = new Boolean(false);\n\n Object.defineProperty(props, \"prop\", {\n value: {\n value: 10\n },\n enumerable: true\n });\n Object.defineProperties(obj, props);\n\n return obj.hasOwnProperty(\"prop\") && obj.prop === 10;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-a-11",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-a-11.js",
+ "description": "Object.defineProperties - 'Properties' is a Number object which implements its own [[Get]] method to get enumerable own property",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var props = new Number(-9);\n\n Object.defineProperty(props, \"prop\", {\n value: {\n value: 12\n },\n enumerable: true\n });\n Object.defineProperties(obj, props);\n\n return obj.hasOwnProperty(\"prop\") && obj.prop === 12;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-a-12",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-a-12.js",
+ "description": "Object.defineProperties - 'Properties' is the Math object which implements its own [[Get]] method to get enumerable own property",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n try {\n Math.prop = {\n value: 12\n };\n Object.defineProperties(obj, Math);\n\n return obj.hasOwnProperty(\"prop\") && obj.prop === 12;\n } finally {\n delete Math.prop;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-a-13",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-a-13.js",
+ "description": "Object.defineProperties - 'Properties' is a Date object which implements its own [[Get]] method to get enumerable own property",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var props = new Date();\n\n Object.defineProperty(props, \"prop\", {\n value: {\n value: 13\n },\n enumerable: true\n });\n Object.defineProperties(obj, props);\n\n return obj.hasOwnProperty(\"prop\") && obj.prop === 13;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-a-14",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-a-14.js",
+ "description": "Object.defineProperties - 'Properties' is a RegExp object which implements its own [[Get]] method to get enumerable own property",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var props = new RegExp();\n\n Object.defineProperty(props, \"prop\", {\n value: {\n value: 14\n },\n enumerable: true\n });\n Object.defineProperties(obj, props);\n\n return obj.hasOwnProperty(\"prop\") && obj.prop === 14;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-a-15",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-a-15.js",
+ "description": "Object.defineProperties - 'Properties' is the JSON object which implements its own [[Get]] method to get enumerable own property",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n try {\n JSON.prop = {\n value: 15\n };\n Object.defineProperties(obj, JSON);\n\n return obj.hasOwnProperty(\"prop\") && obj.prop === 15;\n } finally {\n delete JSON.prop;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-a-16",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-a-16.js",
+ "description": "Object.defineProperties - 'Properties' is an Error object which implements its own [[Get]] method to get enumerable own property",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var props = new Error(\"test\");\n var obj1 = {\n value: 11\n };\n props.message = obj1;\n props.name = obj1;\n props.description = obj1;\n\n props.prop = {\n value: 16\n };\n Object.defineProperties(obj, props);\n\n return obj.hasOwnProperty(\"prop\") && obj.prop === 16;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-a-17",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-a-17.js",
+ "description": "Object.defineProperties - 'Properties' is the Arguments object which implements its own [[Get]] method to get enumerable own property",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var arg;\n\n (function fun() {\n arg = arguments;\n }());\n\n Object.defineProperty(arg, \"prop\", {\n value: {\n value: 17\n },\n enumerable: true\n });\n\n Object.defineProperties(obj, arg);\n\n return obj.hasOwnProperty(\"prop\") && obj.prop === 17;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-a-2",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-a-2.js",
+ "description": "Object.defineProperties - 'P' is own data property that overrides enumerable inherited accessor property of 'Properties' is defined in 'O' ",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var proto = {};\n\n Object.defineProperty(proto, \"prop\", {\n get: function () {\n return {\n value: 9\n };\n },\n enumerable: true\n });\n\n var Con = function () { };\n Con.prototype = proto;\n\n var child = new Con();\n Object.defineProperty(child, \"prop\", {\n value: {\n value: 12\n },\n enumerable: true\n });\n Object.defineProperties(obj, child);\n\n return obj.hasOwnProperty(\"prop\") && obj.prop === 12;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-a-3",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-a-3.js",
+ "description": "Object.defineProperties - enumerable own accessor property of 'Properties' that overrides enumerable inherited data property of 'Properties' is defined in 'O' ",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var proto = {};\n\n Object.defineProperty(proto, \"prop\", {\n value: {\n value: 9\n },\n enumerable: true\n });\n\n var Con = function () { };\n Con.prototype = proto;\n\n var child = new Con();\n Object.defineProperty(child, \"prop\", {\n get: function () {\n return {\n value: 12\n };\n },\n enumerable: true\n });\n Object.defineProperties(obj, child);\n\n return obj.hasOwnProperty(\"prop\") && obj.prop === 12;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-a-4",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-a-4.js",
+ "description": "Object.defineProperties - enumerable own accessor property of 'Properties' that overrides enumerable inherited accessor property of 'Properties' is defined in 'O' ",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var proto = {};\n\n Object.defineProperty(proto, \"prop\", {\n get: function () {\n return {\n value: 9\n };\n },\n enumerable: false\n });\n\n var Con = function () { };\n Con.prototype = proto;\n\n var child = new Con();\n Object.defineProperty(child, \"prop\", {\n get: function () {\n return {\n value: 12\n };\n },\n enumerable: true\n });\n Object.defineProperties(obj, child);\n\n return obj.hasOwnProperty(\"prop\") && obj.prop === 12;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-a-5",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-a-5.js",
+ "description": "Object.defineProperties - enumerable own accessor property of 'Properties' without a get function is defined in 'O' ",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var props = {};\n Object.defineProperty(props, \"prop\", {\n get: function () {\n return {\n set: function () { }\n };\n },\n enumerable: true\n });\n\n Object.defineProperties(obj, props);\n\n return obj.hasOwnProperty(\"prop\") && typeof obj.prop === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-a-6",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-a-6.js",
+ "description": "Object.defineProperties - enumerable own accessor property of 'Properties' without a get function that overrides enumerable inherited accessor property of 'Properties' is defined in 'O' ",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var proto = {};\n\n Object.defineProperty(proto, \"prop\", {\n get: function () {\n return 12;\n },\n enumerable: true\n });\n\n var Con = function () { };\n Con.prototype = proto;\n\n var child = new Con();\n Object.defineProperty(child, \"prop\", {\n get: function () {\n return {\n set: function () { }\n };\n },\n enumerable: true\n });\n Object.defineProperties(obj, child);\n\n return obj.hasOwnProperty(\"prop\") && typeof obj.prop === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-a-7",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-a-7.js",
+ "description": "Object.defineProperties - 'Properties' is a Function object which implements its own [[Get]] method to get enumerable own property",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var props = function () { };\n\n Object.defineProperty(props, \"prop\", {\n value: {\n value: 7\n },\n enumerable: true\n });\n\n Object.defineProperties(obj, props);\n\n return obj.hasOwnProperty(\"prop\") && obj.prop === 7;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-a-8",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-a-8.js",
+ "description": "Object.defineProperties - 'Properties' is an Array object which implements its own [[Get]] method to get enumerable own property",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var props = [];\n var descObj = {\n value: 8\n };\n\n Object.defineProperty(props, \"prop\", {\n value: descObj,\n enumerable: true\n });\n Object.defineProperties(obj, props);\n\n return obj.hasOwnProperty(\"prop\") && obj.prop === 8;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-a-9",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-a-9.js",
+ "description": "Object.defineProperties - 'Properties' is a String object which implements its own [[Get]] method to get enumerable own property",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var props = new String();\n\n Object.defineProperty(props, \"prop\", {\n value: {\n value: 9\n },\n enumerable: true\n });\n Object.defineProperties(obj, props);\n\n return obj.hasOwnProperty(\"prop\") && obj.prop === 9;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-1",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-1.js",
+ "description": "Object.defineProperties - 'descObj' is undefined (8.10.5 step 1)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n try {\n Object.defineProperties(obj, {\n prop: undefined\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && !obj.hasOwnProperty(\"prop\");\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-10",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-10.js",
+ "description": "Object.defineProperties - 'enumerable' property of 'descObj' is own data property that overrides an inherited data property (8.10.5 step 3.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n var proto = {\n enumerable: true\n };\n\n var Con = function () { };\n Con.prototype = proto;\n var descObj = new Con();\n\n Object.defineProperty(descObj, \"enumerable\", {\n value: false\n });\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return !accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-100",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-100.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is Boolean object (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n configurable: new Boolean(true)\n }\n });\n\n var preCheck = obj.hasOwnProperty(\"property\");\n delete obj.property;\n\n return preCheck && !obj.hasOwnProperty(\"property\");\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-101",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-101.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is Number object (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n configurable: new Number(-123)\n }\n });\n var preCheck = obj.hasOwnProperty(\"property\");\n delete obj.property;\n\n return preCheck && !obj.hasOwnProperty(\"property\");\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-102",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-102.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is the Math object (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n configurable: Math\n }\n });\n var preCheck = obj.hasOwnProperty(\"property\");\n delete obj.property;\n\n return preCheck && !obj.hasOwnProperty(\"property\");\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-103",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-103.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is Date object (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n configurable: new Date()\n }\n });\n var preCheck = obj.hasOwnProperty(\"property\");\n delete obj.property;\n\n return preCheck && !obj.hasOwnProperty(\"property\");\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-104",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-104.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is RegExp object (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n configurable: new RegExp()\n }\n });\n var preCheck = obj.hasOwnProperty(\"property\");\n delete obj.property;\n\n return preCheck && !obj.hasOwnProperty(\"property\");\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-105",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-105.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is the JSON object (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n configurable: JSON\n }\n });\n var preCheck = obj.hasOwnProperty(\"property\");\n delete obj.property;\n\n return preCheck && !obj.hasOwnProperty(\"property\");\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-106",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-106.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is Error object (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n configurable: new SyntaxError()\n }\n });\n var preCheck = obj.hasOwnProperty(\"property\");\n delete obj.property;\n\n return preCheck && !obj.hasOwnProperty(\"property\");\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-107",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-107.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is the Argument object (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var func = function (a, b, c) {\n return arguments;\n };\n\n var args = func(1, true, \"a\");\n\n Object.defineProperties(obj, {\n property: {\n configurable: args\n }\n });\n var preCheck = obj.hasOwnProperty(\"property\");\n delete obj.property;\n\n return preCheck && !obj.hasOwnProperty(\"property\");\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-109",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-109.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is the global object (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n configurable: fnGlobalObject()\n }\n });\n var preCheck = obj.hasOwnProperty(\"property\");\n delete obj.property;\n\n return preCheck && !obj.hasOwnProperty(\"property\");\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-11",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-11.js",
+ "description": "Object.defineProperties - 'enumerable' property of 'descObj' is own data property that overrides an inherited accessor property (8.10.5 step 3.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var proto = {};\n var accessed = false;\n\n Object.defineProperty(proto, \"enumerable\", {\n get: function () {\n return true;\n }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n var descObj = new Con();\n\n Object.defineProperty(descObj, \"enumerable\", {\n value: false\n });\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return !accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-110",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-110.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is a string (value is 'false') which is treated as true value (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n configurable: \"false\"\n }\n });\n var preCheck = obj.hasOwnProperty(\"property\");\n delete obj.property;\n\n return preCheck && !obj.hasOwnProperty(\"property\");\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-111",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-111.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is new Boolean(false) which is treated as true value (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n configurable: new Boolean(false)\n }\n });\n var preCheck = obj.hasOwnProperty(\"property\");\n delete obj.property;\n\n return preCheck && !obj.hasOwnProperty(\"property\");\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-112",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-112.js",
+ "description": "Object.defineProperties - 'value' property of 'descObj' is present (8.10.5 step 5)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n value: 300\n }\n });\n\n return obj.property === 300;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-113",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-113.js",
+ "description": "Object.defineProperties - 'value' property of 'descObj' is not present (8.10.5 step 5)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: true\n }\n });\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-114",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-114.js",
+ "description": "Object.defineProperties - 'value' property of 'descObj' is own data property (8.10.5 step 5.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n value: \"ownDataProperty\"\n }\n });\n\n return obj.property === \"ownDataProperty\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-115",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-115.js",
+ "description": "Object.defineProperties - 'value' property of 'descObj' is inherited data property (8.10.5 step 5.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var proto = {\n value: \"inheritedDataProperty\"\n };\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.property === \"inheritedDataProperty\";\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-116",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-116.js",
+ "description": "Object.defineProperties - 'value' property of 'descObj' is own data property that overrides an inherited data property (8.10.5 step 5.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var proto = {\n value: \"inheritedDataProperty\"\n };\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n\n descObj.value = \"ownDataProperty\";\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.property === \"ownDataProperty\";\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-117",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-117.js",
+ "description": "Object.defineProperties - 'value' property of 'descObj' is own data property that overrides an inherited accessor property (8.10.5 step 5.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var proto = {};\n\n Object.defineProperty(proto, \"value\", {\n get: function () {\n return \"inheritedAccessorProperty\";\n }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n\n Object.defineProperty(descObj, \"value\", {\n value: \"ownDataProperty\"\n });\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.property === \"ownDataProperty\";\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-118",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-118.js",
+ "description": "Object.defineProperties - 'value' property of 'descObj' is own accessor property (8.10.5 step 5.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var descObj = {};\n\n Object.defineProperty(descObj, \"value\", {\n get: function () {\n return \"ownAccessorProperty\";\n }\n });\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.property === \"ownAccessorProperty\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-119",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-119.js",
+ "description": "Object.defineProperties - 'value' property of 'descObj' is inherited accessor property (8.10.5 step 5.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var proto = {};\n\n Object.defineProperty(proto, \"value\", {\n get: function () {\n return \"inheritedAccessorProperty\";\n }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.property === \"inheritedAccessorProperty\";\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-12",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-12.js",
+ "description": "Object.defineProperties - 'enumerable' property of 'descObj' is own accessor property (8.10.5 step 3.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n var descObj = {};\n\n Object.defineProperty(descObj, \"enumerable\", {\n get: function () {\n return true;\n }\n });\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-120",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-120.js",
+ "description": "Object.defineProperties - 'value' property of 'descObj' is own accessor property that overrides an inherited data property (8.10.5 step 5.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {}; \n\n var proto = {\n value: \"inheritedDataProperty\"\n };\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n\n Object.defineProperty(descObj, \"value\", {\n get: function () {\n return \"ownAccessorProperty\";\n }\n });\n\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.property === \"ownAccessorProperty\";\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-121",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-121.js",
+ "description": "Object.defineProperties - 'value' property of 'descObj' is own accessor property that overrides an inherited accessor property (8.10.5 step 5.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var proto = {};\n\n Object.defineProperty(proto, \"value\", {\n get: function () {\n return \"inheritedAccessorProperty\";\n }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n\n Object.defineProperty(descObj, \"value\", {\n get: function () {\n return \"ownAccessorProperty\";\n }\n });\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.property === \"ownAccessorProperty\";\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-122",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-122.js",
+ "description": "Object.defineProperties - 'value' property of 'descObj' is own accessor property without a get function (8.10.5 step 5.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var descObj = {};\n\n Object.defineProperty(descObj, \"value\", {\n set: function () { }\n });\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-123",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-123.js",
+ "description": "Object.defineProperties - 'value' property of 'descObj' is own accessor property without a get function that overrides an inherited accessor property (8.10.5 step 5.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var proto = {};\n\n Object.defineProperty(proto, \"value\", {\n get: function () {\n return \"inheritedAccessorProperty\";\n }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n\n Object.defineProperty(descObj, \"value\", {\n set: function () { }\n });\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-124",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-124.js",
+ "description": "Object.defineProperties - 'value' property of 'descObj' is inherited accessor property without a get function (8.10.5 step 5.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var proto = {};\n\n Object.defineProperty(proto, \"value\", {\n set: function () { }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-125",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-125.js",
+ "description": "Object.defineProperties - 'descObj' is a Function object which implements its own [[Get]] method to get 'value' property (8.10.5 step 5.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var func = function (a, b) {\n return a + b;\n };\n\n func.value = \"Function\";\n\n Object.defineProperties(obj, {\n property: func\n });\n\n return obj.property === \"Function\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-126",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-126.js",
+ "description": "Object.defineProperties - 'descObj' is an Array object which implements its own [[Get]] method to get 'value' property (8.10.5 step 5.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var arr = [1, 2, 3];\n\n arr.value = \"Array\";\n\n Object.defineProperties(obj, {\n property: arr\n });\n\n return obj.property === \"Array\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-127",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-127.js",
+ "description": "Object.defineProperties - 'descObj' is a String object which implements its own [[Get]] method to get 'value' property (8.10.5 step 5.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var str = new String(\"abc\");\n\n str.value = \"String\";\n\n Object.defineProperties(obj, {\n property: str\n });\n\n return obj.property === \"String\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-128",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-128.js",
+ "description": "Object.defineProperties - 'descObj' is a Boolean object which implements its own [[Get]] method to get 'value' property (8.10.5 step 5.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var descObj = new Boolean(false);\n\n descObj.value = \"Boolean\";\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.property === \"Boolean\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-129",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-129.js",
+ "description": "Object.defineProperties - 'descObj' is a Number object which implements its own [[Get]] method to get 'value' property (8.10.5 step 5.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var descObj = new Number(-9);\n\n descObj.value = \"Number\";\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.property === \"Number\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-13",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-13.js",
+ "description": "Object.defineProperties - 'enumerable' property of 'descObj' is inherited accessor property (8.10.5 step 3.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var proto = {};\n var accessed = false;\n\n Object.defineProperty(proto, \"enumerable\", {\n get: function () {\n return true;\n }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n var descObj = new Con();\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-130",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-130.js",
+ "description": "Object.defineProperties - 'descObj' is the Math object which implements its own [[Get]] method to get 'value' property (8.10.5 step 5.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n try {\n Math.value = \"Math\";\n\n Object.defineProperties(obj, {\n property: Math\n });\n\n return obj.property === \"Math\";\n } finally {\n delete Math.value;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-131",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-131.js",
+ "description": "Object.defineProperties - 'descObj' is a Date object which implements its own [[Get]] method to get 'value' property (8.10.5 step 5.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var descObj = new Date();\n\n descObj.value = \"Date\";\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.property === \"Date\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-132",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-132.js",
+ "description": "Object.defineProperties - 'descObj' is a RegExp object which implements its own [[Get]] method to get 'value' property (8.10.5 step 5.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var descObj = new RegExp();\n\n descObj.value = \"RegExp\";\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.property === \"RegExp\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-133",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-133.js",
+ "description": "Object.defineProperties - 'descObj' is the JSON object which implements its own [[Get]] method to get 'value' property (8.10.5 step 5.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n try {\n JSON.value = \"JSON\";\n\n Object.defineProperties(obj, {\n property: JSON\n });\n\n return obj.property === \"JSON\";\n } finally {\n delete JSON.value;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-134",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-134.js",
+ "description": "Object.defineProperties - 'descObj' is an Error object which implements its own [[Get]] method to get 'value' property (8.10.5 step 5.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var descObj = new Error();\n\n descObj.value = \"Error\";\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.property === \"Error\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-135",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-135.js",
+ "description": "Object.defineProperties - 'descObj' is the Arguments object which implements its own [[Get]] method to get 'value' property (8.10.5 step 5.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var func = function (a, b) {\n arguments.value = \"arguments\";\n\n Object.defineProperties(obj, {\n property: arguments\n });\n\n return obj.property === \"arguments\";\n };\n\n return func();\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-137",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-137.js",
+ "description": "Object.defineProperties - 'descObj' is the global object which implements its own [[Get]] method to get 'value' property (8.10.5 step 5.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n try {\n fnGlobalObject().value = \"global\";\n\n Object.defineProperties(obj, {\n property: fnGlobalObject()\n });\n\n return obj.property === \"global\";\n } finally {\n delete fnGlobalObject().value;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-138",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-138.js",
+ "description": "Object.defineProperties - 'writable' property of 'descObj' is present (8.10.5 step 6)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: false\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-139",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-139.js",
+ "description": "Object.defineProperties - 'writable' property of 'descObj' is not present (8.10.5 step 6)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n value: \"abc\"\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.property === \"abc\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-14",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-14.js",
+ "description": "Object.defineProperties - 'enumerable' property of 'descObj' is own accessor property that overrides an inherited data property (8.10.5 step 3.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n var proto = {\n enumerable: true\n };\n\n var Con = function () { };\n Con.prototype = proto;\n var descObj = new Con();\n\n Object.defineProperty(descObj, \"enumerable\", {\n get: function () {\n return false;\n }\n });\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return !accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-140",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-140.js",
+ "description": "Object.defineProperties - 'writable' property of 'descObj' is own data property (8.10.5 step 6.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: false\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-141",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-141.js",
+ "description": "Object.defineProperties - 'writable' property of 'descObj' is inherited data property (8.10.5 step 6.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var proto = {\n writable: false\n };\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-142",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-142.js",
+ "description": "Object.defineProperties - 'writable' property of 'descObj' is own data property that overrides an inherited data property (8.10.5 step 6.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var proto = {\n writable: true\n };\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n\n descObj.writable = false;\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-143",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-143.js",
+ "description": "Object.defineProperties - 'writable' property of 'descObj' is own data property that overrides an inherited accessor property (8.10.5 step 6.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var proto = { value: 120 };\n\n Object.defineProperty(proto, \"writable\", {\n get: function () {\n return true;\n }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n\n Object.defineProperty(descObj, \"writable\", {\n value: false\n });\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && obj.property === 120;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-144",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-144.js",
+ "description": "Object.defineProperties - 'writable' property of 'descObj' is own accessor property (8.10.5 step 6.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var descObj = {};\n\n Object.defineProperty(descObj, \"writable\", {\n get: function () {\n return false;\n }\n });\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-145",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-145.js",
+ "description": "Object.defineProperties - 'writable' property of 'descObj' is inherited accessor property (8.10.5 step 6.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var proto = {};\n\n Object.defineProperty(proto, \"writable\", {\n get: function () {\n return true;\n }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && obj.property === \"isWritable\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-146",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-146.js",
+ "description": "Object.defineProperties - 'writable' property of 'descObj' is own accessor property that overrides an inherited data property (8.10.5 step 6.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var proto = {\n writable: true\n };\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n\n Object.defineProperty(descObj, \"writable\", {\n get: function () {\n return false;\n }\n });\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-147",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-147.js",
+ "description": "Object.defineProperties - 'writable' property of 'descObj' is own accessor property that overrides an inherited accessor property (8.10.5 step 6.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var proto = {};\n\n Object.defineProperty(proto, \"writable\", {\n get: function () {\n return true;\n }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n\n Object.defineProperty(descObj, \"writable\", {\n get: function () {\n return false;\n }\n });\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-148",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-148.js",
+ "description": "Object.defineProperties - 'writable' property of 'descObj' is own accessor property without a get function (8.10.5 step 6.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var descObj = {};\n\n Object.defineProperty(descObj, \"writable\", {\n set: function () { }\n });\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-149",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-149.js",
+ "description": "Object.defineProperties - 'writable' property of 'descObj' is own accessor property without a get function that overrides an inherited accessor property (8.10.5 step 6.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var proto = {};\n\n Object.defineProperty(proto, \"writable\", {\n get: function () {\n return true;\n }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n\n Object.defineProperty(descObj, \"writable\", {\n set: function () { }\n });\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-15",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-15.js",
+ "description": "Object.defineProperties - 'enumerable' property of 'descObj' is own accessor property that overrides an inherited accessor property (8.10.5 step 3.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var proto = {};\n var accessed = false;\n Object.defineProperty(proto, \"enumerable\", {\n get: function () {\n return true;\n }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n var descObj = new Con();\n\n Object.defineProperty(descObj, \"enumerable\", {\n get: function () {\n return false;\n }\n });\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return !accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-150",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-150.js",
+ "description": "Object.defineProperties - 'writable' property of 'descObj' is inherited accessor property without a get function (8.10.5 step 6.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var proto = {};\n\n Object.defineProperty(proto, \"writable\", {\n set: function () { }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-151",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-151.js",
+ "description": "Object.defineProperties - 'descObj' is a Function object which implements its own [[Get]] method to get 'writable' property (8.10.5 step 6.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var func = function (a, b) {\n return a + b;\n };\n\n func.writable = false;\n\n Object.defineProperties(obj, {\n property: func\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-152",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-152.js",
+ "description": "Object.defineProperties - 'descObj' is an Array object which implements its own [[Get]] method to get 'writable' property (8.10.5 step 6.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var arr = [1, 2, 3];\n\n arr.writable = false;\n\n Object.defineProperties(obj, {\n property: arr\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-153",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-153.js",
+ "description": "Object.defineProperties - 'descObj' is a String object which implements its own [[Get]] method to get 'writable' property (8.10.5 step 6.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var str = new String(\"abc\");\n\n str.writable = false;\n\n Object.defineProperties(obj, {\n property: str\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-154",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-154.js",
+ "description": "Object.defineProperties - 'descObj' is a Boolean object which implements its own [[Get]] method to get 'writable' property (8.10.5 step 6.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var descObj = new Boolean(false);\n\n descObj.writable = false;\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-155",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-155.js",
+ "description": "Object.defineProperties - 'descObj' is a Number object which implements its own [[Get]] method to get 'writable' property (8.10.5 step 6.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var descObj = new Number(-9);\n\n descObj.writable = false;\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-156",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-156.js",
+ "description": "Object.defineProperties - 'descObj' is the Math object which implements its own [[Get]] method to get 'writable' property (8.10.5 step 6.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n try {\n Math.writable = false;\n\n Object.defineProperties(obj, {\n property: Math\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n } finally {\n delete Math.writable;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-157",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-157.js",
+ "description": "Object.defineProperties - 'descObj' is a Date object which implements its own [[Get]] method to get 'writable' property (8.10.5 step 6.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var descObj = new Date();\n\n descObj.writable = false;\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-158",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-158.js",
+ "description": "Object.defineProperties - 'descObj' is a RegExp object which implements its own [[Get]] method to get 'writable' property (8.10.5 step 6.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var descObj = new RegExp();\n\n descObj.writable = false;\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-159",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-159.js",
+ "description": "Object.defineProperties - 'descObj' is the JSON object which implements its own [[Get]] method to get 'writable' property (8.10.5 step 6.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n try {\n JSON.writable = false;\n\n Object.defineProperties(obj, {\n property: JSON\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n } finally {\n delete JSON.writable;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-16",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-16.js",
+ "description": "Object.defineProperties - 'enumerable' property of 'descObj' is own accessor property without a get function (8.10.5 step 3.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n var descObj = {};\n\n Object.defineProperty(descObj, \"enumerable\", {\n set: function () { }\n });\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return !accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-160",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-160.js",
+ "description": "Object.defineProperties - 'descObj' is an Error object which implements its own [[Get]] method to get 'writable' property (8.10.5 step 6.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var descObj = new Error();\n\n descObj.writable = false;\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-161",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-161.js",
+ "description": "Object.defineProperties - 'descObj' is the Arguments object which implements its own [[Get]] method to get 'writable' property (8.10.5 step 6.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var func = function (a, b) {\n arguments.writable = false;\n\n Object.defineProperties(obj, {\n property: arguments\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n };\n\n return func();\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-163",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-163.js",
+ "description": "Object.defineProperties - 'descObj' is the global object which implements its own [[Get]] method to get 'writable' property (8.10.5 step 6.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n try {\n fnGlobalObject().writable = false;\n\n Object.defineProperties(obj, {\n property: fnGlobalObject()\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n } finally {\n delete fnGlobalObject().writable;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-164",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-164.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is undefined (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: undefined\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-165",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-165.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is null (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: null\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-166",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-166.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is true (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: true\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.property === \"isWritable\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-167",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-167.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is false (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: false\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-168",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-168.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is 0 (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: 0\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-169",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-169.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is +0 (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: +0\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-17",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-17.js",
+ "description": "Object.defineProperties - 'enumerable' property of 'descObj' is own accessor property without a get function that overrides an inherited accessor property (8.10.5 step 3.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var proto = {};\n var accessed = false;\n Object.defineProperty(proto, \"enumerable\", {\n get: function () {\n return false;\n }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n var descObj = new Con();\n\n Object.defineProperty(descObj, \"enumerable\", {\n set: function () { }\n });\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return !accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-170",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-170.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is -0 (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: -0\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-171",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-171.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is NaN (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: NaN\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-172",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-172.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is positive number (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: 123\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.property === \"isWritable\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-173",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-173.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is negative number (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: -123\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.property === \"isWritable\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-174",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-174.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is empty string (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: \"\"\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-175",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-175.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is non-empty string (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: \"abc\"\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.property === \"isWritable\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-176",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-176.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is Function object (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: function () { }\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.property === \"isWritable\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-177",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-177.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is Array object (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: []\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.property === \"isWritable\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-178",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-178.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is String object (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: new String(\"abc\")\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.property === \"isWritable\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-179",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-179.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is Boolean object (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: new Boolean(true)\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.property === \"isWritable\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-18",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-18.js",
+ "description": "Object.defineProperties - 'enumerable' property of 'descObj' is inherited accessor property without a get function (8.10.5 step 3.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var proto = {};\n var accessed = false;\n\n Object.defineProperty(proto, \"enumerable\", {\n set: function () { }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n var descObj = new Con();\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return !accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-180",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-180.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is Number object (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: new Number(123)\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.property === \"isWritable\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-181",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-181.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is the Math object (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: Math\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.property === \"isWritable\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-182",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-182.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is Date object (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: new Date()\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.property === \"isWritable\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-183",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-183.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is RegExp object (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: new RegExp()\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.property === \"isWritable\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-184",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-184.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is the JSON object (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: JSON\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.property === \"isWritable\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-185",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-185.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is Error object (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: new SyntaxError()\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.property === \"isWritable\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-186",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-186.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is the Argument object (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var func = function (a, b, c) {\n return arguments;\n };\n\n Object.defineProperties(obj, {\n property: {\n writable: func(1, true, \"a\")\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.property === \"isWritable\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-188",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-188.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is the global object (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: fnGlobalObject()\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.property === \"isWritable\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-189",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-189.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is a string (value is 'false') which is treated as true value (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: \"false\"\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.property === \"isWritable\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-19",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-19.js",
+ "description": "Object.defineProperties - 'descObj' is a Function object which implements its own [[Get]] method to get 'enumerable' property (8.10.5 step 3.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var descObj = function () { };\n var accessed = false;\n\n descObj.enumerable = true;\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-190",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-190.js",
+ "description": "Object.defineProperties - value of 'writable' property of 'descObj' is new Boolean(false) which is treated as true value (8.10.5 step 6.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n writable: new Boolean(false)\n }\n });\n\n obj.property = \"isWritable\";\n\n return obj.property === \"isWritable\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-191",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-191.js",
+ "description": "Object.defineProperties - 'get' property of 'descObj' is present (8.10.5 step 7)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var getter = function () {\n return \"present\";\n };\n\n Object.defineProperties(obj, {\n property: {\n get: getter\n }\n });\n\n return obj.property === \"present\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-192",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-192.js",
+ "description": "Object.defineProperties - 'get' property of 'descObj' is not present (8.10.5 step 7)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var setter = function () { };\n\n Object.defineProperties(obj, {\n property: {\n set: setter\n }\n });\n\n return obj.hasOwnProperty(\"property\") && typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-193",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-193.js",
+ "description": "Object.defineProperties - 'get' property of 'descObj' is own data property (8.10.5 step 7.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var getter = function () {\n return \"ownDataProperty\";\n };\n\n Object.defineProperties(obj, {\n property: {\n get: getter\n }\n });\n\n return obj.property === \"ownDataProperty\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-194",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-194.js",
+ "description": "Object.defineProperties - 'get' property of 'descObj' is inherited data property (8.10.5 step 7.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var getter = function () {\n return \"inheritedDataProperty\";\n };\n\n var proto = {\n get: getter\n };\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.property === \"inheritedDataProperty\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-195",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-195.js",
+ "description": "Object.defineProperties - 'get' property of 'descObj' is own data property that overrides an inherited data property (8.10.5 step 7.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var getter = function () {\n return \"inheritedDataProperty\";\n };\n\n var proto = {\n get: getter\n };\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n\n descObj.get = function () {\n return \"ownDataProperty\";\n };\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.property === \"ownDataProperty\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-196",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-196.js",
+ "description": "Object.defineProperties - 'get' property of 'descObj' is own data property that overrides an inherited accessor property (8.10.5 step 7.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var proto = {};\n\n Object.defineProperty(proto, \"get\", {\n get: function () {\n return function () {\n return \"inheritedAccessorProperty\";\n };\n }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n\n Object.defineProperty(descObj, \"get\", {\n value: function () {\n return \"ownDataProperty\";\n }\n });\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.property === \"ownDataProperty\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-197",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-197.js",
+ "description": "Object.defineProperties - 'get' property of 'descObj' is own accessor property (8.10.5 step 7.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var descObj = {};\n\n Object.defineProperty(descObj, \"get\", {\n get: function () {\n return function () {\n return \"ownAccessorProperty\";\n };\n }\n });\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.property === \"ownAccessorProperty\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-198",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-198.js",
+ "description": "Object.defineProperties - 'get' property of 'descObj' is inherited accessor property (8.10.5 step 7.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var proto = {};\n\n Object.defineProperty(proto, \"get\", {\n get: function () {\n return function () {\n return \"inheritedAccessorProperty\";\n };\n }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.property === \"inheritedAccessorProperty\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-199",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-199.js",
+ "description": "Object.defineProperties - 'get' property of 'descObj' is own accessor property that overrides an inherited data property (8.10.5 step 7.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var proto = {\n get: function () {\n return \"inheritedDataProperty\";\n }\n };\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n\n Object.defineProperty(descObj, \"get\", {\n get: function () {\n return function () {\n return \"ownAccessorProperty\";\n };\n }\n });\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.property === \"ownAccessorProperty\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-2",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-2.js",
+ "description": "Object.defineProperties - 'descObj' is null (8.10.5 step 1)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n \n try {\n Object.defineProperties(obj, {\n prop: null\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && !obj.hasOwnProperty(\"prop\"); ;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-20",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-20.js",
+ "description": "Object.defineProperties - 'descObj' is an Array object which implements its own [[Get]] method to get 'enumerable' property (8.10.5 step 3.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n var descObj = [];\n\n descObj.enumerable = true;\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-200",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-200.js",
+ "description": "Object.defineProperties - 'get' property of 'descObj' is own accessor property that overrides an inherited accessor property (8.10.5 step 7.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var proto = {};\n\n Object.defineProperty(proto, \"get\", {\n get: function () {\n return function () {\n return \"inheritedAccessorProperty\";\n };\n }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n\n Object.defineProperty(descObj, \"get\", {\n get: function () {\n return function () {\n return \"ownAccessorProperty\";\n };\n }\n });\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.property === \"ownAccessorProperty\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-201",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-201.js",
+ "description": "Object.defineProperties - 'get' property of 'descObj' is own accessor property without a get function (8.10.5 step 7.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var descObj = {};\n\n Object.defineProperty(descObj, \"get\", {\n set: function () { }\n });\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-202",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-202.js",
+ "description": "Object.defineProperties - 'get' property of 'descObj' is own accessor property without a get function that overrides an inherited accessor property (8.10.5 step 7.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var proto = {};\n\n Object.defineProperty(proto, \"get\", {\n get: function () {\n return function () {\n return \"inheritedAccessorProperty\";\n };\n }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n\n Object.defineProperty(descObj, \"get\", {\n set: function () { }\n });\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-203",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-203.js",
+ "description": "Object.defineProperties - 'get' property of 'descObj' is inherited accessor property without a get function (8.10.5 step 7.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var proto = {};\n\n Object.defineProperty(proto, \"get\", {\n set: function () { }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return typeof (obj.property) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-204",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-204.js",
+ "description": "Object.defineProperties - 'descObj' is a Function object which implements its own [[Get]] method to get 'get' property (8.10.5 step 7.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var func = function (a, b) {\n return a + b;\n };\n\n func.get = function () {\n return \"Function\";\n };\n\n Object.defineProperties(obj, {\n property: func\n });\n\n return obj.property === \"Function\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-205",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-205.js",
+ "description": "Object.defineProperties - 'descObj' is an Array object which implements its own [[Get]] method to get 'get' property (8.10.5 step 7.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var arr = [];\n\n arr.get = function () {\n return \"Array\";\n };\n\n Object.defineProperties(obj, {\n property: arr\n });\n\n return obj.property === \"Array\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-206",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-206.js",
+ "description": "Object.defineProperties - 'descObj' is a String object which implements its own [[Get]] method to get 'get' property (8.10.5 step 7.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var str = new String(\"abc\");\n\n str.get = function () {\n return \"string Object\";\n };\n\n Object.defineProperties(obj, {\n property: str\n });\n\n return obj.property === \"string Object\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-207",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-207.js",
+ "description": "Object.defineProperties - 'descObj' is a Boolean object which implements its own [[Get]] method to get 'get' property (8.10.5 step 7.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var descObj = new Boolean(false);\n\n descObj.get = function () {\n return \"Boolean\";\n };\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.property === \"Boolean\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-208",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-208.js",
+ "description": "Object.defineProperties - 'descObj' is a Number object which implements its own [[Get]] method to get 'get' property (8.10.5 step 7.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var descObj = new Number(-9);\n\n descObj.get = function () {\n return \"Number\";\n };\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.property === \"Number\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-209",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-209.js",
+ "description": "Object.defineProperties - 'descObj' is the Math object which implements its own [[Get]] method to get 'get' property (8.10.5 step 7.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n try {\n Math.get = function () {\n return \"Math\";\n };\n\n Object.defineProperties(obj, {\n property: Math\n });\n\n return obj.property === \"Math\";\n } finally {\n delete Math.get;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-21",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-21.js",
+ "description": "Object.defineProperties - 'descObj' is a String object which implements its own [[Get]] method to get 'enumerable' property (8.10.5 step 3.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var descObj = new String();\n var accessed = false;\n descObj.enumerable = true;\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-210",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-210.js",
+ "description": "Object.defineProperties - 'descObj' is a Date object which implements its own [[Get]] method to get 'get' property (8.10.5 step 7.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var descObj = new Date();\n\n descObj.get = function () {\n return \"Date\";\n };\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.property === \"Date\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-211",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-211.js",
+ "description": "Object.defineProperties - 'descObj' is a RegExp object which implements its own [[Get]] method to get 'get' property (8.10.5 step 7.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var descObj = new RegExp();\n\n descObj.get = function () {\n return \"RegExp\";\n };\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.property === \"RegExp\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-212",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-212.js",
+ "description": "Object.defineProperties - 'descObj' is the JSON object which implements its own [[Get]] method to get 'get' property (8.10.5 step 7.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n try {\n JSON.get = function () {\n return \"JSON\";\n };\n\n Object.defineProperties(obj, {\n property: JSON\n });\n\n return obj.property === \"JSON\";\n } finally {\n delete JSON.get;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-213",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-213.js",
+ "description": "Object.defineProperties - 'descObj' is an Error object which implements its own [[Get]] method to get 'get' property (8.10.5 step 7.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var descObj = new Error();\n\n descObj.get = function () {\n return \"Error\";\n };\n\n Object.defineProperties(obj, {\n property: descObj\n });\n\n return obj.property === \"Error\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-214",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-214.js",
+ "description": "Object.defineProperties - 'descObj' is the Arguments object which implements its own [[Get]] method to get 'get' property (8.10.5 step 7.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var func = function (a, b) {\n arguments.get = function () {\n return \"arguments\";\n };\n\n Object.defineProperties(obj, {\n property: arguments\n });\n\n return obj.property === \"arguments\";\n };\n\n return func();\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-216",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-216.js",
+ "description": "Object.defineProperties - 'descObj' is the global object which implements its own [[Get]] method to get 'get' property (8.10.5 step 7.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n try {\n fnGlobalObject().get = function () {\n return \"global\";\n };\n\n Object.defineProperties(obj, {\n property: fnGlobalObject()\n });\n\n return obj.property === \"global\";\n } finally {\n delete fnGlobalObject().get;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-217",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-217.js",
+ "description": "Object.defineProperties - value of 'get' property of 'descObj' is undefined (8.10.5 step 7.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n get: undefined\n }\n });\n\n return obj.hasOwnProperty(\"property\") && typeof obj.property === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-218",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-218.js",
+ "description": "Object.defineProperties - value of 'get' property of 'descObj' is primitive values( value is null) (8.10.5 step 7.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n try {\n Object.defineProperties(obj, {\n property: {\n get: null\n }\n });\n\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-219",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-219.js",
+ "description": "Object.defineProperties - value of 'get' property of 'descObj' is primitive values( value is boolean) (8.10.5 step 7.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n try {\n Object.defineProperties(obj, {\n property: {\n get: false\n }\n });\n\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-22",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-22.js",
+ "description": "Object.defineProperties - 'descObj' is a Boolean object which implements its own [[Get]] method to get 'enumerable' property (8.10.5 step 3.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var descObj = new Boolean(false);\n var accessed = false;\n\n descObj.enumerable = true;\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-220",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-220.js",
+ "description": "Object.defineProperties - value of 'get' property of 'descObj' is primitive values( value is number) (8.10.5 step 7.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n try {\n Object.defineProperties(obj, {\n property: {\n get: 123\n }\n });\n\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-221",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-221.js",
+ "description": "Object.defineProperties - value of 'get' property of 'descObj' is primitive values( value is string) (8.10.5 step 7.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n try {\n Object.defineProperties(obj, {\n property: {\n get: \"string\"\n }\n });\n\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-222",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-222.js",
+ "description": "Object.defineProperties - value of 'get' property of 'descObj' is applied to Array object (8.10.5 step 7.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n try {\n Object.defineProperties(obj, {\n property: {\n get: []\n }\n });\n\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-223",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-223.js",
+ "description": "Object.defineProperties - value of 'get' property of 'descObj' is a function (8.10.5 step 7.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n var getter = function () {\n return 100;\n };\n\n Object.defineProperties(obj, {\n property: {\n get: getter\n }\n });\n\n return obj.property === 100;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-226",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-226.js",
+ "description": "Object.defineProperties - 'set' property of 'descObj' is present (8.10.5 step 8)",
+ "test": "assertTrue((function testcase() {\n var data = \"data\";\n var obj = {};\n\n Object.defineProperties(obj, {\n \"prop\": {\n set: function (value) {\n data = value;\n }\n }\n });\n\n obj.prop = \"overrideData\";\n\n return obj.hasOwnProperty(\"prop\") && data === \"overrideData\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-227",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-227.js",
+ "description": "Object.defineProperties - 'set' property of 'descObj' is not present (8.10.5 step 8)",
+ "test": "assertTrue((function testcase() {\n var data = \"data\";\n var obj = {};\n\n try {\n Object.defineProperties(obj, {\n descObj: {\n get: function () {\n return data;\n }\n }\n });\n\n\n obj.descObj = \"overrideData\";\n\n var desc = Object.getOwnPropertyDescriptor(obj, \"descObj\");\n return obj.hasOwnProperty(\"descObj\") && typeof (desc.set) === \"undefined\" && data === \"data\";\n } catch (e) {\n return false;\n }\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.getOwnPropertyDescriptor))"
+ },
+ {
+ "id": "15.2.3.7-5-b-228",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-228.js",
+ "description": "Object.defineProperties - 'set' property of 'descObj' is own data property (8.10.5 step 8.a)",
+ "test": "assertTrue((function testcase() {\n var data = \"data\";\n var obj = {};\n\n Object.defineProperties(obj, {\n descObj: {\n set: function (value) {\n data = value;\n }\n }\n });\n\n obj.descObj = \"overrideData\";\n\n return obj.hasOwnProperty(\"descObj\") && data === \"overrideData\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-229",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-229.js",
+ "description": "Object.defineProperties - 'set' property of 'descObj' is inherited data property (8.10.5 step 8.a)",
+ "test": "assertTrue((function testcase() {\n var data = \"data\";\n var proto = {\n set: function (value) {\n data = value;\n }\n };\n\n var Con = function () { };\n Con.prototype = proto;\n\n var child = new Con();\n var obj = {};\n\n Object.defineProperties(obj, {\n prop: child\n });\n\n obj.prop = \"overrideData\";\n\n return obj.hasOwnProperty(\"prop\") && data === \"overrideData\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-23",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-23.js",
+ "description": "Object.defineProperties - 'descObj' is a Number object which implements its own [[Get]] method to get 'enumerable' property (8.10.5 step 3.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var descObj = new Number(-9);\n var accessed = false;\n\n descObj.enumerable = true;\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-230",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-230.js",
+ "description": "Object.defineProperties - 'set' property of 'descObj' is own data property that overrides an inherited data property (8.10.5 step 8.a)",
+ "test": "assertTrue((function testcase() {\n var data1 = \"data\";\n var data2 = \"data\";\n var proto = {\n set: function (value) {\n data2 = value;\n }\n };\n\n var Con = function () { };\n Con.prototype = proto;\n\n var child = new Con();\n child.set = function (value) {\n data1 = value;\n };\n\n var obj = {};\n\n Object.defineProperties(obj, {\n prop: child\n });\n\n obj.prop = \"overrideData\";\n\n return obj.hasOwnProperty(\"prop\") && data1 === \"overrideData\" && data2 === \"data\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-231",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-231.js",
+ "description": "Object.defineProperties - 'set' property of 'descObj' is own data property that overrides an inherited accessor property (8.10.5 step 8.a)",
+ "test": "assertTrue((function testcase() {\n var data1 = \"data\";\n var data2 = \"data\";\n var fun = function (value) {\n data2 = value;\n };\n var proto = {};\n Object.defineProperty(proto, \"set\", {\n get: function () {\n return fun;\n },\n set: function (value) {\n fun = value;\n }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n\n var child = new Con();\n child.set = function (value) {\n data1 = value;\n };\n\n var obj = {};\n\n Object.defineProperties(obj, {\n prop: child\n });\n\n obj.prop = \"overrideData\";\n\n return obj.hasOwnProperty(\"prop\") && data1 === \"overrideData\" && data2 === \"data\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-232",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-232.js",
+ "description": "Object.defineProperties - 'set' property of 'descObj' is own accessor property (8.10.5 step 8.a)",
+ "test": "assertTrue((function testcase() {\n var data = \"data\";\n var setFun = function (value) {\n data = value;\n };\n var descObj = {};\n Object.defineProperty(descObj, \"set\", {\n get: function () {\n return setFun;\n }\n });\n\n var obj = {};\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n\n obj.prop = \"overrideData\";\n\n return obj.hasOwnProperty(\"prop\") && data === \"overrideData\";\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-233",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-233.js",
+ "description": "Object.defineProperties - 'set' property of 'descObj' is inherited accessor property (8.10.5 step 8.a)",
+ "test": "assertTrue((function testcase() {\n var data = \"data\";\n var setFun = function (value) {\n data = value;\n };\n var proto = {};\n Object.defineProperty(proto, \"set\", {\n get: function () {\n return setFun;\n }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n\n var child = new Con();\n var obj = {};\n\n Object.defineProperties(obj, {\n prop: child\n });\n obj.prop = \"overrideData\";\n\n return obj.hasOwnProperty(\"prop\") && data === \"overrideData\";\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-234",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-234.js",
+ "description": "Object.defineProperties - 'set' property of 'descObj' is own accessor property that overrides an inherited data property (8.10.5 step 8.a)",
+ "test": "assertTrue((function testcase() {\n var data1 = \"data\";\n var data2 = \"data\";\n\n var proto = {};\n proto.set = function (value) {\n data1 = value;\n };\n\n var Con = function () { };\n Con.prototype = proto;\n\n var child = new Con();\n Object.defineProperty(child, \"set\", {\n get: function () {\n return function (value) {\n data2 = value;\n };\n }\n });\n\n var obj = {};\n\n Object.defineProperties(obj, {\n prop: child\n });\n obj.prop = \"overrideData\";\n\n return obj.hasOwnProperty(\"prop\") && data2 === \"overrideData\" && data1 === \"data\";\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-235",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-235.js",
+ "description": "Object.defineProperties - 'set' property of 'descObj' is own accessor property that overrides an inherited accessor property (8.10.5 step 8.a)",
+ "test": "assertTrue((function testcase() {\n var data1 = \"data\";\n var data2 = \"data\";\n\n var proto = {};\n Object.defineProperty(proto, \"set\", {\n get: function () {\n return function (value) {\n data1 = value;\n };\n }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n\n var child = new Con();\n Object.defineProperty(child, \"set\", {\n get: function () {\n return function (value) {\n data2 = value;\n };\n }\n });\n\n var obj = {};\n\n Object.defineProperties(obj, {\n prop: child\n });\n\n obj.prop = \"overrideData\";\n\n return obj.hasOwnProperty(\"prop\") && data2 === \"overrideData\" && data1 === \"data\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-236",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-236.js",
+ "description": "Object.defineProperties - 'set' property of 'descObj' is own accessor property without a get function (8.10.5 step 8.a)",
+ "test": "assertTrue((function testcase() {\n var fun = function () {\n return 10;\n };\n var descObj = {\n get: fun\n };\n Object.defineProperty(descObj, \"set\", {\n set: function () { }\n });\n\n var obj = {};\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n\n var desc = Object.getOwnPropertyDescriptor(obj, \"prop\");\n\n return obj.hasOwnProperty(\"prop\") && typeof desc.set === \"undefined\" && obj.prop === 10;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-237",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-237.js",
+ "description": "Object.defineProperties - 'set' property of 'descObj' is own accessor property without a get function that overrides an inherited accessor property (8.10.5 step 8.a)",
+ "test": "assertTrue((function testcase() {\n\n var fun = function () {\n return 10; \n };\n var proto = {};\n Object.defineProperty(proto, \"set\", {\n get: function () {\n return function () {\n return arguments;\n };\n }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n Object.defineProperty(descObj, \"set\", {\n set: function () { }\n });\n\n descObj.get = fun;\n\n var obj = {};\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n\n var desc = Object.getOwnPropertyDescriptor(obj, \"prop\");\n\n return obj.hasOwnProperty(\"prop\") && typeof (desc.set) === \"undefined\" && obj.prop === 10;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-238",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-238.js",
+ "description": "Object.defineProperties - 'set' property of 'descObj' is inherited accessor property without a get function (8.10.5 step 8.a)",
+ "test": "assertTrue((function testcase() {\n\n var fun = function () {\n return 10; \n };\n var proto = {};\n Object.defineProperty(proto, \"set\", {\n set: function () { }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n\n var descObj = new Con();\n descObj.get = fun;\n\n var obj = {};\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n\n var desc = Object.getOwnPropertyDescriptor(obj, \"prop\");\n\n return obj.hasOwnProperty(\"prop\") && typeof (desc.set) === \"undefined\" && obj.prop === 10;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-239",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-239.js",
+ "description": "Object.defineProperties - 'descObj' is a Function object which implements its own [[Get]] method to get 'set' property (8.10.5 step 8.a)",
+ "test": "assertTrue((function testcase() {\n var data = \"data\";\n var descFun = function () { };\n var setFun = function (value) {\n data = value;\n };\n\n descFun.prop = {\n set: setFun\n };\n\n var obj = {};\n Object.defineProperties(obj, descFun);\n obj.prop = \"funData\";\n return obj.hasOwnProperty(\"prop\") && data === \"funData\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-24",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-24.js",
+ "description": "Object.defineProperties - 'descObj' is the Math object which implements its own [[Get]] method to get 'enumerable' property (8.10.5 step 3.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n try {\n Math.enumerable = true;\n\n Object.defineProperties(obj, {\n prop: Math\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n } finally {\n delete Math.enumerable;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-240",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-240.js",
+ "description": "Object.defineProperties - 'descObj' is an Array object which implements its own [[Get]] method to get 'set' property (8.10.5 step 8.a)",
+ "test": "assertTrue((function testcase() {\n\n var data = \"data\";\n var arr = [];\n var setFun = function (value) {\n data = value;\n };\n arr.prop = {\n set: setFun\n };\n\n var obj = {};\n Object.defineProperties(obj, arr);\n obj.prop = \"arrData\";\n return obj.hasOwnProperty(\"prop\") && data === \"arrData\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-241",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-241.js",
+ "description": "Object.defineProperties - 'descObj' is a String object which implements its own [[Get]] method to get 'set' property (8.10.5 step 8.a)",
+ "test": "assertTrue((function testcase() {\n var data = \"data\";\n var descStr = new String();\n var setFun = function (value) {\n data = value;\n };\n\n descStr.prop = {\n set: setFun\n };\n\n var obj = {};\n Object.defineProperties(obj, descStr);\n obj.prop = \"strData\";\n return obj.hasOwnProperty(\"prop\") && data === \"strData\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-242",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-242.js",
+ "description": "Object.defineProperties - 'descObj' is a Boolean object which implements its own [[Get]] method to get 'set' property (8.10.5 step 8.a)",
+ "test": "assertTrue((function testcase() {\n\n var data = \"data\";\n var descObj = new Boolean(false);\n var setFun = function (value) {\n data = value;\n };\n descObj.prop = {\n set: setFun\n };\n\n var obj = {};\n Object.defineProperties(obj, descObj);\n obj.prop = \"booleanData\";\n return obj.hasOwnProperty(\"prop\") && data === \"booleanData\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-243",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-243.js",
+ "description": "Object.defineProperties - 'descObj' is a Number object which implements its own [[Get]] method to get 'set' property (8.10.5 step 8.a)",
+ "test": "assertTrue((function testcase() {\n\n var data = \"data\";\n var descObj = new Number(-9);\n var setFun = function (value) {\n data = value;\n };\n descObj.prop = {\n set: setFun\n };\n\n var obj = {};\n Object.defineProperties(obj, descObj);\n obj.prop = \"numberData\";\n return obj.hasOwnProperty(\"prop\") && data === \"numberData\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-244",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-244.js",
+ "description": "Object.defineProperties - 'descObj' is the Math object which implements its own [[Get]] method to get 'set' property (8.10.5 step 8.a)",
+ "test": "assertTrue((function testcase() {\n\n var data = \"data\";\n var setFun = function (value) {\n data = value;\n };\n try {\n Math.prop = {\n set: setFun\n };\n\n var obj = {};\n Object.defineProperties(obj, Math);\n obj.prop = \"mathData\";\n return obj.hasOwnProperty(\"prop\") && data === \"mathData\";\n } finally {\n delete Math.prop;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-245",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-245.js",
+ "description": "Object.defineProperties - 'descObj' is a Date object which implements its own [[Get]] method to get 'set' property (8.10.5 step 8.a)",
+ "test": "assertTrue((function testcase() {\n\n var data = \"data\";\n var descObj = new Date();\n var setFun = function (value) {\n data = value;\n };\n descObj.prop = {\n set: setFun\n };\n\n var obj = {};\n Object.defineProperties(obj, descObj);\n obj.prop = \"dateData\";\n return obj.hasOwnProperty(\"prop\") && data === \"dateData\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-246",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-246.js",
+ "description": "Object.defineProperties - 'descObj' is a RegExp object which implements its own [[Get]] method to get 'set' property (8.10.5 step 8.a)",
+ "test": "assertTrue((function testcase() {\n\n var data = \"data\";\n var descObj = new RegExp();\n var setFun = function (value) {\n data = value;\n };\n descObj.prop = {\n set: setFun\n };\n\n var obj = {};\n Object.defineProperties(obj, descObj);\n obj.prop = \"regExpData\";\n return obj.hasOwnProperty(\"prop\") && data === \"regExpData\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-247",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-247.js",
+ "description": "Object.defineProperties - 'descObj' is the JSON object which implements its own [[Get]] method to get 'set' property (8.10.5 step 8.a)",
+ "test": "assertTrue((function testcase() {\n\n var data = \"data\";\n var setFun = function (value) {\n data = value;\n };\n try {\n JSON.prop = {\n set: setFun\n };\n\n var obj = {};\n Object.defineProperties(obj, JSON);\n obj.prop = \"JSONData\";\n return obj.hasOwnProperty(\"prop\") && data === \"JSONData\";\n } finally {\n delete JSON.prop;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-248",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-248.js",
+ "description": "Object.defineProperties - 'descObj' is an Error object which implements its own [[Get]] method to get 'set' property (8.10.5 step 8.a)",
+ "test": "assertTrue((function testcase() {\n\n var data = \"data\";\n var descObj = new Error(\"test\");\n descObj.description = { value: 11 };\n descObj.message = { value: 11 };\n descObj.name = { value: 11 };\n\n var setFun = function (value) {\n data = value;\n };\n descObj.prop = {\n set: setFun\n };\n\n var obj = {};\n Object.defineProperties(obj, descObj);\n obj.prop = \"errorData\";\n return obj.hasOwnProperty(\"prop\") && data === \"errorData\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-249",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-249.js",
+ "description": "Object.defineProperties - 'descObj' is the Arguments object which implements its own [[Get]] method to get 'set' property (8.10.5 step 8.a)",
+ "test": "assertTrue((function testcase() {\n var data = \"data\";\n var fun = function () {\n return arguments;\n };\n var arg = fun();\n var setFun = function (value) {\n data = value;\n };\n\n arg.prop = {\n set: setFun\n };\n\n var obj = {};\n Object.defineProperties(obj, arg);\n obj.prop = \"argData\";\n return obj.hasOwnProperty(\"prop\") && data === \"argData\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-25",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-25.js",
+ "description": "Object.defineProperties - 'descObj' is a Date object which implements its own [[Get]] method to get 'enumerable' property (8.10.5 step 3.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var descObj = new Date();\n var accessed = false;\n\n descObj.enumerable = true;\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-252",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-252.js",
+ "description": "Object.defineProperties - value of 'set' property of 'descObj' is undefined (8.10.5 step 8.b)",
+ "test": "assertTrue((function testcase() {\n\n var getFun = function () {\n return 11;\n };\n\n var obj = {};\n Object.defineProperties(obj, {\n prop: {\n get: getFun,\n set: undefined\n }\n });\n\n try {\n var desc = Object.getOwnPropertyDescriptor(obj, \"prop\");\n return obj.hasOwnProperty(\"prop\") && typeof (desc.set) === \"undefined\";\n } catch (e) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.getOwnPropertyDescriptor))"
+ },
+ {
+ "id": "15.2.3.7-5-b-253",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-253.js",
+ "description": "Object.defineProperties - value of 'set' property of 'descObj' is primitive values null (8.10.5 step 8.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n try {\n Object.defineProperties(obj, {\n prop: {\n set: null\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-254",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-254.js",
+ "description": "Object.defineProperties - value of 'set' property of 'descObj' is primitive values boolean (8.10.5 step 8.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n try {\n Object.defineProperties(obj, {\n prop: {\n set: true\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-255",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-255.js",
+ "description": "Object.defineProperties - value of 'set' property of 'descObj' is primitive values number (8.10.5 step 8.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n try {\n Object.defineProperties(obj, {\n prop: {\n set: 100\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-256",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-256.js",
+ "description": "Object.defineProperties - value of 'set' property of 'descObj' is primitive values string (8.10.5 step 8.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n try {\n Object.defineProperties(obj, {\n prop: {\n set: \"abcdef\"\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-257",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-257.js",
+ "description": "Object.defineProperties - value of 'set' property of 'descObj' is an interesting object other than a function (8.10.5 step 8.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n try {\n Object.defineProperties(obj, {\n prop: {\n set: []\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-258",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-258.js",
+ "description": "Object.defineProperties - value of 'set' property of 'descObj' is a function (8.10.5 step 8.b)",
+ "test": "assertTrue((function testcase() {\n\n var data = \"data\";\n var setFun = function (value) {\n data = value;\n };\n var obj = {};\n\n\n Object.defineProperties(obj, {\n prop: {\n set: setFun\n }\n });\n obj.prop = \"funData\";\n return obj.hasOwnProperty(\"prop\") && data === \"funData\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-26",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-26.js",
+ "description": "Object.defineProperties - 'descObj' is a RegExp object which implements its own [[Get]] method to get 'enumerable' property (8.10.5 step 3.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var descObj = new RegExp();\n var accessed = false;\n\n descObj.enumerable = true;\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-261",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-261.js",
+ "description": "Object.defineProperties - TypeError is thrown if both 'set' property and 'value' property of 'descObj' are present (8.10.5 step 9.a)",
+ "test": "assertTrue((function testcase() {\n\n var setFun = function () {};\n var obj = {};\n\n try {\n Object.defineProperties(obj, {\n prop: {\n value: 12,\n set: setFun\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-262",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-262.js",
+ "description": "Object.defineProperties - TypeError is thrown if both 'set' property and 'writable' property of 'descObj' are present (8.10.5 step 9.a)",
+ "test": "assertTrue((function testcase() {\n\n var setFun = function () { };\n var obj = {};\n\n try {\n Object.defineProperties(obj, {\n prop: {\n writable: true,\n set: setFun\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-263",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-263.js",
+ "description": "Object.defineProperties - TypeError is thrown if both 'get' property and 'value' property of 'descObj' are present (8.10.5 step 9.a)",
+ "test": "assertTrue((function testcase() {\n\n var getFun = function () {};\n var obj = {};\n\n try {\n Object.defineProperties(obj, {\n prop: {\n value: 12,\n get: getFun\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-264",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-264.js",
+ "description": "Object.defineProperties - TypeError is thrown if both 'get' property and 'writable' property of 'descObj' are present (8.10.5 step 9.a)",
+ "test": "assertTrue((function testcase() {\n\n var getFun = function () {};\n\n var obj = {};\n\n try {\n Object.defineProperties(obj, {\n \"prop\": {\n writable: true,\n get: getFun\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-27",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-27.js",
+ "description": "Object.defineProperties - 'descObj' is the JSON object which implements its own [[Get]] method to get 'enumerable' property (8.10.5 step 3.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n try {\n JSON.enumerable = true;\n\n Object.defineProperties(obj, {\n prop: JSON\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n } finally {\n delete JSON.enumerable;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-28",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-28.js",
+ "description": "Object.defineProperties - 'descObj' is an Error object which implements its own [[Get]] method to get 'enumerable' property (8.10.5 step 3.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var descObj = new Error();\n var accessed = false;\n\n descObj.enumerable = true;\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-29",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-29.js",
+ "description": "Object.defineProperties - 'descObj' is the Arguments object which implements its own [[Get]] method to get 'enumerable' property (8.10.5 step 3.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var arg;\n var accessed = false;\n\n (function fun() {\n arg = arguments;\n }());\n\n arg.enumerable = true;\n\n Object.defineProperties(obj, {\n prop: arg\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-3",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-3.js",
+ "description": "Object.defineProperties - 'descObj' is a boolean (8.10.5 step 1)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n try {\n Object.defineProperties(obj, {\n prop: true\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && !obj.hasOwnProperty(\"prop\");\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-31",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-31.js",
+ "description": "Object.defineProperties - 'descObj' is the global object which implements its own [[Get]] method to get 'enumerable' property (8.10.5 step 3.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n try {\n fnGlobalObject().enumerable = true;\n\n Object.defineProperties(obj, {\n prop: fnGlobalObject()\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n } finally {\n delete fnGlobalObject().enumerable;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-32",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-32.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is undefined (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: undefined\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return !accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-33",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-33.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is null (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: null\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return !accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-34",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-34.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is true (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: true\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-35",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-35.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is false (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: false\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return !accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-36",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-36.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is 0 (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: 0\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return !accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-37",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-37.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is +0 (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: +0\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return !accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-38",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-38.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is -0 (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: -0\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return !accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-39",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-39.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is NaN (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: NaN\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return !accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-4",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-4.js",
+ "description": "Object.defineProperties - 'descObj' is a number (8.10.5 step 1)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n try {\n Object.defineProperties(obj, {\n prop: 12\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && !obj.hasOwnProperty(\"prop\");\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-40",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-40.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is positive number (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: 12\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-41",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-41.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is negative number (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: -9\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-42",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-42.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is empty string (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: \"\"\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return !accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-43",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-43.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is non-empty string (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: \"AB\\n\\\\cd\"\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-44",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-44.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is a Function object (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: function () { }\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-45",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-45.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is an Array object (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: []\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-46",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-46.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is a String object (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: new String()\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-47",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-47.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is a Boolean object (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: new Boolean(true)\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-48",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-48.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is a Number object (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: new Number(-9)\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-49",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-49.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is the Math object (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: Math\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-5",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-5.js",
+ "description": "Object.defineProperties - 'descObj' is a string (8.10.5 step 1)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n try {\n Object.defineProperties(obj, {\n prop: \"abc\"\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && !obj.hasOwnProperty(\"prop\");\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-50",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-50.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is a Date object (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: new Date()\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-51",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-51.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is a RegExp object (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: new RegExp()\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-52",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-52.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is the JSON object (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: JSON\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-53",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-53.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is an Error object (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: new Error()\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-54",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-54.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is the Arguments object (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n var arg; \n \n (function fun() {\n arg = arguments;\n }(1, 2, 3));\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: arg\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-56",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-56.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is the global object (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: fnGlobalObject()\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-57",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-57.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is a string (value is 'false') which is treated as true value (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: \"false\"\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-58",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-58.js",
+ "description": "Object.defineProperties - value of 'enumerable' property of 'descObj' is new Boolean(false) which is treated as true value (8.10.5 step 3.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: new Boolean(false)\n }\n });\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-59",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-59.js",
+ "description": "Object.defineProperties - 'configurable' property of 'descObj' is present (8.10.5 step 4)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperties(obj, {\n prop: {\n configurable: true\n }\n });\n\n var result1 = obj.hasOwnProperty(\"prop\");\n delete obj.prop;\n var result2 = obj.hasOwnProperty(\"prop\");\n\n return result1 === true && result2 === false;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-6",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-6.js",
+ "description": "Object.defineProperties - 'enumerable' property of 'descObj' is present (8.10.5 step 3)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {\n enumerable: true\n }\n });\n\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-60",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-60.js",
+ "description": "Object.defineProperties - 'configurable' property of 'descObj' is not present (8.10.5 step 4)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperties(obj, {\n prop: {}\n });\n\n var result1 = obj.hasOwnProperty(\"prop\");\n delete obj.prop;\n var result2 = obj.hasOwnProperty(\"prop\");\n\n return result1 === true && result2 === true;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-61",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-61.js",
+ "description": "Object.defineProperties - 'configurable' property of 'descObj' is own data property (8.10.5 step 4.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperties(obj, {\n prop: {\n configurable: true\n }\n });\n\n var result1 = obj.hasOwnProperty(\"prop\");\n delete obj.prop;\n var result2 = obj.hasOwnProperty(\"prop\");\n\n return result1 === true && result2 === false;\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-62",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-62.js",
+ "description": "Object.defineProperties - 'configurable' property of 'descObj' is inherited data property (8.10.5 step 4.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var proto = {\n configurable: true\n };\n var Con = function () { };\n Con.prototype = proto;\n var descObj = new Con();\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n\n var result1 = obj.hasOwnProperty(\"prop\");\n delete obj.prop;\n var result2 = obj.hasOwnProperty(\"prop\");\n\n return result1 === true && result2 === false;\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-63",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-63.js",
+ "description": "Object.defineProperties - 'configurable' property of 'descObj' is own data property that overrides an inherited data property (8.10.5 step 4.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var proto = {\n configurable: true\n };\n\n var Con = function () { };\n Con.prototype = proto;\n var descObj = new Con();\n\n Object.defineProperty(descObj, \"configurable\", {\n value: false\n });\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n var result1 = obj.hasOwnProperty(\"prop\");\n delete obj.prop;\n var result2 = obj.hasOwnProperty(\"prop\");\n\n return result1 === true && result2 === true;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-64",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-64.js",
+ "description": "Object.defineProperties - 'configurable' property of 'descObj' is own data property that overrides an inherited accessor property (8.10.5 step 4.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var proto = {};\n Object.defineProperty(proto, \"configurable\", {\n get: function () {\n return true;\n }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n var descObj = new Con();\n\n Object.defineProperty(descObj, \"configurable\", {\n value: false\n });\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n var result1 = obj.hasOwnProperty(\"prop\");\n delete obj.prop;\n var result2 = obj.hasOwnProperty(\"prop\");\n\n return result1 === true && result2 === true;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-65",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-65.js",
+ "description": "Object.defineProperties - 'configurable' property of 'descObj' is own accessor property (8.10.5 step 4.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var descObj = {};\n Object.defineProperty(descObj, \"configurable\", {\n get: function () {\n return true;\n }\n });\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n var result1 = obj.hasOwnProperty(\"prop\");\n delete obj.prop;\n var result2 = obj.hasOwnProperty(\"prop\");\n\n return result1 === true && result2 === false;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-66",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-66.js",
+ "description": "Object.defineProperties - 'configurable' property of 'descObj' is inherited accessor property (8.10.5 step 4.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var proto = {};\n\n Object.defineProperty(proto, \"configurable\", {\n get: function () {\n return true;\n }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n var descObj = new Con();\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n\n var result1 = obj.hasOwnProperty(\"prop\");\n delete obj.prop;\n var result2 = obj.hasOwnProperty(\"prop\");\n\n return result1 === true && result2 === false;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-67",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-67.js",
+ "description": "Object.defineProperties - 'configurable' property of 'descObj' is own accessor property that overrides an inherited data property (8.10.5 step 4.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var proto = {\n configurable: true\n };\n\n var Con = function () { };\n Con.prototype = proto;\n var descObj = new Con();\n\n Object.defineProperty(descObj, \"configurable\", {\n get: function () {\n return false;\n }\n });\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n var result1 = obj.hasOwnProperty(\"prop\");\n delete obj.prop;\n var result2 = obj.hasOwnProperty(\"prop\");\n\n return result1 === true && result2 === true;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-68",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-68.js",
+ "description": "Object.defineProperties - 'configurable' property of 'descObj' is own accessor property that overrides an inherited accessor property (8.10.5 step 4.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var proto = {};\n Object.defineProperty(proto, \"configurable\", {\n get: function () {\n return true;\n }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n var descObj = new Con();\n\n Object.defineProperty(descObj, \"configurable\", {\n get: function () {\n return false;\n }\n });\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n var result1 = obj.hasOwnProperty(\"prop\");\n delete obj.prop;\n var result2 = obj.hasOwnProperty(\"prop\");\n\n return result1 === true && result2 === true;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-69",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-69.js",
+ "description": "Object.defineProperties - 'configurable' property of 'descObj' is own accessor property without a get function (8.10.5 step 4.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var descObj = {};\n Object.defineProperty(descObj, \"configurable\", {\n set: function () { }\n });\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n var result1 = obj.hasOwnProperty(\"prop\");\n delete obj.prop;\n var result2 = obj.hasOwnProperty(\"prop\");\n\n return result1 === true && result2 === true;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-7",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-7.js",
+ "description": "Object.defineProperties - 'enumerable' property of 'descObj' is not present (8.10.5 step 3)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperties(obj, {\n prop: {}\n });\n\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return !accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-70",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-70.js",
+ "description": "Object.defineProperties - 'configurable' property of 'descObj' is own accessor property without a get function that overrides an inherited accessor property (8.10.5 step 4.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var proto = {};\n Object.defineProperty(proto, \"configurable\", {\n get: function () {\n return true;\n }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n var descObj = new Con();\n\n Object.defineProperty(descObj, \"configurable\", {\n set: function () { }\n });\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n var result1 = obj.hasOwnProperty(\"prop\");\n delete obj.prop;\n var result2 = obj.hasOwnProperty(\"prop\");\n\n return result1 === true && result2 === true;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-71",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-71.js",
+ "description": "Object.defineProperties - 'configurable' property of 'descObj' is inherited accessor property without a get function (8.10.5 step 4.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var proto = {};\n\n Object.defineProperty(proto, \"configurable\", {\n set: function () { }\n });\n\n var Con = function () { };\n Con.prototype = proto;\n var descObj = new Con();\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n\n var result1 = obj.hasOwnProperty(\"prop\");\n delete obj.prop;\n var result2 = obj.hasOwnProperty(\"prop\");\n\n return result1 === true && result2 === true;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-5-b-72",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-72.js",
+ "description": "Object.defineProperties - 'descObj' is a Function object which implements its own [[Get]] method to get 'configurable' property (8.10.5 step 4.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var descObj = function () { };\n descObj.configurable = true;\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n\n var result1 = obj.hasOwnProperty(\"prop\");\n delete obj.prop;\n var result2 = obj.hasOwnProperty(\"prop\");\n\n return result1 === true && result2 === false;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-73",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-73.js",
+ "description": "Object.defineProperties - 'descObj' is an Array object which implements its own [[Get]] method to get 'configurable' property (8.10.5 step 4.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var descObj = [];\n descObj.configurable = true;\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n\n var result1 = obj.hasOwnProperty(\"prop\");\n delete obj.prop;\n var result2 = obj.hasOwnProperty(\"prop\");\n\n return result1 === true && result2 === false;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-74",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-74.js",
+ "description": "Object.defineProperties - 'descObj' is a String object which implements its own [[Get]] method to get 'configurable' property (8.10.5 step 4.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var descObj = new String();\n descObj.configurable = true;\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n var result1 = obj.hasOwnProperty(\"prop\");\n delete obj.prop;\n var result2 = obj.hasOwnProperty(\"prop\");\n\n return result1 === true && result2 === false;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-75",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-75.js",
+ "description": "Object.defineProperties - 'descObj' is a Boolean object which implements its own [[Get]] method to get 'configurable' property (8.10.5 step 4.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var descObj = new Boolean(false);\n descObj.configurable = true;\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n\n var result1 = obj.hasOwnProperty(\"prop\");\n delete obj.prop;\n var result2 = obj.hasOwnProperty(\"prop\");\n\n return result1 === true && result2 === false;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-76",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-76.js",
+ "description": "Object.defineProperties - 'descObj' is a Number object which implements its own [[Get]] method to get 'configurable' property (8.10.5 step 4.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var descObj = new Number(-9);\n descObj.configurable = true;\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n\n var result1 = obj.hasOwnProperty(\"prop\");\n delete obj.prop;\n var result2 = obj.hasOwnProperty(\"prop\");\n\n return result1 === true && result2 === false;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-77",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-77.js",
+ "description": "Object.defineProperties - 'descObj' is the Math object which implements its own [[Get]] method to get 'configurable' property (8.10.5 step 4.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n try {\n Math.configurable = true;\n\n Object.defineProperties(obj, {\n prop: Math\n });\n\n var result1 = obj.hasOwnProperty(\"prop\");\n delete obj.prop;\n var result2 = obj.hasOwnProperty(\"prop\");\n\n return result1 === true && result2 === false;\n } finally {\n delete Math.configurable;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-78",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-78.js",
+ "description": "Object.defineProperties - 'descObj' is a Date object which implements its own [[Get]] method to get 'configurable' property (8.10.5 step 4.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var descObj = new Date();\n descObj.configurable = true;\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n\n var result1 = obj.hasOwnProperty(\"prop\");\n delete obj.prop;\n var result2 = obj.hasOwnProperty(\"prop\");\n\n return result1 === true && result2 === false;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-79",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-79.js",
+ "description": "Object.defineProperties - 'descObj' is a RegExp object which implements its own [[Get]] method to get 'configurable' property (8.10.5 step 4.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var descObj = new RegExp();\n descObj.configurable = true;\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n\n var result1 = obj.hasOwnProperty(\"prop\");\n delete obj.prop;\n var result2 = obj.hasOwnProperty(\"prop\");\n\n return result1 === true && result2 === false;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-8",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-8.js",
+ "description": "Object.defineProperties - 'enumerable' property of 'descObj' is own data property (8.10.5 step 3.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n var descObj = { enumerable: true };\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-80",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-80.js",
+ "description": "Object.defineProperties - 'descObj' is the JSON object which implements its own [[Get]] method to get 'configurable' property (8.10.5 step 4.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n try {\n JSON.configurable = true;\n\n Object.defineProperties(obj, {\n prop: JSON\n });\n\n var result1 = obj.hasOwnProperty(\"prop\");\n delete obj.prop;\n var result2 = obj.hasOwnProperty(\"prop\");\n\n return result1 === true && result2 === false;\n } finally {\n delete JSON.configurable;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-81",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-81.js",
+ "description": "Object.defineProperties - 'descObj' is an Error object which implements its own [[Get]] method to get 'configurable' property (8.10.5 step 4.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var descObj = new Error();\n descObj.configurable = true;\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n\n var result1 = obj.hasOwnProperty(\"prop\");\n delete obj.prop;\n var result2 = obj.hasOwnProperty(\"prop\");\n\n return result1 === true && result2 === false;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-82",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-82.js",
+ "description": "Object.defineProperties - 'descObj' is the Arguments object which implements its own [[Get]] method to get 'configurable' property (8.10.5 step 4.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var arg;\n (function fun() {\n arg = arguments;\n }());\n\n arg.configurable = true;\n\n Object.defineProperties(obj, {\n prop: arg\n });\n\n var result1 = obj.hasOwnProperty(\"prop\");\n delete obj.prop;\n var result2 = obj.hasOwnProperty(\"prop\");\n\n return result1 === true && result2 === false;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-84",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-84.js",
+ "description": "Object.defineProperties - 'descObj' is the global object which implements its own [[Get]] method to get 'configurable' property (8.10.5 step 4.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n try {\n fnGlobalObject().configurable = true;\n\n Object.defineProperties(obj, {\n prop: fnGlobalObject()\n });\n\n var result1 = obj.hasOwnProperty(\"prop\");\n delete obj.prop;\n var result2 = obj.hasOwnProperty(\"prop\");\n\n return result1 === true && result2 === false;\n } finally {\n delete fnGlobalObject().configurable;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-85",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-85.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is undefined (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n configurable: undefined\n }\n });\n\n var hadOwnProperty = obj.hasOwnProperty(\"property\");\n\n delete obj.property;\n\n return obj.hasOwnProperty(\"property\") && hadOwnProperty;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-86",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-86.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is null (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n configurable: null\n }\n });\n\n var hadOwnProperty = obj.hasOwnProperty(\"property\");\n\n delete obj.property;\n\n return obj.hasOwnProperty(\"property\") && hadOwnProperty;\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-87",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-87.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is true (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n configurable: true\n }\n });\n\n var hadOwnProperty = obj.hasOwnProperty(\"property\");\n\n delete obj.property;\n\n return !obj.hasOwnProperty(\"property\") && hadOwnProperty;\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-88",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-88.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is false (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n configurable: false\n }\n });\n\n var hadOwnProperty = obj.hasOwnProperty(\"property\");\n\n delete obj.property;\n\n return obj.hasOwnProperty(\"property\") && hadOwnProperty;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-89",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-89.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is 0 (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n configurable: 0\n }\n });\n\n var hadOwnProperty = obj.hasOwnProperty(\"property\");\n\n delete obj.property;\n\n return obj.hasOwnProperty(\"property\") && hadOwnProperty;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-9",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-9.js",
+ "description": "Object.defineProperties - 'enumerable' property of 'descObj' is inherited data property (8.10.5 step 3.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n var proto = {\n enumerable: true\n };\n var Con = function () { };\n Con.prototype = proto;\n var descObj = new Con();\n\n Object.defineProperties(obj, {\n prop: descObj\n });\n\n for (var property in obj) {\n if (property === \"prop\") {\n accessed = true;\n }\n }\n return accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-90",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-90.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is +0 (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n configurable: +0\n }\n });\n\n var hadOwnProperty = obj.hasOwnProperty(\"property\");\n\n delete obj.property;\n\n return obj.hasOwnProperty(\"property\") && hadOwnProperty;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-91",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-91.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is -0 (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n configurable: -0\n }\n });\n\n var hadOwnProperty = obj.hasOwnProperty(\"property\");\n\n delete obj.property;\n\n return obj.hasOwnProperty(\"property\") && hadOwnProperty;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-92",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-92.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is NaN (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n configurable: NaN\n }\n });\n\n var hadOwnProperty = obj.hasOwnProperty(\"property\");\n\n delete obj.property;\n\n return obj.hasOwnProperty(\"property\") && hadOwnProperty;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-93",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-93.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is positive number (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n configurable: 123\n }\n });\n\n var hadOwnProperty = obj.hasOwnProperty(\"property\");\n\n delete obj.property;\n\n return !obj.hasOwnProperty(\"property\") && hadOwnProperty;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-94",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-94.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is negative number (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n configurable: -123\n }\n });\n\n var hadOwnProperty = obj.hasOwnProperty(\"property\");\n\n delete obj.property;\n\n return !obj.hasOwnProperty(\"property\") && hadOwnProperty;\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-95",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-95.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is empty string (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n configurable: \"\"\n }\n });\n\n var hadOwnProperty = obj.hasOwnProperty(\"property\");\n\n delete obj.property;\n\n return obj.hasOwnProperty(\"property\") && hadOwnProperty;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-96",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-96.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is non-empty string (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n configurable: \"abc\"\n }\n });\n\n var hadOwnProperty = obj.hasOwnProperty(\"property\");\n\n delete obj.property;\n\n return !obj.hasOwnProperty(\"property\") && hadOwnProperty;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-97",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-97.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is Function object (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n configurable: function () { }\n }\n });\n\n var hadOwnProperty = obj.hasOwnProperty(\"property\");\n\n delete obj.property;\n\n return !obj.hasOwnProperty(\"property\") && hadOwnProperty;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-98",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-98.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is Array object (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n configurable: [1, 2, 3]\n }\n });\n\n var hadOwnProperty = obj.hasOwnProperty(\"property\");\n\n delete obj.property;\n\n return !obj.hasOwnProperty(\"property\") && hadOwnProperty;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-5-b-99",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-5-b-99.js",
+ "description": "Object.defineProperties - value of 'configurable' property of 'descObj' is String object (8.10.5 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n property: {\n configurable: new String(\"abc\")\n }\n });\n\n var hadOwnProperty = obj.hasOwnProperty(\"property\");\n\n delete obj.property;\n\n return !obj.hasOwnProperty(\"property\") && hadOwnProperty;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-1",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-1.js",
+ "description": "Object.defineProperties - 'P' is own existing data property (8.12.9 step 1 )",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n Object.defineProperty(obj, \"prop\", {\n value: 11,\n configurable: false\n });\n\n try {\n Object.defineProperties(obj, { \n prop: {\n value: 12,\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-10",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-10.js",
+ "description": "Object.defineProperties - 'P' is own accessor property without a get function that overrides an inherited accessor property (8.12.9 step 1 ) ",
+ "test": "assertTrue((function testcase() {\n var proto = {};\n Object.defineProperty(proto, \"prop\", {\n get: function () {\n return 11;\n },\n set: function () { },\n configurable: true\n });\n var Con = function () { };\n Con.prototype = proto;\n\n var obj = new Con();\n Object.defineProperty(obj, \"prop\", {\n set: function () { },\n configurable: false\n });\n\n try {\n Object.defineProperties(obj, {\n prop: {\n value: 12,\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-100",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-100.js",
+ "description": "Object.defineProperties - 'P' is data property, several attributes values of P and properties are different (8.12.9 step 12)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", { \n value: 100, \n writable: true, \n configurable: true \n });\n\n Object.defineProperties(obj, {\n foo: {\n value: 200,\n writable: false,\n configurable: false\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", 200, false, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-101",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-101.js",
+ "description": "Object.defineProperties - 'P' is accessor property, both properties.[[Get]] and P.[[Get]] are two different values (8.12.9 step 12)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n function get_func() {\n return 10;\n }\n function set_func(value) {\n obj.setVerifyHelpProp = value;\n }\n\n Object.defineProperty(obj, \"foo\", {\n get: get_func,\n set: set_func,\n enumerable: true,\n configurable: true\n });\n\n function get_func2() {\n return 20;\n }\n\n Object.defineProperties(obj, {\n foo: {\n get: get_func2\n }\n });\n return accessorPropertyAttributesAreCorrect(obj, \"foo\", get_func2, set_func, \"setVerifyHelpProp\", true, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-102",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-102.js",
+ "description": "Object.defineProperties - 'P' is accessor property, P.[[Get]] is present and properties.[[Get]] is undefined (8.12.9 step 12)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n function get_func() {\n return 10;\n }\n function set_func(value) {\n obj.setVerifyHelpProp = value;\n }\n\n Object.defineProperty(obj, \"foo\", {\n get: get_func,\n set: set_func,\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperties(obj, {\n foo: {\n get: undefined\n }\n });\n return accessorPropertyAttributesAreCorrect(obj, \"foo\", undefined, set_func, \"setVerifyHelpProp\", true, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-103",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-103.js",
+ "description": "Object.defineProperties - 'P' is accessor property, P.[[Get]] is undefined and properties.[[Get]] is normal value (8.12.9 step 12)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n function set_func(value) {\n obj.setVerifyHelpProp = value;\n }\n\n Object.defineProperty(obj, \"foo\", {\n get: undefined,\n set: set_func,\n enumerable: true,\n configurable: true\n });\n\n function get_func() {\n return 10;\n }\n\n Object.defineProperties(obj, {\n foo: {\n get: get_func\n }\n });\n return accessorPropertyAttributesAreCorrect(obj, \"foo\", get_func, set_func, \"setVerifyHelpProp\", true, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-104",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-104.js",
+ "description": "Object.defineProperties - 'P' is accessor property, both properties.[[Set]] and P.[[Set]] are two different values (8.12.9 step 12)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n function get_func() {\n return 10;\n }\n\n function set_func() {\n return 10;\n }\n\n Object.defineProperty(obj, \"foo\", {\n get: get_func,\n set: set_func,\n enumerable: true,\n configurable: true\n });\n\n function set_func2(value) {\n obj.setVerifyHelpProp = value;\n }\n\n Object.defineProperties(obj, {\n foo: {\n set: set_func2\n }\n });\n return accessorPropertyAttributesAreCorrect(obj, \"foo\", get_func, set_func2, \"setVerifyHelpProp\", true, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-105",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-105.js",
+ "description": "Object.defineProperties - 'P' is accessor property, P.[[Set]] is present and properties.[[Set]] is undefined (8.12.9 step 12)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n function get_func() {\n return 10;\n }\n function set_func() {\n return 10;\n }\n\n Object.defineProperty(obj, \"property\", {\n get: get_func,\n set: set_func,\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperties(obj, {\n property: {\n set: undefined\n }\n });\n\n var hasProperty = obj.hasOwnProperty(\"property\");\n var verifyGet = false;\n verifyGet = (obj.property === 10);\n\n var verifySet = false;\n var desc = Object.getOwnPropertyDescriptor(obj, \"property\");\n verifySet = (typeof desc.set === 'undefined');\n\n var verifyEnumerable = false;\n for (var p in obj) {\n if (p === \"property\") {\n verifyEnumerable = true;\n }\n }\n\n var verifyConfigurable = false;\n delete obj.property;\n verifyConfigurable = obj.hasOwnProperty(\"property\");\n\n return hasProperty && verifyGet && verifySet && verifyEnumerable && !verifyConfigurable;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-106",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-106.js",
+ "description": "Object.defineProperties - 'P' is accessor property, P.[[Set]] is undefined and properties.[[Set]] is normal value (8.12.9 step 12)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n function get_func() {\n return 10;\n }\n\n Object.defineProperty(obj, \"foo\", {\n get: get_func,\n set: undefined,\n enumerable: true,\n configurable: true\n });\n\n function set_func(value) {\n obj.setVerifyHelpProp = value;\n }\n\n Object.defineProperties(obj, {\n foo: {\n set: set_func\n }\n });\n return accessorPropertyAttributesAreCorrect(obj, \"foo\", get_func, set_func, \"setVerifyHelpProp\", true, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-107",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-107.js",
+ "description": "Object.defineProperties - 'P' is accessor property, P.enumerable and properties.enumerable are different values (8.12.9 step 12)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n function get_func() {\n return 10;\n }\n function set_func(value) {\n obj.setVerifyHelpProp = value;\n }\n\n Object.defineProperty(obj, \"foo\", {\n get: get_func,\n set: set_func,\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperties(obj, {\n foo: {\n enumerable: false\n }\n });\n return accessorPropertyAttributesAreCorrect(obj, \"foo\", get_func, set_func, \"setVerifyHelpProp\", false, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-108",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-108.js",
+ "description": "Object.defineProperties - 'P' is accessor property, P.configurable is true and properties.configurable is false",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n function get_func() {\n return 10;\n }\n function set_func(value) {\n obj.setVerifyHelpProp = value;\n }\n\n Object.defineProperty(obj, \"foo\", {\n get: get_func,\n set: set_func,\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperties(obj, {\n foo: {\n configurable: false\n }\n });\n return accessorPropertyAttributesAreCorrect(obj, \"foo\", get_func, set_func, \"setVerifyHelpProp\", true, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-109",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-109.js",
+ "description": "Object.defineProperties - 'P' is accessor property, several attributes values of P and properties are different (8.12.9 step 12)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n function get_func1() {\n return 10;\n }\n function set_func1() { }\n\n Object.defineProperty(obj, \"foo\", {\n get: get_func1,\n set: set_func1,\n configurable: true\n });\n\n function get_func2() {\n return 20;\n }\n function set_func2(value) {\n obj.setVerifyHelpProp = value;\n }\n\n Object.defineProperties(obj, {\n foo: {\n get: get_func2,\n set: set_func2,\n configurable: false\n }\n });\n return accessorPropertyAttributesAreCorrect(obj, \"foo\", get_func2, set_func2, \"setVerifyHelpProp\", false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-11",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-11.js",
+ "description": "Object.defineProperties - 'P' is inherited accessor property without a get function (8.12.9 step 1 ) ",
+ "test": "assertTrue((function testcase() {\n var proto = {};\n Object.defineProperty(proto, \"prop\", {\n set: function () { },\n configurable: false\n });\n var Con = function () { };\n Con.prototype = proto;\n\n var obj = new Con();\n\n Object.defineProperties(obj, {\n prop: {\n get: function () {\n return 12;\n },\n configurable: true\n }\n });\n return obj.hasOwnProperty(\"prop\") && obj.prop === 12;\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-110",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-110.js",
+ "description": "Object.defineProperties - all own properties (data property and accessor property)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n function get_func() {\n return 10;\n }\n function set_func(value) {\n obj.setVerifyHelpProp = value;\n }\n\n var properties = {\n foo1: {\n value: 200,\n enumerable: true,\n writable: true,\n configurable: true\n },\n foo2: {\n get: get_func,\n set: set_func,\n enumerable: true,\n configurable: true\n }\n };\n\n Object.defineProperties(obj, properties);\n return dataPropertyAttributesAreCorrect(obj, \"foo1\", 200, true, true, true) && accessorPropertyAttributesAreCorrect(obj, \"foo2\", get_func, set_func, \"setVerifyHelpProp\", true, true);\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-111",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-111.js",
+ "description": "Object.defineProperties - each properties are in list order",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n function get_func() {\n return 20;\n }\n\n function set_func() { }\n\n var properties = {\n a: {\n value: 100,\n enumerable: true,\n writable: true,\n configurable: true\n },\n b: {\n get: get_func,\n set: set_func,\n enumerable: true,\n configurable: true\n },\n c: {\n value: 200,\n enumerable: true,\n writable: true,\n configurable: true\n }\n };\n\n Object.defineProperties(obj, properties);\n return (obj[\"a\"] === 100 && obj[\"b\"] === 20 && obj[\"c\"] === 200);\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-112",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-112.js",
+ "description": "Object.defineProperties - 'O' is an Array, test the length property of 'O' is own data property (15.4.5.1 step 1)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [0, 1];\n Object.defineProperty(arr, \"1\", {\n value: 1,\n configurable: false\n });\n try {\n\n Object.defineProperties(arr, {\n length: { value: 1 }\n });\n return false;\n } catch (ex) {\n var desc = Object.getOwnPropertyDescriptor(arr, \"length\");\n\n return ex instanceof TypeError && desc.value === 2 &&\n desc.writable && !desc.enumerable && !desc.configurable;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-113",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-113.js",
+ "description": "Object.defineProperties - 'O' is an Array, test the length property of 'O' is own data property that overrides an inherited data property (15.4.5.1 step 1)",
+ "test": "assertTrue((function testcase() {\n\n var arrProtoLen;\n var arr = [0, 1, 2];\n try {\n arrProtoLen = Array.prototype.length;\n Array.prototype.length = 0;\n\n Object.defineProperty(arr, \"2\", {\n configurable: false\n });\n\n Object.defineProperties(arr, {\n length: { value: 1 }\n });\n return false;\n } catch (e) {\n var desc = Object.getOwnPropertyDescriptor(arr, \"length\");\n\n return e instanceof TypeError && desc.value === 3 &&\n desc.writable && !desc.enumerable && !desc.configurable;\n } finally {\n Array.prototype.length = arrProtoLen;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-114",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-114.js",
+ "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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperties(arr, { length: {} });\n\n var verifyValue = false;\n verifyValue = (arr.length === 0);\n\n var verifyWritable = false;\n arr.length = 2;\n verifyWritable = (arr.length === 2);\n\n var verifyEnumerable = false;\n for (var p in arr) {\n if (p === \"length\") {\n verifyEnumerable = true;\n }\n }\n\n var verifyConfigurable = false;\n delete arr.length;\n verifyConfigurable = arr.hasOwnProperty(\"length\");\n\n return verifyValue && verifyWritable && !verifyEnumerable && verifyConfigurable;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-115",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-115.js",
+ "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 same with corresponding attribute value of the length property in 'O' (15.4.5.1 step 3.a.i)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperties(arr, {\n length: {\n writable: true,\n enumerable: false,\n configurable: false\n }\n });\n\n var verifyValue = false;\n verifyValue = (arr.length === 0);\n\n var verifyWritable = false;\n arr.length = 2;\n verifyWritable = (arr.length === 2);\n\n var verifyEnumerable = false;\n for (var p in arr) {\n if (p === \"length\") {\n verifyEnumerable = true;\n }\n }\n\n var verifyConfigurable = false;\n delete arr.length;\n verifyConfigurable = arr.hasOwnProperty(\"length\");\n\n return verifyValue && verifyWritable && !verifyEnumerable && verifyConfigurable;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-116",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-116.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', the [[Value]] field of 'desc' is absent, test TypeError is thrown when updating the [[Configurable]] attribute of the length property from false to true (15.4.5.1 step 3.a.i)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n try {\n Object.defineProperties(arr, {\n length: { configurable: true }\n });\n\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-117",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-117.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', the [[Value]] field of 'desc' is absent, test TypeError is thrown when updating the [[Enumerable]] attribute of the length property from false to true (15.4.5.1 step 3.a.i)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n try {\n Object.defineProperties(arr, {\n length: { enumerable: true }\n });\n\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-118",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-118.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', the [[Value]] field of 'desc' is absent, test TypeError is thrown when 'desc' is accessor descriptor (15.4.5.1 step 3.a.i)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n try {\n Object.defineProperties(arr, {\n length: {\n get: function () {\n return 2;\n }\n }\n });\n\n return false;\n } catch (e) {\n return e instanceof TypeError && arr.length === 0;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-119",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-119.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', the [[Value]] field of 'desc' is absent, test TypeError is thrown when updating the [[Writable]] attribute of the length property from false to true (15.4.5.1 step 3.a.i)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperty(arr, \"length\", {\n writable: false\n });\n\n try {\n Object.defineProperties(arr, { \n length: { writable: true } \n });\n\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-12",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-12.js",
+ "description": "Object.defineProperties - 'O' is a Function object which implements its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 ) ",
+ "test": "assertTrue((function testcase() {\n var fun = function () { };\n\n Object.defineProperty(fun, \"prop\", {\n value: 11,\n configurable: false\n });\n\n try {\n Object.defineProperties(fun, {\n prop: {\n value: 12,\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && dataPropertyAttributesAreCorrect(fun, \"prop\", 11, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-120",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-120.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n try {\n Object.defineProperties(arr, {\n length: { writable: false }\n });\n\n return dataPropertyAttributesAreCorrect(arr, \"length\", 0, false, false, false);\n } catch (e) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-121",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-121.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', test RangeError is thrown when setting the [[Value]] field of 'desc' to undefined (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n try {\n Object.defineProperties(arr, {\n length: { value: undefined }\n });\n\n return false;\n } catch (e) {\n return e instanceof RangeError && arr.length === 0;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-122",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-122.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', test setting the [[Value]] field of 'desc' to null actuall is set to 0 (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [0, 1];\n\n Object.defineProperties(arr, {\n length: { value: null }\n });\n return arr.length === 0;\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-123",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-123.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test the [[Value]] field of 'desc' is a boolean with value false (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [0, 1];\n\n Object.defineProperties(arr, {\n length: { value: false }\n });\n return arr.length === 0;\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-124",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-124.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test the [[Value]] field of 'desc' is a boolean with value true (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperties(arr, {\n length: { value: true }\n });\n return arr.length === 1;\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-125",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-125.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test the [[Value]] field of 'desc' is 0 (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [0, 1];\n\n Object.defineProperties(arr, {\n length: { value: 0 }\n });\n return arr.length === 0;\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-126",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-126.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test the [[Value]] field of 'desc' is +0 (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [0, 1];\n\n Object.defineProperties(arr, {\n length: { value: +0 }\n });\n return arr.length === 0;\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-127",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-127.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test the [[Value]] field of 'desc' is -0 (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [0, 1];\n\n Object.defineProperties(arr, {\n length: { value: -0 }\n });\n return arr.length === 0;\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-128",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-128.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test the [[Value]] field of 'desc' is positive number (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperties(arr, {\n length: { value: 12 }\n });\n return arr.length === 12;\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-129",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-129.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test the [[Value]] field of 'desc' is negative number (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n try {\n Object.defineProperties(arr, {\n length: {\n value: -9\n }\n });\n return false;\n } catch (e) {\n return e instanceof RangeError && arr.length === 0;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-13",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-13.js",
+ "description": "Object.defineProperties - 'O' is an Array object which implements its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 ) ",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperty(arr, \"prop\", {\n value: 11,\n configurable: false\n });\n\n try {\n Object.defineProperties(arr, {\n prop: {\n value: 12,\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && dataPropertyAttributesAreCorrect(arr, \"prop\", 11, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-130",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-130.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test the [[Value]] field of 'desc' is +Infinity (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n try {\n Object.defineProperties(arr, {\n length: {\n value: +Infinity\n }\n });\n return false;\n } catch (e) {\n return e instanceof RangeError && arr.length === 0;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-131",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-131.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test the [[Value]] field of 'desc' is -Infinity (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n try {\n Object.defineProperties(arr, {\n length: {\n value: -Infinity\n }\n });\n return false;\n } catch (e) {\n return e instanceof RangeError && arr.length === 0;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-132",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-132.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test the [[Value]] field of 'desc' is NaN (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n try {\n Object.defineProperties(arr, {\n length: {\n value: NaN\n }\n });\n\n return false;\n } catch (e) {\n return e instanceof RangeError && arr.length === 0;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-133",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-133.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test the [[Value]] field of 'desc' is a string containing a positive number (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperties(arr, {\n length: {\n value: \"2\"\n }\n });\n return arr.length === 2;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-134",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-134.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test the [[Value]] field of 'desc' is a string containing a negative number (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n try {\n Object.defineProperties(arr, {\n length: {\n value: \"-42\"\n }\n });\n return false;\n } catch (e) {\n return e instanceof RangeError && arr.length === 0;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-135",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-135.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test the [[Value]] field of 'desc' is a string containing a decimal number (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n try {\n Object.defineProperties(arr, {\n length: {\n value: \"200.59\"\n }\n });\n return false;\n } catch (e) {\n return e instanceof RangeError && arr.length === 0;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-136",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-136.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test the [[Value]] field of 'desc' is a string containing +Infinity (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n try {\n Object.defineProperties(arr, {\n length: {\n value: \"+Infinity\"\n }\n });\n return false;\n } catch (e) {\n return e instanceof RangeError && arr.length === 0;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-137",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-137.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test the [[Value]] field of 'desc' is a string containing -Infinity (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n try {\n Object.defineProperties(arr, {\n length: {\n value: \"-Infinity\"\n }\n });\n return false;\n } catch (e) {\n return e instanceof RangeError && arr.length === 0;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-138",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-138.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test the [[Value]] field of 'desc' is a string containing an exponential number (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperties(arr, {\n length: {\n value: \"2E3\"\n }\n });\n return arr.length === 2E3;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-139",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-139.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test the [[Value]] field of 'desc' is a string containing an hex number (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperties(arr, {\n length: {\n value: \"0x00B\"\n }\n });\n return arr.length === 0x00B;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-14",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-14.js",
+ "description": "Object.defineProperties - 'O' is a String object which implements its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 ) ",
+ "test": "assertTrue((function testcase() {\n var str = new String();\n\n Object.defineProperty(str, \"prop\", {\n value: 11,\n configurable: false\n });\n\n try {\n Object.defineProperties(str, {\n prop: {\n value: 12,\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && dataPropertyAttributesAreCorrect(str, \"prop\", 11, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-140",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-140.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test the [[Value]] field of 'desc' is a string containing an leading zero number (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperties(arr, {\n length: {\n value: \"0002.0\"\n }\n });\n return arr.length === 2;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-141",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-141.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', test the [[Value]] field of 'desc' is a string which doesn't convert to a number (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n try {\n Object.defineProperties(arr, {\n length: {\n value: \"two\"\n }\n });\n return false;\n } catch (e) {\n return e instanceof RangeError && arr.length === 0;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-142",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-142.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', test the [[Value]] field of 'desc' is an Object which has an own toString method (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperties(arr, {\n length: {\n value: {\n toString: function () {\n return '2';\n }\n }\n }\n });\n\n return arr.length === 2;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-143",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-143.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test the [[Value]] field of 'desc' is an Object which has an own valueOf method (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperties(arr, {\n length: {\n value: {\n valueOf: function () {\n return 2;\n }\n }\n }\n });\n return arr.length === 2;\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-144",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-144.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test the [[Value]] field of 'desc' is an Object which has an own valueOf method that returns an object and toString method that returns a string (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n var toStringAccessed = false;\n var valueOfAccessed = false;\n\n Object.defineProperties(arr, {\n length: {\n value: {\n toString: function () {\n toStringAccessed = true;\n return '2';\n },\n\n valueOf: function () {\n valueOfAccessed = true;\n return {};\n }\n }\n }\n });\n return arr.length === 2 && toStringAccessed && valueOfAccessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-145",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-145.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test the [[Value]] field of 'desc' is an Object which has an own toString and valueOf method (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n var toStringAccessed = false;\n var valueOfAccessed = false;\n\n Object.defineProperties(arr, {\n length: {\n value: {\n toString: function () {\n toStringAccessed = true;\n return '2';\n },\n\n valueOf: function () {\n valueOfAccessed = true;\n return 3;\n }\n }\n }\n });\n return arr.length === 3 && !toStringAccessed && valueOfAccessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-146",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-146.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test TypeError is thrown when the [[Value]] field of 'desc' is an Object that both toString and valueOf wouldn't return primitive value (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n var toStringAccessed = false;\n var valueOfAccessed = false;\n\n try {\n Object.defineProperties(arr, {\n length: {\n value: {\n toString: function () {\n toStringAccessed = true;\n return {};\n },\n\n valueOf: function () {\n valueOfAccessed = true;\n return {};\n }\n }\n }\n });\n\n return false;\n } catch (e) {\n return (e instanceof TypeError) && toStringAccessed && valueOfAccessed;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-147",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-147.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test using inherited valueOf method when the [[Value]] field of 'desc' is an Objec with an own toString and inherited valueOf methods (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n var toStringAccessed = false;\n var valueOfAccessed = false;\n\n var proto = {\n value: {\n valueOf: function () {\n valueOfAccessed = true;\n return 2;\n }\n }\n };\n\n var Con = function () { };\n Con.prototype = proto;\n\n var child = new Con();\n Object.defineProperty(child, \"value\", {\n value: {\n toString: function () {\n toStringAccessed = true;\n return 3;\n }\n }\n });\n\n Object.defineProperties(arr, {\n length: child\n });\n return arr.length === 3 && toStringAccessed && !valueOfAccessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-148",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-148.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test RangeError is thrown when the [[Value]] field of 'desc' is positive non-integer values (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n try {\n Object.defineProperties(arr, {\n length: {\n value: 123.5\n }\n });\n\n return false;\n } catch (e) {\n return e instanceof RangeError && arr.length === 0;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-149",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-149.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test RangeError is thrown when the [[Value]] field of 'desc' is negative non-integer values (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n try {\n Object.defineProperties(arr, {\n length: {\n value: -4294967294.5\n }\n });\n return false;\n } catch (e) {\n return e instanceof RangeError && arr.length === 0;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-15",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-15.js",
+ "description": "Object.defineProperties - 'O' is a Boolean object which implements its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 ) ",
+ "test": "assertTrue((function testcase() {\n \n var obj = new Boolean(false);\n\n Object.defineProperty(obj, \"prop\", {\n value: 11,\n configurable: false\n });\n\n try {\n Object.defineProperties(obj, {\n prop: {\n value: 12,\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && dataPropertyAttributesAreCorrect(obj, \"prop\", 11, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-150",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-150.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test the [[Value]] field of 'desc' is boundary value 2^32 - 2 (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperties(arr, {\n length: {\n value: 4294967294\n }\n });\n\n return arr.length === 4294967294;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-151",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-151.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test the [[Value]] field of 'desc' is boundary value 2^32 - 1 (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperties(arr, {\n length: {\n value: 4294967295\n }\n });\n\n return arr.length === 4294967295;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-152",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-152.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test RangeError is thrown when the [[Value]] field of 'desc' is boundary value 2^32 (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n try {\n Object.defineProperties(arr, {\n length: {\n value: 4294967296\n }\n });\n return false;\n } catch (e) {\n return e instanceof RangeError && arr.length === 0;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-153",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-153.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is the length property of 'O', test RangeError is thrown when the [[Value]] field of 'desc' is boundary value 2^32 + 1 (15.4.5.1 step 3.c)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n try {\n Object.defineProperties(arr, {\n length: {\n value: 4294967297\n }\n });\n return false;\n } catch (e) {\n return e instanceof RangeError && arr.length === 0;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-155",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-155.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', test the [[Value]] field of 'desc' which is greater than value of the length property is defined into 'O' without deleting any property with large index named (15.4.5.1 step 3.f)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [0, , 2];\n\n try {\n Object.defineProperties(arr, {\n length: {\n value: 5\n }\n });\n\n return arr.length === 5 && arr[0] === 0 && !arr.hasOwnProperty(\"1\") && arr[2] === 2;\n } catch (e) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-156",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-156.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', test the [[Value]] field of 'desc' which equals to value of the length property is defined into 'O' without deleting any property with large index named (15.4.5.1 step 3.f)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [0, , 2];\n try {\n Object.defineProperties(arr, {\n length: {\n value: 3\n }\n });\n\n return arr.length === 3 && arr[0] === 0 && !arr.hasOwnProperty(\"1\") && arr[2] === 2;\n } catch (e) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-157",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-157.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', test the [[Value]] field of 'desc' which is less than value of the length property is defined into 'O' with deleting properties with large index named (15.4.5.1 step 3.f)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [0, 1];\n\n Object.defineProperties(arr, {\n length: {\n value: 1\n }\n });\n return arr.length === 1 && !arr.hasOwnProperty(\"1\") && arr[0] === 0;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-158",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-158.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', the [[Value]] field of 'desc' is greater than value of the length property, test TypeError is thrown when the length property is not writable (15.4.5.1 step 3.f.i)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperty(arr, \"length\", {\n writable: false\n });\n\n try {\n Object.defineProperties(arr, {\n length: {\n value: 12\n }\n });\n\n return false;\n } catch (e) {\n return e instanceof TypeError && arr.length === 0;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-159",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-159.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', the [[Value]] field of 'desc' equals to value of the length property, test TypeError wouldn't be thrown when the length property is not writable (15.4.5.1 step 3.f.i)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperty(arr, \"length\", {\n writable: false\n });\n\n try {\n Object.defineProperties(arr, {\n length: {\n value: 0\n }\n });\n return true && arr.length === 0;\n } catch (e) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-16",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-16.js",
+ "description": "Object.defineProperties - 'O' is a Number object which implements its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 ) ",
+ "test": "assertTrue((function testcase() {\n\n var obj = new Number(-9);\n\n Object.defineProperty(obj, \"prop\", {\n value: 11,\n configurable: false\n });\n\n try {\n Object.defineProperties(obj, {\n prop: {\n value: 12,\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && dataPropertyAttributesAreCorrect(obj, \"prop\", 11, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-160",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-160.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', the [[Value]] field of 'desc' is less than value of the length property, test TypeError is thrown when the [[Writable]] attribute of the length property is false (15.4.5.1 step 3.g)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [0, 1];\n\n Object.defineProperty(arr, \"length\", {\n writable: false\n });\n\n try {\n Object.defineProperties(arr, {\n length: {\n value: 0\n }\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && arr.length === 2 && arr[0] === 0 && arr[1] === 1;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-161",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-161.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', the [[Value]] field of 'desc' is less than value of the length property, test the [[Writable]] attribute of the length property is set to true at last after deleting properties with large index named if the [[Writable]] field of 'desc' is absent (15.4.5.1 step 3.h)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [0, 1];\n\n Object.defineProperties(arr, {\n length: {\n value: 1\n }\n });\n\n arr.length = 10; //try to overwrite length value of arr\n return !arr.hasOwnProperty(\"1\") && arr.length === 10 && arr[0] === 0;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-162",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-162.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', the [[Value]] field of 'desc' is less than value of the length property, test the [[Writable]] attribute of the length property is set to true at last after deleting properties with large index named if the [[Writable]] field of 'desc' is true (15.4.5.1 step 3.h)",
+ "test": "assertTrue((function testcase() {\n \n var arr = [0, 1];\n\n Object.defineProperties(arr, {\n length: {\n value: 1,\n writable: true\n }\n });\n\n arr.length = 10; //try to overwrite length value of arr\n return !arr.hasOwnProperty(\"1\") && arr.length === 10 && arr[0] === 0;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-163",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-163.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', the [[Value]] field of 'desc' is less than value of the length property, test the [[Writable]] attribute of the length property is set to false at last after deleting properties with large index named if the [[Writable]] field of 'desc' is false (15.4.5.1 step 3.i.ii)",
+ "test": "assertTrue((function testcase() {\n \n var arr = [0, 1];\n\n Object.defineProperties(arr, {\n length: {\n value: 1,\n writable: false\n }\n });\n\n arr.length = 10; //try to overwrite length value of arr\n return !arr.hasOwnProperty(\"1\") && arr.length === 1 && arr[0] === 0;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-164",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-164.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', the [[Value]] field of 'desc' is less than value of the length property, test the [[Writable]] attribute of the length property in 'O' is set as true before deleting properties with large index named (15.4.5.1 step 3.i.iii)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [0, 1, 2];\n var result = 0;\n\n try {\n Object.defineProperty(arr, \"1\", {\n configurable: false\n });\n\n Object.defineProperties(arr, {\n length: {\n value: 0,\n writable: false\n }\n });\n\n return false;\n } catch (e) {\n result = (arr.length === 2);\n arr.length = 10;\n return (e instanceof TypeError) && result && arr.length === 2;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-165",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-165.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', the [[Value]] field of 'desc' is less than value of the length property, test the length property is decreased by 1 (15.4.5.1 step 3.l.i)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [0, 1, 2];\n\n Object.defineProperty(arr, \"1\", {\n configurable: false\n });\n\n Object.defineProperty(arr, \"2\", {\n configurable: true\n });\n\n try {\n Object.defineProperties(arr, {\n length: {\n value: 1\n }\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && arr.length === 2 &&\n !arr.hasOwnProperty(\"2\") && arr[0] === 0 && arr[1] === 1;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-166",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-166.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', the [[Value]] field of 'desc' is less than value of the length property, test the [[Configurable]] attribute of own data property with large index named in 'O' can stop deleting index named properties (15.4.5.1 step 3.l.ii)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [0, 1];\n\n try {\n Object.defineProperty(arr, \"1\", {\n configurable: false\n });\n\n Object.defineProperties(arr, {\n length: {\n value: 1\n }\n });\n\n return false;\n } catch (e) {\n return (e instanceof TypeError) && arr.length === 2 &&\n arr.hasOwnProperty(\"1\") && arr[0] === 0 && arr[1] === 1;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-167",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-167.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', the [[Value]] field of 'desc' is less than value of the length property, test the [[Configurable]] attribute of inherited data property with large index named in 'O' can't stop deleting index named properties (15.4.5.1 step 3.l.ii)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [0, 1];\n try {\n Array.prototype[1] = 2; //we are not allowed to set the [[Configurable]] attribute of property \"1\" to false here, since Array.prototype is a global object, and non-configurbale property can't revert to configurable\n\n Object.defineProperties(arr, {\n length: {\n value: 1\n }\n });\n\n return arr.length === 1 && !arr.hasOwnProperty(\"1\") && arr[0] === 0 && Array.prototype[1] === 2;\n } finally {\n delete Array.prototype[1];\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-168",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-168.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', the [[Value]] field of 'desc' is less than value of the length property, test the [[Configurable]] attribute of own data property with large index named in 'O' that overrides inherited data property can stop deleting index named properties (15.4.5.1 step 3.l.ii)",
+ "test": "assertTrue((function testcase() {\n \n var arr = [0, 1];\n try {\n Object.defineProperty(arr, \"1\", {\n configurable: false\n });\n\n Array.prototype[1] = 2;\n\n Object.defineProperties(arr, {\n length: {\n value: 1\n }\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && arr.length === 2 &&\n arr.hasOwnProperty(\"1\") && arr[0] === 0 && arr[1] === 1;\n } finally {\n delete Array.prototype[1];\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-169",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-169.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', the [[Value]] field of 'desc' is less than value of the length property, test the [[Configurable]] attribute of own data property with large index named in 'O' that overrides inherited accessor property can stop deleting index named properties (15.4.5.1 step 3.l.ii)",
+ "test": "assertTrue((function testcase() {\n \n var arr = [0, 1];\n try {\n Object.defineProperty(arr, \"1\", {\n configurable: false\n });\n\n Object.defineProperty(Array.prototype, \"1\", {\n get: function () {\n return 2;\n },\n configurable: true\n });\n\n Object.defineProperties(arr, {\n length: {\n value: 1\n }\n });\n\n return false;\n } catch (e) {\n return e instanceof TypeError && arr.length === 2 && arr.hasOwnProperty(\"1\") &&\n arr[0] === 0 && arr[1] === 1 && Array.prototype[1] === 2;\n } finally {\n delete Array.prototype[1];\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-17",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-17.js",
+ "description": "Object.defineProperties - 'O' is the Math object which implements its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 ) ",
+ "test": "assertTrue((function testcase() {\n\n try {\n Object.defineProperty(Math, \"prop\", {\n value: 11,\n writable: true,\n configurable: true\n });\n var hasProperty = Math.hasOwnProperty(\"prop\") && Math.prop === 11;\n\n Object.defineProperties(Math, {\n prop: {\n value: 12\n }\n });\n return hasProperty && Math.prop === 12;\n } finally {\n delete Math.prop;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-170",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-170.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', the [[Value]] field of 'desc' is less than value of the length property, test the [[Configurable]] attribute of own accessor property with large index named in 'O' can stop deleting index named properties (15.4.5.1 step 3.l.ii)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [0, 1];\n\n try {\n Object.defineProperty(arr, \"1\", {\n get: function () {\n return 1;\n },\n configurable: false\n });\n\n Object.defineProperties(arr, {\n length: {\n value: 1\n }\n });\n\n return false;\n } catch (e) {\n return (e instanceof TypeError) && arr.length === 2 &&\n arr.hasOwnProperty(\"1\") && arr[0] === 0 && arr[1] === 1;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-171",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-171.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', the [[Value]] field of 'desc' is less than value of the length property, test the [[Configurable]] attribute of inherited accessor property with large index named in 'O' can't stop deleting index named properties (15.4.5.1 step 3.l.ii)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [0, 1];\n try {\n Object.defineProperty(Array.prototype, \"1\", {\n get: function () {\n return 1;\n },\n configurable: true //we are not allowed to set the [[Configurable]] attribute of property \"1\" to false here, since Array.prototype is a global object, and non-configurbale property can't revert to configurable\n });\n\n Object.defineProperties(arr, {\n length: {\n value: 1\n }\n });\n\n return arr.length === 1 && !arr.hasOwnProperty(\"1\") && arr[0] === 0 && Array.prototype[1] === 1;\n } finally {\n delete Array.prototype[1];\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-172",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-172.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', the [[Value]] field of 'desc' is less than value of the length property, test the [[Configurable]] attribute of own accessor property with large index named in 'O' that overrides inherited data property can stop deleting index named properties (15.4.5.1 step 3.l.ii)",
+ "test": "assertTrue((function testcase() {\n \n var arr = [0, 1];\n try {\n Object.defineProperty(arr, \"1\", {\n get: function () {\n return 2;\n },\n configurable: false\n });\n\n Array.prototype[1] = 3;\n\n Object.defineProperties(arr, {\n length: {\n value: 1\n }\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && arr.length === 2 &&\n arr.hasOwnProperty(\"1\") && arr[0] === 0 && arr[1] === 2;\n } finally {\n delete Array.prototype[1];\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-173",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-173.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', the [[Value]] field of 'desc' is less than value of the length property, test the [[Configurable]] attribute of own accessor property with large index named in 'O' that overrides inherited accessor property can stop deleting index named properties (15.4.5.1 step 3.l.ii)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [0, 1];\n try {\n Object.defineProperty(arr, \"1\", {\n get: function () {\n return 1;\n },\n configurable: false\n });\n\n Object.defineProperty(Array.prototype, \"1\", {\n get: function () {\n return 2;\n },\n configurable: true\n });\n\n Object.defineProperties(arr, {\n length: {\n value: 1\n }\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && arr.length === 2 && arr.hasOwnProperty(\"1\") &&\n arr[0] === 0 && arr[1] === 1 && Array.prototype[1] === 2;\n } finally {\n delete Array.prototype[1];\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-174",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-174.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', the [[Value]] field of 'desc' is less than value of the length property, test the configurable large index named property of 'O' can be deleted (15.4.5.1 step 3.l.ii)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [0, 1];\n\n Object.defineProperties(arr, {\n length: {\n value: 1\n }\n });\n\n return !arr.hasOwnProperty(\"1\");\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-175",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-175.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', the [[Value]] field of 'desc' is less than value of the length property, test value of the length property is set to the last non-configurable index named property of 'O' plus 1 (15.4.5.1 step 3.l.iii.1)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [0, 1, 2, 3];\n\n Object.defineProperty(arr, \"1\", {\n configurable: false\n });\n\n try {\n Object.defineProperties(arr, {\n length: {\n value: 1\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && (arr.length === 2);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-176",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-176.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', the [[Value]] field of 'desc' is less than value of the length property, test the [[Writable]] attribute of the length property is set to false at last when the [[Writable]] field of 'desc' is false and 'O' contains non-configurable large index named property (15.4.5.1 step 3.l.iii.2)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [0, 1];\n\n try {\n Object.defineProperty(arr, \"1\", {\n configurable: false\n });\n\n Object.defineProperties(arr, {\n length: {\n value: 1,\n writable: false\n }\n });\n return false;\n } catch (e) {\n arr.length = 10; //try to overwrite length value of arr\n return e instanceof TypeError && arr.hasOwnProperty(\"1\") &&\n arr.length === 2 && arr[0] === 0 && arr[1] === 1;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-177",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-177.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is the length property of 'O', the [[Value]] field of 'desc' is less than value of the length property, test the [[Writable]] attribute of the length property is set to false at last when the [[Writable]] field of 'desc' is false and 'O' doesn't contain non-configurable large index named property (15.4.5.1 step 3.m)",
+ "test": "assertTrue((function testcase() {\n \n var arr = [0, 1];\n\n try {\n Object.defineProperties(arr, {\n length: {\n value: 0,\n writable: false\n }\n });\n\n arr.length = 10; //try to overwrite length value of arr\n return !arr.hasOwnProperty(\"1\") && arr.length === 0 && !arr.hasOwnProperty(\"0\");\n } catch (e) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-178",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-178.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index named property, 'P' is available String values that convert to numbers (15.4.5.1 step 4.a)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [0];\n\n Object.defineProperties(arr, {\n \"0\": {\n value: 12\n }\n });\n return arr[0] === 12;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-179",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-179.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index named property, 'P' is boundary value 2^32 - 2 (15.4.5.1 step 4.a)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperties(arr, {\n \"4294967294\": {\n value: 100\n }\n });\n\n return arr.hasOwnProperty(\"4294967294\") && arr.length === 4294967295 && arr[4294967294] === 100;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-18",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-18.js",
+ "description": "Object.defineProperties - 'O' is a Date object which implements its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 ) ",
+ "test": "assertTrue((function testcase() {\n\n var obj = new Date();\n\n Object.defineProperty(obj, \"prop\", {\n value: 11,\n configurable: false\n });\n\n try {\n Object.defineProperties(obj, {\n prop: {\n value: 12,\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && dataPropertyAttributesAreCorrect(obj, \"prop\", 11, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-180",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-180.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index named property, 'P' is boundary value 2^32 - 1 (15.4.5.1 step 4.a)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperties(arr, {\n \"4294967295\": {\n value: 100\n }\n });\n\n return arr.hasOwnProperty(\"4294967295\") && arr.length === 0 && arr[4294967295] === 100;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-181",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-181.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index named property, 'P' is boundary value 2^32 (15.4.5.1 step 4.a)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperties(arr, {\n \"4294967296\": {\n value: 100\n }\n });\n\n return arr.hasOwnProperty(\"4294967296\") && arr.length === 0 && arr[4294967296] === 100;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-182",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-182.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index named property, 'P' is boundary value 2^32 + 1 (15.4.5.1 step 4.a)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperties(arr, {\n \"4294967297\": {\n value: 100\n }\n });\n\n return arr.hasOwnProperty(\"4294967297\") && arr.length === 0 && arr[4294967297] === 100;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-183",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-183.js",
+ "description": "Object.defineProperties - TypeError is not thrown if 'O' is an Array, 'P' is an array index named property, [[Writable]] attribute of the length property in 'O' is false, value of 'P' is less than value of the length property in'O' (15.4.5.1 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var arr = [1, 2, 3];\n\n Object.defineProperty(arr, \"length\", {\n writable: false\n });\n\n Object.defineProperties(arr, {\n \"1\": {\n value: \"abc\"\n }\n });\n\n return arr[0] === 1 && arr[1] === \"abc\" && arr[2] === 3;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-184",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-184.js",
+ "description": "Object.defineProperties - TypeError is thrown if 'O' is an Array, 'P' is an array index named property,[[Writable]] attribute of the length property in 'O' is false, value of 'P' is equal to value of the length property in 'O' (15.4.5.1 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var arr = [1, 2, 3];\n\n Object.defineProperty(arr, \"length\", {\n writable: false\n });\n\n try {\n Object.defineProperties(arr, {\n \"3\": {\n value: \"abc\"\n }\n });\n\n return false;\n } catch (e) {\n return e instanceof TypeError && arr[0] === 1 &&\n arr[1] === 2 && arr[2] === 3 && !arr.hasOwnProperty(\"3\");\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-185",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-185.js",
+ "description": "Object.defineProperties - TypeError is thrown if 'O' is an Array, 'P' is an array index named property,[[Writable]] attribute of the length property in 'O' is false, value of 'P' is bigger than value of the length property in 'O' (15.4.5.1 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var arr = [1, 2, 3];\n\n Object.defineProperty(arr, \"length\", {\n writable: false\n });\n\n try {\n Object.defineProperties(arr, {\n \"4\": {\n value: \"abc\"\n }\n });\n\n return false;\n } catch (e) {\n return e instanceof TypeError && arr[0] === 1 && arr[1] === 2 &&\n arr[2] === 3 && !arr.hasOwnProperty(\"3\") && !arr.hasOwnProperty(\"4\");\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-186",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-186.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index named property, 'P' is own data property (15.4.5.1 step 4.c)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n Object.defineProperty(arr, 0, {\n value: \"ownDataProperty\",\n configurable: false\n });\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n value: \"abc\",\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && arr[0] === \"ownDataProperty\";\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-187",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-187.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index named property, 'P' is inherited data property (15.4.5.1 step 4.c)",
+ "test": "assertTrue((function testcase() {\n try {\n Object.defineProperty(Array.prototype, \"0\", {\n value: 11,\n configurable: true\n });\n\n var arr = [];\n\n Object.defineProperties(arr, {\n \"0\": {\n configurable: false\n }\n });\n return arr.hasOwnProperty(\"0\") && typeof arr[0] === \"undefined\" && Array.prototype[0] === 11;\n } finally {\n delete Array.prototype[0];\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-188",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-188.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index named property, 'P' is own data property that overrides an inherited data property (15.4.5.1 step 4.c)",
+ "test": "assertTrue((function testcase() {\n try {\n Object.defineProperty(Array.prototype, \"0\", {\n value: 11,\n configurable: true\n });\n\n var arr = [];\n Object.defineProperty(arr, \"0\", {\n value: 12,\n configurable: false\n });\n\n Object.defineProperties(arr, {\n \"0\": {\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && arr[0] === 12 && Array.prototype[0] === 11;\n } finally {\n delete Array.prototype[0];\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-189",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-189.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index named property, 'P' is own data property that overrides an inherited accessor property (15.4.5.1 step 4.c)",
+ "test": "assertTrue((function testcase() {\n try {\n Object.defineProperty(Array.prototype, \"0\", {\n get: function () {\n return 11;\n },\n configurable: true\n });\n\n var arr = [];\n Object.defineProperty(arr, \"0\", {\n value: 12,\n configurable: false\n });\n\n Object.defineProperties(arr, {\n \"0\": {\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && arr[0] === 12 && Array.prototype[0] === 11;\n } finally {\n delete Array.prototype[0];\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-19",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-19.js",
+ "description": "Object.defineProperties - 'O' is a RegExp object which implements its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 ) ",
+ "test": "assertTrue((function testcase() {\n\n var obj = new RegExp();\n\n Object.defineProperty(obj, \"prop\", {\n value: 11,\n configurable: false\n });\n\n try {\n Object.defineProperties(obj, {\n prop: {\n value: 12,\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && dataPropertyAttributesAreCorrect(obj, \"prop\", 11, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-190",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-190.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index named property, 'P' is own accessor property (15.4.5.1 step 4.c)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperty(arr, \"0\", {\n get: function () {\n return 11;\n },\n configurable: false\n });\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n get: function () {\n return 12;\n },\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && arr[0] === 11;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-191",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-191.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index property, 'P' is inherited accessor property (15.4.5.1 step 4.c)",
+ "test": "assertTrue((function testcase() {\n try {\n Object.defineProperty(Array.prototype, \"0\", {\n get: function () {\n return 11;\n },\n configurable: true\n });\n\n var arr = [];\n\n Object.defineProperties(arr, {\n \"0\": {\n get: function () {\n return 12;\n },\n configurable: false\n }\n });\n return arr.hasOwnProperty(\"0\") && arr[0] === 12 && Array.prototype[0] === 11;\n } finally {\n delete Array.prototype[0];\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-192",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-192.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index named property, 'P' is own accessor property that overrides an inherited data property (15.4.5.1 step 4.c)",
+ "test": "assertTrue((function testcase() {\n try {\n Object.defineProperty(Array.prototype, \"0\", {\n value: 11,\n configurable: true\n });\n\n var arr = [];\n Object.defineProperty(arr, \"0\", {\n get: function () {\n return 12;\n },\n configurable: false\n });\n\n Object.defineProperties(arr, {\n \"0\": {\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && arr[0] === 12 && Array.prototype[0] === 11;\n } finally {\n delete Array.prototype[0];\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-193",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-193.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index named property, 'P' is own accessor property that overrides an inherited accessor property (15.4.5.1 step 4.c)",
+ "test": "assertTrue((function testcase() {\n try {\n Object.defineProperty(Array.prototype, \"0\", {\n get: function () {\n return 11;\n },\n configurable: true\n });\n\n var arr = [];\n Object.defineProperty(arr, \"0\", {\n get: function () {\n return 12;\n },\n configurable: false\n });\n\n Object.defineProperties(arr, {\n \"0\": {\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && arr[0] === 12 && Array.prototype[0] === 11;\n } finally {\n delete Array.prototype[0];\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-194",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-194.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index named property, 'P' property doesn't exist in 'O', test TypeError is thrown when 'O' is not extensible (15.4.5.1 step 4.c)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n Object.preventExtensions(arr);\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n value: 1\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && (arr.hasOwnProperty(\"0\") === false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.preventExtensions))"
+ },
+ {
+ "id": "15.2.3.7-6-a-195",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-195.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index 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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperties(arr, {\n \"0\": {\n enumerable: true\n }\n });\n\n return dataPropertyAttributesAreCorrect(arr, \"0\", undefined, false, true, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-196",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-196.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index named property, 'P' property doesn't exist in 'O', test [[Value]] of 'P' property in 'Attributes' is set as undefined value if [[Value]] is absent in data descriptor 'desc' (15.4.5.1 step 4.c)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperties(arr, {\n \"0\": {\n writable: true,\n enumerable: true,\n configurable: false\n }\n });\n\n return arr.hasOwnProperty(\"0\") && typeof (arr[0]) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-197",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-197.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index named property, 'P' property doesn't exist in 'O', test [[Writable]] of 'P' property in 'Attributes' is set as false value if [[Writable]] is absent in data descriptor 'desc' (15.4.5.1 step 4.c)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n var isOwnProperty = false;\n var canWritable = false;\n\n Object.defineProperties(arr, {\n \"0\": {\n value: 1001,\n enumerable: true,\n configurable: false\n }\n });\n\n isOwnProperty = arr.hasOwnProperty(\"0\");\n\n arr[0] = 12;\n\n canWritable = (arr[0] === 12);\n\n return isOwnProperty && !canWritable && arr[0] === 1001;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-198",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-198.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index named property, 'P' property doesn't exist in 'O', test [[Enumerable]] of 'P' property in 'Attributes' is set as false value if [[Enumerable]] is absent in data descriptor 'desc' (15.4.5.1 step 4.c)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n var isOwnProperty = false;\n var canEnumerable = false;\n\n Object.defineProperties(arr, {\n \"0\": {\n value: 1001,\n writable: true,\n configurable: true\n }\n });\n\n isOwnProperty = arr.hasOwnProperty(\"0\");\n for (var i in arr) {\n if (i === \"0\") {\n canEnumerable = true;\n }\n }\n return isOwnProperty && !canEnumerable && arr[0] === 1001;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-199",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-199.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index named property, 'P' property doesn't exist in 'O', test [[Configurable]] of 'P' property in 'Attributes' is set as false value if [[Configurable]] is absent in data descriptor 'desc' (15.4.5.1 step 4.c)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n var beforeDeleted = false;\n var afterDeleted = false;\n\n Object.defineProperties(arr, {\n \"0\": {\n value: 1001,\n writable: true,\n enumerable: true\n }\n });\n\n beforeDeleted = arr.hasOwnProperty(\"0\");\n delete arr[0];\n afterDeleted = arr.hasOwnProperty(\"0\");\n return beforeDeleted && afterDeleted && arr[0] === 1001;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-2",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-2.js",
+ "description": "Object.defineProperties - 'P' is inherited data property (8.12.9 step 1 ) ",
+ "test": "assertTrue((function testcase() {\n var proto = {};\n Object.defineProperty(proto, \"prop\", {\n value: 11,\n configurable: false\n });\n var Con = function () { };\n Con.prototype = proto;\n\n var obj = new Con();\n\n Object.defineProperties(obj, {\n prop: {\n value: 12,\n configurable: true\n }\n });\n\n return dataPropertyAttributesAreCorrect(obj, \"prop\", 12, false, false, true);\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-20",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-20.js",
+ "description": "Object.defineProperties - 'O' is a JSON object which implements its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 ) ",
+ "test": "assertTrue((function testcase() {\n\n try {\n Object.defineProperty(JSON, \"prop\", {\n value: 11,\n writable: true,\n configurable: true\n });\n var hasProperty = JSON.hasOwnProperty(\"prop\") && JSON.prop === 11;\n Object.defineProperties(JSON, {\n prop: {\n value: 12\n }\n });\n return hasProperty && JSON.prop === 12;\n } finally {\n delete JSON.prop;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-200",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-200.js",
+ "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)",
+ "test": "assertTrue((function testcase() {\n var arr = [1]; // default value of attributes: writable: true, configurable: true, enumerable: true\n\n Object.defineProperties(arr, {\n \"0\": {\n value: 1001,\n writable: false,\n enumerable: false,\n configurable: false\n }\n });\n\n return dataPropertyAttributesAreCorrect(arr, \"0\", 1001, false, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-201",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-201.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index named property, 'P' property doesn't exist in 'O', test [[Get]] of 'P' property in 'Attributes' is set as undefined value if [[Get]] is absent in accessor descriptor 'desc' (15.4.5.1 step 4.c)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperties(arr, {\n \"0\": {\n set: function () { },\n enumerable: true,\n configurable: true\n }\n });\n\n return arr.hasOwnProperty(\"0\") && typeof (arr[0]) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-202",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-202.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index named property, 'P' property doesn't exist in 'O', test [[Set]] of 'P' property in 'Attributes' is set as undefined value if [[Set]] is absent in accessor descriptor 'desc' (15.4.5.1 step 4.c)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n var getFunc = function () {\n return 11;\n };\n\n Object.defineProperties(arr, {\n \"0\": {\n get: getFunc,\n enumerable: true,\n configurable: true\n }\n });\n\n var verifyEnumerable = false;\n for (var i in arr) {\n if (i === \"0\" && arr.hasOwnProperty(\"0\")) {\n verifyEnumerable = true;\n }\n }\n\n var desc = Object.getOwnPropertyDescriptor(arr, \"0\");\n var propertyDefineCorrect = arr.hasOwnProperty(\"0\");\n\n var verifyConfigurable = false;\n delete arr[0];\n verifyConfigurable = arr.hasOwnProperty(\"0\");\n return typeof desc.set === \"undefined\" && propertyDefineCorrect &&\n desc.get === getFunc && !verifyConfigurable && verifyEnumerable;\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-203",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-203.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index named property, 'P' property doesn't exist in 'O', test [[Enumerable]] of 'P' property in 'Attributes' is set as false value if [[Enumerable]] is absent in accessor descriptor 'desc' (15.4.5.1 step 4.c)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperties(arr, {\n \"0\": {\n set: function () { },\n get: function () { },\n configurable: true\n }\n });\n\n for (var i in arr) {\n if (i === \"0\" && arr.hasOwnProperty(\"0\")) {\n return false;\n }\n }\n return true;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-204",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-204.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index named property, 'P' property doesn't exist in 'O', test [[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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n var beforeDeleted = false;\n var afterDeleted = false;\n arr.verifySetter = 100;\n\n Object.defineProperties(arr, {\n \"0\": {\n set: function (value) {\n arr.verifySetter = value;\n },\n get: function () {\n return arr.verifySetter;\n },\n enumerable: true\n }\n });\n\n beforeDeleted = arr.hasOwnProperty(\"0\");\n delete arr[0];\n afterDeleted = arr.hasOwnProperty(\"0\");\n\n arr[0] = 101;\n\n return beforeDeleted && afterDeleted && arr[0] === 101 && arr.verifySetter === 101;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-205",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-205.js",
+ "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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperties(arr, {\n \"0\": {\n get: function () {\n return 11;\n },\n set: function () { },\n configurable: true,\n enumerable: true\n }\n });\n\n var setFun = function (value) {\n arr.setVerifyHelpProp = value;\n };\n var getFun = function () {\n return 14;\n };\n Object.defineProperties(arr, {\n \"0\": {\n get: getFun,\n set: setFun,\n configurable: false,\n enumerable: false\n }\n });\n\n return accessorPropertyAttributesAreCorrect(arr, \"0\", getFun, setFun, \"setVerifyHelpProp\", false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-206",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-206.js",
+ "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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n arr[0] = 101; // default value of attributes: writable: true, configurable: true, enumerable: true\n\n try {\n Object.defineProperties(arr, {\n \"0\": {}\n });\n return dataPropertyAttributesAreCorrect(arr, \"0\", 101, true, true, true);\n } catch (e) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-207",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-207.js",
+ "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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n function get_func() {\n return 11;\n }\n function set_func(value) {\n arr.setVerifyHelpProp = value;\n }\n\n Object.defineProperty(arr, \"0\", {\n get: get_func,\n set: set_func,\n enumerable: true,\n configurable: true\n });\n\n try {\n Object.defineProperties(arr, {\n \"0\": {}\n });\n return accessorPropertyAttributesAreCorrect(arr, \"0\", get_func, set_func, \"setVerifyHelpProp\", true, true);\n } catch (e) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-208",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-208.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index 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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n arr[0] = 100; // default value of attributes: writable: true, configurable: true, enumerable: true\n\n Object.defineProperties(arr, {\n \"0\": {\n value: 100,\n writable: true,\n enumerable: true,\n configurable: true\n }\n });\n\n return dataPropertyAttributesAreCorrect(arr, \"0\", 100, true, true, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-209",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-209.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index 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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n var get_func = function () {\n return \"100\";\n };\n var set_func = function (value) {\n arr.setVerifyHelpProp = value;\n };\n\n var descObj = {\n get: get_func,\n set: set_func,\n enumerable: true,\n configurable: true\n };\n \n var properties = {\n \"0\": descObj\n };\n\n Object.defineProperty(arr, \"0\", descObj);\n\n Object.defineProperties(arr, properties);\n\n return accessorPropertyAttributesAreCorrect(arr, \"0\", get_func, set_func, \"setVerifyHelpProp\", true, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-21",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-21.js",
+ "description": "Object.defineProperties - 'O' is an Error object which implements its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 ) ",
+ "test": "assertTrue((function testcase() {\n\n var obj = new Error();\n\n Object.defineProperty(obj, \"prop\", {\n value: 11,\n configurable: false\n });\n\n try {\n Object.defineProperties(obj, {\n prop: {\n value: 12,\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && dataPropertyAttributesAreCorrect(obj, \"prop\", 11, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-210",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-210.js",
+ "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 undefined (15.4.5.1 step 4.c)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperty(arr, \"0\", {\n value: undefined\n });\n\n Object.defineProperties(arr, {\n \"0\": {\n value: undefined\n }\n });\n return dataPropertyAttributesAreCorrect(arr, \"0\", undefined, false, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-211",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-211.js",
+ "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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperty(arr, \"0\", {\n value: null\n });\n\n Object.defineProperties(arr, {\n \"0\": {\n value: null\n }\n });\n return dataPropertyAttributesAreCorrect(arr, \"0\", null, false, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-212",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-212.js",
+ "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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperty(arr, \"0\", {\n value: NaN\n });\n\n Object.defineProperties(arr, {\n \"0\": {\n value: NaN\n }\n });\n\n return dataPropertyAttributesAreCorrect(arr, \"0\", NaN, false, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-213",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-213.js",
+ "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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperty(arr, \"0\", {\n value: -0\n });\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n value: +0\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, \"0\", -0, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-214",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-214.js",
+ "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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperty(arr, \"0\", {\n value: +0\n });\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n value: -0\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, \"0\", +0, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-215",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-215.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is an array 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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperty(arr, \"0\", {\n value: 101\n });\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n value: 101\n }\n });\n return dataPropertyAttributesAreCorrect(arr, \"0\", 101, false, false, false);\n } catch (e) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-216",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-216.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is an array 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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperty(arr, \"0\", {\n value: \"abcd\"\n });\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n value: \"abcd\"\n }\n });\n return dataPropertyAttributesAreCorrect(arr, \"0\", \"abcd\", false, false, false);\n } catch (e) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-217",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-217.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is an array 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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperty(arr, \"0\", {\n value: true\n });\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n value: true\n }\n });\n return dataPropertyAttributesAreCorrect(arr, \"0\", true, false, false, false);\n } catch (e) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-218",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-218.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'name' is an array 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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n var obj1 = { length: 10 };\n Object.defineProperty(arr, \"0\", {\n value: obj1\n });\n\n var properties = {\n \"0\": {\n value: obj1\n }\n };\n try {\n Object.defineProperties(arr, properties);\n return dataPropertyAttributesAreCorrect(arr, \"0\", obj1, false, false, false);\n } catch (e) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-219",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-219.js",
+ "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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperty(arr, \"0\", {\n writable: true\n });\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n writable: true\n }\n });\n return dataPropertyAttributesAreCorrect(arr, \"0\", undefined, true, false, false);\n } catch (e) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-22",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-22.js",
+ "description": "Object.defineProperties - 'O' is the Arguments object which implements its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 ) ",
+ "test": "assertTrue((function testcase() {\n var arg = function () {\n return arguments;\n }();\n\n Object.defineProperty(arg, \"prop\", {\n value: 11,\n configurable: false\n });\n\n try {\n Object.defineProperties(arg, {\n prop: {\n value: 12,\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-220",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-220.js",
+ "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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperty(arr, \"0\", {\n writable: true,\n configurable: true\n });\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n writable: false\n }\n });\n return dataPropertyAttributesAreCorrect(arr, \"0\", undefined, false, false, true);\n } catch (e) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-221",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-221.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index 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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n function get_func() {\n return 10;\n }\n\n Object.defineProperty(arr, \"0\", {\n get: get_func\n });\n\n Object.defineProperties(arr, {\n \"0\": {\n get: get_func\n }\n });\n return accessorPropertyAttributesAreCorrect(arr, \"0\", get_func, undefined, undefined, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-222",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-222.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index 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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n function set_func(value) {\n arr.setVerifyHelpProp = value;\n }\n\n Object.defineProperty(arr, \"0\", {\n set: set_func\n });\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n set: set_func\n }\n });\n return accessorPropertyAttributesAreCorrect(arr, \"0\", undefined, set_func, \"setVerifyHelpProp\", false, false);\n } catch (e) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-223",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-223.js",
+ "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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperty(arr, \"0\", {\n enumerable: true\n });\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n enumerable: true\n }\n });\n return dataPropertyAttributesAreCorrect(arr, \"0\", undefined, false, true, false);\n } catch (e) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-224",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-224.js",
+ "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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperty(arr, \"0\", {\n enumerable: true,\n configurable: true\n });\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n enumerable: false\n }\n });\n return dataPropertyAttributesAreCorrect(arr, \"0\", undefined, false, false, true);\n } catch (e) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-225",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-225.js",
+ "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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperty(arr, \"0\", {\n configurable: true\n });\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n configurable: true\n }\n });\n return dataPropertyAttributesAreCorrect(arr, \"0\", undefined, false, false, true);\n } catch (e) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-226",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-226.js",
+ "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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperty(arr, \"0\", {\n configurable: true\n });\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n configurable: false\n }\n });\n return dataPropertyAttributesAreCorrect(arr, \"0\", undefined, false, false, false);\n } catch (e) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-227",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-227.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperty(arr, \"1\", {\n value: 3,\n configurable: false\n });\n\n try {\n Object.defineProperties(arr, {\n \"1\": {\n value: 13,\n configurable: true\n }\n });\n return false;\n } catch (ex) {\n return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, \"1\", 3, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-228",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-228.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index property, TypeError is thrown if the [[Configurable]] attribute 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperty(arr, \"1\", {\n value: 3,\n configurable: false,\n enumerable: false\n\n });\n\n try {\n Object.defineProperties(arr, {\n \"1\": {\n value: 13,\n enumerable: true\n }\n });\n return false;\n } catch (ex) {\n return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, \"1\", 3, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-229",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-229.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n function set_fun(value) {\n arr.setVerifyHelpProp = value;\n }\n\n Object.defineProperty(arr, \"1\", {\n set: set_fun,\n configurable: false\n\n });\n\n try {\n Object.defineProperties(arr, {\n \"1\": {\n value: 13\n }\n });\n return false;\n\n } catch (ex) {\n return (ex instanceof TypeError) && accessorPropertyAttributesAreCorrect(arr, \"1\", undefined, set_fun, \"setVerifyHelpProp\", false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-230",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-230.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperty(arr, \"1\", {\n value: 3,\n configurable: false\n });\n\n try {\n Object.defineProperties(arr, {\n \"1\": {\n set: function () { }\n }\n });\n return false;\n } catch (ex) {\n return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, \"1\", 3, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-231",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-231.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index property, 'P' is data property and 'desc' is accessor descriptor, 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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n arr[1] = 3; // default value of attributes: writable: true, configurable: true, enumerable: true\n\n function set_fun(value) {\n arr.setVerifyHelpProp = value;\n }\n\n Object.defineProperties(arr, {\n \"1\": {\n set: set_fun\n }\n });\n\n return accessorPropertyAttributesAreCorrect(arr, \"1\", undefined, set_fun, \"setVerifyHelpProp\", true, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-232",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-232.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index property, 'P' is accessor property and 'desc' is data descriptor, 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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperty(arr, \"1\", {\n get: function () {\n return 3;\n },\n configurable: true\n\n });\n\n Object.defineProperties(arr, {\n \"1\": {\n value: 12\n }\n });\n\n return dataPropertyAttributesAreCorrect(arr, \"1\", 12, false, false, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-233",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-233.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index property, 'P' is data property and 'desc' is data descriptor, and the [[Configurable]] attribute value of 'P' is false, test 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperty(arr, \"1\", {\n configurable: false,\n writable: false\n\n });\n\n try {\n Object.defineProperties(arr, {\n \"1\": {\n writable: true\n }\n });\n return false;\n } catch (ex) {\n return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, \"1\", undefined, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-234",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-234.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index property, 'P' is data property and 'desc' is data descriptor, and the [[Configurable]] attribute value of 'P' is false, test TypeError is thrown if the [[Writable]] attribute value of 'P' is 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperty(arr, \"1\", {\n value: 3,\n configurable: false,\n writable: false\n });\n\n try {\n\n Object.defineProperties(arr, {\n \"1\": {\n value: \"abc\"\n }\n });\n return false;\n } catch (ex) {\n return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, \"1\", 3, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-235",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-235.js",
+ "description": "Object.defineProperties - TypeError is thrown if 'O' is an Array, 'P' is an array index named property that already exists on 'O' is 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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperty(arr, \"1\", {\n value: +0\n });\n\n try {\n Object.defineProperties(arr, {\n \"1\": {\n value: -0\n }\n });\n return false;\n } catch (ex) {\n return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, \"1\", +0, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-236",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-236.js",
+ "description": "Object.defineProperties - TypeError is thrown if 'O' is an Array, 'P' is an array index named property that already exists on 'O' is 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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperty(arr, \"1\", {\n value: -0\n });\n\n try {\n Object.defineProperties(arr, {\n \"1\": {\n value: +0\n }\n });\n\n return false;\n } catch (ex) {\n return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, \"1\", -0, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-237",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-237.js",
+ "description": "Object.defineProperties - TypeError is thrown if 'O' is an Array, 'P' is an array index named property that already exists on 'O' is data property with [[Configurable]], [[Writable]] false, 'desc' 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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperty(arr, \"1\", {\n value: 12\n });\n\n try {\n Object.defineProperties(arr, {\n \"1\": {\n value: 36\n }\n });\n return false;\n } catch (ex) {\n return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, \"1\", 12, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-238",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-238.js",
+ "description": "Object.defineProperties - TypeError is thrown if 'O' is an Array, 'P' is an array index named property that already exists on 'O' is data property with [[Configurable]], [[Writable]] false, 'desc' 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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperty(arr, \"1\", {\n value: \"abcd\"\n });\n\n try {\n Object.defineProperties(arr, {\n \"1\": {\n value: \"efgh\"\n }\n });\n return false;\n } catch (ex) {\n return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, \"1\", \"abcd\", false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-239",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-239.js",
+ "description": "Object.defineProperties - TypeError is thrown if 'O' is an Array, 'P' is an array index named property that already exists on 'O' is data property with [[Configurable]], [[Writable]] false, 'desc' 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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperty(arr, \"1\", {\n value: true\n });\n\n try {\n Object.defineProperties(arr, {\n \"1\": {\n value: false\n }\n });\n\n return false;\n } catch (ex) {\n return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, \"1\", true, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-24",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-24.js",
+ "description": "Object.defineProperties - 'O' is the global object which implements its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 ) ",
+ "test": "assertTrue((function testcase() {\n\n try {\n Object.defineProperty(fnGlobalObject(), \"prop\", {\n value: 11,\n writable: true,\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperties(fnGlobalObject(), {\n prop: {\n value: 12\n }\n });\n return dataPropertyAttributesAreCorrect(fnGlobalObject(), \"prop\", 12, true, true, true);\n } finally {\n delete fnGlobalObject().prop;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-240",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-240.js",
+ "description": "Object.defineProperties - TypeError is thrown if 'O' is an Array, 'P' is an array index named property that already exists on 'O' is data property with [[Configurable]], [[Writable]] false, 'desc' 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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n var obj1 = { value: 12 };\n var obj2 = { value: 36 };\n\n Object.defineProperty(arr, \"1\", {\n value: obj1\n });\n\n try {\n Object.defineProperties(arr, {\n \"1\": {\n value: obj2\n }\n });\n\n return false;\n } catch (ex) {\n return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, \"1\", obj1, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-241",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-241.js",
+ "description": "Object.defineProperties - TypeError is thrown if 'O' is an Array, 'P' is an array index named property that already exists on 'O' is accessor property with [[Configurable]] false, 'desc' is accessor descriptor, the [[Set]] field of 'desc' is present, and the [[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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n function set_fun(value) {\n arr.setVerifyHelpProp = value;\n }\n Object.defineProperty(arr, \"1\", {\n set: set_fun\n });\n\n try {\n Object.defineProperties(arr, {\n \"1\": {\n set: function () { }\n }\n });\n\n return false;\n } catch (ex) {\n return (ex instanceof TypeError) && accessorPropertyAttributesAreCorrect(arr, \"1\", undefined, set_fun, \"setVerifyHelpProp\", false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-242",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-242.js",
+ "description": "Object.defineProperties - TypeError is thrown if 'O' is an Array, 'P' is an array index named property that already exists on 'O' is accessor property with [[Configurable]] false, 'desc' is accessor 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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n function set_fun(value) {\n arr.setVerifyHelpProp = value;\n }\n Object.defineProperty(arr, \"1\", {\n set: set_fun\n });\n\n try {\n Object.defineProperties(arr, {\n \"1\": {\n set: undefined\n }\n });\n\n return false;\n } catch (ex) {\n return (ex instanceof TypeError) && accessorPropertyAttributesAreCorrect(arr, \"1\", undefined, set_fun, \"setVerifyHelpProp\", false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-243",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-243.js",
+ "description": "Object.defineProperties - TypeError is not thrown if 'O' is an Array, 'P' is an array index named property that already exists on 'O' is accessor property with [[Configurable]] false, 'desc' is 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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperty(arr, \"1\", {\n set: undefined\n });\n\n Object.defineProperties(arr, {\n \"1\": {\n set: undefined\n }\n });\n\n return accessorPropertyAttributesAreCorrect(arr, \"1\", undefined, undefined, undefined, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-244",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-244.js",
+ "description": "Object.defineProperties - TypeError is thrown if 'O' is an Array, 'P' is an array index named property that already exists on 'O' is accessor property with [[Configurable]] false, 'desc' is accessor descriptor, the [[Get]] field of 'desc' is present, and the [[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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n function get_fun() {\n return 36;\n }\n Object.defineProperty(arr, \"1\", {\n get: get_fun\n });\n\n try {\n Object.defineProperties(arr, {\n \"1\": {\n get: function () {\n return 12;\n }\n }\n });\n\n return false;\n } catch (ex) {\n return (ex instanceof TypeError) && accessorPropertyAttributesAreCorrect(arr, \"1\", get_fun, undefined, undefined, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-245",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-245.js",
+ "description": "Object.defineProperties - TypeError is thrown if 'O' is an Array, 'P' is an array index named property that already exists on 'O' is accessor property with [[Configurable]] false, 'desc' is accessor 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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n function get_fun() {\n return 36;\n }\n Object.defineProperty(arr, \"1\", {\n get: get_fun\n });\n\n try {\n Object.defineProperties(arr, {\n \"1\": {\n get: undefined\n }\n });\n return false;\n } catch (ex) {\n return (ex instanceof TypeError) && accessorPropertyAttributesAreCorrect(arr, \"1\", get_fun, undefined, undefined, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-246",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-246.js",
+ "description": "Object.defineProperties - TypeError is not thrown if ''O' is an Array, 'P' is an array index named property that already exists on 'O' is accessor property with [[Configurable]] false, 'desc' is accessor descriptor, test TypeError is not thrown if the [[Get]] 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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n Object.defineProperty(arr, \"1\", {\n get: undefined\n });\n\n try {\n Object.defineProperties(arr, {\n \"1\": {\n get: undefined\n }\n });\n\n return accessorPropertyAttributesAreCorrect(arr, \"1\", undefined, undefined, undefined, false, false);\n } catch (ex) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-247",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-247.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [12];\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n value: 36\n }\n });\n return dataPropertyAttributesAreCorrect(arr, \"0\", 36, true, true, true);\n } catch (ex) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-248",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-248.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [12];\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n value: undefined\n }\n });\n return dataPropertyAttributesAreCorrect(arr, \"0\", undefined, true, true, true);\n } catch (ex) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-249",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-249.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [undefined];\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n value: 12\n }\n });\n return dataPropertyAttributesAreCorrect(arr, \"0\", 12, true, true, true);\n } catch (ex) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-25",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-25.js",
+ "description": "Object.defineProperties - 'P' doesn't exist in 'O', test TypeError is thrown when 'O' is not extensible (8.12.9 step 3)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n Object.preventExtensions(obj);\n\n try {\n Object.defineProperties(obj, {\n prop: {\n value: 12,\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && !obj.hasOwnProperty(\"prop\");\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.preventExtensions))"
+ },
+ {
+ "id": "15.2.3.7-6-a-250",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-250.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [100];\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n writable: false\n }\n });\n return dataPropertyAttributesAreCorrect(arr, \"0\", 100, false, true, true);\n } catch (ex) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-251",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-251.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [12];\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n enumerable: false\n }\n });\n return dataPropertyAttributesAreCorrect(arr, \"0\", 12, true, false, true);\n } catch (ex) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-252",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-252.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [12];\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n configurable: false\n }\n });\n return dataPropertyAttributesAreCorrect(arr, \"0\", 12, true, true, false);\n } catch (ex) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-253",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-253.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [12];\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n value: 36,\n writable: false,\n configurable: false\n }\n });\n return dataPropertyAttributesAreCorrect(arr, \"0\", 36, false, true, false);\n } catch (ex) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-254",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-254.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n function get_fun() {\n return 36;\n }\n\n Object.defineProperty(arr, \"0\", {\n get: function () {\n return 12;\n },\n configurable: true\n });\n\n Object.defineProperties(arr, {\n \"0\": {\n get: get_fun\n }\n });\n return accessorPropertyAttributesAreCorrect(arr, \"0\", get_fun, undefined, undefined, false, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-255",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-255.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperty(arr, \"0\", {\n get: function () {\n return 12;\n },\n configurable: true\n });\n\n Object.defineProperties(arr, {\n \"0\": {\n get: undefined\n }\n });\n return accessorPropertyAttributesAreCorrect(arr, \"0\", undefined, undefined, undefined, false, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-256",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-256.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n function get_fun() {\n return 36;\n }\n\n Object.defineProperty(arr, \"0\", {\n get: undefined,\n configurable: true\n });\n\n Object.defineProperties(arr, {\n \"0\": {\n get: get_fun\n }\n });\n return accessorPropertyAttributesAreCorrect(arr, \"0\", get_fun, undefined, undefined, false, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-257",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-257.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n function set_fun(value) {\n arr.setVerifyHelpProp = value;\n }\n\n Object.defineProperty(arr, \"0\", {\n set: function () { },\n configurable: true\n });\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n set: set_fun\n }\n });\n return accessorPropertyAttributesAreCorrect(arr, \"0\", undefined, set_fun, \"setVerifyHelpProp\", false, true);\n } catch (ex) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-258",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-258.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperty(arr, \"0\", {\n set: function () { },\n configurable: true\n });\n\n Object.defineProperties(arr, {\n \"0\": {\n set: undefined\n }\n });\n return accessorPropertyAttributesAreCorrect(arr, \"0\", undefined, undefined, undefined, false, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-259",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-259.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n function set_fun(value) {\n arr.setVerifyHelpProp = value;\n }\n Object.defineProperty(arr, \"0\", {\n set: undefined,\n configurable: true\n });\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n set: set_fun\n }\n });\n return accessorPropertyAttributesAreCorrect(arr, \"0\", undefined, set_fun, \"setVerifyHelpProp\", false, true);\n } catch (ex) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-26",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-26.js",
+ "description": "Object.defineProperties - 'P' doesn't exist in 'O', test 'P' is defined as data property when 'desc' is generic descriptor (8.12.9 step 4.a)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n prop: {\n configurable: true,\n enumerable: true\n }\n });\n var desc = Object.getOwnPropertyDescriptor(obj, \"prop\");\n\n return desc.hasOwnProperty(\"value\") && typeof desc.value === \"undefined\" &&\n desc.hasOwnProperty(\"writable\") && desc.writable === false &&\n desc.hasOwnProperty(\"configurable\") && desc.configurable === true &&\n desc.hasOwnProperty(\"enumerable\") && desc.enumerable === true &&\n !desc.hasOwnProperty(\"get\") && !desc.hasOwnProperty(\"set\");\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.getOwnPropertyDescriptor))"
+ },
+ {
+ "id": "15.2.3.7-6-a-260",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-260.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n function set_fun(value) {\n arr.setVerifyHelpProp = value;\n }\n Object.defineProperty(arr, \"0\", {\n set: set_fun,\n enumerable: true,\n configurable: true\n });\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n enumerable: false\n }\n });\n return accessorPropertyAttributesAreCorrect(arr, \"0\", undefined, set_fun, \"setVerifyHelpProp\", false, true);\n } catch (ex) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-261",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-261.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n function set_fun(value) {\n arr.setVerifyHelpProp = value;\n }\n Object.defineProperty(arr, \"0\", {\n set: set_fun,\n configurable: true\n });\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n configurable: false\n }\n });\n return accessorPropertyAttributesAreCorrect(arr, \"0\", undefined, set_fun, \"setVerifyHelpProp\", false, false);\n } catch (ex) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-262",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-262.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n function get_fun() {\n return 36;\n }\n function set_fun(value) {\n arr.setVerifyHelpProp = value;\n }\n Object.defineProperty(arr, \"0\", {\n get: function () {\n return 12;\n },\n set: set_fun,\n enumerable: true,\n configurable: true\n });\n\n try {\n Object.defineProperties(arr, {\n \"0\": {\n get: get_fun,\n enumerable: false,\n configurable: false\n }\n });\n return accessorPropertyAttributesAreCorrect(arr, \"0\", get_fun, set_fun, \"setVerifyHelpProp\", false, false);\n } catch (ex) {\n return false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnSupportsArrayIndexGettersOnArrays())"
+ },
+ {
+ "id": "15.2.3.7-6-a-263",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-263.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index named property, test the length property of 'O' is not changed if ToUint32('P') is less than value of the length property in 'O' (15.4.5.1 step 4.e)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n arr.length = 3; // default value of length: writable: true, configurable: false, enumerable: false\n\n Object.defineProperties(arr, {\n \"1\": {\n value: 26\n }\n });\n return arr.length === 3 && arr[1] === 26;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-264",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-264.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index named property, test the length property of 'O' is set as ToUint32('P') + 1 if ToUint32('P') equals to value of the length property in 'O' (15.4.5.1 step 4.e.ii)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n arr.length = 3; // default value of length: writable: true, configurable: false, enumerable: false\n\n Object.defineProperties(arr, {\n \"3\": {\n value: 26\n }\n });\n return arr.length === 4 && arr[3] === 26;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-265",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-265.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is an array index named property, test the length property of 'O' is set as ToUint32('P') + 1 if ToUint32('P') is greater than value of the length property in 'O' (15.4.5.1 step 4.e.ii)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperties(arr, {\n \"5\": {\n value: 26\n }\n });\n return arr.length === 6 && arr[5] === 26;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-266",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-266.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is generic property 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperties(arr, {\n \"property\": {\n value: 12,\n writable: true,\n enumerable: true,\n configurable: true\n }\n });\n return dataPropertyAttributesAreCorrect(arr, \"property\", 12, true, true, true) && arr.length === 0;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-267",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-267.js",
+ "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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n function get_fun() {\n return 12;\n }\n function set_fun(value) {\n arr.setVerifyHelpProp = value;\n }\n\n Object.defineProperties(arr, {\n \"property\": {\n get: get_fun,\n set: set_fun,\n enumerable: true,\n configurable: true\n }\n });\n return accessorPropertyAttributesAreCorrect(arr, \"property\", get_fun, set_fun, \"setVerifyHelpProp\", true, true) &&\n arr.length === 0;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-268",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-268.js",
+ "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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n function get_fun() {\n return 12;\n }\n function set_fun(value) {\n arr.verifySetFun = value;\n }\n Object.defineProperty(arr, \"property\", {\n get: function () {\n return 36;\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperties(arr, {\n \"property\": {\n get: get_fun,\n set: set_fun,\n enumerable: false\n }\n });\n return accessorPropertyAttributesAreCorrect(arr, \"property\", get_fun, set_fun, \"verifySetFun\", false, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-269",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-269.js",
+ "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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n arr.property = 12; // default value of attributes: writable: true, configurable: true, enumerable: true\n\n Object.defineProperties(arr, {\n \"property\": {\n writable: false,\n enumerable: false,\n configurable: false\n }\n });\n return dataPropertyAttributesAreCorrect(arr, \"property\", 12, false, false, false) && arr.length === 0;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-27",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-27.js",
+ "description": "Object.defineProperties - 'P' doesn't exist in 'O', test [[Value]] of 'P' is set as undefined value if absent in data descriptor 'desc' (8.12.9 step 4.a.i)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n prop: {\n writable: true\n }\n });\n\n var desc = Object.getOwnPropertyDescriptor(obj, \"prop\");\n\n return desc.hasOwnProperty(\"value\") && typeof desc.value === \"undefined\" &&\n desc.hasOwnProperty(\"writable\") && desc.writable === true &&\n desc.hasOwnProperty(\"configurable\") && desc.configurable === false &&\n desc.hasOwnProperty(\"enumerable\") && desc.enumerable === false;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.getOwnPropertyDescriptor))"
+ },
+ {
+ "id": "15.2.3.7-6-a-270",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-270.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is generic own data 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperty(arr, \"property\", {\n value: 12\n });\n\n try {\n Object.defineProperties(arr, {\n \"property\": {\n value: 36\n }\n });\n return false;\n } catch (ex) {\n return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, \"property\", 12, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-271",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-271.js",
+ "description": "Object.defineProperties -'O' is an Array, 'P' is generic own data 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperty(arr, \"property\", {\n writable: false\n });\n\n try {\n Object.defineProperties(arr, {\n \"property\": {\n writable: true\n }\n });\n return false;\n } catch (ex) {\n return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, \"property\", undefined, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-272",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-272.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is generic own data 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperty(arr, \"property\", {\n value: 12,\n enumerable: false\n });\n\n try {\n Object.defineProperties(arr, {\n \"property\": {\n enumerable: true\n }\n });\n return false;\n } catch (ex) {\n return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, \"property\", 12, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-273",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-273.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is generic own data 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n Object.defineProperty(arr, \"property\", {\n value: 12\n });\n\n try {\n Object.defineProperties(arr, {\n \"property\": {\n configurable: true\n }\n });\n return false;\n } catch (ex) {\n return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, \"property\", 12, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-274",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-274.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is generic own 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)",
+ "test": "assertTrue((function testcase() {\n var arr = [];\n\n function get_fun() {\n return 37;\n }\n function set_fun(value) {\n arr.verifySetFun = value;\n }\n Object.defineProperty(arr, \"property\", {\n get: get_fun,\n set: set_fun\n });\n\n try {\n Object.defineProperties(arr, {\n \"property\": {\n get: function () {\n return 36;\n }\n }\n });\n return false;\n } catch (ex) {\n return (ex instanceof TypeError) &&\n accessorPropertyAttributesAreCorrect(arr, \"property\", get_fun, set_fun, \"verifySetFun\", false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-275",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-275.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is generic own 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n function set_fun(value) {\n arr.setVerifyHelpProp = value;\n }\n Object.defineProperty(arr, \"property\", {\n set: set_fun\n });\n\n try {\n Object.defineProperties(arr, {\n \"property\": {\n set: function () { }\n }\n });\n return false;\n } catch (ex) {\n return (ex instanceof TypeError) && accessorPropertyAttributesAreCorrect(arr, \"property\", undefined, set_fun, \"setVerifyHelpProp\", false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-276",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-276.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is generic own 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n function set_fun(value) {\n arr.setVerifyHelpProp = value;\n }\n Object.defineProperty(arr, \"property\", {\n set: set_fun,\n enumerable: false\n });\n\n try {\n Object.defineProperties(arr, {\n \"property\": {\n enumerable: true\n }\n });\n return false;\n } catch (ex) {\n return (ex instanceof TypeError) && accessorPropertyAttributesAreCorrect(arr, \"property\", undefined, set_fun, \"setVerifyHelpProp\", false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-277",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-277.js",
+ "description": "Object.defineProperties - 'O' is an Array, 'P' is generic own 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)",
+ "test": "assertTrue((function testcase() {\n\n var arr = [];\n\n function set_fun(value) {\n arr.setVerifyHelpProp = value;\n }\n Object.defineProperty(arr, \"property\", {\n set: set_fun,\n configurable: false\n });\n\n try {\n Object.defineProperties(arr, {\n \"property\": {\n configurable: true\n }\n });\n return false;\n } catch (ex) {\n return (ex instanceof TypeError) && accessorPropertyAttributesAreCorrect(arr, \"property\", undefined, set_fun, \"setVerifyHelpProp\", false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-278",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-278.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is own property which is ever defined in both [[ParameterMap]] of 'O' and 'O', and is deleted afterwards, and 'desc' is data descriptor, test 'P' is redefined in 'O' with all correct attribute values (10.6 [[DefineOwnProperty]] step 3)",
+ "test": "assertTrue((function testcase() {\n\n var arg;\n\n (function fun(a, b, c) {\n arg = arguments;\n }(0, 1, 2));\n\n delete arg[0];\n\n Object.defineProperties(arg, {\n \"0\": {\n value: 10,\n writable: true,\n enumerable: true,\n configurable: true\n }\n });\n\n return dataPropertyAttributesAreCorrect(arg, \"0\", 10, true, true, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-279",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-279.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is own property which is ever defined in both [[ParameterMap]] of 'O' and 'O', and is deleted afterwards, and 'desc' is accessor descriptor, test 'P' is redefined in 'O' with all correct attribute values (10.6 [[DefineOwnProperty]] step 3)",
+ "test": "assertTrue((function testcase() {\n\n var arg;\n\n (function fun(a, b, c) {\n arg = arguments;\n }(0, 1, 2));\n\n delete arg[0];\n\n function get_func() {\n return 10;\n }\n function set_func(value) {\n arg.setVerifyHelpProp = value;\n }\n\n Object.defineProperties(arg, {\n \"0\": {\n get: get_func,\n set: set_func,\n enumerable: true,\n configurable: true\n }\n });\n\n return accessorPropertyAttributesAreCorrect(arg, \"0\", get_func, set_func, \"setVerifyHelpProp\", true, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-28",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-28.js",
+ "description": "Object.defineProperties - 'P' doesn't exist in 'O', test [[Writable]] of 'P' is set as false value if absent in data descriptor 'desc' (8.12.9 step 4.a.i)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n prop: {\n value: 1001\n }\n });\n obj.prop = 1002;\n return obj.hasOwnProperty(\"prop\") && obj.prop === 1001;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-280",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-280.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is own accessor property of 'O' which is also defined in [[ParameterMap]] of 'O', and 'desc' is accessor descriptor, test updating multiple attribute values of 'P' (10.6 [[DefineOwnProperty]] step 3)",
+ "test": "assertTrue((function testcase() {\n\n var arg;\n\n (function fun(a, b, c) {\n arg = arguments;\n } (0, 1, 2));\n\n function get_func1() {\n return 10;\n }\n\n Object.defineProperty(arg, \"0\", {\n get: get_func1,\n enumerable: true,\n configurable: true\n });\n\n function get_func2() {\n return 20;\n }\n\n Object.defineProperties(arg, {\n \"0\": {\n get: get_func2,\n enumerable: false,\n configurable: false\n }\n });\n\n var desc = Object.getOwnPropertyDescriptor(arg, \"0\");\n return desc.get === get_func2 && typeof desc.set === \"undefined\" &&\n desc.configurable === false && desc.enumerable === false;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-281",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-281.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is own data property of 'O' which is also defined in [[ParameterMap]] of 'O', and 'desc' is data descriptor, test updating multiple attribute values of 'P' (10.6 [[DefineOwnProperty]] step 3)",
+ "test": "assertTrue((function testcase() {\n\n var arg;\n\n (function fun(a, b, c) {\n arg = arguments;\n }(0, 1, 2));\n\n Object.defineProperties(arg, {\n \"0\": {\n value: 20,\n writable: false,\n enumerable: false,\n configurable: false\n }\n });\n\n return dataPropertyAttributesAreCorrect(arg, \"0\", 20, false, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-282",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-282.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is own data property of 'O' which is also defined in [[ParameterMap]] of 'O', test TypeError is thrown when updating the [[Value]] attribute value of 'P' whose writable and configurable attributes are false (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n\n var arg;\n\n (function fun(a, b, c) {\n arg = arguments;\n }(0, 1, 2));\n\n Object.defineProperty(arg, \"0\", {\n value: 0,\n writable: false,\n configurable: false\n });\n\n try {\n Object.defineProperties(arg, {\n \"0\": {\n value: 10\n }\n });\n\n return false;\n } catch (e) {\n return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(arg, \"0\", 0, false, true, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-283",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-283.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is own data property of 'O' which is also defined in [[ParameterMap]] of 'O', test TypeError is thrown when updating the [[Writable]] attribute value of 'P' which is defined as non-configurable (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n\n var arg;\n\n (function fun(a, b, c) {\n arg = arguments;\n }(0, 1, 2));\n\n Object.defineProperty(arg, \"0\", {\n value: 0,\n writable: false,\n enumerable: false,\n configurable: false\n });\n\n try {\n Object.defineProperties(arg, {\n \"0\": {\n writable: true\n }\n });\n\n return false;\n } catch (e) {\n return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(arg, \"0\", 0, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-284",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-284.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is own data property of 'O' which is also defined in [[ParameterMap]] of 'O', test TypeError is thrown when updating the [[Enumerable]] attribute value of 'P' which is defined as non-configurable (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n\n var arg;\n\n (function fun(a, b, c) {\n arg = arguments;\n }(0, 1, 2));\n\n Object.defineProperty(arg, \"0\", {\n value: 0,\n writable: false,\n enumerable: true,\n configurable: false\n });\n\n try {\n Object.defineProperties(arg, {\n \"0\": {\n enumerable: false\n }\n });\n\n return false; \n } catch (e) {\n return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(arg, \"0\", 0, false, true, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-285",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-285.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is own data property of 'O' which is also defined in [[ParameterMap]] of 'O', test TypeError is thrown when updating the [[Configurable]] attribute value of 'P' which is defined as non-configurable (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n\n var arg;\n\n (function fun(a, b, c) {\n arg = arguments;\n }(0, 1, 2));\n\n Object.defineProperty(arg, \"0\", {\n value: 0,\n writable: false,\n enumerable: false,\n configurable: false\n });\n\n try {\n Object.defineProperties(arg, {\n \"0\": {\n configurable: true\n }\n });\n\n return false; \n } catch (e) {\n return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(arg, \"0\", 0, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-286",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-286.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is own accessor property of 'O' which is also defined in [[ParameterMap]] of 'O', test TypeError is thrown when updating the [[Get]] attribute value of 'P' which is defined as non-configurable (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n\n var arg;\n\n (function fun(a, b, c) {\n arg = arguments;\n } (0, 1, 2));\n\n function get_func1() {\n return 0;\n }\n\n Object.defineProperty(arg, \"0\", {\n get: get_func1,\n enumerable: false,\n configurable: false\n });\n\n function get_func2() {\n return 10;\n }\n try {\n Object.defineProperties(arg, {\n \"0\": {\n get: get_func2\n }\n });\n\n return false;\n } catch (e) {\n var desc = Object.getOwnPropertyDescriptor(arg, \"0\");\n return e instanceof TypeError && desc.get === get_func1 && typeof desc.set === \"undefined\" &&\n desc.enumerable === false && desc.configurable === false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-287",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-287.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is own accessor property of 'O' which is also defined in [[ParameterMap]] of 'O', test TypeError is thrown when updating the [[Set]] attribute value of 'P' which is defined as non-configurable (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n\n var arg;\n\n (function fun(a, b, c) {\n arg = arguments;\n }(0, 1, 2));\n\n function get_func() {\n return 0;\n }\n\n Object.defineProperty(arg, \"0\", {\n get: get_func,\n set: undefined,\n enumerable: false,\n configurable: false\n });\n\n function set_func(value) {\n arg.setVerifyHelpProp = value;\n }\n try {\n Object.defineProperties(arg, {\n \"0\": {\n set: set_func\n }\n });\n\n return false;\n } catch (e) {\n var desc = Object.getOwnPropertyDescriptor(arg, \"0\");\n return e instanceof TypeError && desc.get === get_func && typeof desc.set === \"undefined\" &&\n desc.enumerable === false && desc.configurable === false;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-288",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-288.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is own accessor property of 'O' which is also defined in [[ParameterMap]] of 'O', test TypeError is thrown when updating the [[Enumerable]] attribute value of 'P' which is defined as non-configurable (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n\n var arg;\n\n (function fun(a, b, c) {\n arg = arguments;\n }(0, 1, 2));\n\n function get_func() {\n return 0;\n }\n\n Object.defineProperty(arg, \"0\", {\n get: get_func,\n enumerable: true,\n configurable: false\n });\n\n try {\n Object.defineProperties(arg, {\n \"0\": {\n enumerable: false\n }\n });\n\n return false;\n } catch (e) {\n return (e instanceof TypeError) && accessorPropertyAttributesAreCorrect(arg, \"0\", get_func, undefined, undefined, true, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-289",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-289.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is own accessor property of 'O' which is also defined in [[ParameterMap]] of 'O', test TypeError is thrown when updating the [[Configurable]] attribute value of 'P' which is defined as non-configurable (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n\n var arg;\n\n (function fun(a, b, c) {\n arg = arguments;\n }(0, 1, 2));\n\n function get_func() {\n return 0;\n }\n\n Object.defineProperty(arg, \"0\", {\n get: get_func,\n enumerable: true,\n configurable: false\n });\n\n try {\n Object.defineProperties(arg, {\n \"0\": {\n configurable: true\n }\n });\n\n return false;\n } catch (e) {\n return (e instanceof TypeError) && accessorPropertyAttributesAreCorrect(arg, \"0\", get_func, undefined, undefined, true, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-29",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-29.js",
+ "description": "Object.defineProperties - 'P' doesn't exist in 'O', test [[Enumerable]] of 'P' is set as false value if absent in data descriptor 'desc' (8.12.9 step 4.a.i)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n prop: { value: 1001}\n });\n\n for (var prop in obj) {\n if (obj.hasOwnProperty(prop)) {\n if (prop === \"prop\") {\n return false;\n }\n }\n }\n return true;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-290",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-290.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is an array index named property of 'O' but not defined in [[ParameterMap]] of 'O', and 'desc' is data descriptor, test 'P' is defined in 'O' with all correct attribute values (10.6 [[DefineOwnProperty]] step 3)",
+ "test": "assertTrue((function testcase() {\n\n var arg;\n\n (function fun() {\n arg = arguments;\n }(0, 1, 2));\n\n delete arg[0];\n\n Object.defineProperties(arg, {\n \"0\": {\n value: 10,\n writable: false,\n enumerable: false,\n configurable: false\n }\n });\n\n return dataPropertyAttributesAreCorrect(arg, \"0\", 10, false, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-291",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-291.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is an array index named property of 'O' but not defined in [[ParameterMap]] of 'O', and 'desc' is accessor descriptor, test 'P' is defined in 'O' with all correct attribute values (10.6 [[DefineOwnProperty]] step 3)",
+ "test": "assertTrue((function testcase() {\n\n var arg;\n\n (function fun() {\n arg = arguments;\n }(0, 1, 2));\n\n delete arg[0];\n\n function get_func() {\n return 10;\n }\n function set_func(value) {\n arg.setVerifyHelpProp = value;\n }\n\n Object.defineProperties(arg, {\n \"0\": {\n get: get_func,\n set: set_func,\n enumerable: false,\n configurable: false\n }\n });\n\n return accessorPropertyAttributesAreCorrect(arg, \"0\", get_func, set_func, \"setVerifyHelpProp\", false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-292",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-292.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is an array index named accessor property of 'O' but not defined in [[ParameterMap]] of 'O', and 'desc' is accessor descriptor, test updating multiple attribute values of 'P' (10.6 [[DefineOwnProperty]] step 3)",
+ "test": "assertTrue((function testcase() {\n\n var arg;\n\n (function fun() {\n arg = arguments;\n }(0, 1, 2));\n\n function get_func1() {\n return 10;\n }\n\n Object.defineProperty(arg, \"0\", {\n get: get_func1,\n enumerable: true,\n configurable: true\n });\n\n function get_func2() {\n return 20;\n }\n\n Object.defineProperties(arg, {\n \"0\": {\n get: get_func2,\n enumerable: false,\n configurable: false\n }\n });\n\n return accessorPropertyAttributesAreCorrect(arg, \"0\", get_func2, undefined, undefined, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-293",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-293.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is an array index named data property of 'O' but not defined in [[ParameterMap]] of 'O', and 'desc' is data descriptor, test updating multiple attribute values of 'P' (10.6 [[DefineOwnProperty]] step 3)",
+ "test": "assertTrue((function testcase() {\n\n var arg;\n\n (function fun() {\n arg = arguments;\n }(0, 1, 2));\n\n Object.defineProperties(arg, {\n \"0\": {\n value: 20,\n writable: false,\n enumerable: false,\n configurable: false\n }\n });\n\n return dataPropertyAttributesAreCorrect(arg, \"0\", 20, false, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-294",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-294.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is an array index named data property of 'O' but not defined in [[ParameterMap]] of 'O', test TypeError is thrown when updating the [[Value]] attribute value of 'P' which is not writable and not configurable (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n\n var arg;\n\n (function fun() {\n arg = arguments;\n }());\n\n Object.defineProperty(arg, \"0\", {\n value: 0,\n writable: false,\n configurable: false\n });\n\n try {\n Object.defineProperties(arg, {\n \"0\": {\n value: 10\n }\n });\n\n return false;\n } catch (e) {\n return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(arg, \"0\", 0, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-295",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-295.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is an array index named data property of 'O' but not defined in [[ParameterMap]] of 'O', test TypeError is thrown when updating the [[Writable]] attribute value of 'P' which is not configurable (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n\n var arg;\n\n (function fun() {\n arg = arguments;\n }());\n\n Object.defineProperty(arg, \"0\", {\n value: 0,\n writable: false,\n enumerable: false,\n configurable: false\n });\n\n try {\n Object.defineProperties(arg, {\n \"0\": {\n writable: true\n }\n });\n\n return false;\n } catch (e) {\n return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(arg, \"0\", 0, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-296",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-296.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is an array index named data property of 'O' but not defined in [[ParameterMap]] of 'O', test TypeError is thrown when updating the [[Enumerable]] attribute value of 'P' which is not configurable (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n\n var arg;\n\n (function fun() {\n arg = arguments;\n }());\n\n Object.defineProperty(arg, \"0\", {\n value: 0,\n writable: false,\n enumerable: true,\n configurable: false\n });\n\n try {\n Object.defineProperties(arg, {\n \"0\": {\n enumerable: false\n }\n });\n\n return false;\n } catch (e) {\n return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(arg, \"0\", 0, false, true, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-297",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-297.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is an array index named data property of 'O' but not defined in [[ParameterMap]] of 'O', test TypeError is thrown when updating the [[Configurable]] attribute value of 'P' which is not configurable (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n\n var arg;\n\n (function fun() {\n arg = arguments;\n }());\n\n Object.defineProperty(arg, \"0\", {\n value: 0,\n writable: false,\n enumerable: false,\n configurable: false\n });\n\n try {\n Object.defineProperties(arg, {\n \"0\": {\n configurable: true\n }\n });\n\n return false;\n } catch (e) {\n return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(arg, \"0\", 0, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-298",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-298.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is an array index named accessor property of 'O' but not defined in [[ParameterMap]] of 'O', test TypeError is thrown when updating the [[Get]] attribute value of 'P' which is not configurable (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n\n var arg;\n\n (function fun() {\n arg = arguments;\n }());\n\n function get_func1() {\n return 0;\n }\n\n Object.defineProperty(arg, \"0\", {\n get: get_func1,\n enumerable: false,\n configurable: false\n });\n\n function get_func2() {\n return 10;\n }\n try {\n Object.defineProperties(arg, {\n \"0\": {\n get: get_func2\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && accessorPropertyAttributesAreCorrect(arg, \"0\", get_func1, undefined, undefined, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-299",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-299.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is an array index named accessor property of 'O' but not defined in [[ParameterMap]] of 'O', test TypeError is thrown when updating the [[Set]] attribute value of 'P' which is not configurable (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n\n var arg;\n\n (function fun() {\n arg = arguments;\n }());\n\n function get_func() {\n return 0;\n }\n\n Object.defineProperty(arg, \"0\", {\n get: get_func,\n set: undefined,\n enumerable: false,\n configurable: false\n });\n\n function set_func(value) {\n arg.setVerifyHelpProp = value;\n }\n try {\n Object.defineProperties(arg, {\n \"0\": {\n set: set_func\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && accessorPropertyAttributesAreCorrect(arg, \"0\", get_func, undefined, undefined, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-3",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-3.js",
+ "description": "Object.defineProperties - 'P' is own data property that overrides an inherited data property (8.12.9 step 1 ) ",
+ "test": "assertTrue((function testcase() {\n var proto = {};\n Object.defineProperty(proto, \"prop\", {\n value: 11,\n configurable: true\n });\n var Con = function () { };\n Con.prototype = proto;\n\n var obj = new Con();\n Object.defineProperty(obj, \"prop\", {\n value: 12,\n configurable: false\n });\n\n try {\n Object.defineProperties(obj, {\n prop: {\n value: 13,\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-30",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-30.js",
+ "description": "Object.defineProperties - 'P' doesn't exist in 'O', test [[Configurable]] of 'P' is set as false value if absent in data descriptor 'desc' (8.12.9 step 4.a.i)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n \n Object.defineProperties(obj, {\n prop: { value: 1001 }\n });\n delete obj.prop;\n return obj.hasOwnProperty(\"prop\") && obj.prop === 1001; \n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-300",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-300.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is an array index named accessor property of 'O' but not defined in [[ParameterMap]] of 'O', test TypeError is thrown when updating the [[Enumerable]] attribute value of 'P' which is not configurable (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n\n var arg;\n\n (function fun() {\n arg = arguments;\n }());\n\n function get_func() {\n return 0;\n }\n\n Object.defineProperty(arg, \"0\", {\n get: get_func,\n enumerable: true,\n configurable: false\n });\n\n try {\n Object.defineProperties(arg, {\n \"0\": {\n enumerable: false\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && accessorPropertyAttributesAreCorrect(arg, \"0\", get_func, undefined, undefined, true, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-301",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-301.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is an array index named accessor property of 'O' but not defined in [[ParameterMap]] of 'O', test TypeError is thrown when updating the [[Configurable]] attribute value of 'P' which is not configurable (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n\n var arg;\n\n (function fun() {\n arg = arguments;\n }());\n\n function get_func() {\n return 0;\n }\n\n Object.defineProperty(arg, \"0\", {\n get: get_func,\n enumerable: true,\n configurable: false\n });\n\n try {\n Object.defineProperties(arg, {\n \"0\": {\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && accessorPropertyAttributesAreCorrect(arg, \"0\", get_func, undefined, undefined, true, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-302",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-302.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is generic property, and 'desc' is data descriptor, test 'P' is defined in 'O' with all correct attribute values (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n var arg = (function () {\n return arguments;\n }(1, 2, 3));\n\n Object.defineProperties(arg, {\n \"genericProperty\": {\n value: 1001,\n writable: true,\n enumerable: true,\n configurable: true\n }\n });\n\n return dataPropertyAttributesAreCorrect(arg, \"genericProperty\", 1001, true, true, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-303",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-303.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is generic property, and 'desc' is accessor descriptor, test 'P' is defined in 'O' with all correct attribute values (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n var arg = (function () {\n return arguments;\n }(1, 2, 3));\n\n function getFun() {\n return \"getFunctionString\";\n }\n function setFun(value) {\n arg.testGetFunction = value;\n }\n Object.defineProperties(arg, {\n \"genericProperty\": {\n get: getFun,\n set: setFun,\n enumerable: true,\n configurable: true\n }\n });\n\n return accessorPropertyAttributesAreCorrect(arg, \"genericProperty\", getFun, setFun, \"testGetFunction\", true, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-304",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-304.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is generic own accessor property of 'O', and 'desc' is accessor descriptor, test updating multiple attribute values of 'P' (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n var arg = (function () {\n return arguments;\n }(1, 2, 3));\n\n Object.defineProperty(arg, \"genericProperty\", {\n get: function () {\n return 1001;\n },\n set: function (value) {\n arg.testGetFunction1 = value;\n },\n enumerable: true,\n configurable: true\n });\n\n function getFun() {\n return \"getFunctionString\";\n }\n function setFun(value) {\n arg.testGetFunction = value;\n }\n Object.defineProperties(arg, {\n \"genericProperty\": {\n get: getFun,\n set: setFun,\n enumerable: false,\n configurable: false\n }\n });\n\n return accessorPropertyAttributesAreCorrect(arg, \"genericProperty\", getFun, setFun, \"testGetFunction\", false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-305",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-305.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is generic own data property of 'O', and 'desc' is data descriptor, test updating multiple attribute values of 'P' (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n var arg = (function () {\n return arguments;\n }(1, 2, 3));\n\n Object.defineProperty(arg, \"genericProperty\", {\n value: 1001,\n writable: true,\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperties(arg, {\n \"genericProperty\": {\n value: 1002,\n enumerable: false,\n configurable: false\n }\n });\n\n return dataPropertyAttributesAreCorrect(arg, \"genericProperty\", 1002, true, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-306",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-306.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is generic own data property of 'O', test TypeError is thrown when updating the [[Value]] attribute value of 'P' which is not writable and not configurable (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n var arg = (function () {\n return arguments;\n }(1, 2, 3));\n\n Object.defineProperty(arg, \"genericProperty\", {\n value: 1001,\n writable: false,\n configurable: false\n });\n\n try {\n Object.defineProperties(arg, {\n \"genericProperty\": {\n value: 1002\n }\n });\n\n return false;\n } catch (ex) {\n return ex instanceof TypeError &&\n dataPropertyAttributesAreCorrect(arg, \"genericProperty\", 1001, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-307",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-307.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is generic own data property of 'O', test TypeError is thrown when updating the [[Writable]] attribute value of 'P' which is not configurable (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n var arg = (function () {\n return arguments;\n }(1, 2, 3));\n\n Object.defineProperty(arg, \"genericProperty\", {\n writable: false,\n configurable: false\n });\n\n try {\n Object.defineProperties(arg, {\n \"genericProperty\": {\n writable: true\n }\n });\n\n return false;\n } catch (ex) {\n return ex instanceof TypeError &&\n dataPropertyAttributesAreCorrect(arg, \"genericProperty\", undefined, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-308",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-308.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is generic own data property of 'O', test TypeError is thrown when updating the [[Enumerable]] attribute value of 'P' which is not configurable (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n var arg = (function () {\n return arguments;\n }(1, 2, 3));\n\n Object.defineProperty(arg, \"genericProperty\", {\n enumerable: true,\n configurable: false\n });\n\n try {\n Object.defineProperties(arg, {\n \"genericProperty\": {\n enumerable: false\n }\n });\n\n return false;\n } catch (ex) {\n return ex instanceof TypeError &&\n dataPropertyAttributesAreCorrect(arg, \"genericProperty\", undefined, false, true, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-309",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-309.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is generic own data property of 'O', test TypeError is thrown when updating the [[Configurable]] attribute value of 'P' which is not configurable (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n var arg = (function () {\n return arguments;\n }(1, 2, 3));\n\n Object.defineProperty(arg, \"genericProperty\", {\n configurable: false\n });\n\n try {\n Object.defineProperties(arg, {\n \"genericProperty\": {\n configurable: true\n }\n });\n\n return false;\n } catch (ex) {\n return ex instanceof TypeError &&\n dataPropertyAttributesAreCorrect(arg, \"genericProperty\", undefined, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-31",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-31.js",
+ "description": "Object.defineProperties - 'desc' is data descriptor, test setting all attribute values of 'P' (8.12.9 step 4.a.i)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, {\n prop: {\n value: 1002,\n writable: false,\n enumerable: false,\n configurable: false\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"prop\", 1002, false, false, false);\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-310",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-310.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is generic own accessor property of 'O', test TypeError is thrown when updating the [[Get]] attribute value of 'P' which is not configurable (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n var arg = (function () {\n return arguments;\n } (1, 2, 3));\n\n function getFun() {\n return \"genericPropertyString\";\n }\n function setFun(value) {\n arg.verifySetFun = value;\n }\n Object.defineProperty(arg, \"genericProperty\", {\n get: getFun,\n set: setFun,\n configurable: false\n });\n\n try {\n Object.defineProperties(arg, {\n \"genericProperty\": {\n get: function () {\n return \"overideGenericPropertyString\";\n }\n }\n });\n\n return false;\n } catch (ex) {\n return ex instanceof TypeError &&\n accessorPropertyAttributesAreCorrect(arg, \"genericProperty\", getFun, setFun, \"verifySetFun\", false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-311",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-311.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is generic own accessor property of 'O', test TypeError is thrown when updating the [[Set]] attribute value of 'P' which is not configurable (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n var arg = (function () {\n return arguments;\n }(1, 2, 3));\n\n function setFun(value) {\n arg.genericPropertyString = value;\n }\n Object.defineProperty(arg, \"genericProperty\", {\n set: setFun,\n configurable: false\n });\n\n try {\n Object.defineProperties(arg, {\n \"genericProperty\": {\n set: function (value) {\n arg.genericPropertyString1 = value;\n }\n }\n });\n\n return false;\n } catch (ex) {\n return ex instanceof TypeError &&\n accessorPropertyAttributesAreCorrect(arg, \"genericProperty\", undefined, setFun, \"genericPropertyString\", false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-312",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-312.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is generic own accessor property of 'O', test TypeError is thrown when updating the [[Enumerable]] attribute value of 'P' which is not configurable (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n var arg = (function () {\n return arguments;\n }(1, 2, 3));\n\n function setFun(value) {\n arg.genericPropertyString = value;\n }\n Object.defineProperty(arg, \"genericProperty\", {\n set: setFun,\n enumerable: true,\n configurable: false\n });\n\n try {\n Object.defineProperties(arg, {\n \"genericProperty\": {\n enumerable: false\n }\n });\n\n return false;\n } catch (ex) {\n return ex instanceof TypeError &&\n accessorPropertyAttributesAreCorrect(arg, \"genericProperty\", undefined, setFun, \"genericPropertyString\", true, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-313",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-313.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'P' is generic own accessor property of 'O', test TypeError is thrown when updating the [[Configurable]] attribute value of 'P' which is not configurable (10.6 [[DefineOwnProperty]] step 4)",
+ "test": "assertTrue((function testcase() {\n var arg = (function () {\n return arguments;\n }(1, 2, 3));\n\n function setFun(value) {\n arg.genericPropertyString = value;\n }\n Object.defineProperty(arg, \"genericProperty\", {\n set: setFun,\n configurable: false\n });\n\n try {\n Object.defineProperties(arg, {\n \"genericProperty\": {\n configurable: true\n }\n });\n\n return false;\n } catch (ex) {\n return ex instanceof TypeError &&\n accessorPropertyAttributesAreCorrect(arg, \"genericProperty\", undefined, setFun, \"genericPropertyString\", false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-314",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-314.js",
+ "description": "Object.defineProperties - 'O' is an Arguments object, 'name' is own property of [[ParameterMap]] of 'O', test 'name' is deleted if 'name' is configurable and 'desc' is accessor descriptor (10.6 [[DefineOwnProperty]] step 5.a.i)",
+ "test": "assertTrue((function testcase() {\n var arg = (function () {\n return arguments;\n }(1, 2, 3));\n var accessed = false;\n\n Object.defineProperties(arg, {\n \"0\": {\n get: function () {\n accessed = true;\n return 12;\n }\n }\n });\n\n return arg[0] === 12 && accessed;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-32",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-32.js",
+ "description": "Object.defineProperties - 'desc' is generic descriptor without any attribute, test 'P' is defined in 'obj' with all default attribute values (8.12.9 step 4.a.i)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n\n Object.defineProperties(obj, { prop: {} });\n\n var desc = Object.getOwnPropertyDescriptor(obj, \"prop\");\n\n return desc.hasOwnProperty(\"value\") && typeof desc.value === \"undefined\" &&\n desc.hasOwnProperty(\"writable\") && desc.writable === false &&\n desc.hasOwnProperty(\"configurable\") && desc.configurable === false &&\n desc.hasOwnProperty(\"enumerable\") && desc.enumerable === false &&\n !desc.hasOwnProperty(\"get\") && !desc.hasOwnProperty(\"set\");\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.getOwnPropertyDescriptor))"
+ },
+ {
+ "id": "15.2.3.7-6-a-33",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-33.js",
+ "description": "Object.defineProperties - 'P' doesn't exist in 'O', test [[Get]] of 'P' is set as undefined value if absent in accessor descriptor 'desc' (8.12.9 step 4.b)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n var setFun = function (value) {\n obj.setVerifyHelpProp = value;\n };\n\n Object.defineProperties(obj, {\n prop: {\n set: setFun,\n enumerable: true,\n configurable: true\n }\n });\n return accessorPropertyAttributesAreCorrect(obj, \"prop\", undefined, setFun, \"setVerifyHelpProp\", true, true);\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.getOwnPropertyDescriptor))"
+ },
+ {
+ "id": "15.2.3.7-6-a-34",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-34.js",
+ "description": "Object.defineProperties - 'P' doesn't exist in 'O', test [[Set]] of 'P' is set as undefined value if absent in accessor descriptor 'desc' (8.12.9 step 4.b.i)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n var getFunc = function () {\n return 10; \n };\n\n Object.defineProperties(obj, {\n prop: {\n get: getFunc,\n enumerable: true,\n configurable: true\n }\n });\n\n var desc = Object.getOwnPropertyDescriptor(obj, \"prop\");\n return obj.hasOwnProperty(\"prop\") && typeof (desc.set) === \"undefined\";\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.getOwnPropertyDescriptor))"
+ },
+ {
+ "id": "15.2.3.7-6-a-35",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-35.js",
+ "description": "Object.defineProperties - 'P' doesn't exist in 'O', test [[Enumerable]] of 'P' is set as false value if absent in accessor descriptor 'desc' (8.12.9 step 4.b.i)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n var getFun = function () {\n return 10;\n };\n var setFun = function (value) {\n obj.setVerifyHelpProp = value;\n };\n\n Object.defineProperties(obj, {\n prop: {\n set: setFun,\n get: getFun,\n configurable: true\n }\n });\n return accessorPropertyAttributesAreCorrect(obj, \"prop\", getFun, setFun, \"setVerifyHelpProp\", false, true);\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-36",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-36.js",
+ "description": "Object.defineProperties - 'P' doesn't exist in 'O', test [[Configurable]] of 'P' is set as false value if absent in accessor descriptor 'desc' (8.12.9 step 4.b.i)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n var getFun = function () {\n return 10;\n };\n var setFun = function (value) {\n obj.setVerifyHelpProp = value;\n };\n\n Object.defineProperties(obj, {\n prop: {\n set: setFun,\n get: getFun,\n enumerable: true\n }\n });\n return accessorPropertyAttributesAreCorrect(obj, \"prop\", getFun, setFun, \"setVerifyHelpProp\", true, false);\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-37",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-37.js",
+ "description": "Object.defineProperties - 'desc' is accessor descriptor, test setting all attribute values of 'P' (8.12.9 step 4.b.i)",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n var getFun = function () {\n return 10;\n };\n var setFun = function (value) {\n obj.setVerifyHelpProp = value;\n };\n\n Object.defineProperties(obj, {\n prop: {\n get: getFun,\n set: setFun,\n enumerable: false,\n configurable: false\n }\n });\n return accessorPropertyAttributesAreCorrect(obj, \"prop\", getFun, setFun, \"setVerifyHelpProp\", false, false);\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-38-1",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-38-1.js",
+ "description": "Object.defineProperties - 'P' exists in 'O' is an accessor property, test 'P' makes no change if 'desc' is generic descriptor without any attribute (8.12.9 step 5)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var getFunc = function () {\n return 12;\n };\n Object.defineProperties(obj, {\n foo: {\n get: getFunc,\n enumerable: true,\n configurable: true\n }\n });\n\n Object.defineProperties(obj, { foo: {} });\n\n return accessorPropertyAttributesAreCorrect(obj, \"foo\", getFunc, undefined, undefined, true, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-38",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-38.js",
+ "description": "Object.defineProperties - 'P' exists in 'O', test 'P' makes no change if 'desc' is generic descriptor without any attribute (8.12.9 step 5)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n obj.foo = 100; // default value of attributes: writable: true, configurable: true, enumerable: true\n\n Object.defineProperties(obj, { foo: {} });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", 100, true, true, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-39",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-39.js",
+ "description": "Object.defineProperties - 'P' is data descriptor and every fields in 'desc' is the same with 'P' (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n obj.foo = 101; // default value of attributes: writable: true, configurable: true, enumerable: true\n\n Object.defineProperties(obj, {\n foo: {\n value: 101,\n enumerable: true,\n writable: true,\n configurable: true\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", 101, true, true, true);\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-4",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-4.js",
+ "description": "Object.defineProperties - 'P' is own data property that overrides an inherited accessor property (8.12.9 step 1 ) ",
+ "test": "assertTrue((function testcase() {\n var proto = {};\n Object.defineProperty(proto, \"prop\", {\n get: function () {\n return 11;\n },\n configurable: true\n });\n var Con = function () { };\n Con.prototype = proto;\n\n var obj = new Con();\n Object.defineProperty(obj, \"prop\", {\n value: 12,\n configurable: false\n });\n\n try {\n Object.defineProperties(obj, {\n prop: {\n value: 13,\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-40",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-40.js",
+ "description": "Object.defineProperties - 'P' is accessor descriptor and every fields in 'desc' is the same with 'P' (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n function get_func() {\n return 0;\n }\n function set_func(value) {\n obj.setVerifyHelpProp = value;\n }\n var desc = {\n get: get_func,\n set: set_func,\n enumerable: true,\n configurable: true\n };\n\n Object.defineProperty(obj, \"foo\", desc);\n\n Object.defineProperties(obj, {\n foo: {\n get: get_func,\n set: set_func,\n enumerable: true,\n configurable: true\n }\n });\n return accessorPropertyAttributesAreCorrect(obj, \"foo\", get_func, set_func, \"setVerifyHelpProp\", true, true);\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-41",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-41.js",
+ "description": "Object.defineProperties - type of desc.value is different from type of P.value (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n obj.foo = 101; // default value of attributes: writable: true, configurable: true, enumerable: true\n\n Object.defineProperties(obj, {\n foo: {\n value: \"102\"\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", \"102\", true, true, true);\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-42",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-42.js",
+ "description": "Object.defineProperties - both desc.value and P.value are undefined (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var desc = { value: undefined };\n Object.defineProperty(obj, \"foo\", desc);\n\n Object.defineProperties(obj, {\n foo: {\n value: undefined\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", undefined, false, false, false);\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-43",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-43.js",
+ "description": "Object.defineProperties - both desc.value and P.value are null (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var desc = { value: null };\n Object.defineProperty(obj, \"foo\", desc);\n\n Object.defineProperties(obj, {\n foo: {\n value: null\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", null, false, false, false);\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-44",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-44.js",
+ "description": "Object.defineProperties - both desc.value and P.value are NaN (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var desc = { value: NaN };\n Object.defineProperty(obj, \"foo\", desc);\n\n Object.defineProperties(obj, {\n foo: {\n value: NaN\n }\n });\n\n var verifyEnumerable = false;\n for (var p in obj) {\n if (p === \"foo\") {\n verifyEnumerable = true;\n }\n }\n\n var verifyValue = false;\n obj.prop = \"overrideData\";\n verifyValue = obj.foo !== obj.foo && isNaN(obj.foo);\n\n var verifyConfigurable = false;\n delete obj.foo;\n verifyConfigurable = obj.hasOwnProperty(\"foo\");\n\n return verifyConfigurable && !verifyEnumerable && verifyValue;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-45",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-45.js",
+ "description": "Object.defineProperties - desc.value is +0 and P.value is -0 (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var desc = { value: -0 };\n Object.defineProperty(obj, \"foo\", desc);\n\n try {\n Object.defineProperties(obj, {\n foo: {\n value: +0\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, \"foo\", -0, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-46",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-46.js",
+ "description": "Object.defineProperties - desc.value is -0 and P.value is +0 (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var desc = { value: +0 };\n Object.defineProperty(obj, \"foo\", desc);\n\n try {\n Object.defineProperties(obj, {\n foo: {\n value: -0\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, \"foo\", +0, false, false, false); \n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-47",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-47.js",
+ "description": "Object.defineProperties - desc.value and P.value are two numbers with the same value (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var desc = { value: 101 };\n Object.defineProperty(obj, \"foo\", desc);\n\n Object.defineProperties(obj, {\n foo: {\n value: 101\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", 101, false, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-48",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-48.js",
+ "description": "Object.defineProperties - desc.value and P.value are two numbers with different values (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n obj.foo = 101; // default value of attributes: writable: true, configurable: true, enumerable: true\n\n Object.defineProperties(obj, {\n foo: {\n value: 102\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", 102, true, true, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-49",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-49.js",
+ "description": "Object.defineProperties - both desc.value and P.value are two strings which have same length and same characters in corresponding positions (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var desc = { value: \"abcd\" };\n Object.defineProperty(obj, \"foo\", desc);\n\n Object.defineProperties(obj, {\n foo: {\n value: \"abcd\"\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", \"abcd\", false, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-5",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-5.js",
+ "description": "Object.defineProperties - 'P' is own accessor property (8.12.9 step 1 ) ",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n function getFunc() {\n return 11;\n }\n\n Object.defineProperty(obj, \"prop\", {\n get: getFunc,\n configurable: false\n });\n\n try {\n Object.defineProperties(obj, {\n prop: {\n value: 12,\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return e instanceof TypeError && accessorPropertyAttributesAreCorrect(obj, \"prop\", getFunc, undefined, undefined, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-50",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-50.js",
+ "description": "Object.defineProperties - desc.value and P.value are two strings with different values (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n obj.foo = \"abcd\"; // default value of attributes: writable: true, configurable: true, enumerable: true\n\n Object.defineProperties(obj, {\n foo: {\n value: \"fghj\"\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", \"fghj\", true, true, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-51",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-51.js",
+ "description": "Object.defineProperties - both desc.value and P.value are boolean values with the same value (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var desc = { value: true };\n Object.defineProperty(obj, \"foo\", desc);\n\n Object.defineProperties(obj, {\n foo: {\n value: true\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", true, false, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-52",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-52.js",
+ "description": "Object.defineProperties - desc.value and P.value are two boolean values with different values (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n obj.foo = true; // default value of attributes: writable: true, configurable: true, enumerable: true\n\n Object.defineProperties(obj, {\n foo: {\n value: false\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", false, true, true, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-53",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-53.js",
+ "description": "Object.defineProperties - both desc.value and P.value are Ojbects which refer to the same Object (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var obj1 = { length: 10 };\n var desc = { value: obj1 };\n Object.defineProperty(obj, \"foo\", desc);\n\n Object.defineProperties(obj, {\n foo: {\n value: obj1\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", obj1, false, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-54",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-54.js",
+ "description": "Object.defineProperties - desc.value and P.value are two Ojbects which refer to the different objects (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var obj1 = { length: 10 };\n obj.foo = obj1; // default value of attributes: writable: true, configurable: true, enumerable: true\n\n var obj2 = { length: 20 };\n\n Object.defineProperties(obj, {\n foo: {\n value: obj2\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", obj2, true, true, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-55",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-55.js",
+ "description": "Object.defineProperties - both desc.writable and P.writable are boolean values with the same value (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var desc = { writable: false };\n Object.defineProperty(obj, \"foo\", desc);\n\n Object.defineProperties(obj, {\n foo: {\n writable: false\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", undefined, false, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-56",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-56.js",
+ "description": "Object.defineProperties - desc.writable and P.writable are two boolean values with different values (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var desc = { writable: false, configurable: true };\n Object.defineProperty(obj, \"foo\", desc);\n\n Object.defineProperties(obj, {\n foo: {\n writable: true,\n configurable: true\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", undefined, true, false, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-57",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-57.js",
+ "description": "Object.defineProperties - both desc.[[Get]] and P.[[Get]] are two objects which refer to the same object (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n function get_Func() {\n return 10;\n }\n\n Object.defineProperty(obj, \"foo\", {\n get: get_Func\n });\n\n Object.defineProperties(obj, {\n foo: {\n get: get_Func\n }\n });\n\n var verifyEnumerable = false;\n for (var p in obj) {\n if (p === \"foo\") {\n verifyEnumerable = true;\n }\n }\n\n var verifyValue = false;\n verifyValue = (obj.foo === 10);\n\n var verifyConfigurable = false;\n delete obj.foo;\n verifyConfigurable = obj.hasOwnProperty(\"foo\");\n\n var desc = Object.getOwnPropertyDescriptor(obj, \"foo\");\n return verifyConfigurable && !verifyEnumerable && verifyValue && typeof (desc.set) === \"undefined\" && desc.get === get_Func;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnExists(Object.getOwnPropertyDescriptor))"
+ },
+ {
+ "id": "15.2.3.7-6-a-58",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-58.js",
+ "description": "Object.defineProperties - desc.[[Get]] and P.[[Get]] are two objects which refer to the different objects (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n function get_Func1() {\n return 10;\n }\n\n Object.defineProperty(obj, \"foo\", {\n get: get_Func1,\n configurable: true\n });\n\n function get_Func2() {\n return 20;\n }\n\n Object.defineProperties(obj, {\n foo: {\n get: get_Func2\n }\n });\n\n var verifyEnumerable = false;\n for (var p in obj) {\n if (p === \"foo\") {\n verifyEnumerable = true;\n }\n }\n\n var verifyValue = false;\n verifyValue = (obj.foo === 20);\n\n var desc = Object.getOwnPropertyDescriptor(obj, \"foo\");\n\n var verifyConfigurable = false;\n delete obj.foo;\n verifyConfigurable = obj.hasOwnProperty(\"foo\");\n\n return !verifyConfigurable && !verifyEnumerable && verifyValue && typeof (desc.set) === \"undefined\" && desc.get === get_Func2;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnExists(Object.getOwnPropertyDescriptor))"
+ },
+ {
+ "id": "15.2.3.7-6-a-59",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-59.js",
+ "description": "Object.defineProperties - both desc.[[Set]] and P.[[Set]] are two objects which refer to the same object (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n function set_func(value) {\n obj.setVerifyHelpProp = value;\n }\n\n Object.defineProperty(obj, \"foo\", {\n set: set_func\n });\n\n Object.defineProperties(obj, {\n foo: {\n set: set_func\n }\n });\n return accessorPropertyAttributesAreCorrect(obj, \"foo\", undefined, set_func, \"setVerifyHelpProp\", false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-6",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-6.js",
+ "description": "Object.defineProperties - 'P' is inherited accessor property (8.12.9 step 1 ) ",
+ "test": "assertTrue((function testcase() {\n var proto = {};\n Object.defineProperty(proto, \"prop\", {\n get: function () {\n return 11;\n },\n configurable: false\n });\n var Con = function () { };\n Con.prototype = proto;\n\n var obj = new Con();\n\n Object.defineProperties(obj, {\n prop: {\n get: function () {\n return 12;\n },\n configurable: true\n }\n });\n return obj.hasOwnProperty(\"prop\") && obj.prop === 12;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-60",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-60.js",
+ "description": "Object.defineProperties - desc.[[Set]] and P.[[Set]] are two objects which refer to the different objects (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n function set_func1() {}\n\n Object.defineProperty(obj, \"foo\", {\n set: set_func1,\n configurable: true\n });\n\n function set_func2(value) {\n obj.setVerifyHelpProp = value;\n }\n\n Object.defineProperties(obj, {\n foo: {\n set: set_func2\n }\n });\n return accessorPropertyAttributesAreCorrect(obj, \"foo\", undefined, set_func2, \"setVerifyHelpProp\", false, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-61",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-61.js",
+ "description": "Object.defineProperties - both desc.enumerable and P.enumerable are boolean values with the same value (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", { \n value: 10, \n enumerable: false \n });\n\n Object.defineProperties(obj, {\n foo: {\n enumerable: false\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", 10, false, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-62",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-62.js",
+ "description": "Object.defineProperties - desc.enumerable and P.enumerable are two boolean values with different values (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", { \n value: 10, \n enumerable: false, \n configurable: true \n });\n\n Object.defineProperties(obj, {\n foo: {\n enumerable: true\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", 10, false, true, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-63",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-63.js",
+ "description": "Object.defineProperties - both desc.configurable and P.configurable are boolean values with the same value (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", { \n value: 10, \n configurable: false \n });\n\n Object.defineProperties(obj, {\n foo: {\n configurable: false\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", 10, false, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-64",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-64.js",
+ "description": "Object.defineProperties - desc.configurable and P.configurable are two boolean values with different values (8.12.9 step 6)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", {\n value: 10,\n configurable: true \n });\n\n Object.defineProperties(obj, {\n foo: {\n configurable: false\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", 10, false, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-65",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-65.js",
+ "description": "Object.defineProperties throws TypeError when P.configurable is false and desc.configurable is true (8.12.9 step 7.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", {\n value: 10,\n configurable: false \n });\n\n try {\n Object.defineProperties(obj, {\n foo: {\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, \"foo\", 10, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-66-1",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-66-1.js",
+ "description": "Object.defineProperties throws TypeError when P.configurable is false, P.enumerable and desc.enumerable has different values (8.12.9 step 7.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", {\n value: 10, \n enumerable: false, \n configurable: false \n });\n\n try {\n Object.defineProperties(obj, {\n foo: {\n enumerable: true\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, \"foo\", 10, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-66",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-66.js",
+ "description": "Object.defineProperties throws TypeError when P.configurable is false, P.enumerable and desc.enumerable has different values (8.12.9 step 7.b)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", { \n value: 10, \n enumerable: true, \n configurable: false \n });\n\n try {\n Object.defineProperties(obj, {\n foo: {\n enumerable: false\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, \"foo\", 10, false, true, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-67",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-67.js",
+ "description": "Object.defineProperties throws TypeError when P is accessor property and P.configurable is false, desc is data property (8.12.9 step 9.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n function get_Func() {\n return 10;\n }\n\n Object.defineProperty(obj, \"foo\", {\n get: get_Func,\n configurable: false\n });\n\n try {\n Object.defineProperties(obj, {\n foo: {\n value: 11\n }\n });\n return false;\n } catch (e) {\n var verifyEnumerable = false;\n for (var p in obj) {\n if (p === \"foo\") {\n verifyEnumerable = true;\n }\n }\n\n var verifyValue = false;\n verifyValue = (obj.foo === 10);\n\n var desc = Object.getOwnPropertyDescriptor(obj, \"foo\");\n\n var verifyConfigurable = false;\n delete obj.foo;\n verifyConfigurable = obj.hasOwnProperty(\"foo\");\n\n return e instanceof TypeError && verifyConfigurable && !verifyEnumerable &&\n verifyValue && typeof (desc.set) === \"undefined\" && desc.get === get_Func;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnExists(Object.getOwnPropertyDescriptor))"
+ },
+ {
+ "id": "15.2.3.7-6-a-68",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-68.js",
+ "description": "Object.defineProperties throws TypeError when P is data property and P.configurable is false, desc is accessor property (8.12.9 step 9.a)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", {\n value: 10,\n configurable: false\n });\n\n function get_func() {\n return 11;\n }\n\n try {\n Object.defineProperties(obj, {\n foo: {\n get: get_func\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, \"foo\", 10, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-69",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-69.js",
+ "description": "Object.defineProperties - 'P' is data property and P.configurable is true, desc is accessor property (8.12.9 step 9.b.i)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", {\n value: 10,\n configurable: true\n });\n\n function get_Func() {\n return 20;\n }\n\n Object.defineProperties(obj, {\n foo: {\n get: get_Func\n }\n });\n\n var verifyEnumerable = false;\n for (var p in obj) {\n if (p === \"foo\") {\n verifyEnumerable = true;\n }\n }\n\n var verifyValue = false;\n verifyValue = (obj.foo === 20);\n\n var desc = Object.getOwnPropertyDescriptor(obj, \"foo\");\n\n var verifyConfigurable = true;\n delete obj.foo;\n verifyConfigurable = obj.hasOwnProperty(\"foo\");\n\n return !verifyConfigurable && !verifyEnumerable && verifyValue &&\n typeof desc.set === \"undefined\" && desc.get === get_Func;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnExists(Object.getOwnPropertyDescriptor))"
+ },
+ {
+ "id": "15.2.3.7-6-a-7",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-7.js",
+ "description": "Object.defineProperties - 'P' is own accessor property that overrides an inherited data property (8.12.9 step 1 ) ",
+ "test": "assertTrue((function testcase() {\n var proto = {};\n Object.defineProperty(proto, \"prop\", {\n value: 11,\n configurable: true\n });\n var Con = function () { };\n Con.prototype = proto;\n\n var obj = new Con();\n Object.defineProperty(obj, \"prop\", {\n get: function () {\n return 12;\n },\n configurable: false\n });\n\n try {\n Object.defineProperties(obj, {\n prop: {\n value: 13,\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && obj.prop === 12;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-70",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-70.js",
+ "description": "Object.defineProperties - 'P' is accessor property and P.configurable is true, 'desc' in 'Properties' is data property (8.12.9 step 9.c.i)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n function get_func() {\n return 10;\n }\n\n Object.defineProperty(obj, \"foo\", {\n get: get_func,\n configurable: true\n });\n\n Object.defineProperties(obj, {\n foo: {\n value: 12\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", 12, false, false, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-71",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-71.js",
+ "description": "Object.defineProperties throws TypeError when 'P' is data property and P.configurable is false, P.writable is false, desc is data property and desc.writable is true (8.12.9 step 10.a.i)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", { \n value: 10, \n writable: false, \n configurable: false \n });\n\n try {\n Object.defineProperties(obj, {\n foo: {\n writable: true\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, \"foo\", 10, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-72",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-72.js",
+ "description": "Object.defineProperties throws TypeError when P is data property and P.configurable is false, P.writable is false, desc is data property and desc.value is not equal to P.value (8.12.9 step 10.a.ii.1)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", { \n value: 10, \n writable: false, \n configurable: false \n });\n\n try {\n Object.defineProperties(obj, {\n foo: {\n value: 20\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, \"foo\", 10, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-73",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-73.js",
+ "description": "Object.defineProperties will not throw TypeError if P.configurable is false, P.writalbe is false, P.value is undefined and properties.value is undefined (8.12.9 step 10.a.ii.1)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", { \n value: undefined, \n writable: false, \n configurable: false \n });\n\n Object.defineProperties(obj, {\n foo: {\n value: undefined\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", undefined, false, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-74",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-74.js",
+ "description": "Object.defineProperties will not throw TypeError if P.configurable is false, P.writalbe is false, P.value is null and properties.value is null (8.12.9 step 10.a.ii.1)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", { \n value: null, \n writable: false, \n configurable: false \n });\n\n Object.defineProperties(obj, {\n foo: {\n value: null\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", null, false, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-75",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-75.js",
+ "description": "Object.defineProperties will not throw TypeError if P.configurable is false, P.writalbe is false, P.value is NaN and properties.value is NaN (8.12.9 step 10.a.ii.1)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n var accessed = false;\n\n Object.defineProperty(obj, \"foo\", {\n value: NaN,\n writable: false,\n configurable: false\n });\n\n Object.defineProperties(obj, {\n foo: {\n value: NaN\n }\n });\n\n var verifyEnumerable = false;\n for (var p in obj) {\n if (p === \"foo\") {\n verifyEnumerable = true;\n }\n }\n\n obj.prop = \"overrideData\";\n var verifyValue = false;\n verifyValue = obj.foo !== obj.foo && isNaN(obj.foo);\n\n var desc = Object.getOwnPropertyDescriptor(obj, \"foo\");\n\n var verifyConfigurable = false;\n delete obj.foo;\n verifyConfigurable = obj.hasOwnProperty(\"foo\");\n\n return verifyValue && !verifyEnumerable && verifyConfigurable;\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnExists(Object.getOwnPropertyDescriptor))"
+ },
+ {
+ "id": "15.2.3.7-6-a-76",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-76.js",
+ "description": "Object.defineProperties throws TypeError when P.configurable is false, P.writalbe is false, properties.value is +0 and P.value is -0 (8.12.9 step 10.a.ii.1)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", { \n value: -0, \n writable: false, \n configurable: false \n });\n\n try {\n Object.defineProperties(obj, {\n foo: {\n value: +0\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, \"foo\", -0, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-77",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-77.js",
+ "description": "Object.defineProperties throws TypeError when P.configurable is false, P.writalbe is false, properties.value is +0 and P.value is -0 (8.12.9 step 10.a.ii.1)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", { \n value: +0, \n writable: false, \n configurable: false \n });\n\n try {\n Object.defineProperties(obj, {\n foo: {\n value: -0\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, \"foo\", +0, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-78",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-78.js",
+ "description": "Object.defineProperties will not throw TypeError when P.configurable is false, P.writalbe is false, properties.value and P.value are two numbers with the same value (8.12.9 step 10.a.ii.1)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", {\n value: 100,\n writable: false,\n configurable: false \n });\n\n Object.defineProperties(obj, {\n foo: {\n value: 100\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", 100, false, false, false);\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-79",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-79.js",
+ "description": "Object.defineProperties throws TypeError when P.configurable is false, P.writalbe is false, properties.value and P.value are two numbers with different values (8.12.9 step 10.a.ii.1)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", { \n value: 10, \n writable: false, \n configurable: false \n });\n\n try {\n Object.defineProperties(obj, {\n foo: {\n value: 20\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, \"foo\", 10, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-8",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-8.js",
+ "description": "Object.defineProperties - 'P' is own accessor property that overrides an inherited accessor property (8.12.9 step 1 ) ",
+ "test": "assertTrue((function testcase() {\n var proto = {};\n Object.defineProperty(proto, \"prop\", {\n get: function() {\n return 11;\n },\n configurable: true\n });\n var Con = function () { };\n Con.prototype = proto;\n\n var obj = new Con();\n Object.defineProperty(obj, \"prop\", {\n get: function () {\n return 12;\n },\n configurable: false\n });\n\n try {\n Object.defineProperties(obj, {\n prop: {\n value: 13,\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && obj.prop === 12;\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-80",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-80.js",
+ "description": "Object.defineProperties will not throw TypeError when P.configurable is false, P.writalbe is false, properties.value and P.value are two strings with the same value (8.12.9 step 10.a.ii.1)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", {\n value: \"abcd\",\n writable: false,\n configurable: false \n });\n\n Object.defineProperties(obj, {\n foo: {\n value: \"abcd\"\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", \"abcd\", false, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-81",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-81.js",
+ "description": "Object.defineProperties throws TypeError when P.configurable is false, P.writalbe is false, properties.value and P.value are two strings with different values (8.12.9 step 10.a.ii.1)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", { \n value: \"abcd\", \n writable: false, \n configurable: false \n });\n\n try {\n Object.defineProperties(obj, {\n foo: {\n value: \"defg\"\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, \"foo\", \"abcd\", false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-82",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-82.js",
+ "description": "Object.defineProperties will not throw TypeError when P.configurable is false, P.writalbe is false, properties.value and P.value are two booleans with the same value (8.12.9 step 10.a.ii.1)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", {\n value: false,\n writable: false,\n configurable: false \n });\n\n Object.defineProperties(obj, {\n foo: {\n value: false\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", false, false, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-83",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-83.js",
+ "description": "Object.defineProperties throws TypeError when P.configurable is false, P.writalbe is false, properties.value and P.value are two booleans with different values (8.12.9 step 10.a.ii.1)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", {\n value: false,\n writable: false,\n configurable: false \n });\n\n try {\n Object.defineProperties(obj, {\n foo: {\n value: true\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, \"foo\", false, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-84-1",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-84-1.js",
+ "description": "Object.defineProperties will not throw TypeError when P.configurable is false, P.writalbe is false, properties.value and P.value are two Objects refer to the same object which has been updated before use it to update the object (8.12.9 step 10.a.ii.1)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var obj1 = { length: 10 };\n\n Object.defineProperty(obj, \"foo\", {\n value: obj1,\n writable: false,\n configurable: false\n });\n\n var obj2 = obj1;\n obj2.y = \"hello\";\n\n Object.defineProperties(obj, {\n foo: {\n value: obj2\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", obj1, false, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-84",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-84.js",
+ "description": "Object.defineProperties will not throw TypeError when P.configurable is false, P.writalbe is false, properties.value and P.value are two Objects refer to the same object (8.12.9 step 10.a.ii.1)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var obj1 = { length: 10 };\n\n Object.defineProperty(obj, \"foo\", { \n value: obj1, \n writable: false, \n configurable: false \n });\n\n Object.defineProperties(obj, {\n foo: {\n value: obj1\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", obj1, false, false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-85",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-85.js",
+ "description": "Object.defineProperties throws TypeError when P.configurable is false, P.writalbe is false, properties.value and P.value are two objects with different values (8.12.9 step 10.a.ii.1)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var obj1 = { length: 10 };\n\n Object.defineProperty(obj, \"foo\", { \n value: obj1, \n writable: false, \n configurable: false \n });\n\n var obj2 = { length: 20 };\n\n try {\n Object.defineProperties(obj, {\n foo: {\n value: obj2\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, \"foo\", obj1, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-86-1",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-86-1.js",
+ "description": "Object.defineProperties will not throw TypeError when P.configurable is false, both properties.[[Set]] and P.[[Set]] are two objects which refer to the same object and the object has been updated after defined(8.12.9 step 11.a.i)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n var set_func = function (value) {\n obj.setVerifyHelpProp = value;\n }\n\n Object.defineProperty(obj, \"foo\", {\n set: set_func,\n configurable: false\n });\n\n set_func = function (value) {\n obj.setVerifyHelpProp1 = value;\n }\n\n try {\n Object.defineProperties(obj, {\n foo: {\n set: set_func\n }\n });\n } catch (e) {\n return accessorPropertyAttributesAreCorrect(obj, \"foo\", undefined, set_func, \"setVerifyHelpProp\", false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-86",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-86.js",
+ "description": "Object.defineProperties will not throw TypeError when P.configurable is false, both properties.[[Set]] and P.[[Set]] are two objects which refer to the same object (8.12.9 step 11.a.i)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n function set_func(value) {\n obj.setVerifyHelpProp = value;\n }\n\n Object.defineProperty(obj, \"foo\", {\n set: set_func,\n configurable: false\n });\n\n Object.defineProperties(obj, {\n foo: {\n set: set_func\n }\n });\n return accessorPropertyAttributesAreCorrect(obj, \"foo\", undefined, set_func, \"setVerifyHelpProp\", false, false);\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-87",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-87.js",
+ "description": "Object.defineProperties throws TypeError when P.configurable is false, both properties.[[Set]] and P.[[Set]] are two objects which refer to different objects (8.12.9 step 11.a.i)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n function set_func1(value) {\n obj.setVerifyHelpProp = value;\n }\n\n Object.defineProperty(obj, \"foo\", {\n set: set_func1,\n configurable: false\n });\n\n function set_func2() {}\n\n try {\n Object.defineProperties(obj, {\n foo: {\n set: set_func2\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && accessorPropertyAttributesAreCorrect(obj, \"foo\", undefined, set_func1, \"setVerifyHelpProp\", false, false);\n }\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-88",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-88.js",
+ "description": "Object.defineProperties throws TypeError when P.configurable is false, P.[[Set]] is undefined, properties.[[Set]] refers to an objcet (8.12.9 step 11.a.i)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n function get_Func() {\n return 0;\n }\n\n Object.defineProperty(obj, \"foo\", {\n set: undefined,\n get: get_Func,\n enumerable: false,\n configurable: false\n });\n\n function set_Func() { }\n\n try {\n Object.defineProperties(obj, {\n foo: {\n set: set_Func\n }\n });\n return false;\n } catch (e) {\n var verifyEnumerable = false;\n for (var p in obj) {\n if (p === \"foo\") {\n verifyEnumerable = true;\n }\n }\n\n var desc = Object.getOwnPropertyDescriptor(obj, \"foo\");\n\n var verifyConfigurable = false;\n delete obj.foo;\n verifyConfigurable = obj.hasOwnProperty(\"foo\");\n\n return e instanceof TypeError && !verifyEnumerable && verifyConfigurable && typeof (desc.set) === \"undefined\";\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty) && fnExists(Object.getOwnPropertyDescriptor))"
+ },
+ {
+ "id": "15.2.3.7-6-a-89",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-89.js",
+ "description": "Object.defineProperties will not throw TypeError when P.configurable is false, P.[[Set]] and properties.[[Set]] are undefined (8.12.9 step 11.a.i)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n function get_Func() {\n return 0;\n }\n\n Object.defineProperty(obj, \"foo\", {\n get: get_Func,\n set: undefined,\n enumerable: false,\n configurable: false\n });\n\n Object.defineProperties(obj, {\n foo: {\n set: undefined\n }\n });\n\n var verifyEnumerable = false;\n for (var p in obj) {\n if (p === \"foo\") {\n verifyEnumerable = true;\n }\n }\n\n var desc = Object.getOwnPropertyDescriptor(obj, \"foo\");\n\n var verifyConfigurable = false;\n delete obj.foo;\n verifyConfigurable = obj.hasOwnProperty(\"foo\");\n\n return verifyConfigurable && !verifyEnumerable && typeof (desc.set) === \"undefined\";\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-9",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-9.js",
+ "description": "Object.defineProperties - 'P' is own accessor property without a get function (8.12.9 step 1 ) ",
+ "test": "assertTrue((function testcase() {\n var obj = {};\n Object.defineProperty(obj, \"prop\", {\n set: function () { },\n configurable: false\n });\n\n try {\n Object.defineProperties(obj, {\n prop: {\n get: function () { },\n configurable: true\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-90",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-90.js",
+ "description": "Object.defineProperties will not throw TypeError when P.configurable is false, both properties.[[Get]] and P.[[Get]] are two objects which refer to the same object (8.12.9 step 11.a.ii)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n function set_func(value) {\n obj.setVerifyHelpProp = value;\n }\n function get_func() {\n return 10;\n }\n\n Object.defineProperty(obj, \"foo\", {\n get: get_func,\n set: set_func,\n enumerable: false,\n configurable: false\n });\n\n Object.defineProperties(obj, {\n foo: {\n get: get_func\n }\n });\n return accessorPropertyAttributesAreCorrect(obj, \"foo\", get_func, set_func, \"setVerifyHelpProp\", false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-91",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-91.js",
+ "description": "Object.defineProperties throws TypeError when P.configurable is false, both properties.[[Get]] and P.[[Get]] are two objects which refer to different objects (8.12.9 step 11.a.ii)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n function set_func(value) {\n obj.setVerifyHelpProp = value;\n }\n function get_func1() {\n return 10;\n }\n\n Object.defineProperty(obj, \"foo\", {\n get: get_func1,\n set: set_func,\n enumerable: false,\n configurable: false\n });\n\n function get_func2() {\n return 20;\n }\n\n try {\n Object.defineProperties(obj, {\n foo: {\n get: get_func2\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && accessorPropertyAttributesAreCorrect(obj, \"foo\", get_func1, set_func, \"setVerifyHelpProp\", false, false);\n }\n\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-92",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-92.js",
+ "description": "Object.defineProperties throws TypeError when P.configurable is false, P.[[Get]] is undefined, properties.[[Get]] refers to an objcet (8.12.9 step 11.a.ii)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n function set_func(value) {\n obj.setVerifyHelpProp = value;\n }\n\n Object.defineProperty(obj, \"foo\", {\n get: undefined,\n set: set_func,\n enumerable: false,\n configurable: false\n });\n\n function get_func() {\n return 0;\n }\n\n try {\n Object.defineProperties(obj, {\n foo: {\n get: get_func\n }\n });\n return false;\n } catch (e) {\n return (e instanceof TypeError) && accessorPropertyAttributesAreCorrect(obj, \"foo\", undefined, set_func, \"setVerifyHelpProp\", false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-93-1",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-93-1.js",
+ "description": "Object.defineProperties will update [[Value]] attribute of named data property 'P' successfully when [[Configurable]] attribute is true and [[Writable]] attribute is false but not when both are false (8.12.9 - step Note & 10.a.ii.1)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"property\", {\n value: 1001,\n writable: false,\n configurable: true\n });\n \n Object.defineProperty(obj, \"property1\", {\n value: 1003,\n writable: false,\n configurable: false\n });\n\n try {\n Object.defineProperties(obj, {\n property: {\n value: 1002\n },\n property1: {\n value: 1004\n }\n });\n\n return false;\n } catch (e) {\n return e instanceof TypeError &&\n dataPropertyAttributesAreCorrect(obj, \"property\", 1002, false, false, true) &&\n dataPropertyAttributesAreCorrect(obj, \"property1\", 1003, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-93-2",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-93-2.js",
+ "description": "Object.defineProperties will update [[Value]] attribute of indexed data property 'P' successfully when [[Configurable]] attribute is true and [[Writable]] attribute is false but not when both are false (8.12.9 - step Note & 10.a.ii.1)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"0\", {\n value: 1001,\n writable: false,\n configurable: true\n });\n \n Object.defineProperty(obj, \"1\", {\n value: 1003,\n writable: false,\n configurable: false\n });\n\n try {\n Object.defineProperties(obj, {\n 0: {\n value: 1002\n },\n 1: {\n value: 1004\n }\n });\n\n return false;\n } catch (e) {\n return e instanceof TypeError &&\n dataPropertyAttributesAreCorrect(obj, \"0\", 1002, false, false, true) &&\n dataPropertyAttributesAreCorrect(obj, \"1\", 1003, false, false, false);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-93-3",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-93-3.js",
+ "description": "Object.defineProperties will fail to update [[Value]] attribute of named data property 'P' when [[Configurable]] attribute of first updating property is false (8.12.9 - step Note & 10.a.ii.1)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"property\", {\n value: 1001,\n writable: false,\n configurable: false\n });\n \n Object.defineProperty(obj, \"property1\", {\n value: 1003,\n writable: false,\n configurable: true\n });\n\n try {\n Object.defineProperties(obj, {\n property: {\n value: 1002\n },\n property1: {\n value: 1004\n }\n });\n\n return false;\n } catch (e) {\n return e instanceof TypeError &&\n dataPropertyAttributesAreCorrect(obj, \"property\", 1001, false, false, false) &&\n dataPropertyAttributesAreCorrect(obj, \"property1\", 1003, false, false, true);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-93-4",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-93-4.js",
+ "description": "Object.defineProperties will fail to update [[Value]] attribute of indexed data property 'P' when [[Configurable]] attribute of first updating property are false (8.12.9 - step Note & 10.a.ii.1)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"0\", {\n value: 1001,\n writable: false,\n configurable: false\n });\n \n Object.defineProperty(obj, \"1\", {\n value: 1003,\n writable: false,\n configurable: true\n });\n\n try {\n Object.defineProperties(obj, {\n 0: {\n value: 1002\n },\n 1: {\n value: 1004\n }\n });\n\n return false;\n } catch (e) {\n return e instanceof TypeError &&\n dataPropertyAttributesAreCorrect(obj, \"0\", 1001, false, false, false) &&\n dataPropertyAttributesAreCorrect(obj, \"1\", 1003, false, false, true);\n }\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-93",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-93.js",
+ "description": "Object.defineProperties will not throw TypeError when P.configurable is false, P.[[Get]] and properties.[[Get]] are undefined (8.12.9 step 11.a.ii)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n function set_func(value) {\n obj.setVerifyHelpProp = value;\n }\n\n Object.defineProperty(obj, \"foo\", {\n get: undefined,\n set: set_func,\n enumerable: false,\n configurable: false\n });\n\n Object.defineProperties(obj, {\n foo: {\n get: undefined\n }\n });\n return accessorPropertyAttributesAreCorrect(obj, \"foo\", undefined, set_func, \"setVerifyHelpProp\", false, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.getOwnPropertyDescriptor) && fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-94",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-94.js",
+ "description": "Object.defineProperties - 'P' is data property, properties.value and P.value are two different values (8.12.9 step 12)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n obj.foo = 100; // default value of attributes: writable: true, configurable: true, enumerable: true\n\n Object.defineProperties(obj, {\n foo: {\n value: 200\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", 200, true, true, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties))"
+ },
+ {
+ "id": "15.2.3.7-6-a-95",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-95.js",
+ "description": "Object.defineProperties - 'P' is data property, P.value is present and properties.value is undefined (8.12.9 step 12)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", {\n value: 200,\n enumerable: true,\n writable: true,\n configurable: true \n });\n\n Object.defineProperties(obj, {\n foo: {\n value: undefined\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", undefined, true, true, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-96",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-96.js",
+ "description": "Object.defineProperties - 'P' is data property, properties.value is present and P.value is undefined (8.12.9 step 12)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", {\n value: undefined,\n enumerable: true,\n writable: true,\n configurable: true \n });\n\n Object.defineProperties(obj, {\n foo: {\n value: 200\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", 200, true, true, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-97",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-97.js",
+ "description": "Object.defineProperties - 'P' is data property, P.writable and properties.writable are different values (8.12.9 step 12)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", { \n value: 100, \n enumerable: true, \n writable: false, \n configurable: true \n });\n\n Object.defineProperties(obj, {\n foo: {\n writable: true\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", 100, true, true, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-98",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-98.js",
+ "description": "Object.defineProperties - 'P' is data property, P.enumerable and properties.enumerable are different values (8.12.9 step 12)",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", { \n value: 200, \n enumerable: false, \n writable: true, \n configurable: true \n });\n\n Object.defineProperties(obj, {\n foo: {\n enumerable: true\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", 200, true, true, true);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ },
+ {
+ "id": "15.2.3.7-6-a-99",
+ "path": "TestCases/chapter15/15.2/15.2.3/15.2.3.7/15.2.3.7-6-a-99.js",
+ "description": "Object.defineProperties - 'P' is data property, P.configurable is true and properties.configurable is false",
+ "test": "assertTrue((function testcase() {\n\n var obj = {};\n\n Object.defineProperty(obj, \"foo\", { \n value: 200, \n enumerable: true, \n writable: true, \n configurable: true \n });\n\n Object.defineProperties(obj, {\n foo: {\n configurable: false\n }\n });\n return dataPropertyAttributesAreCorrect(obj, \"foo\", 200, true, true, false);\n }).call(this));\n",
+ "precondition": "(fnExists(Object.defineProperties) && fnExists(Object.defineProperty))"
+ }
+ ]
+ }
+}