diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-354-8.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-354-8.js
index b37dcae884f593d0a5baa720cd2480554f15890a..03a4f7472e319e9830001a7b4d45627085c1c328 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-354-8.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-354-8.js
@@ -26,7 +26,7 @@ try {
 
     assert.sameValue(obj.prop, 2010);
     verifyNotWritable(obj, "prop");
-
+    assert.sameValue(obj.prop, 2010);
 } finally {
     delete obj.prop;
 }
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-360-3.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-360-3.js
index 3077e9c0d44ae89a5a0f483cb2e62539c689a530..f4e07e9137a3f04a41934ae41e913d94582ccec2 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-360-3.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-360-3.js
@@ -12,34 +12,35 @@ description: >
     to an accessor property, 'O' is the global object (8.12.9 - step
     9.b.i)
 includes:
-    - runTestCase.js
+    - propertyHelper.js
     - fnGlobalObject.js
 ---*/
 
-function testcase() {
-        var obj = fnGlobalObject();
-        try {
-            Object.defineProperty(obj, "prop", {
-                value: 2010,
-                writable: false,
-                enumerable: true,
-                configurable: true
-            });
-            var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+var obj = fnGlobalObject();
+try {
+    Object.defineProperty(obj, "prop", {
+        value: 2010,
+        writable: false,
+        enumerable: true,
+        configurable: true
+    });
+    var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
 
-            function getFunc() {
-                return 20;
-            }
-            Object.defineProperty(obj, "prop", {
-                get: getFunc
-            });
-            var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
-
-            return desc1.hasOwnProperty("value") && desc2.hasOwnProperty("get") &&
-                desc2.enumerable === true && desc2.configurable === true &&
-                obj.prop === 20 && typeof desc2.set === "undefined" && desc2.get === getFunc;
-        } finally {
-            delete obj.prop;
-        }
+    function getFunc() {
+        return 20;
     }
-runTestCase(testcase);
+    Object.defineProperty(obj, "prop", {
+        get: getFunc
+    });
+    var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+    assert(desc1.hasOwnProperty("value"));
+    assert(desc2.hasOwnProperty("get"));
+    assert.sameValue(desc2.enumerable, true);
+    assert.sameValue(desc2.configurable, true);
+    assert.sameValue(obj.prop, 20);
+    assert.sameValue(typeof desc2.set, "undefined");
+    assert.sameValue(desc2.get, getFunc);
+} finally {
+    delete obj.prop;
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-531-7.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-531-7.js
index 6e35bab3f68f1a6e86582184ee86431d4a18ccd9..b83e4bba8cd240b4e77fb1e18c7915a70327b7c8 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-531-7.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-531-7.js
@@ -10,29 +10,27 @@ description: >
     ES5 Attributes - Updating a named accessor property 'P' without
     [[Set]] using simple assignment is failed, 'O' is an Arguments
     object (8.12.5 step 5.b)
-includes: [runTestCase.js]
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = (function () {
-            return arguments;
-        }());
+var obj = (function () {
+    return arguments;
+}());
 
-        var verifySetFunc = "data";
-        var getFunc = function () {
-            return verifySetFunc;
-        };
+var verifySetFunc = "data";
+var getFunc = function () {
+    return verifySetFunc;
+};
 
-        Object.defineProperty(obj, "prop", {
-            get: getFunc,
-            enumerable: true,
-            configurable: true
-        });
+Object.defineProperty(obj, "prop", {
+    get: getFunc,
+    enumerable: true,
+    configurable: true
+});
 
-        obj.prop = "overrideData";
-        var propertyDefineCorrect = obj.hasOwnProperty("prop");
-        var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+assert(obj.hasOwnProperty("prop"));
+verifyNotWritable(obj, "prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
 
-        return propertyDefineCorrect && typeof desc.set === "undefined" && obj.prop === "data";
-    }
-runTestCase(testcase);
+assert.sameValue(typeof desc.set, "undefined");
+assert.sameValue(obj.prop, "data");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-531-8.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-531-8.js
index c68dd029bb24625898d709c7705f1381711ffa72..b5abfb0784eb32063b6bb06a5c97247dfb80fba0 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-531-8.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-531-8.js
@@ -11,32 +11,30 @@ description: >
     [[Set]] using simple assignment is failed, 'O' is the global
     object (8.12.5 step 5.b)
 includes:
-    - runTestCase.js
+    - propertyHelper.js
     - fnGlobalObject.js
 ---*/
 
-function testcase() {
-        var obj = fnGlobalObject();
-        try {
-            obj.verifySetFunc = "data";
-            var getFunc = function () {
-                return obj.verifySetFunc;
-            };
+var obj = fnGlobalObject();
+try {
+    obj.verifySetFunc = "data";
+    var getFunc = function () {
+        return obj.verifySetFunc;
+    };
 
-            Object.defineProperty(obj, "prop", {
-                get: getFunc,
-                enumerable: true,
-                configurable: true
-            });
+    Object.defineProperty(obj, "prop", {
+        get: getFunc,
+        enumerable: true,
+        configurable: true
+    });
 
-            obj.prop = "overrideData";
-            var propertyDefineCorrect = obj.hasOwnProperty("prop");
-            var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+    assert(obj.hasOwnProperty("prop"));
+    var desc = Object.getOwnPropertyDescriptor(obj, "prop");
 
-            return propertyDefineCorrect && typeof desc.set === "undefined" && obj.prop === "data";
-        } finally {
-            delete obj.prop;
-            delete obj.verifySetFunc;
-        }
-    }
-runTestCase(testcase);
+    verifyNotWritable(obj, "prop");
+    assert.sameValue(typeof desc.set, "undefined");
+    assert.sameValue(obj.prop, "data");
+} finally {
+    delete obj.prop;
+    delete obj.verifySetFunc;
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-537.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-537.js
index b76bb85889da9cb483445171ec4f69984dc65dcd..8a888cdf1d3a1e88615d426d1911c75c96f854df 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-537.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-537.js
@@ -11,35 +11,35 @@ description: >
     accessor property ([[Get]] is a Function, [[Set]] is a Function,
     [[Enumerable]] is true, [[Configurable]] is true) to different
     value
-includes: [runTestCase.js]
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
-
-        var getFunc = function () {
-            return 1001;
-        };
-
-        var verifySetFunc = "data";
-        var setFunc = function (value) {
-            verifySetFunc = value;
-        };
-
-        Object.defineProperty(obj, "prop", {
-            get: getFunc,
-            set: setFunc,
-            enumerable: true,
-            configurable: true
-        });
-        var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
-
-        Object.defineProperty(obj, "prop", {
-            configurable: false
-        });
-        var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
-        delete obj.prop;
-
-        return desc1.configurable === true && desc2.configurable === false && obj.hasOwnProperty("prop");
-    }
-runTestCase(testcase);
+var obj = {};
+
+var getFunc = function () {
+    return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function (value) {
+    verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+    get: getFunc,
+    set: setFunc,
+    enumerable: true,
+    configurable: true
+});
+
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+    configurable: false
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+verifyNotConfigurable(obj, "prop");
+assert.sameValue(desc1.configurable, true);
+assert.sameValue(desc2.configurable, false);
+assert(obj.hasOwnProperty("prop"));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-54.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-54.js
index a7b66c03bb97031226f9b449720e9d6a0cb7c96b..e58352f118e77f78034e6410370791926a8dc6a9 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-54.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-54.js
@@ -10,38 +10,24 @@ description: >
     Object.defineProperty - 'name' property doesn't exist in 'O', test
     [[Set]] of 'name' property of 'Attributes' is set as undefined
     value if absent in accessor descriptor 'desc' (8.12.9 step 4.b.i)
-includes: [runTestCase.js]
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "property", {
-            get: function () {
-                return "property";
-            },
-            enumerable: false,
-            configurable: false
-        });
+Object.defineProperty(obj, "property", {
+    get: function () {
+        return "property";
+    },
+    enumerable: false,
+    configurable: false
+});
 
 
-        if (obj.property !== "property") {
-            return false;
-        }
-        var desc = Object.getOwnPropertyDescriptor(obj, "property");
-        if (typeof desc.set !== "undefined") {
-            return false;
-        }
-        for (var p in obj) {
-            if (p === "property") {
-                return false;
-            }
-        }
-        delete obj.property;
-        if (!obj.hasOwnProperty("property")) {
-            return false;
-        }
+assert.sameValue(obj.property, "property");
 
-        return true;
-    }
-runTestCase(testcase);
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+assert.sameValue(typeof desc.set, "undefined");
+
+verifyNotEnumerable(obj, "property");
+verifyNotConfigurable(obj, "property");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-542.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-542.js
index 7519e3a1f17dc36dcc0eace42e073fbcd240c36f..2411ec5f3e51832d9d7e2f112a9d1d0d6280f4c0 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-542.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-542.js
@@ -10,33 +10,26 @@ description: >
     ES5 Attributes - property ([[Get]] is a Function, [[Set]] is a
     Function, [[Enumerable]] is true, [[Configurable]] is false) is
     undeletable
-includes: [runTestCase.js]
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
+var obj = {};
 
-        var getFunc = function () {
-            return 1001;
-        };
+var getFunc = function () {
+    return 1001;
+};
 
-        var verifySetFunc = "data";
-        var setFunc = function (value) {
-            verifySetFunc = value;
-        };
+var verifySetFunc = "data";
+var setFunc = function (value) {
+    verifySetFunc = value;
+};
 
-        Object.defineProperty(obj, "prop", {
-            get: getFunc,
-            set: setFunc,
-            enumerable: true,
-            configurable: false
-        });
+Object.defineProperty(obj, "prop", {
+    get: getFunc,
+    set: setFunc,
+    enumerable: true,
+    configurable: false
+});
 
-        var propertyDefineCorrect = obj.hasOwnProperty("prop");
-        var desc = Object.getOwnPropertyDescriptor(obj, "prop");
-
-        delete obj.prop;
-
-        return propertyDefineCorrect && desc.configurable === false && obj.hasOwnProperty("prop");
-    }
-runTestCase(testcase);
+assert(obj.hasOwnProperty("prop"));
+verifyNotConfigurable(obj, "prop");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-546.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-546.js
index ca8d002ed734363aacb42c437f93a88426da70ae..b26eeed897fe6f47248f920fdc4ffb79a5fe6e8e 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-546.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-546.js
@@ -11,40 +11,40 @@ description: >
     accessor property ([[Get]] is a Function, [[Set]] is a Function,
     [[Enumerable]] is true, [[Configurable]] is false) to different
     value
-includes: [runTestCase.js]
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
-
-        var getFunc = function () {
-            return 1001;
-        };
-
-        var verifySetFunc = "data";
-        var setFunc = function (value) {
-            verifySetFunc = value;
-        };
-
-        Object.defineProperty(obj, "prop", {
-            get: getFunc,
-            set: setFunc,
-            enumerable: true,
-            configurable: false
-        });
-        var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
-
-        try {
-            Object.defineProperty(obj, "prop", {
-                configurable: true
-            });
-
-            return false;
-        } catch (e) {
-            var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
-            delete obj.prop;
-
-            return desc1.configurable === false && desc2.configurable === false && obj.hasOwnProperty("prop") && e instanceof TypeError;
-        }
-    }
-runTestCase(testcase);
+var obj = {};
+
+var getFunc = function () {
+    return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function (value) {
+    verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+    get: getFunc,
+    set: setFunc,
+    enumerable: true,
+    configurable: false
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+try {
+    Object.defineProperty(obj, "prop", {
+        configurable: true
+    });
+
+    $ERROR("Expected TypeError");
+} catch (e) {
+    assert(e instanceof TypeError);
+    assert.sameValue(desc1.configurable, false);
+
+    var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+    assert.sameValue(desc2.configurable, false);
+
+    verifyNotConfigurable(obj, "prop");
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-555.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-555.js
index f008a75aef8013d55c58ae2a3027b72e4200776a..e052a0811b39a502940631e5c061188891f7b158 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-555.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-555.js
@@ -11,36 +11,32 @@ description: >
     accessor property ([[Get]] is a Function, [[Set]] is a Function,
     [[Enumerable]] is false, [[Configurable]] is true) to different
     value
-includes: [runTestCase.js]
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
+var obj = {};
 
-        var getFunc = function () {
-            return 1001;
-        };
+var getFunc = function () {
+    return 1001;
+};
 
-        var verifySetFunc = "data";
-        var setFunc = function (value) {
-            verifySetFunc = value;
-        };
+var verifySetFunc = "data";
+var setFunc = function (value) {
+    verifySetFunc = value;
+};
 
-        Object.defineProperty(obj, "prop", {
-            get: getFunc,
-            set: setFunc,
-            enumerable: false,
-            configurable: true
-        });
+Object.defineProperty(obj, "prop", {
+    get: getFunc,
+    set: setFunc,
+    enumerable: false,
+    configurable: true
+});
 
-        var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.sameValue(desc1.configurable, true);
 
-        Object.defineProperty(obj, "prop", {
-            configurable: false
-        });
-        var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
-        delete obj.prop;
+Object.defineProperty(obj, "prop", {
+    configurable: false
+});
 
-        return desc1.configurable === true && desc2.configurable === false && obj.hasOwnProperty("prop");
-    }
-runTestCase(testcase);
+verifyNotConfigurable(obj, "prop");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-560.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-560.js
index 813252e94f5017f2dc17ca8a6228be953e6a5cf3..878e10213175c8bcfcf622e89fca1b204e87b95d 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-560.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-560.js
@@ -10,33 +10,26 @@ description: >
     ES5 Attributes - property ([[Get]] is a Function, [[Set]] is a
     Function, [[Enumerable]] is false, [[Configurable]] is false) is
     undeletable
-includes: [runTestCase.js]
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
+var obj = {};
 
-        var getFunc = function () {
-            return 1001;
-        };
+var getFunc = function () {
+    return 1001;
+};
 
-        var verifySetFunc = "data";
-        var setFunc = function (value) {
-            verifySetFunc = value;
-        };
+var verifySetFunc = "data";
+var setFunc = function (value) {
+    verifySetFunc = value;
+};
 
-        Object.defineProperty(obj, "prop", {
-            get: getFunc,
-            set: setFunc,
-            enumerable: false,
-            configurable: false
-        });
+Object.defineProperty(obj, "prop", {
+    get: getFunc,
+    set: setFunc,
+    enumerable: false,
+    configurable: false
+});
 
-        var propertyDefineCorrect = obj.hasOwnProperty("prop");
-        var desc = Object.getOwnPropertyDescriptor(obj, "prop");
-
-        delete obj.prop;
-
-        return propertyDefineCorrect && desc.configurable === false && obj.hasOwnProperty("prop");
-    }
-runTestCase(testcase);
+assert(obj.hasOwnProperty("prop"));
+verifyNotConfigurable(obj, "prop");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-564.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-564.js
index 367ef618f3f63eda3060633d2760f8c94f3e0275..8355e7d2954930b709d8e284c141c44dca5e9054 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-564.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-564.js
@@ -11,40 +11,36 @@ description: >
     accessor property ([[Get]] is a Function, [[Set]] is a Function,
     [[Enumerable]] is false, [[Configurable]] is false) to different
     value
-includes: [runTestCase.js]
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
-
-        var getFunc = function () {
-            return 1001;
-        };
-
-        var verifySetFunc = "data";
-        var setFunc = function (value) {
-            verifySetFunc = value;
-        };
-
-        Object.defineProperty(obj, "prop", {
-            get: getFunc,
-            set: setFunc,
-            enumerable: false,
-            configurable: false
-        });
-        var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
-
-        try {
-            Object.defineProperty(obj, "prop", {
-                configurable: true
-            });
-
-            return false;
-        } catch (e) {
-            var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
-            delete obj.prop;
-
-            return desc1.configurable === false && desc2.configurable === false && obj.hasOwnProperty("prop") && e instanceof TypeError;
-        }
-    }
-runTestCase(testcase);
+var obj = {};
+
+var getFunc = function () {
+    return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function (value) {
+    verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+    get: getFunc,
+    set: setFunc,
+    enumerable: false,
+    configurable: false
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+try {
+    Object.defineProperty(obj, "prop", {
+        configurable: true
+    });
+
+    $ERROR("Expected TypeError");
+} catch (e) {
+    assert(e instanceof TypeError);
+    assert.sameValue(desc1.configurable, false);
+    verifyNotConfigurable(obj, "prop");
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-581.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-581.js
index ee72423b65e32a446711f59cdb58f935dcb44009..17f85963203424f54d9855c6ac6e881cb425ec12 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-581.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-581.js
@@ -7,25 +7,25 @@
 /*---
 es5id: 15.2.3.6-4-581
 description: ES5 Attributes - Fail to add property into object (Number instance)
-includes: [runTestCase.js]
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var data = "data";
-        try {
-            Object.defineProperty(Number.prototype, "prop", {
-                get: function () {
-                    return data;
-                },
-                enumerable: false,
-                configurable: true
-            });
-            var numObj = new Number();
-            numObj.prop = "myOwnProperty";
+var data = "data";
+try {
+    Object.defineProperty(Number.prototype, "prop", {
+        get: function () {
+            return data;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    var numObj = new Number();
 
-            return !numObj.hasOwnProperty("prop") && numObj.prop === "data" && data === "data";
-        } finally {
-            delete Number.prototype.prop;
-        }
-    }
-runTestCase(testcase);
+    verifyNotWritable(numObj, "prop", "nocheck");
+
+    assert(!numObj.hasOwnProperty("prop"));
+    assert.sameValue(numObj.prop, "data");
+    assert.sameValue(data, "data");
+} finally {
+    delete Number.prototype.prop;
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-586.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-586.js
index 9c2f6bebe0aa876b4456a30b12ef395a1ebd8cd4..4cc1115a88b8712c3ee6644e4e2ea79d2552d8fd 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-586.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-586.js
@@ -9,24 +9,23 @@ es5id: 15.2.3.6-4-586
 description: >
     ES5 Attributes - Fail to update value of property into of
     [[Proptotype]] internal property  (JSON)
-includes: [runTestCase.js]
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var data = "data";
-        try {
-            Object.defineProperty(Object.prototype, "prop", {
-                get: function () {
-                    return data;
-                },
-                enumerable: false,
-                configurable: true
-            });
-            JSON.prop = "myOwnProperty";
+var data = "data";
+try {
+    Object.defineProperty(Object.prototype, "prop", {
+        get: function () {
+            return data;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    verifyNotWritable(JSON, "prop", "nocheck");
 
-            return !JSON.hasOwnProperty("prop") && JSON.prop === "data" && data === "data";
-        } finally {
-            delete Object.prototype.prop;
-        }
-    }
-runTestCase(testcase);
+    assert(!JSON.hasOwnProperty("prop"));
+    assert.sameValue(JSON.prop, "data");
+    assert.sameValue(data, "data");
+} finally {
+    delete Object.prototype.prop;
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-591.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-591.js
index c063f60b7fbdcded9c670380b1d389cc258cb5a4..699305d7d247e046f298f712f14c60fd68057ffe 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-591.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-591.js
@@ -9,51 +9,61 @@ es5id: 15.2.3.6-4-591
 description: >
     ES5 Attributes - Fail to update value of property of
     [[Proptotype]] internal property (Object.create)
-includes: [runTestCase.js]
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var appointment = {};
-
-        var data1 = 1001;
-        Object.defineProperty(appointment, "startTime", {
-            get: function () {
-                return data1;
-            },
-            enumerable: false,
-            configurable: false
-        });
-        var data2 = "NAME";
-        Object.defineProperty(appointment, "name", {
-            get: function () {
-                return data2;
-            },
-            enumerable: false,
-            configurable: true
-        });
-
-        var meeting = Object.create(appointment);
-        var data3 = "In-person meeting";
-        Object.defineProperty(meeting, "conferenceCall", {
-            get: function () {
-                return data3;
-            },
-            enumerable: false,
-            configurable: false
-        });
-
-        var teamMeeting = Object.create(meeting);
-        teamMeeting.name = "IE Team Meeting";
-        var dateObj = new Date("10/31/2010 08:00");
-        teamMeeting.startTime = dateObj;
-        teamMeeting.conferenceCall = "4255551212";
-
-        var hasOwnProperty = !teamMeeting.hasOwnProperty("name") &&
-            !teamMeeting.hasOwnProperty("startTime") &&
-            !teamMeeting.hasOwnProperty('conferenceCall');
-
-        return hasOwnProperty && teamMeeting.name === "NAME" &&
-            teamMeeting.startTime === 1001 &&
-            teamMeeting.conferenceCall === "In-person meeting";
-    }
-runTestCase(testcase);
+var appointment = {};
+
+var data1 = 1001;
+Object.defineProperty(appointment, "startTime", {
+    get: function () {
+        return data1;
+    },
+    enumerable: false,
+    configurable: false
+});
+var data2 = "NAME";
+Object.defineProperty(appointment, "name", {
+    get: function () {
+        return data2;
+    },
+    enumerable: false,
+    configurable: true
+});
+
+var meeting = Object.create(appointment);
+var data3 = "In-person meeting";
+Object.defineProperty(meeting, "conferenceCall", {
+    get: function () {
+        return data3;
+    },
+    enumerable: false,
+    configurable: false
+});
+
+var teamMeeting = Object.create(meeting);
+
+verifyNotWritable(teamMeeting, "name", "nocheck");
+verifyNotWritable(teamMeeting, "startTime", "nocheck");
+verifyNotWritable(teamMeeting, "conferenceCall", "nocheck");
+
+try {
+    teamMeeting.name = "IE Team Meeting";
+} catch (e) {}
+
+try {
+    var dateObj = new Date("10/31/2010 08:00");
+    teamMeeting.startTime = dateObj;
+} catch (e) {}
+
+try {
+    teamMeeting.conferenceCall = "4255551212";
+} catch (e) {}
+
+assert(!teamMeeting.hasOwnProperty("name"));
+assert(!teamMeeting.hasOwnProperty("startTime"));
+assert(!teamMeeting.hasOwnProperty('conferenceCall'));
+
+assert.sameValue(teamMeeting.name, "NAME");
+assert.sameValue(teamMeeting.startTime, 1001);
+assert.sameValue(teamMeeting.conferenceCall, "In-person meeting");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-596.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-596.js
index b0f14b119b898cfcd6d7a13a7b239d163ffd73ba..5755af04ef2535f61399ca89f800b81700585e7d 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-596.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-596.js
@@ -9,27 +9,25 @@ es5id: 15.2.3.6-4-596
 description: >
     ES5 Attributes - Fail to update value of property into of
     [[Proptotype]] internal property (Function.prototype.bind)
-includes: [runTestCase.js]
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var foo = function () { };
-        var data = "data";
-        try {
-            Object.defineProperty(Function.prototype, "prop", {
-                get: function () {
-                    return data;
-                },
-                enumerable: false,
-                configurable: true
-            });
+var foo = function () { };
+var data = "data";
+try {
+    Object.defineProperty(Function.prototype, "prop", {
+        get: function () {
+            return data;
+        },
+        enumerable: false,
+        configurable: true
+    });
 
-            var obj = foo.bind({});
-            obj.prop = "overrideData";
+    var obj = foo.bind({});
 
-            return !obj.hasOwnProperty("prop") && obj.prop === "data";
-        } finally {
-            delete Function.prototype.prop;
-        }
-    }
-runTestCase(testcase);
+    assert(!obj.hasOwnProperty("prop"));
+    verifyNotWritable(obj, "prop", "nocheck");
+    assert.sameValue(obj.prop, "data");;
+} finally {
+    delete Function.prototype.prop;
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-63.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-63.js
index 4d324d0f3f5d15d5745c084623409f913da19d61..770a9f5807068d49023784e94a48011e11c75051 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-63.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-63.js
@@ -9,37 +9,19 @@ es5id: 15.2.3.6-4-63
 description: >
     Object.defineProperty - both desc.value and name.value are NaN
     (8.12.9 step 6)
-includes: [runTestCase.js]
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
+var obj = {};
 
-        var obj = {};
+Object.defineProperty(obj, "foo", { value: NaN });
 
-        Object.defineProperty(obj, "foo", { value: NaN });
+Object.defineProperty(obj, "foo", { value: NaN });
 
-        Object.defineProperty(obj, "foo", { value: NaN });
+assert(isNaN(obj.foo));
 
-        if (!isNaN(obj.foo)) {
-            return false;
-        }
+verifyNotWritable(obj, "foo");
 
-        obj.foo = "verifyValue";
-        if (obj.foo === "verifyValue") {
-            return false;
-        }
+verifyNotEnumerable(obj, "foo");
 
-        for (var prop in obj) {
-            if (obj.hasOwnProperty(prop) && prop === "foo") {
-                return false;
-            }
-        }
-
-        delete obj.foo;
-        if (!obj.hasOwnProperty("foo")) {
-            return false;
-        }
-
-        return true;
-    }
-runTestCase(testcase);
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-85.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-85.js
index fae677cac972f3f31ab3bc0f6a58104ab9274db7..3a9484adeb74ef8184d38b2c799632b73e564cad 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-85.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-85.js
@@ -10,45 +10,27 @@ description: >
     Object.defineProperty will not throw TypeError if
     name.configurable = false, name.writable = false, name.value = NaN
     and desc.value = NaN (8.12.9 step 10.a.ii.1)
-includes: [runTestCase.js]
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        Object.defineProperty(obj, "foo", {
-            value: NaN,
-            writable: false,
-            configurable: false
-        });
-
-        Object.defineProperty(obj, "foo", {
-            value: NaN,
-            writable: false,
-            configurable: false
-        });
-
-        if (!isNaN(obj.foo)) {
-            return false;
-        }
-
-        obj.foo = "verifyValue";
-        if (obj.foo === "verifyValue") {
-            return false;
-        }
-
-        for (var prop in obj) {
-            if (obj.hasOwnProperty(prop) && prop === "foo") {
-                return false;
-            }
-        }
-
-        delete obj.foo;
-        if (!obj.hasOwnProperty("foo")) {
-            return false;
-        }
-
-        return true;
-    }
-runTestCase(testcase);
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+    value: NaN,
+    writable: false,
+    configurable: false
+});
+
+Object.defineProperty(obj, "foo", {
+    value: NaN,
+    writable: false,
+    configurable: false
+});
+
+assert(isNaN(obj.foo)); 
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");