From 49abae4f5e6b38931d86dc9b9d34ae30d9ced2ca Mon Sep 17 00:00:00 2001
From: smikes <smikes@cubane.com>
Date: Wed, 12 Nov 2014 06:41:09 -0700
Subject: [PATCH] rework: remove *PropertyAttributes fns

- this change hits all files that use
dataPropertyAttributesAreCorrect or
acccessorPropertyAttributesAreCorrect

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

Selected commit logs follow:

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

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

additional helper functions

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

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

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

remove now-obsolete harness files

make strict/nonstrict variants

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

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

fix indentation

cleanup minor issues

reviewing 15.2.3.7-9 tests, found some minor issues

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

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

fix writable check on array.length

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

use assert._isSamevalue
---
 .../accessorPropertyAttributesAreCorrect.js   |  74 ------------
 harness/dataPropertyAttributesAreCorrect.js   |  74 ------------
 harness/propertyHelper.js                     |  91 ++++++++++++++
 .../built-ins/Object/create/15.2.3.5-4-315.js |  69 ++++++-----
 .../defineProperties/15.2.3.7-6-a-100.js      |  39 +++---
 .../defineProperties/15.2.3.7-6-a-101.js      |  65 +++++-----
 .../defineProperties/15.2.3.7-6-a-102.js      |  55 +++++----
 .../defineProperties/15.2.3.7-6-a-103.js      |  49 ++++----
 .../defineProperties/15.2.3.7-6-a-104.js      |  55 ++++-----
 .../defineProperties/15.2.3.7-6-a-106.js      |  49 ++++----
 .../defineProperties/15.2.3.7-6-a-107.js      |  57 ++++-----
 .../defineProperties/15.2.3.7-6-a-108.js      |  57 ++++-----
 .../defineProperties/15.2.3.7-6-a-109.js      |  69 +++++------
 .../defineProperties/15.2.3.7-6-a-110.js      |  73 ++++++------
 .../defineProperties/15.2.3.7-6-a-114-b.js    |  30 +++++
 .../defineProperties/15.2.3.7-6-a-114.js      |  33 ++----
 .../defineProperties/15.2.3.7-6-a-12.js       |  50 ++++----
 .../defineProperties/15.2.3.7-6-a-120.js      |  27 ++---
 .../defineProperties/15.2.3.7-6-a-13.js       |  50 ++++----
 .../defineProperties/15.2.3.7-6-a-14.js       |  50 ++++----
 .../defineProperties/15.2.3.7-6-a-15.js       |  52 ++++----
 .../defineProperties/15.2.3.7-6-a-16.js       |  52 ++++----
 .../defineProperties/15.2.3.7-6-a-18.js       |  52 ++++----
 .../defineProperties/15.2.3.7-6-a-19.js       |  52 ++++----
 .../defineProperties/15.2.3.7-6-a-195.js      |  27 +++--
 .../Object/defineProperties/15.2.3.7-6-a-2.js |  43 +++----
 .../defineProperties/15.2.3.7-6-a-200.js      |  34 +++---
 .../defineProperties/15.2.3.7-6-a-204.js      |  55 ++++-----
 .../defineProperties/15.2.3.7-6-a-205.js      |  69 +++++------
 .../defineProperties/15.2.3.7-6-a-206.js      |  34 +++---
 .../defineProperties/15.2.3.7-6-a-207.js      |  58 +++++----
 .../defineProperties/15.2.3.7-6-a-208.js      |  35 +++---
 .../defineProperties/15.2.3.7-6-a-209.js      |  61 +++++-----
 .../defineProperties/15.2.3.7-6-a-21.js       |  52 ++++----
 .../defineProperties/15.2.3.7-6-a-210.js      |  31 ++---
 .../defineProperties/15.2.3.7-6-a-211.js      |  31 ++---
 .../defineProperties/15.2.3.7-6-a-212.js      |  33 +++---
 .../defineProperties/15.2.3.7-6-a-213.js      |  46 ++++----
 .../defineProperties/15.2.3.7-6-a-214.js      |  46 ++++----
 .../defineProperties/15.2.3.7-6-a-215.js      |  35 +++---
 .../defineProperties/15.2.3.7-6-a-216.js      |  40 +++----
 .../defineProperties/15.2.3.7-6-a-217.js      |  40 +++----
 .../defineProperties/15.2.3.7-6-a-218.js      |  45 ++++---
 .../defineProperties/15.2.3.7-6-a-219.js      |  40 +++----
 .../defineProperties/15.2.3.7-6-a-220.js      |  42 ++++---
 .../defineProperties/15.2.3.7-6-a-221.js      |  35 +++---
 .../defineProperties/15.2.3.7-6-a-222.js      |  39 +++---
 .../defineProperties/15.2.3.7-6-a-223.js      |  40 +++----
 .../defineProperties/15.2.3.7-6-a-224.js      |  42 ++++---
 .../defineProperties/15.2.3.7-6-a-225.js      |  40 +++----
 .../defineProperties/15.2.3.7-6-a-226.js      |  40 +++----
 .../defineProperties/15.2.3.7-6-a-227.js      |  51 ++++----
 .../defineProperties/15.2.3.7-6-a-228.js      |  48 ++++----
 .../defineProperties/15.2.3.7-6-a-229.js      |  48 ++++----
 .../defineProperties/15.2.3.7-6-a-230.js      |  44 ++++---
 .../defineProperties/15.2.3.7-6-a-231.js      |  33 +++---
 .../defineProperties/15.2.3.7-6-a-232.js      |  39 +++---
 .../defineProperties/15.2.3.7-6-a-233.js      |  44 ++++---
 .../defineProperties/15.2.3.7-6-a-234.js      |  46 ++++----
 .../defineProperties/15.2.3.7-6-a-235.js      |  46 ++++----
 .../defineProperties/15.2.3.7-6-a-236.js      |  44 ++++---
 .../defineProperties/15.2.3.7-6-a-237.js      |  47 ++++----
 .../defineProperties/15.2.3.7-6-a-238.js      |  46 ++++----
 .../defineProperties/15.2.3.7-6-a-239.js      |  44 ++++---
 .../defineProperties/15.2.3.7-6-a-24.js       |  47 ++++----
 .../defineProperties/15.2.3.7-6-a-240.js      |  52 ++++----
 .../defineProperties/15.2.3.7-6-a-241.js      |  50 ++++----
 .../defineProperties/15.2.3.7-6-a-242.js      |  50 ++++----
 .../defineProperties/15.2.3.7-6-a-243.js      |  29 ++---
 .../defineProperties/15.2.3.7-6-a-244.js      |  54 +++++----
 .../defineProperties/15.2.3.7-6-a-245.js      |  48 ++++----
 .../defineProperties/15.2.3.7-6-a-246.js      |  34 +++---
 .../defineProperties/15.2.3.7-6-a-247.js      |  30 +++--
 .../defineProperties/15.2.3.7-6-a-248.js      |  29 ++---
 .../defineProperties/15.2.3.7-6-a-249.js      |  30 +++--
 .../defineProperties/15.2.3.7-6-a-250.js      |  30 +++--
 .../defineProperties/15.2.3.7-6-a-251.js      |  29 ++---
 .../defineProperties/15.2.3.7-6-a-252.js      |  30 +++--
 .../defineProperties/15.2.3.7-6-a-253.js      |  38 +++---
 .../defineProperties/15.2.3.7-6-a-254.js      |  41 ++++---
 .../defineProperties/15.2.3.7-6-a-255.js      |  33 +++---
 .../defineProperties/15.2.3.7-6-a-256.js      |  37 +++---
 .../defineProperties/15.2.3.7-6-a-257.js      |  50 ++++----
 .../defineProperties/15.2.3.7-6-a-258.js      |  29 ++---
 .../defineProperties/15.2.3.7-6-a-259.js      |  41 +++----
 .../defineProperties/15.2.3.7-6-a-260.js      |  43 +++----
 .../defineProperties/15.2.3.7-6-a-261.js      |  48 ++++----
 .../defineProperties/15.2.3.7-6-a-262.js      |  67 +++++------
 .../defineProperties/15.2.3.7-6-a-266.js      |  36 +++---
 .../defineProperties/15.2.3.7-6-a-267.js      |  55 +++++----
 .../defineProperties/15.2.3.7-6-a-268.js      |  55 ++++-----
 .../defineProperties/15.2.3.7-6-a-269.js      |  36 +++---
 .../defineProperties/15.2.3.7-6-a-270.js      |  42 ++++---
 .../defineProperties/15.2.3.7-6-a-271.js      |  42 ++++---
 .../defineProperties/15.2.3.7-6-a-272.js      |  44 ++++---
 .../defineProperties/15.2.3.7-6-a-273.js      |  42 ++++---
 .../defineProperties/15.2.3.7-6-a-274.js      |  63 +++++-----
 .../defineProperties/15.2.3.7-6-a-275.js      |  47 ++++----
 .../defineProperties/15.2.3.7-6-a-276.js      |  50 ++++----
 .../defineProperties/15.2.3.7-6-a-277.js      |  50 ++++----
 .../defineProperties/15.2.3.7-6-a-278.js      |  41 +++----
 .../defineProperties/15.2.3.7-6-a-279.js      |  53 +++++----
 .../defineProperties/15.2.3.7-6-a-28.js       |  29 +++--
 .../defineProperties/15.2.3.7-6-a-281.js      |  39 +++---
 .../defineProperties/15.2.3.7-6-a-282.js      |  54 +++++----
 .../defineProperties/15.2.3.7-6-a-283.js      |  56 +++++----
 .../defineProperties/15.2.3.7-6-a-284.js      |  56 +++++----
 .../defineProperties/15.2.3.7-6-a-285.js      |  56 +++++----
 .../defineProperties/15.2.3.7-6-a-288.js      |  60 +++++-----
 .../defineProperties/15.2.3.7-6-a-289.js      |  60 +++++-----
 .../defineProperties/15.2.3.7-6-a-290.js      |  41 +++----
 .../defineProperties/15.2.3.7-6-a-291.js      |  53 +++++----
 .../defineProperties/15.2.3.7-6-a-292.js      |  57 +++++----
 .../defineProperties/15.2.3.7-6-a-293.js      |  39 +++---
 .../defineProperties/15.2.3.7-6-a-294.js      |  54 +++++----
 .../defineProperties/15.2.3.7-6-a-295.js      |  56 +++++----
 .../defineProperties/15.2.3.7-6-a-296.js      |  56 +++++----
 .../defineProperties/15.2.3.7-6-a-297.js      |  56 +++++----
 .../defineProperties/15.2.3.7-6-a-298.js      |  62 +++++-----
 .../defineProperties/15.2.3.7-6-a-299.js      |  64 +++++-----
 .../defineProperties/15.2.3.7-6-a-30.js       |  30 +++--
 .../defineProperties/15.2.3.7-6-a-300.js      |  58 ++++-----
 .../defineProperties/15.2.3.7-6-a-301.js      |  58 ++++-----
 .../defineProperties/15.2.3.7-6-a-302.js      |  37 +++---
 .../defineProperties/15.2.3.7-6-a-303.js      |  49 ++++----
 .../defineProperties/15.2.3.7-6-a-304.js      |  73 ++++++------
 .../defineProperties/15.2.3.7-6-a-305.js      |  51 ++++----
 .../defineProperties/15.2.3.7-6-a-306.js      |  57 +++++----
 .../defineProperties/15.2.3.7-6-a-307.js      |  55 +++++----
 .../defineProperties/15.2.3.7-6-a-308.js      |  55 +++++----
 .../defineProperties/15.2.3.7-6-a-309.js      |  53 +++++----
 .../defineProperties/15.2.3.7-6-a-31.js       |  33 +++---
 .../defineProperties/15.2.3.7-6-a-310.js      |  71 +++++------
 .../defineProperties/15.2.3.7-6-a-311.js      |  61 +++++-----
 .../defineProperties/15.2.3.7-6-a-312.js      |  59 +++++-----
 .../defineProperties/15.2.3.7-6-a-313.js      |  57 ++++-----
 .../defineProperties/15.2.3.7-6-a-33.js       |  35 +++---
 .../defineProperties/15.2.3.7-6-a-35.js       |  43 +++----
 .../defineProperties/15.2.3.7-6-a-36.js       |  42 +++----
 .../defineProperties/15.2.3.7-6-a-37.js       |  45 +++----
 .../defineProperties/15.2.3.7-6-a-38-1.js     |  37 +++---
 .../defineProperties/15.2.3.7-6-a-38.js       |  21 ++--
 .../defineProperties/15.2.3.7-6-a-39.js       |  35 +++---
 .../defineProperties/15.2.3.7-6-a-40.js       |  65 +++++-----
 .../defineProperties/15.2.3.7-6-a-41.js       |  29 ++---
 .../defineProperties/15.2.3.7-6-a-42.js       |  31 ++---
 .../defineProperties/15.2.3.7-6-a-43.js       |  31 ++---
 .../defineProperties/15.2.3.7-6-a-45.js       |  40 ++++---
 .../defineProperties/15.2.3.7-6-a-46.js       |  40 ++++---
 .../defineProperties/15.2.3.7-6-a-47.js       |  29 ++---
 .../defineProperties/15.2.3.7-6-a-48.js       |  27 +++--
 .../defineProperties/15.2.3.7-6-a-49.js       |  29 ++---
 .../Object/defineProperties/15.2.3.7-6-a-5.js |  52 ++++----
 .../defineProperties/15.2.3.7-6-a-50.js       |  27 +++--
 .../defineProperties/15.2.3.7-6-a-51.js       |  29 ++---
 .../defineProperties/15.2.3.7-6-a-52.js       |  27 +++--
 .../defineProperties/15.2.3.7-6-a-53.js       |  31 ++---
 .../defineProperties/15.2.3.7-6-a-54.js       |  31 ++---
 .../defineProperties/15.2.3.7-6-a-55.js       |  29 ++---
 .../defineProperties/15.2.3.7-6-a-56.js       |  31 ++---
 .../defineProperties/15.2.3.7-6-a-59.js       |  35 +++---
 .../defineProperties/15.2.3.7-6-a-60.js       |  39 +++---
 .../defineProperties/15.2.3.7-6-a-61.js       |  33 +++---
 .../defineProperties/15.2.3.7-6-a-62.js       |  35 +++---
 .../defineProperties/15.2.3.7-6-a-63.js       |  33 +++---
 .../defineProperties/15.2.3.7-6-a-64.js       |  33 +++---
 .../defineProperties/15.2.3.7-6-a-65.js       |  44 ++++---
 .../defineProperties/15.2.3.7-6-a-66-1.js     |  52 ++++----
 .../defineProperties/15.2.3.7-6-a-66.js       |  52 ++++----
 .../defineProperties/15.2.3.7-6-a-68.js       |  50 ++++----
 .../defineProperties/15.2.3.7-6-a-70.js       |  39 +++---
 .../defineProperties/15.2.3.7-6-a-71.js       |  52 ++++----
 .../defineProperties/15.2.3.7-6-a-72.js       |  52 ++++----
 .../defineProperties/15.2.3.7-6-a-73.js       |  35 +++---
 .../defineProperties/15.2.3.7-6-a-74.js       |  35 +++---
 .../defineProperties/15.2.3.7-6-a-76.js       |  52 ++++----
 .../defineProperties/15.2.3.7-6-a-77.js       |  52 ++++----
 .../defineProperties/15.2.3.7-6-a-78.js       |  37 +++---
 .../defineProperties/15.2.3.7-6-a-79.js       |  52 ++++----
 .../defineProperties/15.2.3.7-6-a-80.js       |  35 +++---
 .../defineProperties/15.2.3.7-6-a-81.js       |  52 ++++----
 .../defineProperties/15.2.3.7-6-a-82.js       |  35 +++---
 .../defineProperties/15.2.3.7-6-a-83.js       |  52 ++++----
 .../defineProperties/15.2.3.7-6-a-84-1.js     |  41 +++----
 .../defineProperties/15.2.3.7-6-a-84.js       |  37 +++---
 .../defineProperties/15.2.3.7-6-a-85.js       |  50 ++++----
 .../defineProperties/15.2.3.7-6-a-86-1.js     |  52 ++++----
 .../defineProperties/15.2.3.7-6-a-86.js       |  39 +++---
 .../defineProperties/15.2.3.7-6-a-87.js       |  54 +++++----
 .../defineProperties/15.2.3.7-6-a-88.js       |  75 ++++++------
 .../defineProperties/15.2.3.7-6-a-89.js       |  52 ++++----
 .../defineProperties/15.2.3.7-6-a-90.js       |  57 ++++-----
 .../defineProperties/15.2.3.7-6-a-91.js       |  66 ++++++-----
 .../defineProperties/15.2.3.7-6-a-92.js       |  58 ++++-----
 .../defineProperties/15.2.3.7-6-a-93-1.js     |  81 +++++++------
 .../defineProperties/15.2.3.7-6-a-93-2.js     |  81 +++++++------
 .../defineProperties/15.2.3.7-6-a-93-3.js     |  89 ++++++++------
 .../defineProperties/15.2.3.7-6-a-93-4.js     |  88 ++++++++------
 .../defineProperties/15.2.3.7-6-a-93.js       |  41 ++++---
 .../defineProperties/15.2.3.7-6-a-94.js       |  27 +++--
 .../defineProperties/15.2.3.7-6-a-95.js       |  37 +++---
 .../defineProperties/15.2.3.7-6-a-96.js       |  37 +++---
 .../defineProperties/15.2.3.7-6-a-97.js       |  37 +++---
 .../defineProperties/15.2.3.7-6-a-98.js       |  37 +++---
 .../defineProperties/15.2.3.7-6-a-99.js       |  37 +++---
 .../Object/defineProperty/15.2.3.6-4-100.js   |  25 ++--
 .../Object/defineProperty/15.2.3.6-4-101.js   |  21 ++--
 .../Object/defineProperty/15.2.3.6-4-102.js   |  21 ++--
 .../Object/defineProperty/15.2.3.6-4-103.js   |  29 ++---
 .../Object/defineProperty/15.2.3.6-4-104.js   |  31 ++---
 .../Object/defineProperty/15.2.3.6-4-105.js   |  37 +++---
 .../Object/defineProperty/15.2.3.6-4-106.js   |  45 +++----
 .../Object/defineProperty/15.2.3.6-4-107.js   |  51 ++++----
 .../Object/defineProperty/15.2.3.6-4-108.js   |  47 ++++----
 .../Object/defineProperty/15.2.3.6-4-109.js   |  55 ++++-----
 .../Object/defineProperty/15.2.3.6-4-110.js   |  43 ++++---
 .../Object/defineProperty/15.2.3.6-4-112.js   |  47 ++++----
 .../Object/defineProperty/15.2.3.6-4-113.js   |  39 +++---
 .../Object/defineProperty/15.2.3.6-4-114.js   |  47 ++++----
 .../Object/defineProperty/15.2.3.6-4-115.js   |  67 +++++------
 .../Object/defineProperty/15.2.3.6-4-124.js   |  23 ++--
 .../Object/defineProperty/15.2.3.6-4-190.js   |  45 +++----
 .../Object/defineProperty/15.2.3.6-4-191.js   |  37 +++---
 .../Object/defineProperty/15.2.3.6-4-194.js   |  51 ++++----
 .../Object/defineProperty/15.2.3.6-4-195.js   |  72 ++++++------
 .../Object/defineProperty/15.2.3.6-4-199.js   |  24 ++--
 .../Object/defineProperty/15.2.3.6-4-200.js   |  28 +++--
 .../Object/defineProperty/15.2.3.6-4-201.js   |  28 +++--
 .../Object/defineProperty/15.2.3.6-4-202.js   |  28 +++--
 .../Object/defineProperty/15.2.3.6-4-203.js   |  28 +++--
 .../Object/defineProperty/15.2.3.6-4-204.js   |  30 ++---
 .../Object/defineProperty/15.2.3.6-4-205.js   |  31 +++--
 .../Object/defineProperty/15.2.3.6-4-207.js   |  35 +++---
 .../Object/defineProperty/15.2.3.6-4-208.js   |  35 +++---
 .../Object/defineProperty/15.2.3.6-4-209.js   |  63 +++++-----
 .../Object/defineProperty/15.2.3.6-4-210.js   |  22 ++--
 .../Object/defineProperty/15.2.3.6-4-211.js   |  49 ++++----
 .../Object/defineProperty/15.2.3.6-4-212.js   |  32 ++---
 .../Object/defineProperty/15.2.3.6-4-213.js   |  63 +++++-----
 .../Object/defineProperty/15.2.3.6-4-214.js   |  44 ++++---
 .../Object/defineProperty/15.2.3.6-4-215.js   |  22 ++--
 .../Object/defineProperty/15.2.3.6-4-216.js   |  22 ++--
 .../Object/defineProperty/15.2.3.6-4-218.js   |  32 +++--
 .../Object/defineProperty/15.2.3.6-4-219.js   |  32 +++--
 .../Object/defineProperty/15.2.3.6-4-220.js   |  21 ++--
 .../Object/defineProperty/15.2.3.6-4-221.js   |  44 ++++---
 .../Object/defineProperty/15.2.3.6-4-222.js   |  22 ++--
 .../Object/defineProperty/15.2.3.6-4-223.js   |  44 ++++---
 .../Object/defineProperty/15.2.3.6-4-224.js   |  22 ++--
 .../Object/defineProperty/15.2.3.6-4-225.js   |  44 ++++---
 .../Object/defineProperty/15.2.3.6-4-226.js   |  24 ++--
 .../Object/defineProperty/15.2.3.6-4-227.js   |  44 ++++---
 .../Object/defineProperty/15.2.3.6-4-228.js   |  22 ++--
 .../Object/defineProperty/15.2.3.6-4-229.js   |  21 ++--
 .../Object/defineProperty/15.2.3.6-4-230.js   |  51 ++++----
 .../Object/defineProperty/15.2.3.6-4-231.js   |  61 +++++-----
 .../Object/defineProperty/15.2.3.6-4-232.js   |  25 ++--
 .../Object/defineProperty/15.2.3.6-4-233.js   |  33 +++---
 .../Object/defineProperty/15.2.3.6-4-234.js   |  22 ++--
 .../Object/defineProperty/15.2.3.6-4-235.js   |  22 ++--
 .../Object/defineProperty/15.2.3.6-4-236.js   |  21 ++--
 .../Object/defineProperty/15.2.3.6-4-237.js   |  22 ++--
 .../Object/defineProperty/15.2.3.6-4-238.js   |  48 ++++----
 .../Object/defineProperty/15.2.3.6-4-239.js   |  50 ++++----
 .../Object/defineProperty/15.2.3.6-4-240.js   |  46 ++++----
 .../Object/defineProperty/15.2.3.6-4-241.js   |  42 ++++---
 .../Object/defineProperty/15.2.3.6-4-242-1.js |  28 +++--
 .../Object/defineProperty/15.2.3.6-4-242.js   |  27 ++---
 .../Object/defineProperty/15.2.3.6-4-243-1.js |  32 ++---
 .../Object/defineProperty/15.2.3.6-4-243-2.js |  43 +++++++
 .../Object/defineProperty/15.2.3.6-4-243.js   |  38 +++---
 .../Object/defineProperty/15.2.3.6-4-244.js   |  43 ++++---
 .../Object/defineProperty/15.2.3.6-4-245.js   |  43 ++++---
 .../Object/defineProperty/15.2.3.6-4-246.js   |  39 +++---
 .../Object/defineProperty/15.2.3.6-4-247.js   |  40 ++++---
 .../Object/defineProperty/15.2.3.6-4-248.js   |  44 ++++---
 .../Object/defineProperty/15.2.3.6-4-249.js   |  40 ++++---
 .../Object/defineProperty/15.2.3.6-4-250.js   |  39 +++---
 .../Object/defineProperty/15.2.3.6-4-251.js   |  38 +++---
 .../Object/defineProperty/15.2.3.6-4-252.js   |  50 ++++----
 .../Object/defineProperty/15.2.3.6-4-253.js   |  50 ++++----
 .../Object/defineProperty/15.2.3.6-4-257.js   |  41 +++----
 .../Object/defineProperty/15.2.3.6-4-258.js   |  24 ++--
 .../Object/defineProperty/15.2.3.6-4-259.js   |  24 ++--
 .../Object/defineProperty/15.2.3.6-4-260.js   |  24 ++--
 .../Object/defineProperty/15.2.3.6-4-261.js   |  24 ++--
 .../Object/defineProperty/15.2.3.6-4-262.js   |  24 ++--
 .../Object/defineProperty/15.2.3.6-4-263.js   |  24 ++--
 .../Object/defineProperty/15.2.3.6-4-264.js   |  28 +++--
 .../Object/defineProperty/15.2.3.6-4-265.js   |  39 +++---
 .../Object/defineProperty/15.2.3.6-4-266.js   |  33 +++---
 .../Object/defineProperty/15.2.3.6-4-267.js   |  35 +++---
 .../Object/defineProperty/15.2.3.6-4-268.js   |  35 +++---
 .../Object/defineProperty/15.2.3.6-4-269.js   |  27 ++---
 .../Object/defineProperty/15.2.3.6-4-270.js   |  35 +++---
 .../Object/defineProperty/15.2.3.6-4-271.js   |  37 +++---
 .../Object/defineProperty/15.2.3.6-4-272.js   |  35 +++---
 .../Object/defineProperty/15.2.3.6-4-273.js   |  61 +++++-----
 .../Object/defineProperty/15.2.3.6-4-277.js   |  30 ++---
 .../Object/defineProperty/15.2.3.6-4-278.js   |  41 +++----
 .../Object/defineProperty/15.2.3.6-4-279.js   |  61 +++++-----
 .../Object/defineProperty/15.2.3.6-4-280.js   |  30 ++---
 .../Object/defineProperty/15.2.3.6-4-281.js   |  44 ++++---
 .../Object/defineProperty/15.2.3.6-4-282.js   |  44 ++++---
 .../Object/defineProperty/15.2.3.6-4-283.js   |  44 ++++---
 .../Object/defineProperty/15.2.3.6-4-284.js   |  44 ++++---
 .../Object/defineProperty/15.2.3.6-4-285.js   |  56 +++++----
 .../Object/defineProperty/15.2.3.6-4-286.js   |  48 ++++----
 .../Object/defineProperty/15.2.3.6-4-287.js   |  50 ++++----
 .../Object/defineProperty/15.2.3.6-4-288.js   |  50 ++++----
 .../Object/defineProperty/15.2.3.6-4-289-1.js |  52 ++++----
 .../Object/defineProperty/15.2.3.6-4-289.js   |  34 +++---
 .../Object/defineProperty/15.2.3.6-4-290-1.js |  48 ++++----
 .../Object/defineProperty/15.2.3.6-4-290.js   |  43 +++----
 .../Object/defineProperty/15.2.3.6-4-291-1.js |  52 ++++----
 .../Object/defineProperty/15.2.3.6-4-291.js   |  47 ++++----
 .../Object/defineProperty/15.2.3.6-4-292-1.js |  36 +++---
 .../Object/defineProperty/15.2.3.6-4-292-2.js |  40 +++++++
 .../Object/defineProperty/15.2.3.6-4-292.js   |  32 ++---
 .../Object/defineProperty/15.2.3.6-4-293-1.js |  34 +++---
 .../Object/defineProperty/15.2.3.6-4-293-2.js |  56 +++++----
 .../Object/defineProperty/15.2.3.6-4-293-3.js |  37 +++---
 .../Object/defineProperty/15.2.3.6-4-293-4.js |  39 ++++++
 .../Object/defineProperty/15.2.3.6-4-293.js   |  48 ++++----
 .../Object/defineProperty/15.2.3.6-4-294-1.js |  57 +++++----
 .../Object/defineProperty/15.2.3.6-4-294.js   |  48 ++++----
 .../Object/defineProperty/15.2.3.6-4-295-1.js |  54 +++++----
 .../Object/defineProperty/15.2.3.6-4-295.js   |  48 ++++----
 .../Object/defineProperty/15.2.3.6-4-296-1.js |  53 +++++----
 .../Object/defineProperty/15.2.3.6-4-296.js   |  48 ++++----
 .../Object/defineProperty/15.2.3.6-4-297-1.js |  61 +++++-----
 .../Object/defineProperty/15.2.3.6-4-297.js   |  56 +++++----
 .../Object/defineProperty/15.2.3.6-4-298-1.js |  64 +++++-----
 .../Object/defineProperty/15.2.3.6-4-298.js   |  58 ++++-----
 .../Object/defineProperty/15.2.3.6-4-299-1.js |  55 +++++----
 .../Object/defineProperty/15.2.3.6-4-299.js   |  50 ++++----
 .../Object/defineProperty/15.2.3.6-4-300-1.js |  55 +++++----
 .../Object/defineProperty/15.2.3.6-4-300.js   |  50 ++++----
 .../Object/defineProperty/15.2.3.6-4-301-1.js |  36 +++---
 .../Object/defineProperty/15.2.3.6-4-301.js   |  34 +++---
 .../Object/defineProperty/15.2.3.6-4-302-1.js |  47 ++++----
 .../Object/defineProperty/15.2.3.6-4-302.js   |  43 +++----
 .../Object/defineProperty/15.2.3.6-4-303.js   |  47 ++++----
 .../Object/defineProperty/15.2.3.6-4-304.js   |  32 ++---
 .../Object/defineProperty/15.2.3.6-4-305.js   |  48 ++++----
 .../Object/defineProperty/15.2.3.6-4-306.js   |  48 ++++----
 .../Object/defineProperty/15.2.3.6-4-307.js   |  48 ++++----
 .../Object/defineProperty/15.2.3.6-4-308.js   |  48 ++++----
 .../Object/defineProperty/15.2.3.6-4-309.js   |  56 +++++----
 .../Object/defineProperty/15.2.3.6-4-310.js   |  58 ++++-----
 .../Object/defineProperty/15.2.3.6-4-311.js   |  50 ++++----
 .../Object/defineProperty/15.2.3.6-4-312.js   |  49 ++++----
 .../Object/defineProperty/15.2.3.6-4-313-1.js |  32 ++---
 .../Object/defineProperty/15.2.3.6-4-313.js   |  32 ++---
 .../Object/defineProperty/15.2.3.6-4-314-1.js |  41 +++----
 .../Object/defineProperty/15.2.3.6-4-314.js   |  41 +++----
 .../Object/defineProperty/15.2.3.6-4-315-1.js |  66 ++++++-----
 .../Object/defineProperty/15.2.3.6-4-315.js   |  61 +++++-----
 .../Object/defineProperty/15.2.3.6-4-316-1.js |  42 +++----
 .../Object/defineProperty/15.2.3.6-4-316.js   |  42 +++----
 .../Object/defineProperty/15.2.3.6-4-317-1.js |  52 ++++----
 .../Object/defineProperty/15.2.3.6-4-317.js   |  47 ++++----
 .../Object/defineProperty/15.2.3.6-4-318-1.js |  45 +++----
 .../Object/defineProperty/15.2.3.6-4-318.js   |  47 ++++----
 .../Object/defineProperty/15.2.3.6-4-319-1.js |  46 ++++----
 .../Object/defineProperty/15.2.3.6-4-319.js   |  45 +++----
 .../Object/defineProperty/15.2.3.6-4-320-1.js |  43 ++++---
 .../Object/defineProperty/15.2.3.6-4-320.js   |  45 ++++---
 .../Object/defineProperty/15.2.3.6-4-321-1.js |  66 ++++++-----
 .../Object/defineProperty/15.2.3.6-4-321.js   |  61 +++++-----
 .../Object/defineProperty/15.2.3.6-4-322-1.js |  51 ++++----
 .../Object/defineProperty/15.2.3.6-4-322.js   |  51 ++++----
 .../Object/defineProperty/15.2.3.6-4-323-1.js |  56 +++++----
 .../Object/defineProperty/15.2.3.6-4-323.js   |  51 ++++----
 .../Object/defineProperty/15.2.3.6-4-324-1.js |  49 ++++----
 .../Object/defineProperty/15.2.3.6-4-324.js   |  50 ++++----
 .../Object/defineProperty/15.2.3.6-4-333-1.js |  34 +++---
 .../Object/defineProperty/15.2.3.6-4-333-2.js |  34 +++---
 .../Object/defineProperty/15.2.3.6-4-333-3.js |  38 +++---
 .../Object/defineProperty/15.2.3.6-4-333-6.js |  34 +++---
 .../Object/defineProperty/15.2.3.6-4-333-7.js |  34 +++---
 .../Object/defineProperty/15.2.3.6-4-333-8.js |  38 +++---
 .../Object/defineProperty/15.2.3.6-4-354-1.js |  34 +++---
 .../defineProperty/15.2.3.6-4-354-10.js       |  34 +++---
 .../defineProperty/15.2.3.6-4-354-11.js       |  34 +++---
 .../defineProperty/15.2.3.6-4-354-12.js       |  38 +++---
 .../defineProperty/15.2.3.6-4-354-13.js       |  43 +++----
 .../Object/defineProperty/15.2.3.6-4-354-2.js |  34 +++---
 .../Object/defineProperty/15.2.3.6-4-354-3.js |  38 +++---
 .../Object/defineProperty/15.2.3.6-4-354-4.js |  43 +++----
 .../Object/defineProperty/15.2.3.6-4-360-7.js |  67 ++++++-----
 .../Object/defineProperty/15.2.3.6-4-38.js    |  34 +++---
 .../Object/defineProperty/15.2.3.6-4-41.js    |  30 ++---
 .../Object/defineProperty/15.2.3.6-4-45.js    |  28 ++---
 .../Object/defineProperty/15.2.3.6-4-47.js    |  28 +++--
 .../Object/defineProperty/15.2.3.6-4-48.js    |  28 +++--
 .../Object/defineProperty/15.2.3.6-4-49.js    |  28 +++--
 .../Object/defineProperty/15.2.3.6-4-50.js    |  28 +++--
 .../Object/defineProperty/15.2.3.6-4-51.js    |  30 ++---
 .../Object/defineProperty/15.2.3.6-4-52.js    |  20 ++--
 .../Object/defineProperty/15.2.3.6-4-53.js    |  31 +++--
 .../Object/defineProperty/15.2.3.6-4-531-1.js |  67 +++++------
 .../defineProperty/15.2.3.6-4-531-10.js       |  69 +++++------
 .../defineProperty/15.2.3.6-4-531-11.js       |  69 +++++------
 .../defineProperty/15.2.3.6-4-531-12.js       |  73 ++++++------
 .../defineProperty/15.2.3.6-4-531-13.js       |  80 ++++++-------
 .../Object/defineProperty/15.2.3.6-4-531-2.js |  69 +++++------
 .../Object/defineProperty/15.2.3.6-4-531-3.js |  73 ++++++------
 .../Object/defineProperty/15.2.3.6-4-531-4.js |  80 ++++++-------
 .../Object/defineProperty/15.2.3.6-4-538-1.js |  81 +++++++------
 .../Object/defineProperty/15.2.3.6-4-538-2.js |  87 ++++++++------
 .../Object/defineProperty/15.2.3.6-4-538-3.js |  90 ++++++++------
 .../Object/defineProperty/15.2.3.6-4-538-5.js |  84 +++++++------
 .../Object/defineProperty/15.2.3.6-4-538-6.js |  85 ++++++++------
 .../Object/defineProperty/15.2.3.6-4-538-7.js |  89 ++++++++------
 .../Object/defineProperty/15.2.3.6-4-538.js   |  81 +++++++------
 .../Object/defineProperty/15.2.3.6-4-540-1.js |  93 +++++++++------
 .../Object/defineProperty/15.2.3.6-4-540-2.js |  93 +++++++++------
 .../Object/defineProperty/15.2.3.6-4-540-3.js |  98 +++++++++-------
 .../Object/defineProperty/15.2.3.6-4-540-6.js |  95 +++++++++------
 .../Object/defineProperty/15.2.3.6-4-540-7.js |  95 +++++++++------
 .../Object/defineProperty/15.2.3.6-4-540-8.js |  97 ++++++++-------
 .../Object/defineProperty/15.2.3.6-4-547-1.js |  85 ++++++++------
 .../Object/defineProperty/15.2.3.6-4-547-2.js |  89 ++++++++------
 .../Object/defineProperty/15.2.3.6-4-547-3.js |  86 ++++++++------
 .../Object/defineProperty/15.2.3.6-4-547-4.js |  89 ++++++++------
 .../Object/defineProperty/15.2.3.6-4-55.js    |  39 +++---
 .../Object/defineProperty/15.2.3.6-4-56.js    |  39 +++---
 .../Object/defineProperty/15.2.3.6-4-57.js    |  63 +++++-----
 .../Object/defineProperty/15.2.3.6-4-58.js    |  22 ++--
 .../Object/defineProperty/15.2.3.6-4-59.js    |  39 +++---
 .../Object/defineProperty/15.2.3.6-4-60.js    |  22 ++--
 .../Object/defineProperty/15.2.3.6-4-61.js    |  22 ++--
 .../Object/defineProperty/15.2.3.6-4-62.js    |  22 ++--
 .../Object/defineProperty/15.2.3.6-4-64.js    |  33 ++++--
 .../Object/defineProperty/15.2.3.6-4-65.js    |  32 +++--
 .../Object/defineProperty/15.2.3.6-4-66.js    |  22 ++--
 .../Object/defineProperty/15.2.3.6-4-67.js    |  22 ++--
 .../Object/defineProperty/15.2.3.6-4-68.js    |  22 ++--
 .../Object/defineProperty/15.2.3.6-4-69.js    |  22 ++--
 .../Object/defineProperty/15.2.3.6-4-70.js    |  22 ++--
 .../Object/defineProperty/15.2.3.6-4-71.js    |  24 ++--
 .../Object/defineProperty/15.2.3.6-4-72.js    |  26 ++--
 .../Object/defineProperty/15.2.3.6-4-73.js    |  22 ++--
 .../Object/defineProperty/15.2.3.6-4-74.js    |  24 ++--
 .../Object/defineProperty/15.2.3.6-4-75.js    |  39 +++---
 .../Object/defineProperty/15.2.3.6-4-76.js    |  47 ++++----
 .../Object/defineProperty/15.2.3.6-4-77.js    |  25 ++--
 .../Object/defineProperty/15.2.3.6-4-78.js    |  33 +++---
 .../Object/defineProperty/15.2.3.6-4-79.js    |  22 ++--
 .../Object/defineProperty/15.2.3.6-4-80.js    |  22 ++--
 .../Object/defineProperty/15.2.3.6-4-81.js    |  23 ++--
 .../Object/defineProperty/15.2.3.6-4-82-1.js  |  43 +++----
 .../Object/defineProperty/15.2.3.6-4-82-10.js |  57 ++++-----
 .../Object/defineProperty/15.2.3.6-4-82-11.js |  57 ++++-----
 .../Object/defineProperty/15.2.3.6-4-82-12.js |  55 ++++-----
 .../Object/defineProperty/15.2.3.6-4-82-13.js |  43 +++----
 .../Object/defineProperty/15.2.3.6-4-82-14.js |  45 +++----
 .../Object/defineProperty/15.2.3.6-4-82-15.js |  37 +++---
 .../Object/defineProperty/15.2.3.6-4-82-16.js |  45 +++----
 .../Object/defineProperty/15.2.3.6-4-82-17.js |  45 +++----
 .../Object/defineProperty/15.2.3.6-4-82-18.js |  37 +++---
 .../Object/defineProperty/15.2.3.6-4-82-19.js |  55 ++++-----
 .../Object/defineProperty/15.2.3.6-4-82-2.js  |  45 +++----
 .../Object/defineProperty/15.2.3.6-4-82-20.js |  57 ++++-----
 .../Object/defineProperty/15.2.3.6-4-82-21.js |  55 ++++-----
 .../Object/defineProperty/15.2.3.6-4-82-22.js |  57 ++++-----
 .../Object/defineProperty/15.2.3.6-4-82-23.js |  57 ++++-----
 .../Object/defineProperty/15.2.3.6-4-82-24.js |  55 ++++-----
 .../Object/defineProperty/15.2.3.6-4-82-3.js  |  37 +++---
 .../Object/defineProperty/15.2.3.6-4-82-4.js  |  45 +++----
 .../Object/defineProperty/15.2.3.6-4-82-5.js  |  45 +++----
 .../Object/defineProperty/15.2.3.6-4-82-6.js  |  37 +++---
 .../Object/defineProperty/15.2.3.6-4-82-7.js  |  55 ++++-----
 .../Object/defineProperty/15.2.3.6-4-82-8.js  |  57 ++++-----
 .../Object/defineProperty/15.2.3.6-4-82-9.js  |  55 ++++-----
 .../Object/defineProperty/15.2.3.6-4-82.js    |  23 ++--
 .../Object/defineProperty/15.2.3.6-4-83.js    |  37 +++---
 .../Object/defineProperty/15.2.3.6-4-84.js    |  37 +++---
 .../Object/defineProperty/15.2.3.6-4-86.js    |  40 ++++---
 .../Object/defineProperty/15.2.3.6-4-87.js    |  40 ++++---
 .../Object/defineProperty/15.2.3.6-4-88.js    |  33 +++---
 .../Object/defineProperty/15.2.3.6-4-89.js    |  46 ++++----
 .../Object/defineProperty/15.2.3.6-4-90.js    |  33 +++---
 .../Object/defineProperty/15.2.3.6-4-91.js    |  40 ++++---
 .../Object/defineProperty/15.2.3.6-4-92.js    |  33 +++---
 .../Object/defineProperty/15.2.3.6-4-93.js    |  40 ++++---
 .../Object/defineProperty/15.2.3.6-4-94.js    |  36 +++---
 .../Object/defineProperty/15.2.3.6-4-95.js    |  44 ++++---
 .../Object/defineProperty/15.2.3.6-4-96.js    |  35 +++---
 .../Object/defineProperty/15.2.3.6-4-97.js    |  51 ++++----
 .../Object/defineProperty/15.2.3.6-4-98.js    |  54 ++++-----
 .../Object/defineProperty/15.2.3.6-4-99.js    |  54 +++++----
 .../Object/freeze/15.2.3.9-2-b-i-1.js         |  43 ++++---
 .../Object/freeze/15.2.3.9-2-b-i-2.js         |  85 +++++++++-----
 .../built-ins/Object/freeze/15.2.3.9-2-c-1.js |  43 ++++---
 .../built-ins/Object/freeze/15.2.3.9-2-c-3.js |  89 +++++++-------
 .../built-ins/Object/freeze/15.2.3.9-2-c-4.js | 111 +++++++++---------
 test/built-ins/Object/seal/15.2.3.8-2-b-1.js  |  41 ++++---
 test/built-ins/Object/seal/15.2.3.8-2-b-2.js  |  55 +++++----
 test/built-ins/Object/seal/15.2.3.8-2-b-3.js  |  80 +++++++------
 test/built-ins/Object/seal/15.2.3.8-2-b-4.js  |  82 +++++++------
 502 files changed, 12137 insertions(+), 10594 deletions(-)
 delete mode 100644 harness/accessorPropertyAttributesAreCorrect.js
 delete mode 100644 harness/dataPropertyAttributesAreCorrect.js
 create mode 100644 harness/propertyHelper.js
 create mode 100644 test/built-ins/Object/defineProperties/15.2.3.7-6-a-114-b.js
 create mode 100644 test/built-ins/Object/defineProperty/15.2.3.6-4-243-2.js
 create mode 100644 test/built-ins/Object/defineProperty/15.2.3.6-4-292-2.js
 create mode 100644 test/built-ins/Object/defineProperty/15.2.3.6-4-293-4.js

diff --git a/harness/accessorPropertyAttributesAreCorrect.js b/harness/accessorPropertyAttributesAreCorrect.js
deleted file mode 100644
index 8343936457..0000000000
--- a/harness/accessorPropertyAttributesAreCorrect.js
+++ /dev/null
@@ -1,74 +0,0 @@
-//-----------------------------------------------------------------------------
-//Verify all attributes specified accessor property of given object:
-//get, set, enumerable, configurable
-//If all attribute values are expected, return true, otherwise, return false
-function accessorPropertyAttributesAreCorrect(obj,
-                                              name,
-                                              get,
-                                              set,
-                                              setVerifyHelpProp,
-                                              enumerable,
-                                              configurable) {
-    var attributesCorrect = true;
-
-    if (get !== undefined) {
-        if (obj[name] !== get()) {
-            if (typeof obj[name] === "number" &&
-                isNaN(obj[name]) &&
-                typeof get() === "number" &&
-                isNaN(get())) {
-                // keep empty
-            } else {
-                attributesCorrect = false;
-            }
-        }
-    } else {
-        if (obj[name] !== undefined) {
-            attributesCorrect = false;
-        }
-    }
-
-    try {
-        var desc = Object.getOwnPropertyDescriptor(obj, name);
-        if (typeof desc.set === "undefined") {
-            if (typeof set !== "undefined") {
-                attributesCorrect = false;
-            }
-        } else {
-            obj[name] = "toBeSetValue";
-            if (obj[setVerifyHelpProp] !== "toBeSetValue") {
-                attributesCorrect = false;
-            }
-        }
-    } catch (se) {
-        throw se;
-    }
-
-
-    var enumerated = false;
-    for (var prop in obj) {
-        if (obj.hasOwnProperty(prop) && prop === name) {
-            enumerated = true;
-        }
-    }
-
-    if (enumerated !== enumerable) {
-        attributesCorrect = false;
-    }
-
-
-    var deleted = false;
-    try {
-        delete obj[name];
-    } catch (de) {
-        throw de;
-    }
-    if (!obj.hasOwnProperty(name)) {
-        deleted = true;
-    }
-    if (deleted !== configurable) {
-        attributesCorrect = false;
-    }
-
-    return attributesCorrect;
-}
diff --git a/harness/dataPropertyAttributesAreCorrect.js b/harness/dataPropertyAttributesAreCorrect.js
deleted file mode 100644
index 201409f905..0000000000
--- a/harness/dataPropertyAttributesAreCorrect.js
+++ /dev/null
@@ -1,74 +0,0 @@
-//-----------------------------------------------------------------------------
-//Verify all attributes specified data property of given object:
-//value, writable, enumerable, configurable
-//If all attribute values are expected, return true, otherwise, return false
-function dataPropertyAttributesAreCorrect(obj,
-                                          name,
-                                          value,
-                                          writable,
-                                          enumerable,
-                                          configurable) {
-    var attributesCorrect = true;
-
-    if (obj[name] !== value) {
-        if (typeof obj[name] === "number" &&
-            isNaN(obj[name]) &&
-            typeof value === "number" &&
-            isNaN(value)) {
-            // keep empty
-        } else {
-            attributesCorrect = false;
-        }
-    }
-
-    try {
-        if (obj[name] === "oldValue") {
-            obj[name] = "newValue";
-        } else {
-            obj[name] = "OldValue";
-        }
-    } catch (we) {
-    }
-
-    var overwrited = false;
-    if (obj[name] !== value) {
-        if (typeof obj[name] === "number" &&
-            isNaN(obj[name]) &&
-            typeof value === "number" &&
-            isNaN(value)) {
-            // keep empty
-        } else {
-            overwrited = true;
-        }
-    }
-    if (overwrited !== writable) {
-        attributesCorrect = false;
-    }
-
-    var enumerated = false;
-    for (var prop in obj) {
-        if (obj.hasOwnProperty(prop) && prop === name) {
-            enumerated = true;
-        }
-    }
-
-    if (enumerated !== enumerable) {
-        attributesCorrect = false;
-    }
-
-
-    var deleted = false;
-
-    try {
-        delete obj[name];
-    } catch (de) {
-    }
-    if (!obj.hasOwnProperty(name)) {
-        deleted = true;
-    }
-    if (deleted !== configurable) {
-        attributesCorrect = false;
-    }
-
-    return attributesCorrect;
-}
diff --git a/harness/propertyHelper.js b/harness/propertyHelper.js
new file mode 100644
index 0000000000..016fe12910
--- /dev/null
+++ b/harness/propertyHelper.js
@@ -0,0 +1,91 @@
+
+function isConfigurable(obj, name) {
+    try {
+        delete obj[name];
+    } catch (e) {
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+    }
+    return !Object.prototype.hasOwnProperty.call(obj, name);
+}
+
+function isEnumerable(obj, name) {
+    for (var prop in obj) {
+        if (Object.prototype.hasOwnProperty.call(obj, prop) && 
+            assert._isSameValue(prop, name)) {
+            return true;
+        }
+    }
+
+    return false;
+}
+
+function isEqualTo(obj, name, expectedValue) {
+    var actualValue = obj[name];
+
+    return assert._isSameValue(actualValue, expectedValue);
+}
+
+function isWritable(obj, name, verifyProp, value) {
+    var newValue = value || "unlikelyValue";
+
+    try {
+        obj[name] = newValue;
+    } catch (e) {
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+    }
+
+    if ((verifyProp && isEqualTo(obj, verifyProp, newValue)) ||
+        isEqualTo(obj, name, newValue)) {
+        return true;
+    }
+
+    return false;
+}
+
+function verifyEqualTo(obj, name, value) {
+    if (!isEqualTo(obj, name, value)) {
+        $ERROR("Expected obj[" + String(name) + "] to equal " + value +
+                   ", actually " + obj[name]);
+    }
+}
+
+function verifyWritable(obj, name, verifyProp, value) {
+    if (!isWritable(obj, name, verifyProp, value)) {
+        $ERROR("Expected obj[" + String(name) + "] to be writable, but was not.");
+    }
+}
+
+function verifyNotWritable(obj, name, verifyProp, value) {
+    if (isWritable(obj, name, verifyProp)) {
+        $ERROR("Expected obj[" + String(name) + "] NOT to be writable, but was.");
+    }
+}
+
+function verifyEnumerable(obj, name) {
+    if (!isEnumerable(obj, name)) {
+        $ERROR("Expected obj[" + String(name) + "] to be enumerable, but was not.");
+    }
+}
+
+function verifyNotEnumerable(obj, name) {
+    if (isEnumerable(obj, name)) {
+        $ERROR("Expected obj[" + String(name) + "] NOT to be enumerable, but was.");
+    }
+}
+
+function verifyConfigurable(obj, name) {
+    if (!isConfigurable(obj, name)) {
+        $ERROR("Expected obj[" + String(name) + "] to be configurable, but was not.");
+    }
+}
+
+function verifyNotConfigurable(obj, name) {
+    if (isConfigurable(obj, name)) {
+        $ERROR("Expected obj[" + String(name) + "] NOT to be configurable, but was.");
+    }
+}
+
diff --git a/test/built-ins/Object/create/15.2.3.5-4-315.js b/test/built-ins/Object/create/15.2.3.5-4-315.js
index da1c857876..0cbd828eb3 100644
--- a/test/built-ins/Object/create/15.2.3.5-4-315.js
+++ b/test/built-ins/Object/create/15.2.3.5-4-315.js
@@ -9,37 +9,44 @@ es5id: 15.2.3.5-4-315
 description: >
     Object.create - all properties in 'Properties' are enumerable
     (data property and accessor property) (15.2.3.7 step 7)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var newObj = {};
-        function getFunc() {
-            return 10;
-        }
-        function setFunc(value) {
-            newObj.setVerifyHelpProp = value;
-        }
-
-        newObj = Object.create({}, {
-            foo1: {
-                value: 200,
-                enumerable: true,
-                writable: true,
-                configurable: true
-            },
-            foo2: {
-                get: getFunc,
-                set: setFunc,
-                enumerable: true,
-                configurable: true
-            }
-        });
-        return dataPropertyAttributesAreCorrect(newObj, "foo1", 200, true, true, true) &&
-            accessorPropertyAttributesAreCorrect(newObj, "foo2", getFunc, setFunc, "setVerifyHelpProp", true, true);
+var newObj = {};
+function getFunc() {
+    return 10;
+}
+function setFunc(value) {
+    newObj.setVerifyHelpProp = value;
+}
+
+newObj = Object.create({}, {
+    foo1: {
+        value: 200,
+        enumerable: true,
+        writable: true,
+        configurable: true
+    },
+    foo2: {
+        get: getFunc,
+        set: setFunc,
+        enumerable: true,
+        configurable: true
     }
-runTestCase(testcase);
+});
+
+verifyEqualTo(newObj, "foo1", 200);
+
+verifyWritable(newObj, "foo1");
+
+verifyEnumerable(newObj, "foo1");
+
+verifyConfigurable(newObj, "foo1");
+
+verifyEqualTo(newObj, "foo2", getFunc());
+
+verifyWritable(newObj, "foo2", "setVerifyHelpProp");
+
+verifyEnumerable(newObj, "foo2");
+
+verifyConfigurable(newObj, "foo2");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-100.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-100.js
index a718b2b736..de537e96af 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-100.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-100.js
@@ -9,28 +9,29 @@ es5id: 15.2.3.7-6-a-100
 description: >
     Object.defineProperties - 'P' is data property, several attributes
     values of P and properties are different (8.12.9 step 12)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", { 
-            value: 100, 
-            writable: true, 
-            configurable: true 
-        });
+Object.defineProperty(obj, "foo", { 
+    value: 100, 
+    writable: true, 
+    configurable: true 
+});
 
-        Object.defineProperties(obj, {
-            foo: {
-                value: 200,
-                writable: false,
-                configurable: false
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", 200, false, false, false);
+Object.defineProperties(obj, {
+    foo: {
+        value: 200,
+        writable: false,
+        configurable: false
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", 200);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-101.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-101.js
index 7654595d07..2dfc8694a3 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-101.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-101.js
@@ -10,38 +10,39 @@ description: >
     Object.defineProperties - 'P' is accessor property, both
     properties.[[Get]] and P.[[Get]] are two different values (8.12.9
     step 12)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        function get_func() {
-            return 10;
-        }
-        function set_func(value) {
-            obj.setVerifyHelpProp = value;
-        }
-
-        Object.defineProperty(obj, "foo", {
-            get: get_func,
-            set: set_func,
-            enumerable: true,
-            configurable: true
-        });
-
-        function get_func2() {
-            return 20;
-        }
-
-        Object.defineProperties(obj, {
-            foo: {
-                get: get_func2
-            }
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "foo", get_func2, set_func, "setVerifyHelpProp", true, true);
+
+var obj = {};
+
+function get_func() {
+    return 10;
+}
+function set_func(value) {
+    obj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(obj, "foo", {
+    get: get_func,
+    set: set_func,
+    enumerable: true,
+    configurable: true
+});
+
+function get_func2() {
+    return 20;
+}
+
+Object.defineProperties(obj, {
+    foo: {
+        get: get_func2
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", get_func2());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-102.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-102.js
index 3a7e732c38..9f646a3c6b 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-102.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-102.js
@@ -9,34 +9,33 @@ es5id: 15.2.3.7-6-a-102
 description: >
     Object.defineProperties - 'P' is accessor property, P.[[Get]] is
     present and properties.[[Get]] is undefined (8.12.9 step 12)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        function get_func() {
-            return 10;
-        }
-        function set_func(value) {
-            obj.setVerifyHelpProp = value;
-        }
-
-        Object.defineProperty(obj, "foo", {
-            get: get_func,
-            set: set_func,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.defineProperties(obj, {
-            foo: {
-                get: undefined
-            }
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "foo", undefined, set_func, "setVerifyHelpProp", true, true);
+
+var obj = {};
+
+function get_func() {
+    return 10;
+}
+function set_func(value) {
+    obj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(obj, "foo", {
+    get: get_func,
+    set: set_func,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperties(obj, {
+    foo: {
+        get: undefined
     }
-runTestCase(testcase);
+});
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-103.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-103.js
index 472d1a2547..f3be9fd86b 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-103.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-103.js
@@ -9,35 +9,36 @@ es5id: 15.2.3.7-6-a-103
 description: >
     Object.defineProperties - 'P' is accessor property, P.[[Get]] is
     undefined and properties.[[Get]] is normal value (8.12.9 step 12)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function set_func(value) {
-            obj.setVerifyHelpProp = value;
-        }
+function set_func(value) {
+    obj.setVerifyHelpProp = value;
+}
 
-        Object.defineProperty(obj, "foo", {
-            get: undefined,
-            set: set_func,
-            enumerable: true,
-            configurable: true
-        });
+Object.defineProperty(obj, "foo", {
+    get: undefined,
+    set: set_func,
+    enumerable: true,
+    configurable: true
+});
 
-        function get_func() {
-            return 10;
-        }
+function get_func() {
+    return 10;
+}
 
-        Object.defineProperties(obj, {
-            foo: {
-                get: get_func
-            }
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "foo", get_func, set_func, "setVerifyHelpProp", true, true);
+Object.defineProperties(obj, {
+    foo: {
+        get: get_func
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", get_func());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-104.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-104.js
index c24473b8d5..69d114689d 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-104.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-104.js
@@ -10,39 +10,40 @@ description: >
     Object.defineProperties - 'P' is accessor property, both
     properties.[[Set]] and P.[[Set]] are two different values (8.12.9
     step 12)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function get_func() {
-            return 10;
-        }
+function get_func() {
+    return 10;
+}
 
-        function set_func() {
-            return 10;
-        }
+function set_func() {
+    return 10;
+}
 
-        Object.defineProperty(obj, "foo", {
-            get: get_func,
-            set: set_func,
-            enumerable: true,
-            configurable: true
-        });
+Object.defineProperty(obj, "foo", {
+    get: get_func,
+    set: set_func,
+    enumerable: true,
+    configurable: true
+});
 
-        function set_func2(value) {
-            obj.setVerifyHelpProp = value;
-        }
+function set_func2(value) {
+    obj.setVerifyHelpProp = value;
+}
 
-        Object.defineProperties(obj, {
-            foo: {
-                set: set_func2
-            }
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "foo", get_func, set_func2, "setVerifyHelpProp", true, true);
+Object.defineProperties(obj, {
+    foo: {
+        set: set_func2
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", get_func());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-106.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-106.js
index c8c5ae6f31..1381d45ccf 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-106.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-106.js
@@ -9,35 +9,36 @@ es5id: 15.2.3.7-6-a-106
 description: >
     Object.defineProperties - 'P' is accessor property, P.[[Set]] is
     undefined and properties.[[Set]] is normal value (8.12.9 step 12)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function get_func() {
-            return 10;
-        }
+function get_func() {
+    return 10;
+}
 
-        Object.defineProperty(obj, "foo", {
-            get: get_func,
-            set: undefined,
-            enumerable: true,
-            configurable: true
-        });
+Object.defineProperty(obj, "foo", {
+    get: get_func,
+    set: undefined,
+    enumerable: true,
+    configurable: true
+});
 
-        function set_func(value) {
-            obj.setVerifyHelpProp = value;
-        }
+function set_func(value) {
+    obj.setVerifyHelpProp = value;
+}
 
-        Object.defineProperties(obj, {
-            foo: {
-                set: set_func
-            }
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "foo", get_func, set_func, "setVerifyHelpProp", true, true);
+Object.defineProperties(obj, {
+    foo: {
+        set: set_func
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", get_func());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-107.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-107.js
index ccbed0fcdb..bdd1f22144 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-107.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-107.js
@@ -9,34 +9,35 @@ es5id: 15.2.3.7-6-a-107
 description: >
     Object.defineProperties - 'P' is accessor property, P.enumerable
     and properties.enumerable are different values (8.12.9 step 12)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        function get_func() {
-            return 10;
-        }
-        function set_func(value) {
-            obj.setVerifyHelpProp = value;
-        }
-
-        Object.defineProperty(obj, "foo", {
-            get: get_func,
-            set: set_func,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.defineProperties(obj, {
-            foo: {
-                enumerable: false
-            }
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "foo", get_func, set_func, "setVerifyHelpProp", false, true);
+
+var obj = {};
+
+function get_func() {
+    return 10;
+}
+function set_func(value) {
+    obj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(obj, "foo", {
+    get: get_func,
+    set: set_func,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperties(obj, {
+    foo: {
+        enumerable: false
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", get_func());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-108.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-108.js
index 7218d10ec4..75a7f95af8 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-108.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-108.js
@@ -9,34 +9,35 @@ es5id: 15.2.3.7-6-a-108
 description: >
     Object.defineProperties - 'P' is accessor property, P.configurable
     is true and properties.configurable is false
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        function get_func() {
-            return 10;
-        }
-        function set_func(value) {
-            obj.setVerifyHelpProp = value;
-        }
-
-        Object.defineProperty(obj, "foo", {
-            get: get_func,
-            set: set_func,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.defineProperties(obj, {
-            foo: {
-                configurable: false
-            }
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "foo", get_func, set_func, "setVerifyHelpProp", true, false);
+
+var obj = {};
+
+function get_func() {
+    return 10;
+}
+function set_func(value) {
+    obj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(obj, "foo", {
+    get: get_func,
+    set: set_func,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperties(obj, {
+    foo: {
+        configurable: false
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", get_func());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-109.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-109.js
index 43e641b782..80da3599a2 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-109.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-109.js
@@ -10,40 +10,41 @@ description: >
     Object.defineProperties - 'P' is accessor property, several
     attributes values of P and properties are different (8.12.9 step
     12)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        function get_func1() {
-            return 10;
-        }
-        function set_func1() { }
-
-        Object.defineProperty(obj, "foo", {
-            get: get_func1,
-            set: set_func1,
-            configurable: true
-        });
-
-        function get_func2() {
-            return 20;
-        }
-        function set_func2(value) {
-            obj.setVerifyHelpProp = value;
-        }
-
-        Object.defineProperties(obj, {
-            foo: {
-                get: get_func2,
-                set: set_func2,
-                configurable: false
-            }
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "foo", get_func2, set_func2, "setVerifyHelpProp", false, false);
+
+var obj = {};
+
+function get_func1() {
+    return 10;
+}
+function set_func1() { }
+
+Object.defineProperty(obj, "foo", {
+    get: get_func1,
+    set: set_func1,
+    configurable: true
+});
+
+function get_func2() {
+    return 20;
+}
+function set_func2(value) {
+    obj.setVerifyHelpProp = value;
+}
+
+Object.defineProperties(obj, {
+    foo: {
+        get: get_func2,
+        set: set_func2,
+        configurable: false
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", get_func2());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-110.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-110.js
index 46cf1e0385..839f77cc46 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-110.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-110.js
@@ -9,40 +9,47 @@ es5id: 15.2.3.7-6-a-110
 description: >
     Object.defineProperties - all own properties (data property and
     accessor property)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        function get_func() {
-            return 10;
-        }
-        function set_func(value) {
-            obj.setVerifyHelpProp = value;
-        }
-
-        var properties = {
-            foo1: {
-                value: 200,
-                enumerable: true,
-                writable: true,
-                configurable: true
-            },
-            foo2: {
-                get: get_func,
-                set: set_func,
-                enumerable: true,
-                configurable: true
-            }
-        };
-
-        Object.defineProperties(obj, properties);
-        return dataPropertyAttributesAreCorrect(obj, "foo1", 200, true, true, true) && accessorPropertyAttributesAreCorrect(obj, "foo2", get_func, set_func, "setVerifyHelpProp", true, true);
 
+var obj = {};
+
+function get_func() {
+    return 10;
+}
+function set_func(value) {
+    obj.setVerifyHelpProp = value;
+}
+
+var properties = {
+    foo1: {
+        value: 200,
+        enumerable: true,
+        writable: true,
+        configurable: true
+    },
+    foo2: {
+        get: get_func,
+        set: set_func,
+        enumerable: true,
+        configurable: true
     }
-runTestCase(testcase);
+};
+
+Object.defineProperties(obj, properties);
+verifyEqualTo(obj, "foo1", 200);
+
+verifyWritable(obj, "foo1");
+
+verifyEnumerable(obj, "foo1");
+
+verifyConfigurable(obj, "foo1");
+verifyEqualTo(obj, "foo2", get_func());
+
+verifyWritable(obj, "foo2", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "foo2");
+
+verifyConfigurable(obj, "foo2");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-114-b.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-114-b.js
new file mode 100644
index 0000000000..fe859b48b7
--- /dev/null
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-114-b.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International.  All rights reserved.
+// Ecma International makes this code available under the terms and conditions set
+// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+// "Use Terms").   Any redistribution of this code must retain the above
+// copyright and this notice and otherwise comply with the Use Terms.
+
+/*---
+es5id: 15.2.3.7-6-a-114-b
+description: >
+    Object.defineProperties - 'O' is an Array, 'P' is the length
+    property of 'O', the [[Value]] field of 'desc' is absent, test
+    every field in 'desc' is absent (15.4.5.1 step 3.a.i)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperties(arr, { length: {} });
+
+if (arr.length !== 0) {
+    $ERROR("Expected arr.length to be 0, actually " + arr.length);
+}
+
+verifyEqualTo(arr, "length", 0);
+
+verifyWritable(arr, "length", "length", 1);
+
+verifyNotEnumerable(arr, "length");
+
+verifyNotConfigurable(arr, "length");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-114.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-114.js
index beb373ec95..a3fb021d49 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-114.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-114.js
@@ -10,32 +10,23 @@ description: >
     Object.defineProperties - 'O' is an Array, 'P' is the length
     property of 'O', the [[Value]] field of 'desc' is absent, test
     every field in 'desc' is absent (15.4.5.1 step 3.a.i)
-includes: [runTestCase.js]
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
+var arr = [];
 
-        Object.defineProperties(arr, { length: {} });
+Object.defineProperties(arr, { length: {} });
 
-        var verifyValue = false;
-        verifyValue = (arr.length === 0);
+if (arr.length !== 0) {
+    $ERROR("Expected arr.length to be 0, actually " + arr.length);
+}
 
-        var verifyWritable = false;
-        arr.length = 2;
-        verifyWritable = (arr.length === 2);
+arr.length = 2;
 
-        var verifyEnumerable = false;
-        for (var p in arr) {
-            if (p === "length") {
-                verifyEnumerable = true;
-            }
-        }
+verifyEqualTo(arr, "length", 2);
 
-        var verifyConfigurable = false;
-        delete arr.length;
-        verifyConfigurable = arr.hasOwnProperty("length");
+verifyWritable(arr, "length", "length", 5);
 
-        return verifyValue && verifyWritable && !verifyEnumerable && verifyConfigurable;
-    }
-runTestCase(testcase);
+verifyNotEnumerable(arr, "length");
+
+verifyNotConfigurable(arr, "length");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-12.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-12.js
index dd84a5faaa..baace58ec4 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-12.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-12.js
@@ -10,29 +10,35 @@ description: >
     Object.defineProperties - 'O' is a Function object which
     implements its own [[GetOwnProperty]] method to get 'P' (8.12.9
     step 1 )
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var fun = function () { };
-
-        Object.defineProperty(fun, "prop", {
-            value: 11,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperties(fun, {
-                prop: {
-                    value: 12,
-                    configurable: true
-                }
-            });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(fun, "prop", 11, false, false, false);
+var fun = function () { };
+
+Object.defineProperty(fun, "prop", {
+    value: 11,
+    configurable: false
+});
+
+try {
+    Object.defineProperties(fun, {
+        prop: {
+            value: 12,
+            configurable: true
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(fun, "prop", 11);
+
+    verifyNotWritable(fun, "prop");
+
+    verifyNotEnumerable(fun, "prop");
+
+    verifyNotConfigurable(fun, "prop");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-120.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-120.js
index 39e13d920b..f13c04cd0c 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-120.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-120.js
@@ -11,23 +11,20 @@ description: >
     property of 'O', the [[Value]] field of 'desc' is absent, test
     updating the [[Writable]] attribute of the length property from
     true to false (15.4.5.1 step 3.a.i)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
+var arr = [];
 
-        var arr = [];
+Object.defineProperties(arr, {
+    length: { writable: false }
+});
 
-        try {
-            Object.defineProperties(arr, {
-                length: { writable: false }
-            });
+verifyEqualTo(arr, "length", 0);
+
+verifyNotWritable(arr, "length");
+
+verifyNotEnumerable(arr, "length");
+
+verifyNotConfigurable(arr, "length");
 
-            return dataPropertyAttributesAreCorrect(arr, "length", 0, false, false, false);
-        } catch (e) {
-            return false;
-        }
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-13.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-13.js
index 0310a6ef91..7025f2fdbc 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-13.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-13.js
@@ -9,29 +9,35 @@ es5id: 15.2.3.7-6-a-13
 description: >
     Object.defineProperties - 'O' is an Array object which implements
     its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 )
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
-
-        Object.defineProperty(arr, "prop", {
-            value: 11,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                prop: {
-                    value: 12,
-                    configurable: true
-                }
-            });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(arr, "prop", 11, false, false, false);
+var arr = [];
+
+Object.defineProperty(arr, "prop", {
+    value: 11,
+    configurable: false
+});
+
+try {
+    Object.defineProperties(arr, {
+        prop: {
+            value: 12,
+            configurable: true
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arr, "prop", 11);
+
+    verifyNotWritable(arr, "prop");
+
+    verifyNotEnumerable(arr, "prop");
+
+    verifyNotConfigurable(arr, "prop");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-14.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-14.js
index b094ee9ef0..b99a23cdd7 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-14.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-14.js
@@ -9,29 +9,35 @@ es5id: 15.2.3.7-6-a-14
 description: >
     Object.defineProperties - 'O' is a String object which implements
     its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 )
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var str = new String();
-
-        Object.defineProperty(str, "prop", {
-            value: 11,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperties(str, {
-                prop: {
-                    value: 12,
-                    configurable: true
-                }
-            });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(str, "prop", 11, false, false, false);
+var str = new String();
+
+Object.defineProperty(str, "prop", {
+    value: 11,
+    configurable: false
+});
+
+try {
+    Object.defineProperties(str, {
+        prop: {
+            value: 12,
+            configurable: true
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(str, "prop", 11);
+
+    verifyNotWritable(str, "prop");
+
+    verifyNotEnumerable(str, "prop");
+
+    verifyNotConfigurable(str, "prop");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-15.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-15.js
index 09c6d877da..8f2d5b3254 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-15.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-15.js
@@ -9,30 +9,36 @@ es5id: 15.2.3.7-6-a-15
 description: >
     Object.defineProperties - 'O' is a Boolean object which implements
     its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 )
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-       
-        var obj = new Boolean(false);
-
-        Object.defineProperty(obj, "prop", {
-            value: 11,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperties(obj, {
-                prop: {
-                    value: 12,
-                    configurable: true
-                }
-            });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(obj, "prop", 11, false, false, false);
+
+var obj = new Boolean(false);
+
+Object.defineProperty(obj, "prop", {
+    value: 11,
+    configurable: false
+});
+
+try {
+    Object.defineProperties(obj, {
+        prop: {
+            value: 12,
+            configurable: true
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "prop", 11);
+
+    verifyNotWritable(obj, "prop");
+
+    verifyNotEnumerable(obj, "prop");
+
+    verifyNotConfigurable(obj, "prop");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-16.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-16.js
index 47ec1565c9..d6dfa319a9 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-16.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-16.js
@@ -9,30 +9,36 @@ es5id: 15.2.3.7-6-a-16
 description: >
     Object.defineProperties - 'O' is a Number object which implements
     its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 )
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = new Number(-9);
-
-        Object.defineProperty(obj, "prop", {
-            value: 11,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperties(obj, {
-                prop: {
-                    value: 12,
-                    configurable: true
-                }
-            });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(obj, "prop", 11, false, false, false);
+
+var obj = new Number(-9);
+
+Object.defineProperty(obj, "prop", {
+    value: 11,
+    configurable: false
+});
+
+try {
+    Object.defineProperties(obj, {
+        prop: {
+            value: 12,
+            configurable: true
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "prop", 11);
+
+    verifyNotWritable(obj, "prop");
+
+    verifyNotEnumerable(obj, "prop");
+
+    verifyNotConfigurable(obj, "prop");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-18.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-18.js
index f645b3f8d9..0ae37cf312 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-18.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-18.js
@@ -9,30 +9,36 @@ es5id: 15.2.3.7-6-a-18
 description: >
     Object.defineProperties - 'O' is a Date object which implements
     its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 )
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = new Date();
-
-        Object.defineProperty(obj, "prop", {
-            value: 11,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperties(obj, {
-                prop: {
-                    value: 12,
-                    configurable: true
-                }
-            });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(obj, "prop", 11, false, false, false);
+
+var obj = new Date();
+
+Object.defineProperty(obj, "prop", {
+    value: 11,
+    configurable: false
+});
+
+try {
+    Object.defineProperties(obj, {
+        prop: {
+            value: 12,
+            configurable: true
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "prop", 11);
+
+    verifyNotWritable(obj, "prop");
+
+    verifyNotEnumerable(obj, "prop");
+
+    verifyNotConfigurable(obj, "prop");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-19.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-19.js
index d6251e983b..0b31aaa75b 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-19.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-19.js
@@ -9,30 +9,36 @@ es5id: 15.2.3.7-6-a-19
 description: >
     Object.defineProperties - 'O' is a RegExp object which implements
     its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 )
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = new RegExp();
-
-        Object.defineProperty(obj, "prop", {
-            value: 11,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperties(obj, {
-                prop: {
-                    value: 12,
-                    configurable: true
-                }
-            });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(obj, "prop", 11, false, false, false);
+
+var obj = new RegExp();
+
+Object.defineProperty(obj, "prop", {
+    value: 11,
+    configurable: false
+});
+
+try {
+    Object.defineProperties(obj, {
+        prop: {
+            value: 12,
+            configurable: true
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "prop", 11);
+
+    verifyNotWritable(obj, "prop");
+
+    verifyNotEnumerable(obj, "prop");
+
+    verifyNotConfigurable(obj, "prop");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-195.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-195.js
index 6bd51acb36..f7ed703768 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-195.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-195.js
@@ -11,20 +11,21 @@ description: >
     named property, 'P' property doesn't exist in 'O', test 'P' is
     defined as data property when 'desc' is generic descriptor
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
+var arr = [];
 
-        Object.defineProperties(arr, {
-            "0": {
-                enumerable: true
-            }
-        });
-
-        return dataPropertyAttributesAreCorrect(arr, "0", undefined, false, true, false);
+Object.defineProperties(arr, {
+    "0": {
+        enumerable: true
     }
-runTestCase(testcase);
+});
+
+verifyEqualTo(arr, "0", undefined);
+
+verifyNotWritable(arr, "0");
+
+verifyEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-2.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-2.js
index 8622375b53..af582925c2 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-2.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-2.js
@@ -9,30 +9,31 @@ es5id: 15.2.3.7-6-a-2
 description: >
     Object.defineProperties - 'P' is inherited data property (8.12.9
     step 1 )
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var proto = {};
-        Object.defineProperty(proto, "prop", {
-            value: 11,
-            configurable: false
-        });
-        var Con = function () { };
-        Con.prototype = proto;
+var proto = {};
+Object.defineProperty(proto, "prop", {
+    value: 11,
+    configurable: false
+});
+var Con = function () { };
+Con.prototype = proto;
 
-        var obj = new Con();
+var obj = new Con();
 
-        Object.defineProperties(obj, {
-            prop: {
-                value: 12,
-                configurable: true
-            }
-        });
+Object.defineProperties(obj, {
+    prop: {
+        value: 12,
+        configurable: true
+    }
+});
 
-        return dataPropertyAttributesAreCorrect(obj, "prop", 12, false, false, true);
+verifyEqualTo(obj, "prop", 12);
+
+verifyNotWritable(obj, "prop");
+
+verifyNotEnumerable(obj, "prop");
+
+verifyConfigurable(obj, "prop");
 
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-200.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-200.js
index 63bcb05445..62cd8a77bc 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-200.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-200.js
@@ -10,23 +10,25 @@ description: >
     Object.defineProperties - 'O' is an Array, 'P' is an array index
     named property, 'desc' is data descriptor, test updating all
     attribute values of 'P'  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [1]; // default value of attributes: writable: true, configurable: true, enumerable: true
+var arr = [1]; // default value of attributes: writable: true, configurable: true, enumerable: true
 
-        Object.defineProperties(arr, {
-            "0": {
-                value: 1001,
-                writable: false,
-                enumerable: false,
-                configurable: false
-            }
-        });
-
-        return dataPropertyAttributesAreCorrect(arr, "0", 1001, false, false, false);
+Object.defineProperties(arr, {
+    "0": {
+        value: 1001,
+        writable: false,
+        enumerable: false,
+        configurable: false
     }
-runTestCase(testcase);
+});
+
+verifyEqualTo(arr, "0", 1001);
+
+verifyNotWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-204.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-204.js
index 54b0004f05..2947909b4d 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-204.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-204.js
@@ -12,33 +12,34 @@ description: >
     [[Configurable]] of 'P' property in 'Attributes' is set as false
     value if [[Configurable]] is absent in accessor descriptor 'desc'
     (15.4.5.1 step 4.c)
-includes: [runTestCase.js]
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
-        var beforeDeleted = false;
-        var afterDeleted = false;
-        arr.verifySetter = 100;
-
-        Object.defineProperties(arr, {
-            "0": {
-                set: function (value) {
-                    arr.verifySetter = value;
-                },
-                get: function () {
-                    return arr.verifySetter;
-                },
-                enumerable: true
-            }
-        });
-
-        beforeDeleted = arr.hasOwnProperty("0");
-        delete arr[0];
-        afterDeleted = arr.hasOwnProperty("0");
-
-        arr[0] = 101;
-
-        return beforeDeleted && afterDeleted && arr[0] === 101 && arr.verifySetter === 101;
+var arr = [];
+arr.verifySetter = 100;
+
+Object.defineProperties(arr, {
+    "0": {
+        set: function (value) {
+            arr.verifySetter = value;
+        },
+        get: function () {
+            return arr.verifySetter;
+        },
+        enumerable: true
     }
-runTestCase(testcase);
+});
+
+if (!Object.prototype.hasOwnProperty.call(arr, "0")) {
+    $ERROR("Expected hasOwnProperty to return true.");
+}
+
+arr[0] = 101;
+
+verifyEqualTo(arr, 0, 101);
+
+if (arr.verifySetter !== 101) {
+    $ERROR('Expected arr.verifySetter === 101, actually ' + arr.verifySetter);
+}
+
+verifyNotConfigurable(arr, 0);
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-205.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-205.js
index 8fa5be67a0..4693795186 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-205.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-205.js
@@ -10,40 +10,41 @@ description: >
     Object.defineProperties - 'O' is an Array, 'P' is an array index
     named property, 'desc' is accessor descriptor, test updating all
     attribute values of 'P'  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
-
-        Object.defineProperties(arr, {
-            "0": {
-                get: function () {
-                    return 11;
-                },
-                set: function () { },
-                configurable: true,
-                enumerable: true
-            }
-        });
-
-        var setFun = function (value) {
-            arr.setVerifyHelpProp = value;
-        };
-        var getFun = function () {
-            return 14;
-        };
-        Object.defineProperties(arr, {
-            "0": {
-                get: getFun,
-                set: setFun,
-                configurable: false,
-                enumerable: false
-            }
-        });
-
-        return accessorPropertyAttributesAreCorrect(arr, "0", getFun, setFun, "setVerifyHelpProp", false, false);
+var arr = [];
+
+Object.defineProperties(arr, {
+    "0": {
+        get: function () {
+            return 11;
+        },
+        set: function () { },
+        configurable: true,
+        enumerable: true
+    }
+});
+
+var setFun = function (value) {
+    arr.setVerifyHelpProp = value;
+};
+var getFun = function () {
+    return 14;
+};
+Object.defineProperties(arr, {
+    "0": {
+        get: getFun,
+        set: setFun,
+        configurable: false,
+        enumerable: false
     }
-runTestCase(testcase);
+});
+
+verifyEqualTo(arr, "0", getFun());
+
+verifyWritable(arr, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-206.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-206.js
index 150ed4111a..a34b317d11 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-206.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-206.js
@@ -10,23 +10,21 @@ description: >
     Object.defineProperties - 'O' is an Array, 'P' is an array index
     named property, 'P' makes no change if every field in 'desc' is
     absent (name is data property)  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
-
-        arr[0] = 101; // default value of attributes: writable: true, configurable: true, enumerable: true
-
-        try {
-            Object.defineProperties(arr, {
-                "0": {}
-            });
-            return dataPropertyAttributesAreCorrect(arr, "0", 101, true, true, true);
-        } catch (e) {
-            return false;
-        }
-    }
-runTestCase(testcase);
+var arr = [];
+
+arr[0] = 101; // default value of attributes: writable: true, configurable: true, enumerable: true
+
+
+Object.defineProperties(arr, {
+    "0": {}
+});
+verifyEqualTo(arr, "0", 101);
+
+verifyWritable(arr, "0");
+
+verifyEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-207.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-207.js
index 406e09285d..ffa8d6cc82 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-207.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-207.js
@@ -10,35 +10,33 @@ description: >
     Object.defineProperties - 'O' is an Array, 'P' is an array index
     named property, 'P' makes no change if every field in 'desc' is
     absent (name is accessor property)  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
-
-        function get_func() {
-            return 11;
-        }
-        function set_func(value) {
-            arr.setVerifyHelpProp = value;
-        }
-
-        Object.defineProperty(arr, "0", {
-            get: get_func,
-            set: set_func,
-            enumerable: true,
-            configurable: true
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "0": {}
-            });
-            return accessorPropertyAttributesAreCorrect(arr, "0", get_func, set_func, "setVerifyHelpProp", true, true);
-        } catch (e) {
-            return false;
-        }
-    }
-runTestCase(testcase);
+var arr = [];
+
+function get_func() {
+    return 11;
+}
+function set_func(value) {
+    arr.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(arr, "0", {
+    get: get_func,
+    set: set_func,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperties(arr, {
+    "0": {}
+});
+verifyEqualTo(arr, "0", get_func());
+
+verifyWritable(arr, "0", "setVerifyHelpProp");
+
+verifyEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-208.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-208.js
index a0bc75abc0..ffb7ac7ba1 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-208.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-208.js
@@ -11,25 +11,26 @@ description: >
     named property, 'P' makes no change if the value of every field in
     'desc' is the same value as the corresponding field in 'P'(desc is
     data property)  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
+var arr = [];
 
-        arr[0] = 100; // default value of attributes: writable: true, configurable: true, enumerable: true
+arr[0] = 100; // default value of attributes: writable: true, configurable: true, enumerable: true
 
-        Object.defineProperties(arr, {
-            "0": {
-                value: 100,
-                writable: true,
-                enumerable: true,
-                configurable: true
-            }
-        });
-
-        return dataPropertyAttributesAreCorrect(arr, "0", 100, true, true, true);
+Object.defineProperties(arr, {
+    "0": {
+        value: 100,
+        writable: true,
+        enumerable: true,
+        configurable: true
     }
-runTestCase(testcase);
+});
+
+verifyEqualTo(arr, "0", 100);
+
+verifyWritable(arr, "0");
+
+verifyEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-209.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-209.js
index 5ba2fa5dd9..1905dc0dc7 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-209.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-209.js
@@ -11,35 +11,36 @@ description: >
     named property, 'P' makes no change if the value of every field in
     'desc' is the same value as the corresponding field in 'P'(desc is
     accessor property)  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
-        var get_func = function () {
-            return "100";
-        };
-        var set_func = function (value) {
-            arr.setVerifyHelpProp = value;
-        };
-
-        var descObj = {
-            get: get_func,
-            set: set_func,
-            enumerable: true,
-            configurable: true
-        };
-        
-        var properties = {
-            "0": descObj
-        };
-
-        Object.defineProperty(arr, "0", descObj);
-
-        Object.defineProperties(arr, properties);
-
-        return accessorPropertyAttributesAreCorrect(arr, "0", get_func, set_func, "setVerifyHelpProp", true, true);
-    }
-runTestCase(testcase);
+var arr = [];
+var get_func = function () {
+    return "100";
+};
+var set_func = function (value) {
+    arr.setVerifyHelpProp = value;
+};
+
+var descObj = {
+    get: get_func,
+    set: set_func,
+    enumerable: true,
+    configurable: true
+};
+
+var properties = {
+    "0": descObj
+};
+
+Object.defineProperty(arr, "0", descObj);
+
+Object.defineProperties(arr, properties);
+
+verifyEqualTo(arr, "0", get_func());
+
+verifyWritable(arr, "0", "setVerifyHelpProp");
+
+verifyEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-21.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-21.js
index d87892727b..2c51a33341 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-21.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-21.js
@@ -9,30 +9,36 @@ es5id: 15.2.3.7-6-a-21
 description: >
     Object.defineProperties - 'O' is an Error object which implements
     its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 )
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = new Error();
-
-        Object.defineProperty(obj, "prop", {
-            value: 11,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperties(obj, {
-                prop: {
-                    value: 12,
-                    configurable: true
-                }
-            });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(obj, "prop", 11, false, false, false);
+
+var obj = new Error();
+
+Object.defineProperty(obj, "prop", {
+    value: 11,
+    configurable: false
+});
+
+try {
+    Object.defineProperties(obj, {
+        prop: {
+            value: 12,
+            configurable: true
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "prop", 11);
+
+    verifyNotWritable(obj, "prop");
+
+    verifyNotEnumerable(obj, "prop");
+
+    verifyNotConfigurable(obj, "prop");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-210.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-210.js
index a3ae0fcabb..b228c5a316 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-210.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-210.js
@@ -11,23 +11,24 @@ description: >
     index property, both the [[Value]] field of 'desc' and the
     [[Value]] attribute value of 'name' are undefined  (15.4.5.1 step
     4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
+var arr = [];
 
-        Object.defineProperty(arr, "0", {
-            value: undefined
-        });
+Object.defineProperty(arr, "0", {
+    value: undefined
+});
 
-        Object.defineProperties(arr, {
-            "0": {
-                value: undefined
-            }
-        });
-        return dataPropertyAttributesAreCorrect(arr, "0", undefined, false, false, false);
+Object.defineProperties(arr, {
+    "0": {
+        value: undefined
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "0", undefined);
+
+verifyNotWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-211.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-211.js
index e732b47ac4..a12e691152 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-211.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-211.js
@@ -10,23 +10,24 @@ description: >
     Object.defineProperties - 'O' is an Array, 'name' is an array
     index property, both the [[Value]] field of 'desc' and the
     [[Value]] attribute value of 'name' are null  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
+var arr = [];
 
-        Object.defineProperty(arr, "0", {
-            value: null
-        });
+Object.defineProperty(arr, "0", {
+    value: null
+});
 
-        Object.defineProperties(arr, {
-            "0": {
-                value: null
-            }
-        });
-        return dataPropertyAttributesAreCorrect(arr, "0", null, false, false, false);
+Object.defineProperties(arr, {
+    "0": {
+        value: null
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "0", null);
+
+verifyNotWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-212.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-212.js
index 9bec4223e3..29020dd93a 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-212.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-212.js
@@ -10,24 +10,25 @@ description: >
     Object.defineProperties - 'O' is an Array, 'name' is an array
     index property, both the [[Value]] field of 'desc' and the
     [[Value]] attribute value of 'name' are NaN  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
+var arr = [];
 
-        Object.defineProperty(arr, "0", {
-            value: NaN
-        });
+Object.defineProperty(arr, "0", {
+    value: NaN
+});
 
-        Object.defineProperties(arr, {
-            "0": {
-                value: NaN
-            }
-        });
-
-        return dataPropertyAttributesAreCorrect(arr, "0", NaN, false, false, false);
+Object.defineProperties(arr, {
+    "0": {
+        value: NaN
     }
-runTestCase(testcase);
+});
+
+verifyEqualTo(arr, "0", NaN);
+
+verifyNotWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-213.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-213.js
index 23b3b1ff09..7e3d97463b 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-213.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-213.js
@@ -10,27 +10,33 @@ description: >
     Object.defineProperties - 'O' is an Array, 'name' is an array
     index property, the [[Value]] field of 'desc' is +0, and the
     [[Value]] attribute value of 'name' is -0  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
-
-        Object.defineProperty(arr, "0", {
-            value: -0
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "0": {
-                    value: +0
-                }
-            });
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "0", -0, false, false, false);
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+    value: -0
+});
+
+try {
+    Object.defineProperties(arr, {
+        "0": {
+            value: +0
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arr, "0", -0);
+
+    verifyNotWritable(arr, "0");
+
+    verifyNotEnumerable(arr, "0");
+
+    verifyNotConfigurable(arr, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-214.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-214.js
index f6c82c5216..0476b149f4 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-214.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-214.js
@@ -10,27 +10,33 @@ description: >
     Object.defineProperties - 'O' is an Array, 'name' is an array
     index property, the [[Value]] field of 'desc' is -0, and the
     [[Value]] attribute value of 'name' is +0  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
-
-        Object.defineProperty(arr, "0", {
-            value: +0
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "0": {
-                    value: -0
-                }
-            });
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "0", +0, false, false, false);
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+    value: +0
+});
+
+try {
+    Object.defineProperties(arr, {
+        "0": {
+            value: -0
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arr, "0", +0);
+
+    verifyNotWritable(arr, "0");
+
+    verifyNotEnumerable(arr, "0");
+
+    verifyNotConfigurable(arr, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-215.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-215.js
index 84b4915818..7241d777dd 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-215.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-215.js
@@ -11,27 +11,24 @@ description: >
     index property, the [[Value]] field of 'desc' and the [[Value]]
     attribute value of 'name' are two numbers with same vaule
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
+var arr = [];
 
-        Object.defineProperty(arr, "0", {
-            value: 101
-        });
+Object.defineProperty(arr, "0", {
+    value: 101
+});
 
-        try {
-            Object.defineProperties(arr, {
-                "0": {
-                    value: 101
-                }
-            });
-            return dataPropertyAttributesAreCorrect(arr, "0", 101, false, false, false);
-        } catch (e) {
-            return false;
-        }
+Object.defineProperties(arr, {
+    "0": {
+        value: 101
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "0", 101);
+
+verifyNotWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-216.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-216.js
index d31ab7a424..6b7064c9ac 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-216.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-216.js
@@ -11,27 +11,25 @@ description: >
     index property, the [[Value]] field of 'desc' and the [[Value]]
     attribute value of 'name' are two strings which have same length
     and same characters in corresponding positions  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
-
-        Object.defineProperty(arr, "0", {
-            value: "abcd"
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "0": {
-                    value: "abcd"
-                }
-            });
-            return dataPropertyAttributesAreCorrect(arr, "0", "abcd", false, false, false);
-        } catch (e) {
-            return false;
-        }
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+    value: "abcd"
+});
+
+Object.defineProperties(arr, {
+    "0": {
+        value: "abcd"
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "0", "abcd");
+
+verifyNotWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-217.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-217.js
index 828b925553..7e29d6ac6e 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-217.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-217.js
@@ -11,27 +11,25 @@ description: >
     index property, the [[Value]] field of 'desc' and the [[Value]]
     attribute value of 'name' are two booleans with same value
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
-
-        Object.defineProperty(arr, "0", {
-            value: true
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "0": {
-                    value: true
-                }
-            });
-            return dataPropertyAttributesAreCorrect(arr, "0", true, false, false, false);
-        } catch (e) {
-            return false;
-        }
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+    value: true
+});
+
+Object.defineProperties(arr, {
+    "0": {
+        value: true
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "0", true);
+
+verifyNotWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-218.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-218.js
index 79613d2e08..a354697c59 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-218.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-218.js
@@ -11,29 +11,28 @@ description: >
     index property, the [[Value]] field of 'desc' and the [[Value]]
     attribute value of 'name' are two objects which refer to the same
     object  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
-
-        var obj1 = { length: 10 };
-        Object.defineProperty(arr, "0", {
-            value: obj1
-        });
-
-        var properties = {
-            "0": {
-                value: obj1
-            }
-        };
-        try {
-            Object.defineProperties(arr, properties);
-            return dataPropertyAttributesAreCorrect(arr, "0", obj1, false, false, false);
-        } catch (e) {
-            return false;
-        }
+var arr = [];
+
+var obj1 = { length: 10 };
+Object.defineProperty(arr, "0", {
+    value: obj1
+});
+
+var properties = {
+    "0": {
+        value: obj1
     }
-runTestCase(testcase);
+};
+
+Object.defineProperties(arr, properties);
+verifyEqualTo(arr, "0", obj1);
+
+verifyNotWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-219.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-219.js
index 1ea718c282..2fef482221 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-219.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-219.js
@@ -10,27 +10,25 @@ description: >
     Object.defineProperties - 'O' is an Array, 'P' is an array index
     property that already exists on 'O' with [[Writable]] true, and
     the [[Writable]] field of 'desc' is true  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
-
-        Object.defineProperty(arr, "0", {
-            writable: true
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "0": {
-                    writable: true
-                }
-            });
-            return dataPropertyAttributesAreCorrect(arr, "0", undefined, true, false, false);
-        } catch (e) {
-            return false;
-        }
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+    writable: true
+});
+
+Object.defineProperties(arr, {
+    "0": {
+        writable: true
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "0", undefined);
+
+verifyWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-220.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-220.js
index ea67a91e2b..479f738ef8 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-220.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-220.js
@@ -10,28 +10,26 @@ description: >
     Object.defineProperties - 'O' is an Array, 'P' is an array index
     property that already exists on 'O' with [[Writable]] true, and
     the [[Writable]] field of 'desc' is false  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
-
-        Object.defineProperty(arr, "0", {
-            writable: true,
-            configurable: true
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "0": {
-                    writable: false
-                }
-            });
-            return dataPropertyAttributesAreCorrect(arr, "0", undefined, false, false, true);
-        } catch (e) {
-            return false;
-        }
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+    writable: true,
+    configurable: true
+});
+
+Object.defineProperties(arr, {
+    "0": {
+        writable: false
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "0", undefined);
+
+verifyNotWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-221.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-221.js
index 63e162462f..d27e3ed76d 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-221.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-221.js
@@ -11,27 +11,26 @@ description: >
     property, the [[Get]] field of 'desc' and the [[Get]] attribute
     value of 'P' are two objects which refer to the same object
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
+var arr = [];
 
-        function get_func() {
-            return 10;
-        }
+function get_func() {
+    return 10;
+}
 
-        Object.defineProperty(arr, "0", {
-            get: get_func
-        });
+Object.defineProperty(arr, "0", {
+    get: get_func
+});
 
-        Object.defineProperties(arr, {
-            "0": {
-                get: get_func
-            }
-        });
-        return accessorPropertyAttributesAreCorrect(arr, "0", get_func, undefined, undefined, false, false);
+Object.defineProperties(arr, {
+    "0": {
+        get: get_func
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "0", get_func());
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-222.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-222.js
index c982b46c18..537ec63e1d 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-222.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-222.js
@@ -11,31 +11,26 @@ description: >
     property, the [[Set]] field of 'desc' and the [[Set]] attribute
     value of 'P' are two objects which refer to the same object
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
+var arr = [];
 
-        function set_func(value) {
-            arr.setVerifyHelpProp = value;
-        }
+function set_func(value) {
+    arr.setVerifyHelpProp = value;
+}
 
-        Object.defineProperty(arr, "0", {
-            set: set_func
-        });
+Object.defineProperty(arr, "0", {
+    set: set_func
+});
 
-        try {
-            Object.defineProperties(arr, {
-                "0": {
-                    set: set_func
-                }
-            });
-            return accessorPropertyAttributesAreCorrect(arr, "0", undefined, set_func, "setVerifyHelpProp", false, false);
-        } catch (e) {
-            return false;
-        }
+Object.defineProperties(arr, {
+    "0": {
+        set: set_func
     }
-runTestCase(testcase);
+});
+verifyWritable(arr, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-223.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-223.js
index 0c587ae74b..1dd76d12c9 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-223.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-223.js
@@ -10,27 +10,25 @@ description: >
     Object.defineProperties - 'O' is an Array, 'P' is an array index
     property that already exists on 'O' with  [[Enumerable]] true, the
     [[Enumerable]] field of 'desc' is true  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
-
-        Object.defineProperty(arr, "0", {
-            enumerable: true
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "0": {
-                    enumerable: true
-                }
-            });
-            return dataPropertyAttributesAreCorrect(arr, "0", undefined, false, true, false);
-        } catch (e) {
-            return false;
-        }
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+    enumerable: true
+});
+
+Object.defineProperties(arr, {
+    "0": {
+        enumerable: true
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "0", undefined);
+
+verifyNotWritable(arr, "0");
+
+verifyEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-224.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-224.js
index 62274038e5..6ce350a6f2 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-224.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-224.js
@@ -10,28 +10,26 @@ description: >
     Object.defineProperties - 'O' is an Array, 'P' is an array index
     property that already exists on 'O' with  [[Enumerable]] true, the
     [[Enumerable]] field of 'desc' is false  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
-
-        Object.defineProperty(arr, "0", {
-            enumerable: true,
-            configurable: true
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "0": {
-                    enumerable: false
-                }
-            });
-            return dataPropertyAttributesAreCorrect(arr, "0", undefined, false, false, true);
-        } catch (e) {
-            return false;
-        }
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperties(arr, {
+    "0": {
+        enumerable: false
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "0", undefined);
+
+verifyNotWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-225.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-225.js
index a7f972595e..dbdd70f664 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-225.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-225.js
@@ -10,27 +10,25 @@ description: >
     Object.defineProperties - 'O' is an Array, 'P' is an array index
     property that already exists on 'O' with [[Configurable]] true,
     the [[Configurable]] field of 'desc' is true (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
-
-        Object.defineProperty(arr, "0", {
-            configurable: true
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "0": {
-                    configurable: true
-                }
-            });
-            return dataPropertyAttributesAreCorrect(arr, "0", undefined, false, false, true);
-        } catch (e) {
-            return false;
-        }
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+    configurable: true
+});
+
+Object.defineProperties(arr, {
+    "0": {
+        configurable: true
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "0", undefined);
+
+verifyNotWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-226.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-226.js
index f7d174a536..b21715c926 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-226.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-226.js
@@ -10,27 +10,25 @@ description: >
     Object.defineProperties - 'O' is an Array, 'P' is an array index
     property that already exists on 'O' with [[Configurable]] true,
     the [[Configurable]] field of 'desc' is false (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
-
-        Object.defineProperty(arr, "0", {
-            configurable: true
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "0": {
-                    configurable: false
-                }
-            });
-            return dataPropertyAttributesAreCorrect(arr, "0", undefined, false, false, false);
-        } catch (e) {
-            return false;
-        }
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+    configurable: true
+});
+
+Object.defineProperties(arr, {
+    "0": {
+        configurable: false
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "0", undefined);
+
+verifyNotWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-227.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-227.js
index b89ee1eb86..21ee69da4b 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-227.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-227.js
@@ -11,30 +11,35 @@ description: >
     property, TypeError is thrown if the [[Configurable]] attribute
     value of 'P' is false  and the [[Configurable]] field of 'desc' is
     true  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var arr = [];
-
-        Object.defineProperty(arr, "1", {
-            value: 3,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "1": {
-                    value: 13,
-                    configurable: true
-                }
-            });
-            return false;
-        } catch (ex) {
-            return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "1", 3, false, false, false);
+
+var arr = [];
+
+Object.defineProperty(arr, "1", {
+    value: 3,
+    configurable: false
+});
+
+try {
+    Object.defineProperties(arr, {
+        "1": {
+            value: 13,
+            configurable: true
         }
+    });
+} catch (e) {
+    verifyEqualTo(arr, "1", 3);
+
+    verifyNotWritable(arr, "1");
+
+    verifyNotEnumerable(arr, "1");
+
+    verifyNotConfigurable(arr, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-228.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-228.js
index 2e81f368d9..4149ef4e97 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-228.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-228.js
@@ -12,32 +12,38 @@ description: >
     value of 'P' is false, and [[Enumerable]] of 'desc' is present and
     its value is different from the [[Enumerable]] attribute value of
     'P'  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [];
+var arr = [];
 
-        Object.defineProperty(arr, "1", {
-            value: 3,
-            configurable: false,
-            enumerable: false
+Object.defineProperty(arr, "1", {
+    value: 3,
+    configurable: false,
+    enumerable: false
 
-        });
+});
 
-        try {
-            Object.defineProperties(arr, {
-                "1": {
-                    value: 13,
-                    enumerable: true
-                }
-            });
-            return false;
-        } catch (ex) {
-            return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "1", 3, false, false, false);
+try {
+    Object.defineProperties(arr, {
+        "1": {
+            value: 13,
+            enumerable: true
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arr, "1", 3);
+
+    verifyNotWritable(arr, "1");
+
+    verifyNotEnumerable(arr, "1");
+
+    verifyNotConfigurable(arr, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-229.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-229.js
index b58d7049e0..2a6e9be262 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-229.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-229.js
@@ -11,35 +11,39 @@ description: >
     property, TypeError is thrown if 'P' is accessor property, and
     'desc' is data descriptor, and the [[Configurable]] attribute
     value of 'P' is false  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [];
+var arr = [];
 
-        function set_fun(value) {
-            arr.setVerifyHelpProp = value;
+function set_fun(value) {
+    arr.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(arr, "1", {
+    set: set_fun,
+    configurable: false
+
+});
+
+try {
+    Object.defineProperties(arr, {
+        "1": {
+            value: 13
         }
+    });
+    $ERROR("Expected an exception.");
 
-        Object.defineProperty(arr, "1", {
-            set: set_fun,
-            configurable: false
+} catch (e) {
+    verifyWritable(arr, "1", "setVerifyHelpProp");
 
-        });
+    verifyNotEnumerable(arr, "1");
 
-        try {
-            Object.defineProperties(arr, {
-                "1": {
-                    value: 13
-                }
-            });
-            return false;
+    verifyNotConfigurable(arr, "1");
 
-        } catch (ex) {
-            return (ex instanceof TypeError) && accessorPropertyAttributesAreCorrect(arr, "1", undefined, set_fun, "setVerifyHelpProp", false, false);
-        }
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-230.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-230.js
index d242800b93..be60a59031 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-230.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-230.js
@@ -11,29 +11,35 @@ description: >
     property, TypeError is thrown if  'P' is data property, and'desc'
     is accessor descriptor, and the [[Configurable]] attribute value
     of 'P' is false  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [];
+var arr = [];
 
-        Object.defineProperty(arr, "1", {
-            value: 3,
-            configurable: false
-        });
+Object.defineProperty(arr, "1", {
+    value: 3,
+    configurable: false
+});
 
-        try {
-            Object.defineProperties(arr, {
-                "1": {
-                    set: function () { }
-                }
-            });
-            return false;
-        } catch (ex) {
-            return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "1", 3, false, false, false);
+try {
+    Object.defineProperties(arr, {
+        "1": {
+            set: function () { }
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arr, "1", 3);
+
+    verifyNotWritable(arr, "1");
+
+    verifyNotEnumerable(arr, "1");
+
+    verifyNotConfigurable(arr, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-231.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-231.js
index d96779415d..09f1d053db 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-231.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-231.js
@@ -12,25 +12,24 @@ description: >
     and the [[Configurable]] attribute value of 'P' is true, test 'P'
     is converted from data property to accessor property  (15.4.5.1
     step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
-        arr[1] = 3; // default value of attributes: writable: true, configurable: true, enumerable: true
+var arr = [];
+arr[1] = 3; // default value of attributes: writable: true, configurable: true, enumerable: true
 
-        function set_fun(value) {
-            arr.setVerifyHelpProp = value;
-        }
+function set_fun(value) {
+    arr.setVerifyHelpProp = value;
+}
 
-        Object.defineProperties(arr, {
-            "1": {
-                set: set_fun
-            }
-        });
-
-        return accessorPropertyAttributesAreCorrect(arr, "1", undefined, set_fun, "setVerifyHelpProp", true, true);
+Object.defineProperties(arr, {
+    "1": {
+        set: set_fun
     }
-runTestCase(testcase);
+});
+
+verifyWritable(arr, "1", "setVerifyHelpProp");
+
+verifyEnumerable(arr, "1");
+
+verifyConfigurable(arr, "1");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-232.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-232.js
index f60491fb73..94b01f5353 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-232.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-232.js
@@ -12,28 +12,29 @@ description: >
     and the [[Configurable]] attribute value of 'P' is true, test 'P'
     is converted from accessor property to data property  (15.4.5.1
     step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
+var arr = [];
 
-        Object.defineProperty(arr, "1", {
-            get: function () {
-                return 3;
-            },
-            configurable: true
+Object.defineProperty(arr, "1", {
+    get: function () {
+        return 3;
+    },
+    configurable: true
 
-        });
+});
 
-        Object.defineProperties(arr, {
-            "1": {
-                value: 12
-            }
-        });
-
-        return dataPropertyAttributesAreCorrect(arr, "1", 12, false, false, true);
+Object.defineProperties(arr, {
+    "1": {
+        value: 12
     }
-runTestCase(testcase);
+});
+
+verifyEqualTo(arr, "1", 12);
+
+verifyNotWritable(arr, "1");
+
+verifyNotEnumerable(arr, "1");
+
+verifyConfigurable(arr, "1");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-233.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-233.js
index f546ecea13..3730f47db4 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-233.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-233.js
@@ -13,30 +13,36 @@ description: >
     TypeError is thrown if the [[Writable]] attribute value of 'P' is
     false and the [[Writable]] field of 'desc' is true.  (15.4.5.1
     step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [];
+var arr = [];
 
-        Object.defineProperty(arr, "1", {
-            configurable: false,
-            writable: false
+Object.defineProperty(arr, "1", {
+    configurable: false,
+    writable: false
 
-        });
+});
 
-        try {
-            Object.defineProperties(arr, {
-                "1": {
-                    writable: true
-                }
-            });
-            return false;
-        } catch (ex) {
-            return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "1", undefined, false, false, false);
+try {
+    Object.defineProperties(arr, {
+        "1": {
+            writable: true
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arr, "1", undefined);
+
+    verifyNotWritable(arr, "1");
+
+    verifyNotEnumerable(arr, "1");
+
+    verifyNotConfigurable(arr, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-234.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-234.js
index 5adafc9cc1..272f82d8a8 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-234.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-234.js
@@ -14,31 +14,37 @@ description: >
     false, and the type of the [[Value]] field of 'desc' is different
     from the type of the [[Value]] attribute value of 'P'  (15.4.5.1
     step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [];
+var arr = [];
 
-        Object.defineProperty(arr, "1", {
-            value: 3,
-            configurable: false,
-            writable: false
-        });
+Object.defineProperty(arr, "1", {
+    value: 3,
+    configurable: false,
+    writable: false
+});
 
-        try {
+try {
 
-            Object.defineProperties(arr, {
-                "1": {
-                    value: "abc"
-                }
-            });
-            return false;
-        } catch (ex) {
-            return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "1", 3, false, false, false);
+    Object.defineProperties(arr, {
+        "1": {
+            value: "abc"
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arr, "1", 3);
+
+    verifyNotWritable(arr, "1");
+
+    verifyNotEnumerable(arr, "1");
+
+    verifyNotConfigurable(arr, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-235.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-235.js
index 8c915439ac..f9efe09713 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-235.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-235.js
@@ -12,27 +12,33 @@ description: >
     data property with  [[Configurable]], [[Writable]] false, 'desc'
     is data descriptor, [[Value]] field of 'desc' is +0, and the
     [[Value]] attribute value of 'P' is -0  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
-
-        Object.defineProperty(arr, "1", {
-            value: +0
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "1": {
-                    value: -0
-                }
-            });
-            return false;
-        } catch (ex) {
-            return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "1", +0, false, false, false);
+var arr = [];
+
+Object.defineProperty(arr, "1", {
+    value: +0
+});
+
+try {
+    Object.defineProperties(arr, {
+        "1": {
+            value: -0
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arr, "1", +0);
+
+    verifyNotWritable(arr, "1");
+
+    verifyNotEnumerable(arr, "1");
+
+    verifyNotConfigurable(arr, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-236.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-236.js
index 6b8a8ad32a..2b7949e7ae 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-236.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-236.js
@@ -12,28 +12,34 @@ description: >
     data property with  [[Configurable]], [[Writable]] false, 'desc'
     is data descriptor, [[Value]] field of 'desc' is -0, and the
     [[Value]] attribute value of 'P' is +0  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
+var arr = [];
 
-        Object.defineProperty(arr, "1", {
-            value: -0
-        });
+Object.defineProperty(arr, "1", {
+    value: -0
+});
 
-        try {
-            Object.defineProperties(arr, {
-                "1": {
-                    value: +0
-                }
-            });
-
-            return false;
-        } catch (ex) {
-            return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "1", -0, false, false, false);
+try {
+    Object.defineProperties(arr, {
+        "1": {
+            value: +0
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arr, "1", -0);
+
+    verifyNotWritable(arr, "1");
+
+    verifyNotEnumerable(arr, "1");
+
+    verifyNotConfigurable(arr, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-237.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-237.js
index ac6fe0f2fc..748d0f2a63 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-237.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-237.js
@@ -13,27 +13,34 @@ description: >
     is data descriptor, [[Value]] field of 'desc' and the [[Value]]
     attribute value of 'P' are two numbers with different vaule
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
-
-        Object.defineProperty(arr, "1", {
-            value: 12
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "1": {
-                    value: 36
-                }
-            });
-            return false;
-        } catch (ex) {
-            return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "1", 12, false, false, false);
+
+var arr = [];
+
+Object.defineProperty(arr, "1", {
+    value: 12
+});
+
+try {
+    Object.defineProperties(arr, {
+        "1": {
+            value: 36
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arr, "1", 12);
+
+    verifyNotWritable(arr, "1");
+
+    verifyNotEnumerable(arr, "1");
+
+    verifyNotConfigurable(arr, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-238.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-238.js
index 91573862c2..d35c9dc1bd 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-238.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-238.js
@@ -13,27 +13,33 @@ description: >
     is data descriptor, [[Value]] field of 'desc' and the [[Value]]
     attribute value of 'P' are two strings with different values
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
-
-        Object.defineProperty(arr, "1", {
-            value: "abcd"
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "1": {
-                    value: "efgh"
-                }
-            });
-            return false;
-        } catch (ex) {
-            return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "1", "abcd", false, false, false);
+var arr = [];
+
+Object.defineProperty(arr, "1", {
+    value: "abcd"
+});
+
+try {
+    Object.defineProperties(arr, {
+        "1": {
+            value: "efgh"
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arr, "1", "abcd");
+
+    verifyNotWritable(arr, "1");
+
+    verifyNotEnumerable(arr, "1");
+
+    verifyNotConfigurable(arr, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-239.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-239.js
index ae155c7e44..59747d500b 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-239.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-239.js
@@ -13,28 +13,34 @@ description: >
     is data descriptor, [[Value]] field of 'desc' and the [[Value]]
     attribute value of 'P' are two booleans with different values
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
+var arr = [];
 
-        Object.defineProperty(arr, "1", {
-            value: true
-        });
+Object.defineProperty(arr, "1", {
+    value: true
+});
 
-        try {
-            Object.defineProperties(arr, {
-                "1": {
-                    value: false
-                }
-            });
-
-            return false;
-        } catch (ex) {
-            return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "1", true, false, false, false);
+try {
+    Object.defineProperties(arr, {
+        "1": {
+            value: false
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arr, "1", true);
+
+    verifyNotWritable(arr, "1");
+
+    verifyNotEnumerable(arr, "1");
+
+    verifyNotConfigurable(arr, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-24.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-24.js
index c7272405d3..4867fb4755 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-24.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-24.js
@@ -10,30 +10,29 @@ description: >
     Object.defineProperties - 'O' is the global object which
     implements its own [[GetOwnProperty]] method to get 'P' (8.12.9
     step 1 )
-includes:
-    - runTestCase.js
-    - fnGlobalObject.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js, fnGlobalObject.js]
 ---*/
 
-function testcase() {
-
-        try {
-            Object.defineProperty(fnGlobalObject(), "prop", {
-                value: 11,
-                writable: true,
-                enumerable: true,
-                configurable: true
-            });
-
-            Object.defineProperties(fnGlobalObject(), {
-                prop: {
-                    value: 12
-                }
-            });
-            return dataPropertyAttributesAreCorrect(fnGlobalObject(), "prop", 12, true, true, true);
-        }  finally {
-            delete fnGlobalObject().prop;
-        }
+
+Object.defineProperty(fnGlobalObject(), "prop", {
+value: 11,
+writable: true,
+enumerable: true,
+configurable: true
+});
+
+Object.defineProperties(fnGlobalObject(), {
+    prop: {
+        value: 12
     }
-runTestCase(testcase);
+});
+
+verifyEqualTo(fnGlobalObject(), "prop", 12);
+
+verifyWritable(fnGlobalObject(), "prop");
+
+verifyEnumerable(fnGlobalObject(), "prop");
+
+verifyConfigurable(fnGlobalObject(), "prop");
+
+delete fnGlobalObject().prop;
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-240.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-240.js
index ca06eceb26..42d173b7ae 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-240.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-240.js
@@ -13,30 +13,36 @@ description: >
     is data descriptor, [[Value]] field of 'desc' and the [[Value]]
     attribute value of 'P' are two objects which refer to the
     different objects (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
-        var obj1 = { value: 12 };
-        var obj2 = { value: 36 };
-
-        Object.defineProperty(arr, "1", {
-            value: obj1
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "1": {
-                    value: obj2
-                }
-            });
-
-            return false;
-        } catch (ex) {
-            return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "1", obj1, false, false, false);
+var arr = [];
+var obj1 = { value: 12 };
+var obj2 = { value: 36 };
+
+Object.defineProperty(arr, "1", {
+    value: obj1
+});
+
+try {
+    Object.defineProperties(arr, {
+        "1": {
+            value: obj2
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arr, "1", obj1);
+
+    verifyNotWritable(arr, "1");
+
+    verifyNotEnumerable(arr, "1");
+
+    verifyNotConfigurable(arr, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-241.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-241.js
index 2b013a35c2..1f393c18c5 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-241.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-241.js
@@ -14,31 +14,35 @@ description: >
     [[Set]] field of 'desc' and the [[Set]] attribute value of 'P' are
     two objects which refer to the different objects  (15.4.5.1 step
     4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
+var arr = [];
 
-        function set_fun(value) {
-            arr.setVerifyHelpProp = value;
-        }
-        Object.defineProperty(arr, "1", {
-            set: set_fun
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "1": {
-                    set: function () { }
-                }
-            });
-
-            return false;
-        } catch (ex) {
-            return (ex instanceof TypeError) && accessorPropertyAttributesAreCorrect(arr, "1", undefined, set_fun, "setVerifyHelpProp", false, false);
+function set_fun(value) {
+    arr.setVerifyHelpProp = value;
+}
+Object.defineProperty(arr, "1", {
+    set: set_fun
+});
+
+try {
+    Object.defineProperties(arr, {
+        "1": {
+            set: function () { }
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyWritable(arr, "1", "setVerifyHelpProp");
+
+    verifyNotEnumerable(arr, "1");
+
+    verifyNotConfigurable(arr, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-242.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-242.js
index b3bf558257..c34f8fd239 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-242.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-242.js
@@ -13,31 +13,35 @@ description: >
     descriptor, the [[Set]] field of 'desc' is present, and the
     [[Set]] field of 'desc' is an object and the [[Set]] attribute
     value of 'P' is undefined   (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
+var arr = [];
 
-        function set_fun(value) {
-            arr.setVerifyHelpProp = value;
-        }
-        Object.defineProperty(arr, "1", {
-            set: set_fun
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "1": {
-                    set: undefined
-                }
-            });
-
-            return false;
-        } catch (ex) {
-            return (ex instanceof TypeError) && accessorPropertyAttributesAreCorrect(arr, "1", undefined, set_fun, "setVerifyHelpProp", false, false);
+function set_fun(value) {
+    arr.setVerifyHelpProp = value;
+}
+Object.defineProperty(arr, "1", {
+    set: set_fun
+});
+
+try {
+    Object.defineProperties(arr, {
+        "1": {
+            set: undefined
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyWritable(arr, "1", "setVerifyHelpProp");
+
+    verifyNotEnumerable(arr, "1");
+
+    verifyNotConfigurable(arr, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-243.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-243.js
index 61cef225ca..e04d6537e4 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-243.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-243.js
@@ -13,24 +13,21 @@ description: >
     accessor descriptor, the [[Set]] field of 'desc' is present, and
     the [[Set]] field of 'desc' and the [[Set]] attribute value of 'P'
     are undefined  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
+var arr = [];
 
-        Object.defineProperty(arr, "1", {
-            set: undefined
-        });
+Object.defineProperty(arr, "1", {
+    set: undefined
+});
 
-        Object.defineProperties(arr, {
-            "1": {
-                set: undefined
-            }
-        });
-
-        return accessorPropertyAttributesAreCorrect(arr, "1", undefined, undefined, undefined, false, false);
+Object.defineProperties(arr, {
+    "1": {
+        set: undefined
     }
-runTestCase(testcase);
+});
+
+verifyNotEnumerable(arr, "1");
+
+verifyNotConfigurable(arr, "1");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-244.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-244.js
index 9737323fc6..607b36218c 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-244.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-244.js
@@ -14,33 +14,37 @@ description: >
     [[Get]] field of 'desc' and the [[Get]] attribute value of 'P' are
     two objects which refer to the different objects  (15.4.5.1 step
     4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
+var arr = [];
 
-        function get_fun() {
-            return 36;
-        }
-        Object.defineProperty(arr, "1", {
-            get: get_fun
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "1": {
-                    get: function () {
-                        return 12;
-                    }
-                }
-            });
-
-            return false;
-        } catch (ex) {
-            return (ex instanceof TypeError) && accessorPropertyAttributesAreCorrect(arr, "1", get_fun, undefined, undefined, false, false);
+function get_fun() {
+    return 36;
+}
+Object.defineProperty(arr, "1", {
+    get: get_fun
+});
+
+try {
+    Object.defineProperties(arr, {
+        "1": {
+            get: function () {
+                return 12;
+            }
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arr, "1", get_fun());
+
+    verifyNotEnumerable(arr, "1");
+
+    verifyNotConfigurable(arr, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-245.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-245.js
index 79e12c982c..abf521267c 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-245.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-245.js
@@ -13,30 +13,34 @@ description: >
     descriptor, the [[Get]] field of 'desc' is present, and  the
     [[Get]] field of 'desc' is an object and the [[Get]] attribute
     value of 'P' is undefined  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
+var arr = [];
 
-        function get_fun() {
-            return 36;
-        }
-        Object.defineProperty(arr, "1", {
-            get: get_fun
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "1": {
-                    get: undefined
-                }
-            });
-            return false;
-        } catch (ex) {
-            return (ex instanceof TypeError) && accessorPropertyAttributesAreCorrect(arr, "1", get_fun, undefined, undefined, false, false);
+function get_fun() {
+    return 36;
+}
+Object.defineProperty(arr, "1", {
+    get: get_fun
+});
+
+try {
+    Object.defineProperties(arr, {
+        "1": {
+            get: undefined
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arr, "1", get_fun());
+
+    verifyNotEnumerable(arr, "1");
+
+    verifyNotConfigurable(arr, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-246.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-246.js
index 7b81c82975..9f76571b1f 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-246.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-246.js
@@ -14,28 +14,22 @@ description: >
     field of 'desc' is present, and the [[Get]] field of 'desc' and
     the [[Get]] attribute value of 'P' are undefined (15.4.5.1 step
     4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
+var arr = [];
 
-        Object.defineProperty(arr, "1", {
-            get: undefined
-        });
+Object.defineProperty(arr, "1", {
+    get: undefined
+});
 
-        try {
-            Object.defineProperties(arr, {
-                "1": {
-                    get: undefined
-                }
-            });
-
-            return accessorPropertyAttributesAreCorrect(arr, "1", undefined, undefined, undefined, false, false);
-        } catch (ex) {
-            return false;
-        }
+Object.defineProperties(arr, {
+    "1": {
+        get: undefined
     }
-runTestCase(testcase);
+});
+
+verifyNotEnumerable(arr, "1");
+
+verifyNotConfigurable(arr, "1");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-247.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-247.js
index 7691b79384..972a6ba753 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-247.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-247.js
@@ -11,24 +11,22 @@ description: >
     named property that already exists on 'O' is data property and
     'desc' is data descriptor, test updating the [[Value]] attribute
     value of 'P'  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [12];
+var arr = [12];
 
-        try {
-            Object.defineProperties(arr, {
-                "0": {
-                    value: 36
-                }
-            });
-            return dataPropertyAttributesAreCorrect(arr, "0", 36, true, true, true);
-        } catch (ex) {
-            return false;
-        }
+Object.defineProperties(arr, {
+    "0": {
+        value: 36
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "0", 36);
+
+verifyWritable(arr, "0");
+
+verifyEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-248.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-248.js
index a8aaac93f6..4f14d5a1b5 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-248.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-248.js
@@ -11,24 +11,21 @@ description: >
     named property that already exists on 'O' is data property and
     'desc' is data descriptor, test setting the [[Value]] attribute
     value of 'P' as undefined  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [12];
+var arr = [12];
 
-        try {
-            Object.defineProperties(arr, {
-                "0": {
-                    value: undefined
-                }
-            });
-            return dataPropertyAttributesAreCorrect(arr, "0", undefined, true, true, true);
-        } catch (ex) {
-            return false;
-        }
+Object.defineProperties(arr, {
+    "0": {
+        value: undefined
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "0", undefined);
+
+verifyWritable(arr, "0");
+
+verifyEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-249.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-249.js
index e79096ad81..161ba162ce 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-249.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-249.js
@@ -11,24 +11,22 @@ description: >
     named property that already exists on 'O' is data property and
     'desc' is data descriptor, test setting the [[Value]] attribute
     value of 'P' from undefined to normal value  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [undefined];
+var arr = [undefined];
 
-        try {
-            Object.defineProperties(arr, {
-                "0": {
-                    value: 12
-                }
-            });
-            return dataPropertyAttributesAreCorrect(arr, "0", 12, true, true, true);
-        } catch (ex) {
-            return false;
-        }
+Object.defineProperties(arr, {
+    "0": {
+        value: 12
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "0", 12);
+
+verifyWritable(arr, "0");
+
+verifyEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-250.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-250.js
index b3bf8147ba..53b8779723 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-250.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-250.js
@@ -11,24 +11,22 @@ description: >
     named property that already exists on 'O' is data property and
     'desc' is data descriptor, test updating the [[Writable]]
     attribute value of 'P'  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [100];
+var arr = [100];
 
-        try {
-            Object.defineProperties(arr, {
-                "0": {
-                    writable: false
-                }
-            });
-            return dataPropertyAttributesAreCorrect(arr, "0", 100, false, true, true);
-        } catch (ex) {
-            return false;
-        }
+Object.defineProperties(arr, {
+    "0": {
+        writable: false
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "0", 100);
+
+verifyNotWritable(arr, "0");
+
+verifyEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-251.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-251.js
index 93dea5d521..e6e415ea68 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-251.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-251.js
@@ -11,24 +11,21 @@ description: >
     named property that already exists on 'O' is data property and
     'desc' is data descriptor, test updating the [[Enumerable]]
     attribute value of 'P'  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [12];
+var arr = [12];
 
-        try {
-            Object.defineProperties(arr, {
-                "0": {
-                    enumerable: false
-                }
-            });
-            return dataPropertyAttributesAreCorrect(arr, "0", 12, true, false, true);
-        } catch (ex) {
-            return false;
-        }
+Object.defineProperties(arr, {
+    "0": {
+        enumerable: false
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "0", 12);
+
+verifyWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-252.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-252.js
index e9ae90c36c..9e1bd03e20 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-252.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-252.js
@@ -11,24 +11,22 @@ description: >
     named property that already exists on 'O' is data property and
     'desc' is data descriptor, test updating the [[Configurable]]
     attribute value of 'P'  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [12];
+var arr = [12];
 
-        try {
-            Object.defineProperties(arr, {
-                "0": {
-                    configurable: false
-                }
-            });
-            return dataPropertyAttributesAreCorrect(arr, "0", 12, true, true, false);
-        } catch (ex) {
-            return false;
-        }
+Object.defineProperties(arr, {
+    "0": {
+        configurable: false
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "0", 12);
+
+verifyWritable(arr, "0");
+
+verifyEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-253.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-253.js
index bb7079b9c2..6b217ec9d0 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-253.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-253.js
@@ -11,26 +11,24 @@ description: >
     named property that already exists on 'O' is data property and
     'desc' is data descriptor, test updating multiple attribute values
     of 'P'  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var arr = [12];
-
-        try {
-            Object.defineProperties(arr, {
-                "0": {
-                    value: 36,
-                    writable: false,
-                    configurable: false
-                }
-            });
-            return dataPropertyAttributesAreCorrect(arr, "0", 36, false, true, false);
-        } catch (ex) {
-            return false;
-        }
+
+var arr = [12];
+
+Object.defineProperties(arr, {
+    "0": {
+        value: 36,
+        writable: false,
+        configurable: false
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "0", 36);
+
+verifyNotWritable(arr, "0");
+
+verifyEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-254.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-254.js
index 37b3fd8f39..3b158e5d79 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-254.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-254.js
@@ -11,31 +11,30 @@ description: >
     named property that already exists on 'O' is accessor property and
     'desc' is accessor descriptor, test updating the [[Get]] attribute
     value of 'P' with different getter function (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [];
+var arr = [];
 
-        function get_fun() {
-            return 36;
-        }
+function get_fun() {
+    return 36;
+}
 
-        Object.defineProperty(arr, "0", {
-            get: function () {
-                return 12;
-            },
-            configurable: true
-        });
+Object.defineProperty(arr, "0", {
+    get: function () {
+        return 12;
+    },
+    configurable: true
+});
 
-        Object.defineProperties(arr, {
-            "0": {
-                get: get_fun
-            }
-        });
-        return accessorPropertyAttributesAreCorrect(arr, "0", get_fun, undefined, undefined, false, true);
+Object.defineProperties(arr, {
+    "0": {
+        get: get_fun
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "0", get_fun());
+
+verifyNotEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-255.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-255.js
index 1dc6b1551b..77c7f5cca0 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-255.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-255.js
@@ -11,27 +11,24 @@ description: >
     named property that already exists on 'O' is accessor property and
     'desc' is accessor descriptor, test setting the [[Get]] attribute
     value of 'P' as undefined  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [];
+var arr = [];
 
-        Object.defineProperty(arr, "0", {
-            get: function () {
-                return 12;
-            },
-            configurable: true
-        });
+Object.defineProperty(arr, "0", {
+    get: function () {
+        return 12;
+    },
+    configurable: true
+});
 
-        Object.defineProperties(arr, {
-            "0": {
-                get: undefined
-            }
-        });
-        return accessorPropertyAttributesAreCorrect(arr, "0", undefined, undefined, undefined, false, true);
+Object.defineProperties(arr, {
+    "0": {
+        get: undefined
     }
-runTestCase(testcase);
+});
+verifyNotEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-256.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-256.js
index b81817a235..255d4b12ce 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-256.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-256.js
@@ -11,29 +11,28 @@ description: >
     named property that already exists on 'O' is accessor property and
     'desc' is accessor descriptor, test updating the [[Get]] attribute
     value of 'P' from undefined to function (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [];
+var arr = [];
 
-        function get_fun() {
-            return 36;
-        }
+function get_fun() {
+    return 36;
+}
 
-        Object.defineProperty(arr, "0", {
-            get: undefined,
-            configurable: true
-        });
+Object.defineProperty(arr, "0", {
+    get: undefined,
+    configurable: true
+});
 
-        Object.defineProperties(arr, {
-            "0": {
-                get: get_fun
-            }
-        });
-        return accessorPropertyAttributesAreCorrect(arr, "0", get_fun, undefined, undefined, false, true);
+Object.defineProperties(arr, {
+    "0": {
+        get: get_fun
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "0", get_fun());
+
+verifyNotEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-257.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-257.js
index eee053f641..d311bb83b2 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-257.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-257.js
@@ -11,33 +11,29 @@ description: >
     named property that already exists on 'O' is accessor property and
     'desc' is accessor descriptor, test updating the [[Set]] attribute
     value of 'P' with different getter function (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var arr = [];
-
-        function set_fun(value) {
-            arr.setVerifyHelpProp = value;
-        }
-
-        Object.defineProperty(arr, "0", {
-            set: function () { },
-            configurable: true
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "0": {
-                    set: set_fun
-                }
-            });
-            return accessorPropertyAttributesAreCorrect(arr, "0", undefined, set_fun, "setVerifyHelpProp", false, true);
-        } catch (ex) {
-            return false;
-        }
+
+var arr = [];
+
+function set_fun(value) {
+    arr.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(arr, "0", {
+    set: function () { },
+    configurable: true
+});
+
+Object.defineProperties(arr, {
+    "0": {
+        set: set_fun
     }
-runTestCase(testcase);
+});
+verifyWritable(arr, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-258.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-258.js
index 006ca06217..6bad477779 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-258.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-258.js
@@ -11,25 +11,22 @@ description: >
     named property that already exists on 'O' is accessor property and
     'desc' is accessor descriptor, test setting the [[Set]] attribute
     value of 'P' as undefined  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [];
+var arr = [];
 
-        Object.defineProperty(arr, "0", {
-            set: function () { },
-            configurable: true
-        });
+Object.defineProperty(arr, "0", {
+    set: function () { },
+    configurable: true
+});
 
-        Object.defineProperties(arr, {
-            "0": {
-                set: undefined
-            }
-        });
-        return accessorPropertyAttributesAreCorrect(arr, "0", undefined, undefined, undefined, false, true);
+Object.defineProperties(arr, {
+    "0": {
+        set: undefined
     }
-runTestCase(testcase);
+});
+verifyNotEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-259.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-259.js
index eaa40a6eb6..a444eadc9d 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-259.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-259.js
@@ -11,32 +11,27 @@ description: >
     named property that already exists on 'O' is accessor property and
     'desc' is accessor descriptor, test updating the [[Set]] attribute
     value of 'P' from undefined to function  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [];
+var arr = [];
 
-        function set_fun(value) {
-            arr.setVerifyHelpProp = value;
-        }
-        Object.defineProperty(arr, "0", {
-            set: undefined,
-            configurable: true
-        });
+function set_fun(value) {
+    arr.setVerifyHelpProp = value;
+}
+Object.defineProperty(arr, "0", {
+    set: undefined,
+    configurable: true
+});
 
-        try {
-            Object.defineProperties(arr, {
-                "0": {
-                    set: set_fun
-                }
-            });
-            return accessorPropertyAttributesAreCorrect(arr, "0", undefined, set_fun, "setVerifyHelpProp", false, true);
-        } catch (ex) {
-            return false;
-        }
+Object.defineProperties(arr, {
+    "0": {
+        set: set_fun
     }
-runTestCase(testcase);
+});
+verifyWritable(arr, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-260.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-260.js
index 867cb5c62c..2bdb0764a1 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-260.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-260.js
@@ -11,33 +11,28 @@ description: >
     named property that already exists on 'O' is accessor property and
     'desc' is accessor descriptor, test updating the [[Enumerable]]
     attribute value of 'P'  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [];
+var arr = [];
 
-        function set_fun(value) {
-            arr.setVerifyHelpProp = value;
-        }
-        Object.defineProperty(arr, "0", {
-            set: set_fun,
-            enumerable: true,
-            configurable: true
-        });
+function set_fun(value) {
+    arr.setVerifyHelpProp = value;
+}
+Object.defineProperty(arr, "0", {
+    set: set_fun,
+    enumerable: true,
+    configurable: true
+});
 
-        try {
-            Object.defineProperties(arr, {
-                "0": {
-                    enumerable: false
-                }
-            });
-            return accessorPropertyAttributesAreCorrect(arr, "0", undefined, set_fun, "setVerifyHelpProp", false, true);
-        } catch (ex) {
-            return false;
-        }
+Object.defineProperties(arr, {
+    "0": {
+        enumerable: false
     }
-runTestCase(testcase);
+});
+verifyWritable(arr, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-261.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-261.js
index 0098303752..4f40f130ff 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-261.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-261.js
@@ -11,32 +11,28 @@ description: >
     named property that already exists on 'O' is accessor property and
     'desc' is accessor descriptor, test updating the [[Configurable]]
     attribute value of 'P'  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var arr = [];
-
-        function set_fun(value) {
-            arr.setVerifyHelpProp = value;
-        }
-        Object.defineProperty(arr, "0", {
-            set: set_fun,
-            configurable: true
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "0": {
-                    configurable: false
-                }
-            });
-            return accessorPropertyAttributesAreCorrect(arr, "0", undefined, set_fun, "setVerifyHelpProp", false, false);
-        } catch (ex) {
-            return false;
-        }
+
+var arr = [];
+
+function set_fun(value) {
+    arr.setVerifyHelpProp = value;
+}
+Object.defineProperty(arr, "0", {
+    set: set_fun,
+    configurable: true
+});
+
+Object.defineProperties(arr, {
+    "0": {
+        configurable: false
     }
-runTestCase(testcase);
+});
+verifyWritable(arr, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-262.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-262.js
index cf4f32fa2a..915590c273 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-262.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-262.js
@@ -11,41 +11,38 @@ description: >
     named property that already exists on 'O' is accessor property and
     'desc' is accessor descriptor, test updating multiple attribute
     values of 'P'  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var arr = [];
-
-        function get_fun() {
-            return 36;
-        }
-        function set_fun(value) {
-            arr.setVerifyHelpProp = value;
-        }
-        Object.defineProperty(arr, "0", {
-            get: function () {
-                return 12;
-            },
-            set: set_fun,
-            enumerable: true,
-            configurable: true
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "0": {
-                    get: get_fun,
-                    enumerable: false,
-                    configurable: false
-                }
-            });
-            return accessorPropertyAttributesAreCorrect(arr, "0", get_fun, set_fun, "setVerifyHelpProp", false, false);
-        } catch (ex) {
-            return false;
-        }
+
+var arr = [];
+
+function get_fun() {
+    return 36;
+}
+function set_fun(value) {
+    arr.setVerifyHelpProp = value;
+}
+Object.defineProperty(arr, "0", {
+    get: function () {
+        return 12;
+    },
+    set: set_fun,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperties(arr, {
+    "0": {
+        get: get_fun,
+        enumerable: false,
+        configurable: false
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "0", get_fun());
+
+verifyWritable(arr, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-266.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-266.js
index 4db292bd34..9493d14db2 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-266.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-266.js
@@ -11,23 +11,29 @@ description: >
     that won't exist on 'O', and 'desc' is data descriptor, test 'P'
     is defined in 'O' with all correct attribute values (15.4.5.1 step
     5)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [];
+var arr = [];
 
-        Object.defineProperties(arr, {
-            "property": {
-                value: 12,
-                writable: true,
-                enumerable: true,
-                configurable: true
-            }
-        });
-        return dataPropertyAttributesAreCorrect(arr, "property", 12, true, true, true) && arr.length === 0;
+Object.defineProperties(arr, {
+    "property": {
+        value: 12,
+        writable: true,
+        enumerable: true,
+        configurable: true
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "property", 12);
+
+verifyWritable(arr, "property");
+
+verifyEnumerable(arr, "property");
+
+verifyConfigurable(arr, "property");
+
+if (arr.length !== 0) {
+    $ERROR('Expected arr.length === 0, actually ' + arr.length);
+}
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-267.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-267.js
index 7b8d81bdc4..7c49813892 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-267.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-267.js
@@ -10,31 +10,36 @@ description: >
     Object.defineProperties - 'O' is an Array, 'P' is generic
     property, and 'desc' is accessor descriptor, test 'P' is defined
     in 'O' with all correct attribute values (15.4.5.1 step 5)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var arr = [];
-
-        function get_fun() {
-            return 12;
-        }
-        function set_fun(value) {
-            arr.setVerifyHelpProp = value;
-        }
-
-        Object.defineProperties(arr, {
-            "property": {
-                get: get_fun,
-                set: set_fun,
-                enumerable: true,
-                configurable: true
-            }
-        });
-        return accessorPropertyAttributesAreCorrect(arr, "property", get_fun, set_fun, "setVerifyHelpProp", true, true) &&
-            arr.length === 0;
+
+var arr = [];
+
+function get_fun() {
+    return 12;
+}
+function set_fun(value) {
+    arr.setVerifyHelpProp = value;
+}
+
+Object.defineProperties(arr, {
+    "property": {
+        get: get_fun,
+        set: set_fun,
+        enumerable: true,
+        configurable: true
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "property", get_fun());
+
+verifyWritable(arr, "property", "setVerifyHelpProp");
+
+verifyEnumerable(arr, "property");
+
+verifyConfigurable(arr, "property");
+
+if (arr.length !== 0) {
+    $ERROR('Expected arr.length === 0, actually ' + arr.length);
+}
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-268.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-268.js
index c302b57a84..d536f06f9f 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-268.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-268.js
@@ -10,34 +10,35 @@ description: >
     Object.defineProperties - 'O' is an Array, 'P' is generic own
     accessor property of 'O', and 'desc' is accessor descriptor, test
     updating multiple attribute values of 'P' (15.4.5.1 step 5)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
-        function get_fun() {
-            return 12;
-        }
-        function set_fun(value) {
-            arr.verifySetFun = value;
-        }
-        Object.defineProperty(arr, "property", {
-            get: function () {
-                return 36;
-            },
-            enumerable: true,
-            configurable: true
-        });
+var arr = [];
+function get_fun() {
+    return 12;
+}
+function set_fun(value) {
+    arr.verifySetFun = value;
+}
+Object.defineProperty(arr, "property", {
+    get: function () {
+        return 36;
+    },
+    enumerable: true,
+    configurable: true
+});
 
-        Object.defineProperties(arr, {
-            "property": {
-                get: get_fun,
-                set: set_fun,
-                enumerable: false
-            }
-        });
-        return accessorPropertyAttributesAreCorrect(arr, "property", get_fun, set_fun, "verifySetFun", false, true);
+Object.defineProperties(arr, {
+    "property": {
+        get: get_fun,
+        set: set_fun,
+        enumerable: false
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "property", get_fun());
+
+verifyWritable(arr, "property", "verifySetFun");
+
+verifyNotEnumerable(arr, "property");
+
+verifyConfigurable(arr, "property");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-269.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-269.js
index 84b60a4e0e..94fea276e2 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-269.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-269.js
@@ -10,23 +10,29 @@ description: >
     Object.defineProperties - 'O' is an Array, 'P' is generic own data
     property of 'O', and 'desc' is data descriptor, test updating
     multiple attribute values of 'P' (15.4.5.1 step 5)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [];
-        arr.property = 12; // default value of attributes: writable: true, configurable: true, enumerable: true
+var arr = [];
+arr.property = 12; // default value of attributes: writable: true, configurable: true, enumerable: true
 
-        Object.defineProperties(arr, {
-            "property": {
-                writable: false,
-                enumerable: false,
-                configurable: false
-            }
-        });
-        return dataPropertyAttributesAreCorrect(arr, "property", 12, false, false, false) && arr.length === 0;
+Object.defineProperties(arr, {
+    "property": {
+        writable: false,
+        enumerable: false,
+        configurable: false
     }
-runTestCase(testcase);
+});
+verifyEqualTo(arr, "property", 12);
+
+verifyNotWritable(arr, "property");
+
+verifyNotEnumerable(arr, "property");
+
+verifyNotConfigurable(arr, "property");
+
+if (arr.length !== 0) {
+    $ERROR('Expected arr.length === 0, actually ' + arr.length);
+}
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-270.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-270.js
index 8ddf5151c4..fbc9111732 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-270.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-270.js
@@ -11,28 +11,34 @@ description: >
     property of 'O', test TypeError is thrown when updating the
     [[Value]] attribute value of 'P' which is defined as unwritable
     and non-configurable (15.4.5.1 step 5)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [];
+var arr = [];
 
-        Object.defineProperty(arr, "property", {
-            value: 12
-        });
+Object.defineProperty(arr, "property", {
+    value: 12
+});
 
-        try {
-            Object.defineProperties(arr, {
-                "property": {
-                    value: 36
-                }
-            });
-            return false;
-        } catch (ex) {
-            return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "property", 12, false, false, false);
+try {
+    Object.defineProperties(arr, {
+        "property": {
+            value: 36
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arr, "property", 12);
+
+    verifyNotWritable(arr, "property");
+
+    verifyNotEnumerable(arr, "property");
+
+    verifyNotConfigurable(arr, "property");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-271.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-271.js
index 6cefedf40e..1ab8f43ec0 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-271.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-271.js
@@ -11,28 +11,34 @@ description: >
     property of 'O', test TypeError is thrown when updating the
     [[Writable]] attribute value of 'P' which is defined as
     non-configurable (15.4.5.1 step 5)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [];
+var arr = [];
 
-        Object.defineProperty(arr, "property", {
-            writable: false
-        });
+Object.defineProperty(arr, "property", {
+    writable: false
+});
 
-        try {
-            Object.defineProperties(arr, {
-                "property": {
-                    writable: true
-                }
-            });
-            return false;
-        } catch (ex) {
-            return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "property", undefined, false, false, false);
+try {
+    Object.defineProperties(arr, {
+        "property": {
+            writable: true
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arr, "property", undefined);
+
+    verifyNotWritable(arr, "property");
+
+    verifyNotEnumerable(arr, "property");
+
+    verifyNotConfigurable(arr, "property");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-272.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-272.js
index 2630e340d9..4cde5138c6 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-272.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-272.js
@@ -11,29 +11,35 @@ description: >
     property of 'O', test TypeError is thrown when updating the
     [[Enumerable]] attribute value of 'P' which is defined as
     non-configurable (15.4.5.1 step 5)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [];
+var arr = [];
 
-        Object.defineProperty(arr, "property", {
-            value: 12,
-            enumerable: false
-        });
+Object.defineProperty(arr, "property", {
+    value: 12,
+    enumerable: false
+});
 
-        try {
-            Object.defineProperties(arr, {
-                "property": {
-                    enumerable: true
-                }
-            });
-            return false;
-        } catch (ex) {
-            return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "property", 12, false, false, false);
+try {
+    Object.defineProperties(arr, {
+        "property": {
+            enumerable: true
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arr, "property", 12);
+
+    verifyNotWritable(arr, "property");
+
+    verifyNotEnumerable(arr, "property");
+
+    verifyNotConfigurable(arr, "property");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-273.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-273.js
index f22658d7c3..56c44ea748 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-273.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-273.js
@@ -11,28 +11,34 @@ description: >
     property of 'O', test TypeError is thrown when updating the
     [[Configurable]] attribute value of 'P' which is defined as
     non-configurable (15.4.5.1 step 5)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [];
+var arr = [];
 
-        Object.defineProperty(arr, "property", {
-            value: 12
-        });
+Object.defineProperty(arr, "property", {
+    value: 12
+});
 
-        try {
-            Object.defineProperties(arr, {
-                "property": {
-                    configurable: true
-                }
-            });
-            return false;
-        } catch (ex) {
-            return (ex instanceof TypeError) && dataPropertyAttributesAreCorrect(arr, "property", 12, false, false, false);
+try {
+    Object.defineProperties(arr, {
+        "property": {
+            configurable: true
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arr, "property", 12);
+
+    verifyNotWritable(arr, "property");
+
+    verifyNotEnumerable(arr, "property");
+
+    verifyNotConfigurable(arr, "property");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-274.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-274.js
index 2f27559b3e..58ab747342 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-274.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-274.js
@@ -11,37 +11,42 @@ description: >
     accessor property of 'O', test TypeError is thrown when updating
     the [[Get]] attribute value of 'P' which is defined as
     non-configurable (15.4.5.1 step 5)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arr = [];
+var arr = [];
 
-        function get_fun() {
-            return 37;
-        }
-        function set_fun(value) {
-            arr.verifySetFun = value;
-        }
-        Object.defineProperty(arr, "property", {
-            get: get_fun,
-            set: set_fun
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "property": {
-                    get: function () {
-                        return 36;
-                    }
-                }
-            });
-            return false;
-        } catch (ex) {
-            return (ex instanceof TypeError) &&
-                accessorPropertyAttributesAreCorrect(arr, "property", get_fun, set_fun, "verifySetFun", false, false);
+function get_fun() {
+    return 37;
+}
+function set_fun(value) {
+    arr.verifySetFun = value;
+}
+Object.defineProperty(arr, "property", {
+    get: get_fun,
+    set: set_fun
+});
+
+try {
+    Object.defineProperties(arr, {
+        "property": {
+            get: function () {
+                return 36;
+            }
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arr, "property", get_fun());
+
+    verifyWritable(arr, "property", "verifySetFun");
+
+    verifyNotEnumerable(arr, "property");
+
+    verifyNotConfigurable(arr, "property");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-275.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-275.js
index db153cc1f9..9a4a3fef03 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-275.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-275.js
@@ -11,31 +11,34 @@ description: >
     accessor property of 'O', test TypeError is thrown when updating
     the [[Set]] attribute value of 'P' which is defined as
     non-configurable (15.4.5.1 step 5)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [];
+var arr = [];
 
-        function set_fun(value) {
-            arr.setVerifyHelpProp = value;
-        }
-        Object.defineProperty(arr, "property", {
-            set: set_fun
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "property": {
-                    set: function () { }
-                }
-            });
-            return false;
-        } catch (ex) {
-            return (ex instanceof TypeError) && accessorPropertyAttributesAreCorrect(arr, "property", undefined, set_fun, "setVerifyHelpProp", false, false);
+function set_fun(value) {
+    arr.setVerifyHelpProp = value;
+}
+Object.defineProperty(arr, "property", {
+    set: set_fun
+});
+
+try {
+    Object.defineProperties(arr, {
+        "property": {
+            set: function () { }
         }
+    });
+} catch (e) {
+    verifyWritable(arr, "property", "setVerifyHelpProp");
+
+    verifyNotEnumerable(arr, "property");
+
+    verifyNotConfigurable(arr, "property");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-276.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-276.js
index f39432a200..85471b3f20 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-276.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-276.js
@@ -11,32 +11,36 @@ description: >
     accessor property of 'O', test TypeError is thrown when updating
     the [[Enumerable]] attribute value of 'P' which is defined as
     non-configurable (15.4.5.1 step 5)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [];
+var arr = [];
 
-        function set_fun(value) {
-            arr.setVerifyHelpProp = value;
-        }
-        Object.defineProperty(arr, "property", {
-            set: set_fun,
-            enumerable: false
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "property": {
-                    enumerable: true
-                }
-            });
-            return false;
-        } catch (ex) {
-            return (ex instanceof TypeError) && accessorPropertyAttributesAreCorrect(arr, "property", undefined, set_fun, "setVerifyHelpProp", false, false);
+function set_fun(value) {
+    arr.setVerifyHelpProp = value;
+}
+Object.defineProperty(arr, "property", {
+    set: set_fun,
+    enumerable: false
+});
+
+try {
+    Object.defineProperties(arr, {
+        "property": {
+            enumerable: true
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyWritable(arr, "property", "setVerifyHelpProp");
+
+    verifyNotEnumerable(arr, "property");
+
+    verifyNotConfigurable(arr, "property");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-277.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-277.js
index 2e327ca23e..58ca3f5b4e 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-277.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-277.js
@@ -11,32 +11,36 @@ description: >
     accessor property of 'O', test TypeError is thrown when updating
     the [[Configurable]] attribute value of 'P' which is defined as
     non-configurable (15.4.5.1 step 5)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arr = [];
+var arr = [];
 
-        function set_fun(value) {
-            arr.setVerifyHelpProp = value;
-        }
-        Object.defineProperty(arr, "property", {
-            set: set_fun,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperties(arr, {
-                "property": {
-                    configurable: true
-                }
-            });
-            return false;
-        } catch (ex) {
-            return (ex instanceof TypeError) && accessorPropertyAttributesAreCorrect(arr, "property", undefined, set_fun, "setVerifyHelpProp", false, false);
+function set_fun(value) {
+    arr.setVerifyHelpProp = value;
+}
+Object.defineProperty(arr, "property", {
+    set: set_fun,
+    configurable: false
+});
+
+try {
+    Object.defineProperties(arr, {
+        "property": {
+            configurable: true
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyWritable(arr, "property", "setVerifyHelpProp");
+
+    verifyNotEnumerable(arr, "property");
+
+    verifyNotConfigurable(arr, "property");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-278.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-278.js
index 020367e287..19307efc00 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-278.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-278.js
@@ -12,30 +12,31 @@ description: >
     '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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arg;
+var arg;
 
-        (function fun(a, b, c) {
-            arg = arguments;
-        }(0, 1, 2));
+(function fun(a, b, c) {
+    arg = arguments;
+}(0, 1, 2));
 
-        delete arg[0];
+delete arg[0];
 
-        Object.defineProperties(arg, {
-            "0": {
-                value: 10,
-                writable: true,
-                enumerable: true,
-                configurable: true
-            }
-        });
-
-        return dataPropertyAttributesAreCorrect(arg, "0", 10, true, true, true);
+Object.defineProperties(arg, {
+    "0": {
+        value: 10,
+        writable: true,
+        enumerable: true,
+        configurable: true
     }
-runTestCase(testcase);
+});
+
+verifyEqualTo(arg, "0", 10);
+
+verifyWritable(arg, "0");
+
+verifyEnumerable(arg, "0");
+
+verifyConfigurable(arg, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-279.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-279.js
index 445d5719d3..6d412c21f4 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-279.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-279.js
@@ -12,37 +12,38 @@ description: >
     '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)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arg;
+var arg;
 
-        (function fun(a, b, c) {
-            arg = arguments;
-        }(0, 1, 2));
+(function fun(a, b, c) {
+    arg = arguments;
+}(0, 1, 2));
 
-        delete arg[0];
+delete arg[0];
 
-        function get_func() {
-            return 10;
-        }
-        function set_func(value) {
-            arg.setVerifyHelpProp = value;
-        }
+function get_func() {
+    return 10;
+}
+function set_func(value) {
+    arg.setVerifyHelpProp = value;
+}
 
-        Object.defineProperties(arg, {
-            "0": {
-                get: get_func,
-                set: set_func,
-                enumerable: true,
-                configurable: true
-            }
-        });
-
-        return accessorPropertyAttributesAreCorrect(arg, "0", get_func, set_func, "setVerifyHelpProp", true, true);
+Object.defineProperties(arg, {
+    "0": {
+        get: get_func,
+        set: set_func,
+        enumerable: true,
+        configurable: true
     }
-runTestCase(testcase);
+});
+
+verifyEqualTo(arg, "0", get_func());
+
+verifyWritable(arg, "0", "setVerifyHelpProp");
+
+verifyEnumerable(arg, "0");
+
+verifyConfigurable(arg, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-28.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-28.js
index 3627e00847..f6bfcfbb7a 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-28.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-28.js
@@ -10,18 +10,25 @@ 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)
-includes: [runTestCase.js]
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
+var obj = {};
 
-        Object.defineProperties(obj, {
-            prop: {
-                value: 1001
-            }
-        });
-        obj.prop = 1002;
-        return obj.hasOwnProperty("prop") && obj.prop === 1001;
+Object.defineProperties(obj, {
+    prop: {
+        value: 1001
     }
-runTestCase(testcase);
+});
+
+if (isWritable(obj, "prop")) {
+    $ERROR('Expected obj["prop"] not to be writable.');
+}
+
+if (!obj.hasOwnProperty("prop")) {
+    $ERROR('Expected obj.hasOwnProperty("prop") to be true, actually ' + obj.hasOwnProperty("prop"));
+}
+
+if (obj.prop !== 1001) {
+    $ERROR('Expected obj.prop === 1001, actually ' + obj.prop);
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-281.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-281.js
index cf0de9523e..53399652ac 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-281.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-281.js
@@ -11,28 +11,29 @@ description: >
     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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arg;
+var arg;
 
-        (function fun(a, b, c) {
-            arg = arguments;
-        }(0, 1, 2));
+(function fun(a, b, c) {
+    arg = arguments;
+}(0, 1, 2));
 
-        Object.defineProperties(arg, {
-            "0": {
-                value: 20,
-                writable: false,
-                enumerable: false,
-                configurable: false
-            }
-        });
-
-        return dataPropertyAttributesAreCorrect(arg, "0", 20, false, false, false);
+Object.defineProperties(arg, {
+    "0": {
+        value: 20,
+        writable: false,
+        enumerable: false,
+        configurable: false
     }
-runTestCase(testcase);
+});
+
+verifyEqualTo(arg, "0", 20);
+
+verifyNotWritable(arg, "0");
+
+verifyNotEnumerable(arg, "0");
+
+verifyNotConfigurable(arg, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-282.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-282.js
index f8dc1ff7b9..3e7f474b69 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-282.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-282.js
@@ -12,35 +12,41 @@ description: >
     '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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arg;
+var arg;
 
-        (function fun(a, b, c) {
-            arg = arguments;
-        }(0, 1, 2));
+(function fun(a, b, c) {
+    arg = arguments;
+}(0, 1, 2));
 
-        Object.defineProperty(arg, "0", {
-            value: 0,
-            writable: false,
-            configurable: false
-        });
+Object.defineProperty(arg, "0", {
+    value: 0,
+    writable: false,
+    configurable: false
+});
 
-        try {
-            Object.defineProperties(arg, {
-                "0": {
-                    value: 10
-                }
-            });
-
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(arg, "0", 0, false, true, false);
+try {
+    Object.defineProperties(arg, {
+        "0": {
+            value: 10
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arg, "0", 0);
+
+    verifyNotWritable(arg, "0");
+
+    verifyEnumerable(arg, "0");
+
+    verifyNotConfigurable(arg, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-283.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-283.js
index 1f43637be3..c77c987965 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-283.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-283.js
@@ -12,36 +12,42 @@ description: >
     'O', test TypeError is thrown when updating the [[Writable]]
     attribute value of 'P' which is defined as non-configurable (10.6
     [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arg;
+var arg;
 
-        (function fun(a, b, c) {
-            arg = arguments;
-        }(0, 1, 2));
+(function fun(a, b, c) {
+    arg = arguments;
+}(0, 1, 2));
 
-        Object.defineProperty(arg, "0", {
-            value: 0,
-            writable: false,
-            enumerable: false,
-            configurable: false
-        });
+Object.defineProperty(arg, "0", {
+    value: 0,
+    writable: false,
+    enumerable: false,
+    configurable: false
+});
 
-        try {
-            Object.defineProperties(arg, {
-                "0": {
-                    writable: true
-                }
-            });
-
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(arg, "0", 0, false, false, false);
+try {
+    Object.defineProperties(arg, {
+        "0": {
+            writable: true
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arg, "0", 0);
+
+    verifyNotWritable(arg, "0");
+
+    verifyNotEnumerable(arg, "0");
+
+    verifyNotConfigurable(arg, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-284.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-284.js
index 62bda9ef70..a1134e7683 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-284.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-284.js
@@ -12,36 +12,42 @@ description: >
     'O', test TypeError is thrown when updating the [[Enumerable]]
     attribute value of 'P' which is defined as non-configurable (10.6
     [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arg;
+var arg;
 
-        (function fun(a, b, c) {
-            arg = arguments;
-        }(0, 1, 2));
+(function fun(a, b, c) {
+    arg = arguments;
+}(0, 1, 2));
 
-        Object.defineProperty(arg, "0", {
-            value: 0,
-            writable: false,
-            enumerable: true,
-            configurable: false
-        });
+Object.defineProperty(arg, "0", {
+    value: 0,
+    writable: false,
+    enumerable: true,
+    configurable: false
+});
 
-        try {
-            Object.defineProperties(arg, {
-                "0": {
-                    enumerable: false
-                }
-            });
-
-            return false;          
-        } catch (e) {
-            return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(arg, "0", 0, false, true, false);
+try {
+    Object.defineProperties(arg, {
+        "0": {
+            enumerable: false
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arg, "0", 0);
+
+    verifyNotWritable(arg, "0");
+
+    verifyEnumerable(arg, "0");
+
+    verifyNotConfigurable(arg, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-285.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-285.js
index 9b00b79ee0..b386f92e08 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-285.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-285.js
@@ -12,36 +12,42 @@ description: >
     'O', test TypeError is thrown when updating the [[Configurable]]
     attribute value of 'P' which is defined as non-configurable (10.6
     [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arg;
+var arg;
 
-        (function fun(a, b, c) {
-            arg = arguments;
-        }(0, 1, 2));
+(function fun(a, b, c) {
+    arg = arguments;
+}(0, 1, 2));
 
-        Object.defineProperty(arg, "0", {
-            value: 0,
-            writable: false,
-            enumerable: false,
-            configurable: false
-        });
+Object.defineProperty(arg, "0", {
+    value: 0,
+    writable: false,
+    enumerable: false,
+    configurable: false
+});
 
-        try {
-            Object.defineProperties(arg, {
-                "0": {
-                    configurable: true
-                }
-            });
-
-            return false; 
-        } catch (e) {
-            return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(arg, "0", 0, false, false, false);
+try {
+    Object.defineProperties(arg, {
+        "0": {
+            configurable: true
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arg, "0", 0);
+
+    verifyNotWritable(arg, "0");
+
+    verifyNotEnumerable(arg, "0");
+
+    verifyNotConfigurable(arg, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-288.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-288.js
index 1c3e584d50..420cd3c838 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-288.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-288.js
@@ -12,39 +12,43 @@ description: >
     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)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arg;
+var arg;
 
-        (function fun(a, b, c) {
-            arg = arguments;
-        }(0, 1, 2));
+(function fun(a, b, c) {
+    arg = arguments;
+}(0, 1, 2));
 
-        function get_func() {
-            return 0;
-        }
+function get_func() {
+    return 0;
+}
+
+Object.defineProperty(arg, "0", {
+    get: get_func,
+    enumerable: true,
+    configurable: false
+});
 
-        Object.defineProperty(arg, "0", {
-            get: get_func,
-            enumerable: true,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperties(arg, {
-                "0": {
-                    enumerable: false
-                }
-            });
-
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && accessorPropertyAttributesAreCorrect(arg, "0", get_func, undefined, undefined, true, false);
+try {
+    Object.defineProperties(arg, {
+        "0": {
+            enumerable: false
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arg, "0", get_func());
+
+    verifyEnumerable(arg, "0");
+
+    verifyNotConfigurable(arg, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-289.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-289.js
index d7b9bf4667..97c2452b1a 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-289.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-289.js
@@ -12,39 +12,43 @@ description: >
     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)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arg;
+var arg;
 
-        (function fun(a, b, c) {
-            arg = arguments;
-        }(0, 1, 2));
+(function fun(a, b, c) {
+    arg = arguments;
+}(0, 1, 2));
 
-        function get_func() {
-            return 0;
-        }
+function get_func() {
+    return 0;
+}
+
+Object.defineProperty(arg, "0", {
+    get: get_func,
+    enumerable: true,
+    configurable: false
+});
 
-        Object.defineProperty(arg, "0", {
-            get: get_func,
-            enumerable: true,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperties(arg, {
-                "0": {
-                    configurable: true
-                }
-            });
-
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && accessorPropertyAttributesAreCorrect(arg, "0", get_func, undefined, undefined, true, false);
+try {
+    Object.defineProperties(arg, {
+        "0": {
+            configurable: true
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arg, "0", get_func());
+
+    verifyEnumerable(arg, "0");
+
+    verifyNotConfigurable(arg, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-290.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-290.js
index 7dc503f5ef..d2330a97f8 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-290.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-290.js
@@ -12,30 +12,31 @@ description: >
     [[ParameterMap]] of 'O', and 'desc' is data descriptor, test 'P'
     is defined in 'O' with all correct attribute values (10.6
     [[DefineOwnProperty]] step 3)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arg;
+var arg;
 
-        (function fun() {
-            arg = arguments;
-        }(0, 1, 2));
+(function fun() {
+    arg = arguments;
+}(0, 1, 2));
 
-        delete arg[0];
+delete arg[0];
 
-        Object.defineProperties(arg, {
-            "0": {
-                value: 10,
-                writable: false,
-                enumerable: false,
-                configurable: false
-            }
-        });
-
-        return dataPropertyAttributesAreCorrect(arg, "0", 10, false, false, false);
+Object.defineProperties(arg, {
+    "0": {
+        value: 10,
+        writable: false,
+        enumerable: false,
+        configurable: false
     }
-runTestCase(testcase);
+});
+
+verifyEqualTo(arg, "0", 10);
+
+verifyNotWritable(arg, "0");
+
+verifyNotEnumerable(arg, "0");
+
+verifyNotConfigurable(arg, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-291.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-291.js
index c9eabffa5d..3c84949e3e 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-291.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-291.js
@@ -12,37 +12,38 @@ description: >
     [[ParameterMap]] of 'O', and 'desc' is accessor descriptor, test
     'P' is defined in 'O' with all correct attribute values (10.6
     [[DefineOwnProperty]] step 3)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arg;
+var arg;
 
-        (function fun() {
-            arg = arguments;
-        }(0, 1, 2));
+(function fun() {
+    arg = arguments;
+}(0, 1, 2));
 
-        delete arg[0];
+delete arg[0];
 
-        function get_func() {
-            return 10;
-        }
-        function set_func(value) {
-            arg.setVerifyHelpProp = value;
-        }
+function get_func() {
+    return 10;
+}
+function set_func(value) {
+    arg.setVerifyHelpProp = value;
+}
 
-        Object.defineProperties(arg, {
-            "0": {
-                get: get_func,
-                set: set_func,
-                enumerable: false,
-                configurable: false
-            }
-        });
-
-        return accessorPropertyAttributesAreCorrect(arg, "0", get_func, set_func, "setVerifyHelpProp", false, false);
+Object.defineProperties(arg, {
+    "0": {
+        get: get_func,
+        set: set_func,
+        enumerable: false,
+        configurable: false
     }
-runTestCase(testcase);
+});
+
+verifyEqualTo(arg, "0", get_func());
+
+verifyWritable(arg, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arg, "0");
+
+verifyNotConfigurable(arg, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-292.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-292.js
index 3f9f987923..d859dba437 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-292.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-292.js
@@ -12,41 +12,40 @@ description: >
     [[ParameterMap]] of 'O', and 'desc' is accessor descriptor, test
     updating multiple attribute values of 'P' (10.6
     [[DefineOwnProperty]] step 3)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arg;
+var arg;
 
-        (function fun() {
-            arg = arguments;
-        }(0, 1, 2));
+(function fun() {
+    arg = arguments;
+}(0, 1, 2));
 
-        function get_func1() {
-            return 10;
-        }
+function get_func1() {
+    return 10;
+}
 
-        Object.defineProperty(arg, "0", {
-            get: get_func1,
-            enumerable: true,
-            configurable: true
-        });
+Object.defineProperty(arg, "0", {
+    get: get_func1,
+    enumerable: true,
+    configurable: true
+});
 
-        function get_func2() {
-            return 20;
-        }
+function get_func2() {
+    return 20;
+}
 
-        Object.defineProperties(arg, {
-            "0": {
-                get: get_func2,
-                enumerable: false,
-                configurable: false
-            }
-        });
-
-        return accessorPropertyAttributesAreCorrect(arg, "0", get_func2, undefined, undefined, false, false);
+Object.defineProperties(arg, {
+    "0": {
+        get: get_func2,
+        enumerable: false,
+        configurable: false
     }
-runTestCase(testcase);
+});
+
+verifyEqualTo(arg, "0", get_func2());
+
+verifyNotEnumerable(arg, "0");
+
+verifyNotConfigurable(arg, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-293.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-293.js
index 5c2ceab3f2..d567dbb50a 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-293.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-293.js
@@ -12,28 +12,29 @@ description: >
     [[ParameterMap]] of 'O', and 'desc' is data descriptor, test
     updating multiple attribute values of 'P' (10.6
     [[DefineOwnProperty]] step 3)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arg;
+var arg;
 
-        (function fun() {
-            arg = arguments;
-        }(0, 1, 2));
+(function fun() {
+    arg = arguments;
+}(0, 1, 2));
 
-        Object.defineProperties(arg, {
-            "0": {
-                value: 20,
-                writable: false,
-                enumerable: false,
-                configurable: false
-            }
-        });
-
-        return dataPropertyAttributesAreCorrect(arg, "0", 20, false, false, false);
+Object.defineProperties(arg, {
+    "0": {
+        value: 20,
+        writable: false,
+        enumerable: false,
+        configurable: false
     }
-runTestCase(testcase);
+});
+
+verifyEqualTo(arg, "0", 20);
+
+verifyNotWritable(arg, "0");
+
+verifyNotEnumerable(arg, "0");
+
+verifyNotConfigurable(arg, "0");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-294.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-294.js
index 39fd992a02..37e838d50b 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-294.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-294.js
@@ -12,35 +12,41 @@ description: >
     [[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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arg;
+var arg;
 
-        (function fun() {
-            arg = arguments;
-        }());
+(function fun() {
+    arg = arguments;
+}());
 
-        Object.defineProperty(arg, "0", {
-            value: 0,
-            writable: false,
-            configurable: false
-        });
+Object.defineProperty(arg, "0", {
+    value: 0,
+    writable: false,
+    configurable: false
+});
 
-        try {
-            Object.defineProperties(arg, {
-                "0": {
-                    value: 10
-                }
-            });
-
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(arg, "0", 0, false, false, false);
+try {
+    Object.defineProperties(arg, {
+        "0": {
+            value: 10
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arg, "0", 0);
+
+    verifyNotWritable(arg, "0");
+
+    verifyNotEnumerable(arg, "0");
+
+    verifyNotConfigurable(arg, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-295.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-295.js
index 30e5f1762a..96d8567ff9 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-295.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-295.js
@@ -12,36 +12,42 @@ description: >
     [[ParameterMap]] of 'O', test TypeError is thrown when updating
     the [[Writable]] attribute value of 'P' which is not configurable
     (10.6 [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arg;
+var arg;
 
-        (function fun() {
-            arg = arguments;
-        }());
+(function fun() {
+    arg = arguments;
+}());
 
-        Object.defineProperty(arg, "0", {
-            value: 0,
-            writable: false,
-            enumerable: false,
-            configurable: false
-        });
+Object.defineProperty(arg, "0", {
+    value: 0,
+    writable: false,
+    enumerable: false,
+    configurable: false
+});
 
-        try {
-            Object.defineProperties(arg, {
-                "0": {
-                    writable: true
-                }
-            });
-
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(arg, "0", 0, false, false, false);
+try {
+    Object.defineProperties(arg, {
+        "0": {
+            writable: true
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arg, "0", 0);
+
+    verifyNotWritable(arg, "0");
+
+    verifyNotEnumerable(arg, "0");
+
+    verifyNotConfigurable(arg, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-296.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-296.js
index 8c8d628466..1f85055de2 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-296.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-296.js
@@ -12,36 +12,42 @@ description: >
     [[ParameterMap]] of 'O', test TypeError is thrown when updating
     the [[Enumerable]] attribute value of 'P' which is not
     configurable (10.6 [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arg;
+var arg;
 
-        (function fun() {
-            arg = arguments;
-        }());
+(function fun() {
+    arg = arguments;
+}());
 
-        Object.defineProperty(arg, "0", {
-            value: 0,
-            writable: false,
-            enumerable: true,
-            configurable: false
-        });
+Object.defineProperty(arg, "0", {
+    value: 0,
+    writable: false,
+    enumerable: true,
+    configurable: false
+});
 
-        try {
-            Object.defineProperties(arg, {
-                "0": {
-                    enumerable: false
-                }
-            });
-
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(arg, "0", 0, false, true, false);
+try {
+    Object.defineProperties(arg, {
+        "0": {
+            enumerable: false
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arg, "0", 0);
+
+    verifyNotWritable(arg, "0");
+
+    verifyEnumerable(arg, "0");
+
+    verifyNotConfigurable(arg, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-297.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-297.js
index 1a0fa728a9..837c19b35b 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-297.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-297.js
@@ -12,36 +12,42 @@ description: >
     [[ParameterMap]] of 'O', test TypeError is thrown when updating
     the [[Configurable]] attribute value of 'P' which is not
     configurable (10.6 [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arg;
+var arg;
 
-        (function fun() {
-            arg = arguments;
-        }());
+(function fun() {
+    arg = arguments;
+}());
 
-        Object.defineProperty(arg, "0", {
-            value: 0,
-            writable: false,
-            enumerable: false,
-            configurable: false
-        });
+Object.defineProperty(arg, "0", {
+    value: 0,
+    writable: false,
+    enumerable: false,
+    configurable: false
+});
 
-        try {
-            Object.defineProperties(arg, {
-                "0": {
-                    configurable: true
-                }
-            });
-
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(arg, "0", 0, false, false, false);
+try {
+    Object.defineProperties(arg, {
+        "0": {
+            configurable: true
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arg, "0", 0);
+
+    verifyNotWritable(arg, "0");
+
+    verifyNotEnumerable(arg, "0");
+
+    verifyNotConfigurable(arg, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-298.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-298.js
index 0c72e56b90..ca7724bcdc 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-298.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-298.js
@@ -12,41 +12,45 @@ description: >
     [[ParameterMap]] of 'O', test TypeError is thrown when updating
     the [[Get]] attribute value of 'P' which is not configurable (10.6
     [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arg;
+var arg;
 
-        (function fun() {
-            arg = arguments;
-        }());
+(function fun() {
+    arg = arguments;
+}());
 
-        function get_func1() {
-            return 0;
-        }
+function get_func1() {
+    return 0;
+}
 
-        Object.defineProperty(arg, "0", {
-            get: get_func1,
-            enumerable: false,
-            configurable: false
-        });
+Object.defineProperty(arg, "0", {
+    get: get_func1,
+    enumerable: false,
+    configurable: false
+});
 
-        function get_func2() {
-            return 10;
-        }
-        try {
-            Object.defineProperties(arg, {
-                "0": {
-                    get: get_func2
-                }
-            });
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && accessorPropertyAttributesAreCorrect(arg, "0", get_func1, undefined, undefined, false, false);
+function get_func2() {
+    return 10;
+}
+try {
+    Object.defineProperties(arg, {
+        "0": {
+            get: get_func2
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arg, "0", get_func1());
+
+    verifyNotEnumerable(arg, "0");
+
+    verifyNotConfigurable(arg, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-299.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-299.js
index f42e1cd306..25ac42ce31 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-299.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-299.js
@@ -12,42 +12,46 @@ description: >
     [[ParameterMap]] of 'O', test TypeError is thrown when updating
     the [[Set]] attribute value of 'P' which is not configurable (10.6
     [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arg;
+var arg;
 
-        (function fun() {
-            arg = arguments;
-        }());
+(function fun() {
+    arg = arguments;
+}());
 
-        function get_func() {
-            return 0;
-        }
+function get_func() {
+    return 0;
+}
 
-        Object.defineProperty(arg, "0", {
-            get: get_func,
-            set: undefined,
-            enumerable: false,
-            configurable: false
-        });
+Object.defineProperty(arg, "0", {
+    get: get_func,
+    set: undefined,
+    enumerable: false,
+    configurable: false
+});
 
-        function set_func(value) {
-            arg.setVerifyHelpProp = value;
-        }
-        try {
-            Object.defineProperties(arg, {
-                "0": {
-                    set: set_func
-                }
-            });
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && accessorPropertyAttributesAreCorrect(arg, "0", get_func, undefined, undefined, false, false);
+function set_func(value) {
+    arg.setVerifyHelpProp = value;
+}
+try {
+    Object.defineProperties(arg, {
+        "0": {
+            set: set_func
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arg, "0", get_func());
+
+    verifyNotEnumerable(arg, "0");
+
+    verifyNotConfigurable(arg, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-30.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-30.js
index 97b89b2ff8..d5d6abd156 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-30.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-30.js
@@ -10,17 +10,23 @@ 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)
-includes: [runTestCase.js]
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
-
-            
-        Object.defineProperties(obj, {
-            prop: { value: 1001 }
-        });
-        delete obj.prop;
-        return obj.hasOwnProperty("prop") && obj.prop === 1001;        
-    }
-runTestCase(testcase);
+var obj = {};
+
+
+Object.defineProperties(obj, {
+    prop: { value: 1001 }
+});
+
+verifyNotConfigurable(obj, "prop");
+
+if (!obj.hasOwnProperty("prop")) {
+    $ERROR('Expected obj.hasOwnProperty("prop") to be true, actually ' + obj.hasOwnProperty("prop"));
+}
+
+if (obj.prop !== 1001) {
+    $ERROR('Expected obj.prop === 1001, actually ' + obj.prop);
+}
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-300.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-300.js
index 34362547fd..dba2012e81 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-300.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-300.js
@@ -12,38 +12,42 @@ description: >
     [[ParameterMap]] of 'O', test TypeError is thrown when updating
     the [[Enumerable]] attribute value of 'P' which is not
     configurable (10.6 [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arg;
+var arg;
 
-        (function fun() {
-            arg = arguments;
-        }());
+(function fun() {
+    arg = arguments;
+}());
 
-        function get_func() {
-            return 0;
-        }
+function get_func() {
+    return 0;
+}
+
+Object.defineProperty(arg, "0", {
+    get: get_func,
+    enumerable: true,
+    configurable: false
+});
 
-        Object.defineProperty(arg, "0", {
-            get: get_func,
-            enumerable: true,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperties(arg, {
-                "0": {
-                    enumerable: false
-                }
-            });
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && accessorPropertyAttributesAreCorrect(arg, "0", get_func, undefined, undefined, true, false);
+try {
+    Object.defineProperties(arg, {
+        "0": {
+            enumerable: false
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arg, "0", get_func());
+
+    verifyEnumerable(arg, "0");
+
+    verifyNotConfigurable(arg, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-301.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-301.js
index a642570d13..50d1399165 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-301.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-301.js
@@ -12,38 +12,42 @@ description: >
     [[ParameterMap]] of 'O', test TypeError is thrown when updating
     the [[Configurable]] attribute value of 'P' which is not
     configurable (10.6 [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arg;
+var arg;
 
-        (function fun() {
-            arg = arguments;
-        }());
+(function fun() {
+    arg = arguments;
+}());
 
-        function get_func() {
-            return 0;
-        }
+function get_func() {
+    return 0;
+}
+
+Object.defineProperty(arg, "0", {
+    get: get_func,
+    enumerable: true,
+    configurable: false
+});
 
-        Object.defineProperty(arg, "0", {
-            get: get_func,
-            enumerable: true,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperties(arg, {
-                "0": {
-                    configurable: true
-                }
-            });
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && accessorPropertyAttributesAreCorrect(arg, "0", get_func, undefined, undefined, true, false);
+try {
+    Object.defineProperties(arg, {
+        "0": {
+            configurable: true
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arg, "0", get_func());
+
+    verifyEnumerable(arg, "0");
+
+    verifyNotConfigurable(arg, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-302.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-302.js
index cd827ebbb4..f0b704f845 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-302.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-302.js
@@ -11,25 +11,26 @@ description: >
     generic property, and 'desc' is data descriptor, test 'P' is
     defined in 'O' with all correct attribute values (10.6
     [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arg = (function () {
-            return arguments;
-        }(1, 2, 3));
+var arg = (function () {
+    return arguments;
+}(1, 2, 3));
 
-        Object.defineProperties(arg, {
-            "genericProperty": {
-                value: 1001,
-                writable: true,
-                enumerable: true,
-                configurable: true
-            }
-        });
-
-        return dataPropertyAttributesAreCorrect(arg, "genericProperty", 1001, true, true, true);
+Object.defineProperties(arg, {
+    "genericProperty": {
+        value: 1001,
+        writable: true,
+        enumerable: true,
+        configurable: true
     }
-runTestCase(testcase);
+});
+
+verifyEqualTo(arg, "genericProperty", 1001);
+
+verifyWritable(arg, "genericProperty");
+
+verifyEnumerable(arg, "genericProperty");
+
+verifyConfigurable(arg, "genericProperty");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-303.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-303.js
index f5eff7cec5..17f13ad6a5 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-303.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-303.js
@@ -11,31 +11,32 @@ description: >
     generic property, and 'desc' is accessor descriptor, test 'P' is
     defined in 'O' with all correct attribute values (10.6
     [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arg = (function () {
-            return arguments;
-        }(1, 2, 3));
+var arg = (function () {
+    return arguments;
+}(1, 2, 3));
 
-        function getFun() {
-            return "getFunctionString";
-        }
-        function setFun(value) {
-            arg.testGetFunction = value;
-        }
-        Object.defineProperties(arg, {
-            "genericProperty": {
-                get: getFun,
-                set: setFun,
-                enumerable: true,
-                configurable: true
-            }
-        });
-
-        return accessorPropertyAttributesAreCorrect(arg, "genericProperty", getFun, setFun, "testGetFunction", true, true);
+function getFun() {
+    return "getFunctionString";
+}
+function setFun(value) {
+    arg.testGetFunction = value;
+}
+Object.defineProperties(arg, {
+    "genericProperty": {
+        get: getFun,
+        set: setFun,
+        enumerable: true,
+        configurable: true
     }
-runTestCase(testcase);
+});
+
+verifyEqualTo(arg, "genericProperty", getFun());
+
+verifyWritable(arg, "genericProperty", "testGetFunction");
+
+verifyEnumerable(arg, "genericProperty");
+
+verifyConfigurable(arg, "genericProperty");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-304.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-304.js
index faa10b1688..aa67694eb3 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-304.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-304.js
@@ -11,42 +11,43 @@ description: >
     generic own accessor property of 'O', and 'desc' is accessor
     descriptor, test updating multiple attribute values of 'P' (10.6
     [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arg = (function () {
-            return arguments;
-        }(1, 2, 3));
-
-        Object.defineProperty(arg, "genericProperty", {
-            get: function () {
-                return 1001;
-            },
-            set: function (value) {
-                arg.testGetFunction1 = value;
-            },
-            enumerable: true,
-            configurable: true
-        });
-
-        function getFun() {
-            return "getFunctionString";
-        }
-        function setFun(value) {
-            arg.testGetFunction = value;
-        }
-        Object.defineProperties(arg, {
-            "genericProperty": {
-                get: getFun,
-                set: setFun,
-                enumerable: false,
-                configurable: false
-            }
-        });
-
-        return accessorPropertyAttributesAreCorrect(arg, "genericProperty", getFun, setFun, "testGetFunction", false, false);
+var arg = (function () {
+    return arguments;
+}(1, 2, 3));
+
+Object.defineProperty(arg, "genericProperty", {
+    get: function () {
+        return 1001;
+    },
+    set: function (value) {
+        arg.testGetFunction1 = value;
+    },
+    enumerable: true,
+    configurable: true
+});
+
+function getFun() {
+    return "getFunctionString";
+}
+function setFun(value) {
+    arg.testGetFunction = value;
+}
+Object.defineProperties(arg, {
+    "genericProperty": {
+        get: getFun,
+        set: setFun,
+        enumerable: false,
+        configurable: false
     }
-runTestCase(testcase);
+});
+
+verifyEqualTo(arg, "genericProperty", getFun());
+
+verifyWritable(arg, "genericProperty", "testGetFunction");
+
+verifyNotEnumerable(arg, "genericProperty");
+
+verifyNotConfigurable(arg, "genericProperty");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-305.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-305.js
index 641833ad3e..11471d6c42 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-305.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-305.js
@@ -11,31 +11,32 @@ description: >
     generic own data property of 'O', and 'desc' is data descriptor,
     test updating multiple attribute values of 'P' (10.6
     [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arg = (function () {
-            return arguments;
-        }(1, 2, 3));
-
-        Object.defineProperty(arg, "genericProperty", {
-            value: 1001,
-            writable: true,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.defineProperties(arg, {
-            "genericProperty": {
-                value: 1002,
-                enumerable: false,
-                configurable: false
-            }
-        });
-
-        return dataPropertyAttributesAreCorrect(arg, "genericProperty", 1002, true, false, false);
+var arg = (function () {
+    return arguments;
+}(1, 2, 3));
+
+Object.defineProperty(arg, "genericProperty", {
+    value: 1001,
+    writable: true,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperties(arg, {
+    "genericProperty": {
+        value: 1002,
+        enumerable: false,
+        configurable: false
     }
-runTestCase(testcase);
+});
+
+verifyEqualTo(arg, "genericProperty", 1002);
+
+verifyWritable(arg, "genericProperty");
+
+verifyNotEnumerable(arg, "genericProperty");
+
+verifyNotConfigurable(arg, "genericProperty");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-306.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-306.js
index 44ce844fe0..594c661241 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-306.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-306.js
@@ -11,33 +11,38 @@ description: >
     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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arg = (function () {
-            return arguments;
-        }(1, 2, 3));
-
-        Object.defineProperty(arg, "genericProperty", {
-            value: 1001,
-            writable: false,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperties(arg, {
-                "genericProperty": {
-                    value: 1002
-                }
-            });
-
-            return false;
-        } catch (ex) {
-            return ex instanceof TypeError &&
-                dataPropertyAttributesAreCorrect(arg, "genericProperty", 1001, false, false, false);
+var arg = (function () {
+    return arguments;
+}(1, 2, 3));
+
+Object.defineProperty(arg, "genericProperty", {
+    value: 1001,
+    writable: false,
+    configurable: false
+});
+
+try {
+    Object.defineProperties(arg, {
+        "genericProperty": {
+            value: 1002
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arg, "genericProperty", 1001);
+
+    verifyNotWritable(arg, "genericProperty");
+
+    verifyNotEnumerable(arg, "genericProperty");
+
+    verifyNotConfigurable(arg, "genericProperty");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-307.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-307.js
index 106bb6c803..203e246969 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-307.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-307.js
@@ -11,32 +11,37 @@ description: >
     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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arg = (function () {
-            return arguments;
-        }(1, 2, 3));
-
-        Object.defineProperty(arg, "genericProperty", {
-            writable: false,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperties(arg, {
-                "genericProperty": {
-                    writable: true
-                }
-            });
-
-            return false;
-        } catch (ex) {
-            return ex instanceof TypeError &&
-                dataPropertyAttributesAreCorrect(arg, "genericProperty", undefined, false, false, false);
+var arg = (function () {
+    return arguments;
+}(1, 2, 3));
+
+Object.defineProperty(arg, "genericProperty", {
+    writable: false,
+    configurable: false
+});
+
+try {
+    Object.defineProperties(arg, {
+        "genericProperty": {
+            writable: true
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arg, "genericProperty", undefined);
+
+    verifyNotWritable(arg, "genericProperty");
+
+    verifyNotEnumerable(arg, "genericProperty");
+
+    verifyNotConfigurable(arg, "genericProperty");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-308.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-308.js
index f25243da34..1aaebe4c99 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-308.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-308.js
@@ -11,32 +11,37 @@ description: >
     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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arg = (function () {
-            return arguments;
-        }(1, 2, 3));
-
-        Object.defineProperty(arg, "genericProperty", {
-            enumerable: true,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperties(arg, {
-                "genericProperty": {
-                    enumerable: false
-                }
-            });
-
-            return false;
-        } catch (ex) {
-            return ex instanceof TypeError &&
-                dataPropertyAttributesAreCorrect(arg, "genericProperty", undefined, false, true, false);
+var arg = (function () {
+    return arguments;
+}(1, 2, 3));
+
+Object.defineProperty(arg, "genericProperty", {
+    enumerable: true,
+    configurable: false
+});
+
+try {
+    Object.defineProperties(arg, {
+        "genericProperty": {
+            enumerable: false
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arg, "genericProperty", undefined);
+
+    verifyNotWritable(arg, "genericProperty");
+
+    verifyEnumerable(arg, "genericProperty");
+
+    verifyNotConfigurable(arg, "genericProperty");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-309.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-309.js
index acf8ce4311..fa06927c8f 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-309.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-309.js
@@ -11,31 +11,36 @@ description: >
     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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arg = (function () {
-            return arguments;
-        }(1, 2, 3));
-
-        Object.defineProperty(arg, "genericProperty", {
-            configurable: false
-        });
-
-        try {
-            Object.defineProperties(arg, {
-                "genericProperty": {
-                    configurable: true
-                }
-            });
-
-            return false;
-        } catch (ex) {
-            return ex instanceof TypeError &&
-                dataPropertyAttributesAreCorrect(arg, "genericProperty", undefined, false, false, false);
+var arg = (function () {
+    return arguments;
+}(1, 2, 3));
+
+Object.defineProperty(arg, "genericProperty", {
+    configurable: false
+});
+
+try {
+    Object.defineProperties(arg, {
+        "genericProperty": {
+            configurable: true
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arg, "genericProperty", undefined);
+
+    verifyNotWritable(arg, "genericProperty");
+
+    verifyNotEnumerable(arg, "genericProperty");
+
+    verifyNotConfigurable(arg, "genericProperty");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-31.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-31.js
index 4ae9958654..cb36538d09 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-31.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-31.js
@@ -9,23 +9,24 @@ es5id: 15.2.3.7-6-a-31
 description: >
     Object.defineProperties - 'desc' is data descriptor, test setting
     all attribute values of 'P' (8.12.9 step 4.a.i)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
-
-        Object.defineProperties(obj, {
-            prop: {
-                value: 1002,
-                writable: false,
-                enumerable: false,
-                configurable: false
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "prop", 1002, false, false, false);
+var obj = {};
 
+Object.defineProperties(obj, {
+    prop: {
+        value: 1002,
+        writable: false,
+        enumerable: false,
+        configurable: false
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "prop", 1002);
+
+verifyNotWritable(obj, "prop");
+
+verifyNotEnumerable(obj, "prop");
+
+verifyNotConfigurable(obj, "prop");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-310.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-310.js
index f2dc102f59..e8ebe30566 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-310.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-310.js
@@ -11,41 +11,46 @@ description: >
     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)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arg = (function () {
-            return arguments;
-        } (1, 2, 3));
+var arg = (function () {
+    return arguments;
+} (1, 2, 3));
 
-        function getFun() {
-            return "genericPropertyString";
-        }
-        function setFun(value) {
-            arg.verifySetFun = value;
-        }
-        Object.defineProperty(arg, "genericProperty", {
-            get: getFun,
-            set: setFun,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperties(arg, {
-                "genericProperty": {
-                    get: function () {
-                        return "overideGenericPropertyString";
-                    }
-                }
-            });
-
-            return false;
-        } catch (ex) {
-            return ex instanceof TypeError &&
-                accessorPropertyAttributesAreCorrect(arg, "genericProperty", getFun, setFun, "verifySetFun", false, false, false);
+function getFun() {
+    return "genericPropertyString";
+}
+function setFun(value) {
+    arg.verifySetFun = value;
+}
+Object.defineProperty(arg, "genericProperty", {
+    get: getFun,
+    set: setFun,
+    configurable: false
+});
+
+try {
+    Object.defineProperties(arg, {
+        "genericProperty": {
+            get: function () {
+                return "overideGenericPropertyString";
+            }
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arg, "genericProperty", getFun());
+
+    verifyWritable(arg, "genericProperty", "verifySetFun");
+
+    verifyNotEnumerable(arg, "genericProperty");
+
+    verifyNotConfigurable(arg, "genericProperty");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-311.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-311.js
index ddbd7e60cd..abd4268b53 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-311.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-311.js
@@ -11,37 +11,40 @@ description: >
     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)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arg = (function () {
-            return arguments;
-        }(1, 2, 3));
+var arg = (function () {
+    return arguments;
+}(1, 2, 3));
 
-        function setFun(value) {
-            arg.genericPropertyString = value;
-        }
-        Object.defineProperty(arg, "genericProperty", {
-            set: setFun,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperties(arg, {
-                "genericProperty": {
-                    set: function (value) {
-                        arg.genericPropertyString1 = value;
-                    }
-                }
-            });
-
-            return false;
-        } catch (ex) {
-            return ex instanceof TypeError &&
-                accessorPropertyAttributesAreCorrect(arg, "genericProperty", undefined, setFun, "genericPropertyString", false, false, false);
+function setFun(value) {
+    arg.genericPropertyString = value;
+}
+Object.defineProperty(arg, "genericProperty", {
+    set: setFun,
+    configurable: false
+});
+
+try {
+    Object.defineProperties(arg, {
+        "genericProperty": {
+            set: function (value) {
+                arg.genericPropertyString1 = value;
+            }
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyWritable(arg, "genericProperty", "genericPropertyString");
+
+    verifyNotEnumerable(arg, "genericProperty");
+
+    verifyNotConfigurable(arg, "genericProperty");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-312.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-312.js
index 3717eb0c3b..e41c8b71e4 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-312.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-312.js
@@ -11,36 +11,39 @@ description: >
     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)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arg = (function () {
-            return arguments;
-        }(1, 2, 3));
+var arg = (function () {
+    return arguments;
+}(1, 2, 3));
 
-        function setFun(value) {
-            arg.genericPropertyString = value;
-        }
-        Object.defineProperty(arg, "genericProperty", {
-            set: setFun,
-            enumerable: true,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperties(arg, {
-                "genericProperty": {
-                    enumerable: false
-                }
-            });
-
-            return false;
-        } catch (ex) {
-            return ex instanceof TypeError &&
-                accessorPropertyAttributesAreCorrect(arg, "genericProperty", undefined, setFun, "genericPropertyString", true, false);
+function setFun(value) {
+    arg.genericPropertyString = value;
+}
+Object.defineProperty(arg, "genericProperty", {
+    set: setFun,
+    enumerable: true,
+    configurable: false
+});
+
+try {
+    Object.defineProperties(arg, {
+        "genericProperty": {
+            enumerable: false
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyWritable(arg, "genericProperty", "genericPropertyString");
+
+    verifyEnumerable(arg, "genericProperty");
+
+    verifyNotConfigurable(arg, "genericProperty");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-313.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-313.js
index 28f1e14408..bffe3b3b05 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-313.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-313.js
@@ -11,35 +11,38 @@ description: >
     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)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arg = (function () {
-            return arguments;
-        }(1, 2, 3));
+var arg = (function () {
+    return arguments;
+}(1, 2, 3));
 
-        function setFun(value) {
-            arg.genericPropertyString = value;
-        }
-        Object.defineProperty(arg, "genericProperty", {
-            set: setFun,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperties(arg, {
-                "genericProperty": {
-                    configurable: true
-                }
-            });
-
-            return false;
-        } catch (ex) {
-            return ex instanceof TypeError &&
-                accessorPropertyAttributesAreCorrect(arg, "genericProperty", undefined, setFun, "genericPropertyString", false, false, false);
+function setFun(value) {
+    arg.genericPropertyString = value;
+}
+Object.defineProperty(arg, "genericProperty", {
+    set: setFun,
+    configurable: false
+});
+
+try {
+    Object.defineProperties(arg, {
+        "genericProperty": {
+            configurable: true
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyWritable(arg, "genericProperty", "genericPropertyString");
+
+    verifyNotEnumerable(arg, "genericProperty");
+
+    verifyNotConfigurable(arg, "genericProperty");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-33.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-33.js
index 0c254b1ca4..a5f213f354 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-33.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-33.js
@@ -10,25 +10,24 @@ 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)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
-        var setFun = function (value) {
-            obj.setVerifyHelpProp = value;
-        };
-
-        Object.defineProperties(obj, {
-            prop: {
-                set: setFun,
-                enumerable: true,
-                configurable: true
-            }
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "prop", undefined, setFun, "setVerifyHelpProp", true, true);
+var obj = {};
+var setFun = function (value) {
+    obj.setVerifyHelpProp = value;
+};
 
+Object.defineProperties(obj, {
+    prop: {
+        set: setFun,
+        enumerable: true,
+        configurable: true
     }
-runTestCase(testcase);
+});
+verifyWritable(obj, "prop", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "prop");
+
+verifyConfigurable(obj, "prop");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-35.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-35.js
index bbacd3f260..d0da7577d6 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-35.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-35.js
@@ -10,28 +10,29 @@ 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)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
-        var getFun = function () {
-            return 10;
-        };
-        var setFun = function (value) {
-            obj.setVerifyHelpProp = value;
-        };
-
-        Object.defineProperties(obj, {
-            prop: {
-                set: setFun,
-                get: getFun,
-                configurable: true
-            }
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "prop", getFun, setFun, "setVerifyHelpProp", false, true);
+var obj = {};
+var getFun = function () {
+    return 10;
+};
+var setFun = function (value) {
+    obj.setVerifyHelpProp = value;
+};
 
+Object.defineProperties(obj, {
+    prop: {
+        set: setFun,
+        get: getFun,
+        configurable: true
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "prop", getFun());
+
+verifyWritable(obj, "prop", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "prop");
+
+verifyConfigurable(obj, "prop");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-36.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-36.js
index f8c1d276bf..6eb3036bc0 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-36.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-36.js
@@ -11,27 +11,29 @@ description: >
     [[Configurable]] of 'P' is set as false value if absent in
     accessor descriptor 'desc' (8.12.9 step 4.b.i)
 includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+    - propertyHelper.js
 ---*/
 
-function testcase() {
-        var obj = {};
-        var getFun = function () {
-            return 10;
-        };
-        var setFun = function (value) {
-            obj.setVerifyHelpProp = value;
-        };
-
-        Object.defineProperties(obj, {
-            prop: {
-                set: setFun,
-                get: getFun,
-                enumerable: true
-            }
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "prop", getFun, setFun, "setVerifyHelpProp", true, false);
+var obj = {};
+var getFun = function () {
+    return 10;
+};
+var setFun = function (value) {
+    obj.setVerifyHelpProp = value;
+};
 
+Object.defineProperties(obj, {
+    prop: {
+        set: setFun,
+        get: getFun,
+        enumerable: true
     }
-runTestCase(testcase);
+});
+
+verifyEqualTo(obj, "prop", 10);
+
+verifyWritable(obj, "prop", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "prop");
+
+verifyNotConfigurable(obj, "prop");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-37.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-37.js
index fd0bca98c6..2dce15e025 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-37.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-37.js
@@ -9,29 +9,30 @@ es5id: 15.2.3.7-6-a-37
 description: >
     Object.defineProperties - 'desc' is accessor descriptor, test
     setting all attribute values of 'P' (8.12.9 step 4.b.i)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
-        var getFun = function () {
-            return 10;
-        };
-        var setFun = function (value) {
-            obj.setVerifyHelpProp = value;
-        };
-
-        Object.defineProperties(obj, {
-            prop: {
-                get: getFun,
-                set: setFun,
-                enumerable: false,
-                configurable: false
-            }
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "prop", getFun, setFun, "setVerifyHelpProp", false, false);
+var obj = {};
+var getFun = function () {
+    return 10;
+};
+var setFun = function (value) {
+    obj.setVerifyHelpProp = value;
+};
 
+Object.defineProperties(obj, {
+    prop: {
+        get: getFun,
+        set: setFun,
+        enumerable: false,
+        configurable: false
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "prop", getFun());
+
+verifyWritable(obj, "prop", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "prop");
+
+verifyNotConfigurable(obj, "prop");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-38-1.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-38-1.js
index 368a1f12d2..079f8b0e24 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-38-1.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-38-1.js
@@ -10,27 +10,26 @@ 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)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
-        var getFunc = function () {
-            return 12;
-        };
-        Object.defineProperties(obj, {
-            foo: {
-                get: getFunc,
-                enumerable: true,
-                configurable: true
-            }
-        });
+var obj = {};
+var getFunc = function () {
+    return 12;
+};
+Object.defineProperties(obj, {
+    foo: {
+        get: getFunc,
+        enumerable: true,
+        configurable: true
+    }
+});
 
-        Object.defineProperties(obj, { foo: {} });
+Object.defineProperties(obj, { foo: {} });
 
-        return accessorPropertyAttributesAreCorrect(obj, "foo", getFunc, undefined, undefined, true, true);
-    }
-runTestCase(testcase);
+verifyEqualTo(obj, "foo", getFunc());
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-38.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-38.js
index 20dd526511..de529e07f5 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-38.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-38.js
@@ -10,17 +10,18 @@ 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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
-        obj.foo = 100; // default value of attributes: writable: true, configurable: true, enumerable: true
+var obj = {};
+obj.foo = 100; // default value of attributes: writable: true, configurable: true, enumerable: true
 
-        Object.defineProperties(obj, { foo: {} });
-        return dataPropertyAttributesAreCorrect(obj, "foo", 100, true, true, true);
-    }
-runTestCase(testcase);
+Object.defineProperties(obj, { foo: {} });
+verifyEqualTo(obj, "foo", 100);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-39.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-39.js
index 4849a6cf96..9c125d9698 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-39.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-39.js
@@ -9,26 +9,27 @@ es5id: 15.2.3.7-6-a-39
 description: >
     Object.defineProperties - 'P' is data descriptor and every fields
     in 'desc' is the same with 'P' (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        obj.foo = 101; // default value of attributes: writable: true, configurable: true, enumerable: true
-
-        Object.defineProperties(obj, {
-            foo: {
-                value: 101,
-                enumerable: true,
-                writable: true,
-                configurable: true
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", 101, true, true, true);
+obj.foo = 101; // default value of attributes: writable: true, configurable: true, enumerable: true
 
+Object.defineProperties(obj, {
+    foo: {
+        value: 101,
+        enumerable: true,
+        writable: true,
+        configurable: true
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", 101);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-40.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-40.js
index c823e8a653..22ff55e47e 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-40.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-40.js
@@ -9,39 +9,40 @@ es5id: 15.2.3.7-6-a-40
 description: >
     Object.defineProperties - 'P' is accessor descriptor and every
     fields in 'desc' is the same with 'P' (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        function get_func() {
-            return 0;
-        }
-        function set_func(value) {
-            obj.setVerifyHelpProp = value;
-        }
-        var desc = {
-            get: get_func,
-            set: set_func,
-            enumerable: true,
-            configurable: true
-        };
-
-        Object.defineProperty(obj, "foo", desc);
-
-        Object.defineProperties(obj, {
-            foo: {
-                get: get_func,
-                set: set_func,
-                enumerable: true,
-                configurable: true
-            }
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "foo", get_func, set_func, "setVerifyHelpProp", true, true);
 
+var obj = {};
+
+function get_func() {
+    return 0;
+}
+function set_func(value) {
+    obj.setVerifyHelpProp = value;
+}
+var desc = {
+    get: get_func,
+    set: set_func,
+    enumerable: true,
+    configurable: true
+};
+
+Object.defineProperty(obj, "foo", desc);
+
+Object.defineProperties(obj, {
+    foo: {
+        get: get_func,
+        set: set_func,
+        enumerable: true,
+        configurable: true
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", get_func());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-41.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-41.js
index 2e16082d42..a6d6802c42 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-41.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-41.js
@@ -9,23 +9,24 @@ es5id: 15.2.3.7-6-a-41
 description: >
     Object.defineProperties - type of desc.value is different from
     type of P.value (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        obj.foo = 101; // default value of attributes: writable: true, configurable: true, enumerable: true
-
-        Object.defineProperties(obj, {
-            foo: {
-                value: "102"
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", "102", true, true, true);
+obj.foo = 101; // default value of attributes: writable: true, configurable: true, enumerable: true
 
+Object.defineProperties(obj, {
+    foo: {
+        value: "102"
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", "102");
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-42.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-42.js
index 4d1958eae1..4a991a07ed 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-42.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-42.js
@@ -9,24 +9,25 @@ es5id: 15.2.3.7-6-a-42
 description: >
     Object.defineProperties - both desc.value and P.value are
     undefined (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        var desc = { value: undefined };
-        Object.defineProperty(obj, "foo", desc);
-
-        Object.defineProperties(obj, {
-            foo: {
-                value: undefined
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", undefined, false, false, false);
+var desc = { value: undefined };
+Object.defineProperty(obj, "foo", desc);
 
+Object.defineProperties(obj, {
+    foo: {
+        value: undefined
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", undefined);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-43.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-43.js
index 640630cce8..39e342997d 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-43.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-43.js
@@ -9,24 +9,25 @@ es5id: 15.2.3.7-6-a-43
 description: >
     Object.defineProperties - both desc.value and P.value are null
     (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        var desc = { value: null };
-        Object.defineProperty(obj, "foo", desc);
-
-        Object.defineProperties(obj, {
-            foo: {
-                value: null
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", null, false, false, false);
+var desc = { value: null };
+Object.defineProperty(obj, "foo", desc);
 
+Object.defineProperties(obj, {
+    foo: {
+        value: null
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", null);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-45.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-45.js
index a993f783e0..2a4cd99aa8 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-45.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-45.js
@@ -9,27 +9,33 @@ es5id: 15.2.3.7-6-a-45
 description: >
     Object.defineProperties - desc.value is +0 and P.value is -0
     (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        var desc = { value: -0 };
-        Object.defineProperty(obj, "foo", desc);
+var desc = { value: -0 };
+Object.defineProperty(obj, "foo", desc);
 
-        try {
-            Object.defineProperties(obj, {
-                foo: {
-                    value: +0
-                }
-            });
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, "foo", -0, false, false, false);
+try {
+    Object.defineProperties(obj, {
+        foo: {
+            value: +0
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "foo", -0);
+
+    verifyNotWritable(obj, "foo");
+
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-46.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-46.js
index 701be15e42..69bffbd5b2 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-46.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-46.js
@@ -9,27 +9,33 @@ es5id: 15.2.3.7-6-a-46
 description: >
     Object.defineProperties - desc.value is -0 and P.value is +0
     (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        var desc = { value: +0 };
-        Object.defineProperty(obj, "foo", desc);
+var desc = { value: +0 };
+Object.defineProperty(obj, "foo", desc);
 
-        try {
-            Object.defineProperties(obj, {
-                foo: {
-                    value: -0
-                }
-            });
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, "foo", +0, false, false, false); 
+try {
+    Object.defineProperties(obj, {
+        foo: {
+            value: -0
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "foo", +0);
+
+    verifyNotWritable(obj, "foo");
+
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-47.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-47.js
index a67240e609..45db0783e2 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-47.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-47.js
@@ -9,23 +9,24 @@ es5id: 15.2.3.7-6-a-47
 description: >
     Object.defineProperties - desc.value and P.value are two numbers
     with the same value (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        var desc = { value: 101 };
-        Object.defineProperty(obj, "foo", desc);
+var desc = { value: 101 };
+Object.defineProperty(obj, "foo", desc);
 
-        Object.defineProperties(obj, {
-            foo: {
-                value: 101
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", 101, false, false, false);
+Object.defineProperties(obj, {
+    foo: {
+        value: 101
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", 101);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-48.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-48.js
index 5c00c5a11a..ca627be9b8 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-48.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-48.js
@@ -9,22 +9,23 @@ es5id: 15.2.3.7-6-a-48
 description: >
     Object.defineProperties - desc.value and P.value are two numbers
     with different values (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        obj.foo = 101; // default value of attributes: writable: true, configurable: true, enumerable: true
+obj.foo = 101; // default value of attributes: writable: true, configurable: true, enumerable: true
 
-        Object.defineProperties(obj, {
-            foo: {
-                value: 102
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", 102, true, true, true);
+Object.defineProperties(obj, {
+    foo: {
+        value: 102
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", 102);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-49.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-49.js
index e40d0f9ceb..4a9749f78a 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-49.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-49.js
@@ -10,23 +10,24 @@ 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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        var desc = { value: "abcd" };
-        Object.defineProperty(obj, "foo", desc);
+var desc = { value: "abcd" };
+Object.defineProperty(obj, "foo", desc);
 
-        Object.defineProperties(obj, {
-            foo: {
-                value: "abcd"
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", "abcd", false, false, false);
+Object.defineProperties(obj, {
+    foo: {
+        value: "abcd"
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", "abcd");
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-5.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-5.js
index 74783d0104..5d4ae1bfac 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-5.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-5.js
@@ -9,32 +9,36 @@ es5id: 15.2.3.7-6-a-5
 description: >
     Object.defineProperties - 'P' is own accessor property (8.12.9
     step 1 )
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
-        function getFunc() {
-            return 11;
-        }
+var obj = {};
+function getFunc() {
+    return 11;
+}
+
+Object.defineProperty(obj, "prop", {
+    get: getFunc,
+    configurable: false
+});
 
-        Object.defineProperty(obj, "prop", {
-            get: getFunc,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperties(obj, {
-                prop: {
-                    value: 12,
-                    configurable: true
-                }
-            });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && accessorPropertyAttributesAreCorrect(obj, "prop", getFunc, undefined, undefined, false, false);
+try {
+    Object.defineProperties(obj, {
+        prop: {
+            value: 12,
+            configurable: true
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "prop", getFunc());
+
+    verifyNotEnumerable(obj, "prop");
+
+    verifyNotConfigurable(obj, "prop");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-50.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-50.js
index 72ca8054d2..466306f07d 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-50.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-50.js
@@ -9,22 +9,23 @@ es5id: 15.2.3.7-6-a-50
 description: >
     Object.defineProperties - desc.value and P.value are two strings
     with different values  (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        obj.foo = "abcd"; // default value of attributes: writable: true, configurable: true, enumerable: true
+obj.foo = "abcd"; // default value of attributes: writable: true, configurable: true, enumerable: true
 
-        Object.defineProperties(obj, {
-            foo: {
-                value: "fghj"
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", "fghj", true, true, true);
+Object.defineProperties(obj, {
+    foo: {
+        value: "fghj"
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", "fghj");
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-51.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-51.js
index 173acbb8b7..7d333d6831 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-51.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-51.js
@@ -9,23 +9,24 @@ es5id: 15.2.3.7-6-a-51
 description: >
     Object.defineProperties - both desc.value and P.value are boolean
     values with the same value (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        var desc = { value: true };
-        Object.defineProperty(obj, "foo", desc);
+var desc = { value: true };
+Object.defineProperty(obj, "foo", desc);
 
-        Object.defineProperties(obj, {
-            foo: {
-                value: true
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", true, false, false, false);
+Object.defineProperties(obj, {
+    foo: {
+        value: true
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", true);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-52.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-52.js
index 968030f312..a8dd3b2567 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-52.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-52.js
@@ -9,22 +9,23 @@ es5id: 15.2.3.7-6-a-52
 description: >
     Object.defineProperties - desc.value and P.value are two boolean
     values with different values (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        obj.foo = true; // default value of attributes: writable: true, configurable: true, enumerable: true
+obj.foo = true; // default value of attributes: writable: true, configurable: true, enumerable: true
 
-        Object.defineProperties(obj, {
-            foo: {
-                value: false
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", false, true, true, true);
+Object.defineProperties(obj, {
+    foo: {
+        value: false
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", false);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-53.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-53.js
index 2396efc195..5413e9e68b 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-53.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-53.js
@@ -9,24 +9,25 @@ es5id: 15.2.3.7-6-a-53
 description: >
     Object.defineProperties - both desc.value and P.value are Ojbects
     which refer to the same Object (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        var obj1 = { length: 10 };
-        var desc = { value: obj1 };
-        Object.defineProperty(obj, "foo", desc);
+var obj1 = { length: 10 };
+var desc = { value: obj1 };
+Object.defineProperty(obj, "foo", desc);
 
-        Object.defineProperties(obj, {
-            foo: {
-                value: obj1
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", obj1, false, false, false);
+Object.defineProperties(obj, {
+    foo: {
+        value: obj1
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", obj1);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-54.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-54.js
index d5aa5a11df..5de9ff2dbd 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-54.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-54.js
@@ -9,25 +9,26 @@ es5id: 15.2.3.7-6-a-54
 description: >
     Object.defineProperties - desc.value and P.value are two Ojbects
     which refer to the different objects (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        var obj1 = { length: 10 };
-        obj.foo = obj1; // default value of attributes: writable: true, configurable: true, enumerable: true
+var obj1 = { length: 10 };
+obj.foo = obj1; // default value of attributes: writable: true, configurable: true, enumerable: true
 
-        var obj2 = { length: 20 };
+var obj2 = { length: 20 };
 
-        Object.defineProperties(obj, {
-            foo: {
-                value: obj2
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", obj2, true, true, true);
+Object.defineProperties(obj, {
+    foo: {
+        value: obj2
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", obj2);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-55.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-55.js
index 253e7c7b13..d830f0cb3c 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-55.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-55.js
@@ -9,23 +9,24 @@ es5id: 15.2.3.7-6-a-55
 description: >
     Object.defineProperties - both desc.writable and P.writable are
     boolean values with the same value (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        var desc = { writable: false };
-        Object.defineProperty(obj, "foo", desc);
+var desc = { writable: false };
+Object.defineProperty(obj, "foo", desc);
 
-        Object.defineProperties(obj, {
-            foo: {
-                writable: false
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", undefined, false, false, false);
+Object.defineProperties(obj, {
+    foo: {
+        writable: false
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", undefined);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-56.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-56.js
index bc9b5be007..b564febb88 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-56.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-56.js
@@ -9,24 +9,25 @@ es5id: 15.2.3.7-6-a-56
 description: >
     Object.defineProperties - desc.writable and P.writable are two
     boolean values with different values (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        var desc = { writable: false, configurable: true };
-        Object.defineProperty(obj, "foo", desc);
+var desc = { writable: false, configurable: true };
+Object.defineProperty(obj, "foo", desc);
 
-        Object.defineProperties(obj, {
-            foo: {
-                writable: true,
-                configurable: true
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", undefined, true, false, true);
+Object.defineProperties(obj, {
+    foo: {
+        writable: true,
+        configurable: true
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", undefined);
+
+verifyWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-59.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-59.js
index 3e68bf7875..e779a6e35e 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-59.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-59.js
@@ -9,28 +9,27 @@ es5id: 15.2.3.7-6-a-59
 description: >
     Object.defineProperties - both desc.[[Set]] and P.[[Set]] are two
     objects which refer to the same object (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function set_func(value) {
-            obj.setVerifyHelpProp = value;
-        }
+function set_func(value) {
+    obj.setVerifyHelpProp = value;
+}
 
-        Object.defineProperty(obj, "foo", {
-            set: set_func
-        });
+Object.defineProperty(obj, "foo", {
+    set: set_func
+});
 
-        Object.defineProperties(obj, {
-            foo: {
-                set: set_func
-            }
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "foo", undefined, set_func, "setVerifyHelpProp", false, false);
+Object.defineProperties(obj, {
+    foo: {
+        set: set_func
     }
-runTestCase(testcase);
+});
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-60.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-60.js
index b190d23497..b44e96b0fa 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-60.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-60.js
@@ -9,31 +9,30 @@ es5id: 15.2.3.7-6-a-60
 description: >
     Object.defineProperties - desc.[[Set]] and P.[[Set]] are two
     objects which refer to the different objects (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function set_func1() {}
+function set_func1() {}
 
-        Object.defineProperty(obj, "foo", {
-            set: set_func1,
-            configurable: true
-        });
+Object.defineProperty(obj, "foo", {
+    set: set_func1,
+    configurable: true
+});
 
-        function set_func2(value) {
-            obj.setVerifyHelpProp = value;
-        }
+function set_func2(value) {
+    obj.setVerifyHelpProp = value;
+}
 
-        Object.defineProperties(obj, {
-            foo: {
-                set: set_func2
-            }
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "foo", undefined, set_func2, "setVerifyHelpProp", false, true);
+Object.defineProperties(obj, {
+    foo: {
+        set: set_func2
     }
-runTestCase(testcase);
+});
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-61.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-61.js
index 7628964a8f..e92ab227d4 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-61.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-61.js
@@ -9,25 +9,26 @@ es5id: 15.2.3.7-6-a-61
 description: >
     Object.defineProperties - both desc.enumerable and P.enumerable
     are boolean values with the same value (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", { 
-            value: 10, 
-            enumerable: false 
-        });
+Object.defineProperty(obj, "foo", { 
+    value: 10, 
+    enumerable: false 
+});
 
-        Object.defineProperties(obj, {
-            foo: {
-                enumerable: false
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", 10, false, false, false);
+Object.defineProperties(obj, {
+    foo: {
+        enumerable: false
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", 10);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-62.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-62.js
index 7caea92ed3..482eefbb12 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-62.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-62.js
@@ -9,26 +9,27 @@ es5id: 15.2.3.7-6-a-62
 description: >
     Object.defineProperties - desc.enumerable and P.enumerable are two
     boolean values with different values (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", { 
-            value: 10, 
-            enumerable: false, 
-            configurable: true 
-        });
+Object.defineProperty(obj, "foo", { 
+    value: 10, 
+    enumerable: false, 
+    configurable: true 
+});
 
-        Object.defineProperties(obj, {
-            foo: {
-                enumerable: true
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", 10, false, true, true);
+Object.defineProperties(obj, {
+    foo: {
+        enumerable: true
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", 10);
+
+verifyNotWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-63.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-63.js
index 3da10b24b4..28fc79612b 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-63.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-63.js
@@ -10,25 +10,26 @@ description: >
     Object.defineProperties - both desc.configurable and
     P.configurable are boolean values with the same value (8.12.9 step
     6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", { 
-            value: 10, 
-            configurable: false 
-        });
+Object.defineProperty(obj, "foo", { 
+    value: 10, 
+    configurable: false 
+});
 
-        Object.defineProperties(obj, {
-            foo: {
-                configurable: false
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", 10, false, false, false);
+Object.defineProperties(obj, {
+    foo: {
+        configurable: false
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", 10);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-64.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-64.js
index 7ca8d05820..3fa8f7d621 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-64.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-64.js
@@ -9,25 +9,26 @@ es5id: 15.2.3.7-6-a-64
 description: >
     Object.defineProperties - desc.configurable and P.configurable are
     two boolean values with different values (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", {
-            value: 10,
-            configurable: true 
-        });
+Object.defineProperty(obj, "foo", {
+    value: 10,
+    configurable: true 
+});
 
-        Object.defineProperties(obj, {
-            foo: {
-                configurable: false
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", 10, false, false, false);
+Object.defineProperties(obj, {
+    foo: {
+        configurable: false
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", 10);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-65.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-65.js
index 1b85ed9e19..3359ed8b8e 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-65.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-65.js
@@ -9,29 +9,35 @@ es5id: 15.2.3.7-6-a-65
 description: >
     Object.defineProperties throws TypeError when P.configurable is
     false and desc.configurable is true (8.12.9 step 7.a)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", {
-            value: 10,
-            configurable: false 
-        });
+Object.defineProperty(obj, "foo", {
+    value: 10,
+    configurable: false 
+});
 
-        try {
-            Object.defineProperties(obj, {
-                foo: {
-                    configurable: true
-                }
-            });
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, "foo", 10, false, false, false);
+try {
+    Object.defineProperties(obj, {
+        foo: {
+            configurable: true
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "foo", 10);
+
+    verifyNotWritable(obj, "foo");
+
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-66-1.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-66-1.js
index 7e28fd8d0c..d892a13b0b 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-66-1.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-66-1.js
@@ -10,30 +10,36 @@ description: >
     Object.defineProperties throws TypeError when P.configurable is
     false, P.enumerable and desc.enumerable has different values
     (8.12.9 step 7.b)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        Object.defineProperty(obj, "foo", {
-            value: 10, 
-            enumerable: false, 
-            configurable: false 
-        });
-
-        try {
-            Object.defineProperties(obj, {
-                foo: {
-                    enumerable: true
-                }
-            });
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, "foo", 10, false, false, false);
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+    value: 10, 
+    enumerable: false, 
+    configurable: false 
+});
+
+try {
+    Object.defineProperties(obj, {
+        foo: {
+            enumerable: true
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "foo", 10);
+
+    verifyNotWritable(obj, "foo");
+
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-66.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-66.js
index c2e204fdbb..b47dda9b7b 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-66.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-66.js
@@ -10,30 +10,36 @@ description: >
     Object.defineProperties throws TypeError when P.configurable is
     false, P.enumerable and desc.enumerable has different values
     (8.12.9 step 7.b)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        Object.defineProperty(obj, "foo", { 
-            value: 10, 
-            enumerable: true, 
-            configurable: false 
-        });
-
-        try {
-            Object.defineProperties(obj, {
-                foo: {
-                    enumerable: false
-                }
-            });
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, "foo", 10, false, true, false);
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", { 
+    value: 10, 
+    enumerable: true, 
+    configurable: false 
+});
+
+try {
+    Object.defineProperties(obj, {
+        foo: {
+            enumerable: false
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "foo", 10);
+
+    verifyNotWritable(obj, "foo");
+
+    verifyEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-68.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-68.js
index 21417771be..42e9bd1165 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-68.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-68.js
@@ -10,33 +10,39 @@ 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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", {
-            value: 10,
-            configurable: false
-        });
+Object.defineProperty(obj, "foo", {
+    value: 10,
+    configurable: false
+});
 
-        function get_func() {
-            return 11;
-        }
+function get_func() {
+    return 11;
+}
 
-        try {
-            Object.defineProperties(obj, {
-                foo: {
-                    get: get_func
-                }
-            });
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, "foo", 10, false, false, false);
+try {
+    Object.defineProperties(obj, {
+        foo: {
+            get: get_func
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "foo", 10);
+
+    verifyNotWritable(obj, "foo");
+
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-70.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-70.js
index 332480ccd7..d6f2a3b9a7 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-70.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-70.js
@@ -10,29 +10,30 @@ 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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function get_func() {
-            return 10;
-        }
+function get_func() {
+    return 10;
+}
 
-        Object.defineProperty(obj, "foo", {
-            get: get_func,
-            configurable: true
-        });
+Object.defineProperty(obj, "foo", {
+    get: get_func,
+    configurable: true
+});
 
-        Object.defineProperties(obj, {
-            foo: {
-                value: 12
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", 12, false, false, true);
+Object.defineProperties(obj, {
+    foo: {
+        value: 12
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", 12);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-71.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-71.js
index 720bfcfbc4..219cd3bad6 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-71.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-71.js
@@ -10,30 +10,36 @@ 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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        Object.defineProperty(obj, "foo", { 
-            value: 10, 
-            writable: false, 
-            configurable: false 
-        });
-
-        try {
-            Object.defineProperties(obj, {
-                foo: {
-                    writable: true
-                }
-            });
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, "foo", 10, false, false, false);
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", { 
+    value: 10, 
+    writable: false, 
+    configurable: false 
+});
+
+try {
+    Object.defineProperties(obj, {
+        foo: {
+            writable: true
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "foo", 10);
+
+    verifyNotWritable(obj, "foo");
+
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-72.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-72.js
index 8932e5856b..c0ce53c7b6 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-72.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-72.js
@@ -11,30 +11,36 @@ description: >
     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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        Object.defineProperty(obj, "foo", { 
-            value: 10, 
-            writable: false, 
-            configurable: false 
-        });
-
-        try {
-            Object.defineProperties(obj, {
-                foo: {
-                    value: 20
-                }
-            });
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, "foo", 10, false, false, false);
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", { 
+    value: 10, 
+    writable: false, 
+    configurable: false 
+});
+
+try {
+    Object.defineProperties(obj, {
+        foo: {
+            value: 20
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "foo", 10);
+
+    verifyNotWritable(obj, "foo");
+
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-73.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-73.js
index 3e094e30b2..e6c7139ec5 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-73.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-73.js
@@ -10,26 +10,27 @@ 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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", { 
-            value: undefined, 
-            writable: false, 
-            configurable: false 
-        });
+Object.defineProperty(obj, "foo", { 
+    value: undefined, 
+    writable: false, 
+    configurable: false 
+});
 
-        Object.defineProperties(obj, {
-            foo: {
-                value: undefined
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", undefined, false, false, false);
+Object.defineProperties(obj, {
+    foo: {
+        value: undefined
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", undefined);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-74.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-74.js
index 2c304da322..cce4df0db0 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-74.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-74.js
@@ -10,26 +10,27 @@ 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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", { 
-            value: null, 
-            writable: false, 
-            configurable: false 
-        });
+Object.defineProperty(obj, "foo", { 
+    value: null, 
+    writable: false, 
+    configurable: false 
+});
 
-        Object.defineProperties(obj, {
-            foo: {
-                value: null
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", null, false, false, false);
+Object.defineProperties(obj, {
+    foo: {
+        value: null
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", null);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-76.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-76.js
index 554f369a2e..c390c5e6a3 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-76.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-76.js
@@ -10,30 +10,36 @@ 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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        Object.defineProperty(obj, "foo", { 
-            value: -0, 
-            writable: false, 
-            configurable: false 
-        });
-
-        try {
-            Object.defineProperties(obj, {
-                foo: {
-                    value: +0
-                }
-            });
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, "foo", -0, false, false, false);
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", { 
+    value: -0, 
+    writable: false, 
+    configurable: false 
+});
+
+try {
+    Object.defineProperties(obj, {
+        foo: {
+            value: +0
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "foo", -0);
+
+    verifyNotWritable(obj, "foo");
+
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-77.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-77.js
index 34fe3b6c55..34c416b757 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-77.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-77.js
@@ -10,30 +10,36 @@ 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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        Object.defineProperty(obj, "foo", { 
-            value: +0, 
-            writable: false, 
-            configurable: false 
-        });
-
-        try {
-            Object.defineProperties(obj, {
-                foo: {
-                    value: -0
-                }
-            });
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, "foo", +0, false, false, false);
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", { 
+    value: +0, 
+    writable: false, 
+    configurable: false 
+});
+
+try {
+    Object.defineProperties(obj, {
+        foo: {
+            value: -0
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "foo", +0);
+
+    verifyNotWritable(obj, "foo");
+
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-78.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-78.js
index cdf8636caa..ac83877ca1 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-78.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-78.js
@@ -10,27 +10,28 @@ 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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", {
-            value: 100,
-            writable: false,
-            configurable: false 
-        });
-
-        Object.defineProperties(obj, {
-            foo: {
-                value: 100
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", 100, false, false, false);
+Object.defineProperty(obj, "foo", {
+    value: 100,
+    writable: false,
+    configurable: false 
+});
 
+Object.defineProperties(obj, {
+    foo: {
+        value: 100
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", 100);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-79.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-79.js
index b4b9b841ac..9962e8a3b2 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-79.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-79.js
@@ -10,30 +10,36 @@ 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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        Object.defineProperty(obj, "foo", { 
-            value: 10, 
-            writable: false, 
-            configurable: false 
-        });
-
-        try {
-            Object.defineProperties(obj, {
-                foo: {
-                    value: 20
-                }
-            });
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, "foo", 10, false, false, false);
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", { 
+    value: 10, 
+    writable: false, 
+    configurable: false 
+});
+
+try {
+    Object.defineProperties(obj, {
+        foo: {
+            value: 20
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "foo", 10);
+
+    verifyNotWritable(obj, "foo");
+
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-80.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-80.js
index b74bf81ddb..a7c1116a48 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-80.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-80.js
@@ -10,26 +10,27 @@ 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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", {
-            value: "abcd",
-            writable: false,
-            configurable: false 
-        });
+Object.defineProperty(obj, "foo", {
+    value: "abcd",
+    writable: false,
+    configurable: false 
+});
 
-        Object.defineProperties(obj, {
-            foo: {
-                value: "abcd"
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", "abcd", false, false, false);
+Object.defineProperties(obj, {
+    foo: {
+        value: "abcd"
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", "abcd");
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-81.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-81.js
index e0a225461e..ef2aefcb2b 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-81.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-81.js
@@ -10,30 +10,36 @@ 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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        Object.defineProperty(obj, "foo", { 
-            value: "abcd", 
-            writable: false, 
-            configurable: false 
-        });
-
-        try {
-            Object.defineProperties(obj, {
-                foo: {
-                    value: "defg"
-                }
-            });
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, "foo", "abcd", false, false, false);
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", { 
+    value: "abcd", 
+    writable: false, 
+    configurable: false 
+});
+
+try {
+    Object.defineProperties(obj, {
+        foo: {
+            value: "defg"
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "foo", "abcd");
+
+    verifyNotWritable(obj, "foo");
+
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-82.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-82.js
index 8e8406a35f..c4780dcfe2 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-82.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-82.js
@@ -11,26 +11,27 @@ description: >
     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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", {
-            value: false,
-            writable: false,
-            configurable: false 
-        });
+Object.defineProperty(obj, "foo", {
+    value: false,
+    writable: false,
+    configurable: false 
+});
 
-        Object.defineProperties(obj, {
-            foo: {
-                value: false
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", false, false, false, false);
+Object.defineProperties(obj, {
+    foo: {
+        value: false
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", false);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-83.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-83.js
index 5a0cf3c052..ca5cc8017e 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-83.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-83.js
@@ -10,30 +10,36 @@ 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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        Object.defineProperty(obj, "foo", {
-            value: false,
-            writable: false,
-            configurable: false 
-        });
-
-        try {
-            Object.defineProperties(obj, {
-                foo: {
-                    value: true
-                }
-            });
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, "foo", false, false, false, false);
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+    value: false,
+    writable: false,
+    configurable: false 
+});
+
+try {
+    Object.defineProperties(obj, {
+        foo: {
+            value: true
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "foo", false);
+
+    verifyNotWritable(obj, "foo");
+
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-84-1.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-84-1.js
index c77f237933..a99797fbcc 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-84-1.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-84-1.js
@@ -11,31 +11,32 @@ description: >
     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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        var obj1 = { length: 10 };
+var obj1 = { length: 10 };
 
-        Object.defineProperty(obj, "foo", {
-            value: obj1,
-            writable: false,
-            configurable: false
-        });
+Object.defineProperty(obj, "foo", {
+    value: obj1,
+    writable: false,
+    configurable: false
+});
 
-        var obj2 = obj1;
-        obj2.y = "hello";
+var obj2 = obj1;
+obj2.y = "hello";
 
-        Object.defineProperties(obj, {
-            foo: {
-                value: obj2
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", obj1, false, false, false);
+Object.defineProperties(obj, {
+    foo: {
+        value: obj2
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", obj1);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-84.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-84.js
index d5f9f878f3..eca6d9640c 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-84.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-84.js
@@ -11,28 +11,29 @@ description: >
     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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        var obj1 = { length: 10 };
+var obj1 = { length: 10 };
 
-        Object.defineProperty(obj, "foo", { 
-            value: obj1, 
-            writable: false, 
-            configurable: false 
-        });
+Object.defineProperty(obj, "foo", { 
+    value: obj1, 
+    writable: false, 
+    configurable: false 
+});
 
-        Object.defineProperties(obj, {
-            foo: {
-                value: obj1
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", obj1, false, false, false);
+Object.defineProperties(obj, {
+    foo: {
+        value: obj1
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", obj1);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-85.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-85.js
index 0e7b1f0e09..55e7b0a4c6 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-85.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-85.js
@@ -10,34 +10,40 @@ 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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        var obj1 = { length: 10 };
+var obj1 = { length: 10 };
 
-        Object.defineProperty(obj, "foo", { 
-            value: obj1, 
-            writable: false, 
-            configurable: false 
-        });
+Object.defineProperty(obj, "foo", { 
+    value: obj1, 
+    writable: false, 
+    configurable: false 
+});
 
-        var obj2 = { length: 20 };
+var obj2 = { length: 20 };
 
-        try {
-            Object.defineProperties(obj, {
-                foo: {
-                    value: obj2
-                }
-            });
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && dataPropertyAttributesAreCorrect(obj, "foo", obj1, false, false, false);
+try {
+    Object.defineProperties(obj, {
+        foo: {
+            value: obj2
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "foo", obj1);
+
+    verifyNotWritable(obj, "foo");
+
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-86-1.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-86-1.js
index 0463add589..6fcc136ce4 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-86-1.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-86-1.js
@@ -11,36 +11,40 @@ description: >
     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)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        var set_func = function (value) {
-            obj.setVerifyHelpProp = value;
-        }
+var set_func = function (value) {
+    obj.setVerifyHelpProp = value;
+};
 
-        Object.defineProperty(obj, "foo", {
-            set: set_func,
-            configurable: false
-        });
+Object.defineProperty(obj, "foo", {
+    set: set_func,
+    configurable: false
+});
 
-        set_func = function (value) {
-            obj.setVerifyHelpProp1 = value;
-        }
+set_func = function (value) {
+    obj.setVerifyHelpProp1 = value;
+};
 
-        try {
-            Object.defineProperties(obj, {
-                foo: {
-                    set: set_func
-                }
-            });
-        } catch (e) {
-            return accessorPropertyAttributesAreCorrect(obj, "foo", undefined, set_func, "setVerifyHelpProp", false, false);
+try {
+    Object.defineProperties(obj, {
+        foo: {
+            set: set_func
         }
+    });
+} catch (e) {
+    verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-86.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-86.js
index 786272d8e2..d4c37c42b2 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-86.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-86.js
@@ -10,30 +10,29 @@ 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)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function set_func(value) {
-            obj.setVerifyHelpProp = value;
-        }
+function set_func(value) {
+    obj.setVerifyHelpProp = value;
+}
 
-        Object.defineProperty(obj, "foo", {
-            set: set_func,
-            configurable: false
-        });
-
-        Object.defineProperties(obj, {
-            foo: {
-                set: set_func
-            }
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "foo", undefined, set_func, "setVerifyHelpProp", false, false);
+Object.defineProperty(obj, "foo", {
+    set: set_func,
+    configurable: false
+});
 
+Object.defineProperties(obj, {
+    foo: {
+        set: set_func
     }
-runTestCase(testcase);
+});
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-87.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-87.js
index d06e7f7444..e362b22319 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-87.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-87.js
@@ -10,36 +10,40 @@ 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)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function set_func1(value) {
-            obj.setVerifyHelpProp = value;
-        }
+function set_func1(value) {
+    obj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(obj, "foo", {
+    set: set_func1,
+    configurable: false
+});
 
-        Object.defineProperty(obj, "foo", {
-            set: set_func1,
-            configurable: false
-        });
-
-        function set_func2() {}
-
-        try {
-            Object.defineProperties(obj, {
-                foo: {
-                    set: set_func2
-                }
-            });
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && accessorPropertyAttributesAreCorrect(obj, "foo", undefined, set_func1, "setVerifyHelpProp", false, false);
+function set_func2() {}
+
+try {
+    Object.defineProperties(obj, {
+        foo: {
+            set: set_func2
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+    verifyNotEnumerable(obj, "foo");
 
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-88.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-88.js
index c2f741608b..ae3969da10 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-88.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-88.js
@@ -9,49 +9,46 @@ es5id: 15.2.3.7-6-a-88
 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)
-includes: [runTestCase.js]
+    object (8.12.9 step 11.a.i)
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function get_Func() {
-            return 0;
-        }
+function get_Func() {
+    return 0;
+}
+
+Object.defineProperty(obj, "foo", {
+    set: undefined,
+    get: get_Func,
+    enumerable: false,
+    configurable: false
+});
+
+function set_Func() {}
 
-        Object.defineProperty(obj, "foo", {
-            set: undefined,
-            get: get_Func,
-            enumerable: false,
-            configurable: false
-        });
-
-        function set_Func() { }
-
-        try {
-            Object.defineProperties(obj, {
-                foo: {
-                    set: set_Func
-                }
-            });
-            return false;
-        } catch (e) {
-            var verifyEnumerable = false;
-            for (var p in obj) {
-                if (p === "foo") {
-                    verifyEnumerable = true;
-                }
-            }
-
-            var desc = Object.getOwnPropertyDescriptor(obj, "foo");
-
-            var verifyConfigurable = false;
-            delete obj.foo;
-            verifyConfigurable = obj.hasOwnProperty("foo");
-
-            return e instanceof TypeError && !verifyEnumerable && verifyConfigurable && typeof (desc.set) === "undefined";
+try {
+    Object.defineProperties(obj, {
+        foo: {
+            set: set_Func
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+    var desc = Object.getOwnPropertyDescriptor(obj, "foo");
+
+    if (typeof (desc.set) !== "undefined") {
+        $ERROR('Expected typeof (desc.set) === "undefined", actually ' + typeof (desc.set));
     }
-runTestCase(testcase);
+
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
+    }
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-89.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-89.js
index 208bbd3b0d..d2585dbe50 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-89.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-89.js
@@ -10,43 +10,35 @@ 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)
-includes: [runTestCase.js]
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function get_Func() {
-            return 0;
-        }
+function get_Func() {
+    return 0;
+}
 
-        Object.defineProperty(obj, "foo", {
-            get: get_Func,
-            set: undefined,
-            enumerable: false,
-            configurable: false
-        });
+Object.defineProperty(obj, "foo", {
+    get: get_Func,
+    set: undefined,
+    enumerable: false,
+    configurable: false
+});
 
-        Object.defineProperties(obj, {
-            foo: {
-                set: undefined
-            }
-        });
+Object.defineProperties(obj, {
+    foo: {
+        set: undefined
+    }
+});
 
-        var verifyEnumerable = false;
-        for (var p in obj) {
-            if (p === "foo") {
-                verifyEnumerable = true;
-            }
-        }
+verifyNotEnumerable(obj, "foo");
 
-        var desc = Object.getOwnPropertyDescriptor(obj, "foo");
+verifyNotConfigurable(obj, "foo");
 
-        var verifyConfigurable = false;
-        delete obj.foo;
-        verifyConfigurable = obj.hasOwnProperty("foo");
+var desc = Object.getOwnPropertyDescriptor(obj, "foo");
 
-        return verifyConfigurable && !verifyEnumerable && typeof (desc.set) === "undefined";
-    }
-runTestCase(testcase);
+if (typeof (desc.set) !== "undefined") {
+    $ERROR('Expected typeof (desc.set) === "undefined", actually ' + typeof (desc.set));
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-90.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-90.js
index c453b3347b..64b2a20c32 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-90.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-90.js
@@ -10,34 +10,35 @@ 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)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        function set_func(value) {
-            obj.setVerifyHelpProp = value;
-        }
-        function get_func() {
-            return 10;
-        }
-
-        Object.defineProperty(obj, "foo", {
-            get: get_func,
-            set: set_func,
-            enumerable: false,
-            configurable: false
-        });
-
-        Object.defineProperties(obj, {
-            foo: {
-                get: get_func
-            }
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "foo", get_func, set_func, "setVerifyHelpProp", false, false);
+
+var obj = {};
+
+function set_func(value) {
+    obj.setVerifyHelpProp = value;
+}
+function get_func() {
+    return 10;
+}
+
+Object.defineProperty(obj, "foo", {
+    get: get_func,
+    set: set_func,
+    enumerable: false,
+    configurable: false
+});
+
+Object.defineProperties(obj, {
+    foo: {
+        get: get_func
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", get_func());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-91.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-91.js
index 0af65538ef..19eb741305 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-91.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-91.js
@@ -10,43 +10,49 @@ 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)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function set_func(value) {
-            obj.setVerifyHelpProp = value;
-        }
-        function get_func1() {
-            return 10;
-        }
+function set_func(value) {
+    obj.setVerifyHelpProp = value;
+}
+function get_func1() {
+    return 10;
+}
 
-        Object.defineProperty(obj, "foo", {
-            get: get_func1,
-            set: set_func,
-            enumerable: false,
-            configurable: false
-        });
+Object.defineProperty(obj, "foo", {
+    get: get_func1,
+    set: set_func,
+    enumerable: false,
+    configurable: false
+});
 
-        function get_func2() {
-            return 20;
-        }
+function get_func2() {
+    return 20;
+}
 
-        try {
-            Object.defineProperties(obj, {
-                foo: {
-                    get: get_func2
-                }
-            });
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && accessorPropertyAttributesAreCorrect(obj, "foo", get_func1, set_func, "setVerifyHelpProp", false, false);
+try {
+    Object.defineProperties(obj, {
+        foo: {
+            get: get_func2
         }
+    });
+    $ERROR("Expected an exception");
+} catch (e) {
+    verifyEqualTo(obj, "foo", get_func1());
+
+    verifyWritable(obj, "foo", "setVerifyHelpProp");
 
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
+
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-92.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-92.js
index de8e0f3a4c..ff7d6d9939 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-92.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-92.js
@@ -10,39 +10,43 @@ 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)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function set_func(value) {
-            obj.setVerifyHelpProp = value;
-        }
+function set_func(value) {
+    obj.setVerifyHelpProp = value;
+}
 
-        Object.defineProperty(obj, "foo", {
-            get: undefined,
-            set: set_func,
-            enumerable: false,
-            configurable: false
-        });
+Object.defineProperty(obj, "foo", {
+    get: undefined,
+    set: set_func,
+    enumerable: false,
+    configurable: false
+});
 
-        function get_func() {
-            return 0;
-        }
+function get_func() {
+    return 0;
+}
 
-        try {
-            Object.defineProperties(obj, {
-                foo: {
-                    get: get_func
-                }
-            });
-            return false;
-        } catch (e) {
-            return (e instanceof TypeError) && accessorPropertyAttributesAreCorrect(obj, "foo", undefined, set_func, "setVerifyHelpProp", false, false);
+try {
+    Object.defineProperties(obj, {
+        foo: {
+            get: get_func
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-93-1.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-93-1.js
index 0eb423ff4c..a5c1b5d93e 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-93-1.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-93-1.js
@@ -11,42 +11,53 @@ description: >
     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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        Object.defineProperty(obj, "property", {
-            value: 1001,
-            writable: false,
-            configurable: true
-        });
-        
-        Object.defineProperty(obj, "property1", {
-            value: 1003,
-            writable: false,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperties(obj, {
-                property: {
-                    value: 1002
-                },
-                property1: {
-                    value: 1004
-                }
-            });
-
-            return false;
-        } catch (e) {
-            return e instanceof TypeError &&
-                dataPropertyAttributesAreCorrect(obj, "property", 1002, false, false, true) &&
-                dataPropertyAttributesAreCorrect(obj, "property1", 1003, false, false, false);
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+    value: 1001,
+    writable: false,
+    configurable: true
+});
+
+Object.defineProperty(obj, "property1", {
+    value: 1003,
+    writable: false,
+    configurable: false
+});
+
+try {
+    Object.defineProperties(obj, {
+        property: {
+            value: 1002
+        },
+        property1: {
+            value: 1004
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "property", 1002);
+
+    verifyNotWritable(obj, "property");
+
+    verifyNotEnumerable(obj, "property");
+
+    verifyConfigurable(obj, "property");
+    verifyEqualTo(obj, "property1", 1003);
+
+    verifyNotWritable(obj, "property1");
+
+    verifyNotEnumerable(obj, "property1");
+
+    verifyNotConfigurable(obj, "property1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-93-2.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-93-2.js
index 1c00fce1a5..c0241c48e7 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-93-2.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-93-2.js
@@ -11,42 +11,53 @@ description: >
     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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        Object.defineProperty(obj, "0", {
-            value: 1001,
-            writable: false,
-            configurable: true
-        });
-        
-        Object.defineProperty(obj, "1", {
-            value: 1003,
-            writable: false,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperties(obj, {
-                0: {
-                    value: 1002
-                },
-                1: {
-                    value: 1004
-                }
-            });
-
-            return false;
-        } catch (e) {
-            return e instanceof TypeError &&
-                dataPropertyAttributesAreCorrect(obj, "0", 1002, false, false, true) &&
-                dataPropertyAttributesAreCorrect(obj, "1", 1003, false, false, false);
+
+var obj = {};
+
+Object.defineProperty(obj, "0", {
+    value: 1001,
+    writable: false,
+    configurable: true
+});
+
+Object.defineProperty(obj, "1", {
+    value: 1003,
+    writable: false,
+    configurable: false
+});
+
+try {
+    Object.defineProperties(obj, {
+        0: {
+            value: 1002
+        },
+        1: {
+            value: 1004
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "0", 1002);
+
+    verifyNotWritable(obj, "0");
+
+    verifyNotEnumerable(obj, "0");
+
+    verifyConfigurable(obj, "0");
+    verifyEqualTo(obj, "1", 1003);
+
+    verifyNotWritable(obj, "1");
+
+    verifyNotEnumerable(obj, "1");
+
+    verifyNotConfigurable(obj, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-93-3.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-93-3.js
index bb2d61cf19..64097926a6 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-93-3.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-93-3.js
@@ -7,46 +7,57 @@
 /*---
 es5id: 15.2.3.7-6-a-93-3
 description: >
-    Object.defineProperties will not 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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+    Object.defineProperties will not 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)
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        Object.defineProperty(obj, "property", {
-            value: 1001,
-            writable: false,
-            configurable: false
-        });
-        
-        Object.defineProperty(obj, "property1", {
-            value: 1003,
-            writable: false,
-            configurable: true
-        });
-
-        try {
-            Object.defineProperties(obj, {
-                property: {
-                    value: 1002
-                },
-                property1: {
-                    value: 1004
-                }
-            });
-
-            return false;
-        } catch (e) {
-            return e instanceof TypeError &&
-                dataPropertyAttributesAreCorrect(obj, "property", 1001, false, false, false) &&
-                dataPropertyAttributesAreCorrect(obj, "property1", 1004, false, false, true);
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+    value: 1001,
+    writable: false,
+    configurable: false
+});
+
+Object.defineProperty(obj, "property1", {
+    value: 1003,
+    writable: false,
+    configurable: true
+});
+
+try {
+    Object.defineProperties(obj, {
+        property: {
+            value: 1002
+        },
+        property1: {
+            value: 1004
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "property", 1001);
+
+    verifyNotWritable(obj, "property");
+
+    verifyNotEnumerable(obj, "property");
+
+    verifyNotConfigurable(obj, "property");
+
+    verifyEqualTo(obj, "property1", 1003);
+
+    verifyNotWritable(obj, "property1");
+
+    verifyNotEnumerable(obj, "property1");
+
+    verifyConfigurable(obj, "property1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-93-4.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-93-4.js
index 151a5f8393..f758752eb0 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-93-4.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-93-4.js
@@ -7,46 +7,56 @@
 /*---
 es5id: 15.2.3.7-6-a-93-4
 description: >
-    Object.defineProperties will not 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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+    Object.defineProperties will not 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)
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        Object.defineProperty(obj, "0", {
-            value: 1001,
-            writable: false,
-            configurable: false
-        });
-        
-        Object.defineProperty(obj, "1", {
-            value: 1003,
-            writable: false,
-            configurable: true
-        });
-
-        try {
-            Object.defineProperties(obj, {
-                0: {
-                    value: 1002
-                },
-                1: {
-                    value: 1004
-                }
-            });
-
-            return false;
-        } catch (e) {
-            return e instanceof TypeError &&
-                dataPropertyAttributesAreCorrect(obj, "0", 1001, false, false, false) &&
-                dataPropertyAttributesAreCorrect(obj, "1", 1004, false, false, true);
+
+var obj = {};
+
+Object.defineProperty(obj, "0", {
+    value: 1001,
+    writable: false,
+    configurable: false
+});
+
+Object.defineProperty(obj, "1", {
+    value: 1003,
+    writable: false,
+    configurable: true
+});
+
+try {
+    Object.defineProperties(obj, {
+        0: {
+            value: 1002
+        },
+        1: {
+            value: 1004
         }
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "0", 1001);
+
+    verifyNotWritable(obj, "0");
+
+    verifyNotEnumerable(obj, "0");
+
+    verifyNotConfigurable(obj, "0");
+    verifyEqualTo(obj, "1", 1003);
+
+    verifyNotWritable(obj, "1");
+
+    verifyNotEnumerable(obj, "1");
+
+    verifyConfigurable(obj, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-93.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-93.js
index 9b472a691d..0b6e28ff2c 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-93.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-93.js
@@ -10,31 +10,30 @@ 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)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function set_func(value) {
-            obj.setVerifyHelpProp = value;
-        }
+function set_func(value) {
+    obj.setVerifyHelpProp = value;
+}
 
-        Object.defineProperty(obj, "foo", {
-            get: undefined,
-            set: set_func,
-            enumerable: false,
-            configurable: false
-        });
+Object.defineProperty(obj, "foo", {
+    get: undefined,
+    set: set_func,
+    enumerable: false,
+    configurable: false
+});
 
-        Object.defineProperties(obj, {
-            foo: {
-                get: undefined
-            }
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "foo", undefined, set_func, "setVerifyHelpProp", false, false);
+Object.defineProperties(obj, {
+    foo: {
+        get: undefined
     }
-runTestCase(testcase);
+});
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-94.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-94.js
index 9f95b6b70e..540f38bb3e 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-94.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-94.js
@@ -9,22 +9,23 @@ es5id: 15.2.3.7-6-a-94
 description: >
     Object.defineProperties - 'P' is data property, properties.value
     and P.value are two different values (8.12.9 step 12)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        obj.foo = 100; // default value of attributes: writable: true, configurable: true, enumerable: true
+obj.foo = 100; // default value of attributes: writable: true, configurable: true, enumerable: true
 
-        Object.defineProperties(obj, {
-            foo: {
-                value: 200
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", 200, true, true, true);
+Object.defineProperties(obj, {
+    foo: {
+        value: 200
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", 200);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-95.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-95.js
index 3ecad959c5..b2f1219dc9 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-95.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-95.js
@@ -9,27 +9,28 @@ es5id: 15.2.3.7-6-a-95
 description: >
     Object.defineProperties - 'P' is data property, P.value is present
     and properties.value is undefined (8.12.9 step 12)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", {
-            value: 200,
-            enumerable: true,
-            writable: true,
-            configurable: true 
-        });
+Object.defineProperty(obj, "foo", {
+    value: 200,
+    enumerable: true,
+    writable: true,
+    configurable: true 
+});
 
-        Object.defineProperties(obj, {
-            foo: {
-                value: undefined
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", undefined, true, true, true);
+Object.defineProperties(obj, {
+    foo: {
+        value: undefined
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", undefined);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-96.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-96.js
index 931496de96..9ec5a182e2 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-96.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-96.js
@@ -9,27 +9,28 @@ es5id: 15.2.3.7-6-a-96
 description: >
     Object.defineProperties - 'P' is data property, properties.value
     is present and P.value is undefined (8.12.9 step 12)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", {
-            value: undefined,
-            enumerable: true,
-            writable: true,
-            configurable: true 
-        });
+Object.defineProperty(obj, "foo", {
+    value: undefined,
+    enumerable: true,
+    writable: true,
+    configurable: true 
+});
 
-        Object.defineProperties(obj, {
-            foo: {
-                value: 200
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", 200, true, true, true);
+Object.defineProperties(obj, {
+    foo: {
+        value: 200
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", 200);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-97.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-97.js
index a666b975bf..2ea879c24d 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-97.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-97.js
@@ -9,27 +9,28 @@ es5id: 15.2.3.7-6-a-97
 description: >
     Object.defineProperties - 'P' is data property, P.writable and
     properties.writable are different values (8.12.9 step 12)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", { 
-            value: 100, 
-            enumerable: true, 
-            writable: false, 
-            configurable: true 
-        });
+Object.defineProperty(obj, "foo", { 
+    value: 100, 
+    enumerable: true, 
+    writable: false, 
+    configurable: true 
+});
 
-        Object.defineProperties(obj, {
-            foo: {
-                writable: true
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", 100, true, true, true);
+Object.defineProperties(obj, {
+    foo: {
+        writable: true
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", 100);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-98.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-98.js
index c9a1cf1a13..c8476cf65b 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-98.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-98.js
@@ -9,27 +9,28 @@ es5id: 15.2.3.7-6-a-98
 description: >
     Object.defineProperties - 'P' is data property, P.enumerable and
     properties.enumerable are different values (8.12.9 step 12)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", { 
-            value: 200, 
-            enumerable: false, 
-            writable: true, 
-            configurable: true 
-        });
+Object.defineProperty(obj, "foo", { 
+    value: 200, 
+    enumerable: false, 
+    writable: true, 
+    configurable: true 
+});
 
-        Object.defineProperties(obj, {
-            foo: {
-                enumerable: true
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", 200, true, true, true);
+Object.defineProperties(obj, {
+    foo: {
+        enumerable: true
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", 200);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-99.js b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-99.js
index bafcc5943a..43698b62f7 100644
--- a/test/built-ins/Object/defineProperties/15.2.3.7-6-a-99.js
+++ b/test/built-ins/Object/defineProperties/15.2.3.7-6-a-99.js
@@ -9,27 +9,28 @@ es5id: 15.2.3.7-6-a-99
 description: >
     Object.defineProperties - 'P' is data property, P.configurable is
     true and properties.configurable is false
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", { 
-            value: 200, 
-            enumerable: true, 
-            writable: true, 
-            configurable: true 
-        });
+Object.defineProperty(obj, "foo", { 
+    value: 200, 
+    enumerable: true, 
+    writable: true, 
+    configurable: true 
+});
 
-        Object.defineProperties(obj, {
-            foo: {
-                configurable: false
-            }
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", 200, true, true, false);
+Object.defineProperties(obj, {
+    foo: {
+        configurable: false
     }
-runTestCase(testcase);
+});
+verifyEqualTo(obj, "foo", 200);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-100.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-100.js
index 316211f30e..9e89261a06 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-100.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-100.js
@@ -9,20 +9,21 @@ es5id: 15.2.3.6-4-100
 description: >
     Object.defineProperty - 'name' and 'desc' are data properties,
     desc.value and name.value are two different values (8.12.9 step 12)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
+var obj = {};
 
-        var obj = {};
+obj.foo = 100; // default value of attributes: writable: true, configurable: true, enumerable: true
 
-        obj.foo = 100; // default value of attributes: writable: true, configurable: true, enumerable: true
+Object.defineProperty(obj, "foo", {
+    value: 200
+});
+verifyEqualTo(obj, "foo", 200);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
 
-        Object.defineProperty(obj, "foo", {
-            value: 200
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", 200, true, true, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-101.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-101.js
index 6c477c9040..47f463c45e 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-101.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-101.js
@@ -9,18 +9,19 @@ es5id: 15.2.3.6-4-101
 description: >
     Object.defineProperty - 'name' and 'desc' are data properties,
     name.value is present and desc.value is undefined (8.12.9 step 12)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
+var obj = {};
 
-        var obj = {};
+obj.foo = 100; // default value of attributes: writable: true, configurable: true, enumerable: true
 
-        obj.foo = 100; // default value of attributes: writable: true, configurable: true, enumerable: true
+Object.defineProperty(obj, "foo", { value: undefined });
+verifyEqualTo(obj, "foo", undefined);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
 
-        Object.defineProperty(obj, "foo", { value: undefined });
-        return dataPropertyAttributesAreCorrect(obj, "foo", undefined, true, true, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-102.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-102.js
index f9d96c6bc3..e3e4e66a79 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-102.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-102.js
@@ -9,18 +9,19 @@ es5id: 15.2.3.6-4-102
 description: >
     Object.defineProperty - 'name' and 'desc' are data properties,
     desc.value is present and name.value is undefined (8.12.9 step 12)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
+var obj = {};
 
-        var obj = {};
+obj.foo = undefined; // default value of attributes: writable: true, configurable: true, enumerable: true
 
-        obj.foo = undefined; // default value of attributes: writable: true, configurable: true, enumerable: true
+Object.defineProperty(obj, "foo", { value: 100 });
+verifyEqualTo(obj, "foo", 100);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
 
-        Object.defineProperty(obj, "foo", { value: 100 });
-        return dataPropertyAttributesAreCorrect(obj, "foo", 100, true, true, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-103.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-103.js
index 89ab24562a..0f166f326f 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-103.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-103.js
@@ -10,22 +10,23 @@ description: >
     Object.defineProperty - 'name' and 'desc' are data properties,
     name.writable and desc.writable are different values (8.12.9 step
     12)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
+var obj = {};
 
-        var obj = {};
+Object.defineProperty(obj, "foo", {
+    writable: false, configurable: true
+});
 
-        Object.defineProperty(obj, "foo", {
-            writable: false, configurable: true
-        });
+Object.defineProperty(obj, "foo", {
+    writable: true
+});
+verifyEqualTo(obj, "foo", undefined);
+
+verifyWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
 
-        Object.defineProperty(obj, "foo", {
-            writable: true
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", undefined, true, false, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-104.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-104.js
index 4c7c0fd4fb..92d14c428b 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-104.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-104.js
@@ -10,23 +10,24 @@ description: >
     Object.defineProperty - 'name' and 'desc' are data properties,
     name.enumerable and desc.enumerable are different values (8.12.9
     step 12)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
+var obj = {};
 
-        var obj = {};
+Object.defineProperty(obj, "foo", {
+    enumerable: false,
+    configurable: true
+});
 
-        Object.defineProperty(obj, "foo", {
-            enumerable: false,
-            configurable: true
-        });
+Object.defineProperty(obj, "foo", {
+    enumerable: true
+});
+verifyEqualTo(obj, "foo", undefined);
+
+verifyNotWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
 
-        Object.defineProperty(obj, "foo", {
-            enumerable: true
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", undefined, false, true, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-105.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-105.js
index 5e6304857c..0ab2b1afe4 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-105.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-105.js
@@ -10,26 +10,27 @@ description: >
     Object.defineProperty - 'name' and 'desc' are data properties,
     name.configurable = true and desc.configurable = false (8.12.9
     step 12)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
+var obj = {};
 
-        var obj = {};
+Object.defineProperty(obj, "foo", {
+    value: 200,
+    enumerable: true,
+    writable: true,
+    configurable: true 
+});
 
-        Object.defineProperty(obj, "foo", {
-            value: 200,
-            enumerable: true,
-            writable: true,
-            configurable: true 
-        });
+Object.defineProperty(obj, "foo", {
+    configurable: false
+});
+
+verifyEqualTo(obj, "foo", 200);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
 
-        Object.defineProperty(obj, "foo", {
-            configurable: false
-        });
-        
-        return dataPropertyAttributesAreCorrect(obj, "foo", 200, true, true, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-106.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-106.js
index a5e4fa4a44..95cac3bf10 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-106.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-106.js
@@ -10,27 +10,28 @@ description: >
     Object.defineProperty - 'name' and 'desc' are data properties,
     several attributes values of name and desc are different (8.12.9
     step 12)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        Object.defineProperty(obj, "foo", { 
-            value: 100, 
-            writable: true, 
-            enumerable: true, 
-            configurable: true 
-        });
-        
-        Object.defineProperty(obj, "foo", { 
-            value: 200, 
-            writable: false, 
-            enumerable: false 
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", 200, false, false, true);
-    }
-runTestCase(testcase);
+var obj = {};
+
+Object.defineProperty(obj, "foo", { 
+    value: 100, 
+    writable: true, 
+    enumerable: true, 
+    configurable: true 
+});
+
+Object.defineProperty(obj, "foo", { 
+    value: 200, 
+    writable: false, 
+    enumerable: false 
+});
+verifyEqualTo(obj, "foo", 200);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-107.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-107.js
index c6cc0d47e5..92bda0373b 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-107.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-107.js
@@ -10,36 +10,37 @@ description: >
     Object.defineProperty - 'name' and 'desc' are accessor properties,
     both desc.[[Get]] and name.[[Get]] are two different values
     (8.12.9 step 12)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function getFunc() {
-            return 10;
-        }
+function getFunc() {
+    return 10;
+}
 
-        function setFunc(value) {
-            obj.setVerifyHelpProp = value;
-        }
+function setFunc(value) {
+    obj.setVerifyHelpProp = value;
+}
 
-        Object.defineProperty(obj, "foo", {
-            get: getFunc,
-            set: setFunc,
-            configurable: true
-        });
+Object.defineProperty(obj, "foo", {
+    get: getFunc,
+    set: setFunc,
+    configurable: true
+});
 
-        function getFunc2() {
-            return 20;
-        }
+function getFunc2() {
+    return 20;
+}
 
-        Object.defineProperty(obj, "foo", {
-            get: getFunc2
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "foo", getFunc2, setFunc, "setVerifyHelpProp", false, true);
-    }
-runTestCase(testcase);
+Object.defineProperty(obj, "foo", {
+    get: getFunc2
+});
+verifyEqualTo(obj, "foo", getFunc2());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-108.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-108.js
index 3d28dcb761..73dfa3dec9 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-108.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-108.js
@@ -10,34 +10,33 @@ description: >
     Object.defineProperty - 'name' and 'desc' are accessor
     properties,  name.[[Get]] is present and desc.[[Get]] is undefined
     (8.12.9 step 12)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function getFunc() {
-            return 10;
-        }
+function getFunc() {
+    return 10;
+}
 
-        function setFunc(value) {
-            obj.setVerifyHelpProp = value;
-        }
+function setFunc(value) {
+    obj.setVerifyHelpProp = value;
+}
 
-        Object.defineProperty(obj, "foo", {
-            get: getFunc,
-            set: setFunc,
-            enumerable: true,
-            configurable: true
-        });
+Object.defineProperty(obj, "foo", {
+    get: getFunc,
+    set: setFunc,
+    enumerable: true,
+    configurable: true
+});
 
-        Object.defineProperty(obj, "foo", {
-            set: setFunc,
-            get: undefined
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "foo", undefined, setFunc, "setVerifyHelpProp", true, true);
-    }
-runTestCase(testcase);
+Object.defineProperty(obj, "foo", {
+    set: setFunc,
+    get: undefined
+});
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-109.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-109.js
index 7b5c9b39a5..35bcf73bd7 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-109.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-109.js
@@ -10,32 +10,33 @@ description: >
     Object.defineProperty - 'name' and 'desc' are accessor properties,
     name.[[Get]] is undefined and desc.[[Get]] is function (8.12.9
     step 12)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
-
-        function setFunc(value) {
-            obj.setVerifyHelpProp = value;
-        }
-       
-        Object.defineProperty(obj, "foo", {
-            set: setFunc,
-            get: undefined,
-            enumerable: true,
-            configurable: true
-        });
-
-        function getFunc() {
-            return 10;
-        }
-
-        Object.defineProperty(obj, "foo", {
-            get: getFunc
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "foo", getFunc, setFunc, "setVerifyHelpProp", true, true);
-    }
-runTestCase(testcase);
+var obj = {};
+
+function setFunc(value) {
+    obj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(obj, "foo", {
+    set: setFunc,
+    get: undefined,
+    enumerable: true,
+    configurable: true
+});
+
+function getFunc() {
+    return 10;
+}
+
+Object.defineProperty(obj, "foo", {
+    get: getFunc
+});
+verifyEqualTo(obj, "foo", getFunc());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-110.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-110.js
index 52eb4a67a1..cf5f75b6fd 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-110.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-110.js
@@ -10,32 +10,31 @@ description: >
     Object.defineProperty - 'name' and 'desc' are accessor properties,
     both desc.[[Set]] and name.[[Set]] are two different values
     (8.12.9 step 12)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function setFunc1() {
-            return 10;
-        }
+function setFunc1() {
+    return 10;
+}
 
-        Object.defineProperty(obj, "foo", {
-            set: setFunc1,
-            enumerable: true,
-            configurable: true
-        });
+Object.defineProperty(obj, "foo", {
+    set: setFunc1,
+    enumerable: true,
+    configurable: true
+});
 
-        function setFunc2(value) {
-            obj.setVerifyHelpProp = value;
-        }
+function setFunc2(value) {
+    obj.setVerifyHelpProp = value;
+}
 
-        Object.defineProperty(obj, "foo", {
-            set: setFunc2
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "foo", undefined, setFunc2, "setVerifyHelpProp", true, true);
-    }
-runTestCase(testcase);
+Object.defineProperty(obj, "foo", {
+    set: setFunc2
+});
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-112.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-112.js
index 9fecb91763..993240de38 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-112.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-112.js
@@ -10,33 +10,34 @@ description: >
     Object.defineProperty - 'name' and 'desc' are accessor properties,
     name.[[Set]] is undefined and desc.[[Set]] is function (8.12.9
     step 12)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function getFunc() {
-            return 10;
-        }
+function getFunc() {
+    return 10;
+}
 
-        Object.defineProperty(obj, "foo", {
-            set: undefined,
-            get: getFunc,
-            enumerable: true,
-            configurable: true
-        });
+Object.defineProperty(obj, "foo", {
+    set: undefined,
+    get: getFunc,
+    enumerable: true,
+    configurable: true
+});
 
-        function setFunc(value) {
-            obj.setVerifyHelpProp = value;
-        }
+function setFunc(value) {
+    obj.setVerifyHelpProp = value;
+}
 
-        Object.defineProperty(obj, "foo", {
-            set: setFunc
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "foo", getFunc, setFunc, "setVerifyHelpProp", true, true);
-    }
-runTestCase(testcase);
+Object.defineProperty(obj, "foo", {
+    set: setFunc
+});
+verifyEqualTo(obj, "foo", getFunc());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-113.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-113.js
index 3da8fe015b..30deb96057 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-113.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-113.js
@@ -10,30 +10,29 @@ description: >
     Object.defineProperty - 'name' and 'desc' are accessor properties,
     name.enumerable and desc.enumerable are different values (8.12.9
     step 12)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function getFunc() {
-            return 10;
-        }
+function getFunc() {
+    return 10;
+}
 
-        Object.defineProperty(obj, "foo", {
-            get: getFunc,
-            enumerable: true,
-            configurable: true
-        });
+Object.defineProperty(obj, "foo", {
+    get: getFunc,
+    enumerable: true,
+    configurable: true
+});
 
-        Object.defineProperty(obj, "foo", {
-            get: getFunc,
-            enumerable: false
-        });
+Object.defineProperty(obj, "foo", {
+    get: getFunc,
+    enumerable: false
+});
 
-        return accessorPropertyAttributesAreCorrect(obj, "foo", getFunc, undefined, undefined, false, true);
-    }
-runTestCase(testcase);
+verifyEqualTo(obj, "foo", getFunc());
+
+verifyNotEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-114.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-114.js
index 3b40963bb1..bb9e4ad3fc 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-114.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-114.js
@@ -10,33 +10,34 @@ description: >
     Object.defineProperty - 'name' and 'desc' are accessor properties,
     name.configurable = true and desc.configurable = false (8.12.9
     step 12)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function setFunc(value) {
-            obj.setVerifyHelpProp = value;
-        }
+function setFunc(value) {
+    obj.setVerifyHelpProp = value;
+}
 
-        function getFunc() {
-            return 10;
-        }
+function getFunc() {
+    return 10;
+}
 
-        Object.defineProperty(obj, "foo", {
-            get: getFunc,
-            set: setFunc,
-            configurable: true
-        });
+Object.defineProperty(obj, "foo", {
+    get: getFunc,
+    set: setFunc,
+    configurable: true
+});
 
-        Object.defineProperty(obj, "foo", {
-            get: getFunc,
-            configurable: false
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "foo", getFunc, setFunc, "setVerifyHelpProp", false, false);
-    }
-runTestCase(testcase);
+Object.defineProperty(obj, "foo", {
+    get: getFunc,
+    configurable: false
+});
+verifyEqualTo(obj, "foo", getFunc());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-115.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-115.js
index 639e979f4f..2eb0e428cd 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-115.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-115.js
@@ -10,38 +10,39 @@ description: >
     Object.defineProperty - 'name' and 'desc' are accessor properties,
     several attributes values of 'name' and 'desc' are different
     (8.12.9 step 12)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        function getFunc1() {
-            return 10;
-        }
-        function setFunc1() {}
-
-        Object.defineProperty(obj, "foo", {
-            get: getFunc1,
-            set: setFunc1,
-            enumerable: true,
-            configurable: true
-        });
-
-        function getFunc2() {
-            return 20;
-        }
-        function setFunc2(value) {
-            obj.setVerifyHelpProp = value;
-        }
-        Object.defineProperty(obj, "foo", {
-            get: getFunc2,
-            set: setFunc2,
-            enumerable: false
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "foo", getFunc2, setFunc2, "setVerifyHelpProp", false, true);
-    }
-runTestCase(testcase);
+
+var obj = {};
+
+function getFunc1() {
+    return 10;
+}
+function setFunc1() {}
+
+Object.defineProperty(obj, "foo", {
+    get: getFunc1,
+    set: setFunc1,
+    enumerable: true,
+    configurable: true
+});
+
+function getFunc2() {
+    return 20;
+}
+function setFunc2(value) {
+    obj.setVerifyHelpProp = value;
+}
+Object.defineProperty(obj, "foo", {
+    get: getFunc2,
+    set: setFunc2,
+    enumerable: false
+});
+verifyEqualTo(obj, "foo", getFunc2());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-124.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-124.js
index 71160001b9..7e787f5859 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-124.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-124.js
@@ -11,18 +11,19 @@ description: >
     property of 'O', the [[Value]] field of 'desc' is absent, test
     updating the [[Writable]] attribute of the length property from
     true to false (15.4.5.1 step 3.a.i)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
+var arrObj = [];
 
-        var arrObj = [];
+Object.defineProperty(arrObj, "length", {
+    writable: false
+});
+verifyEqualTo(arrObj, "length", 0);
+
+verifyNotWritable(arrObj, "length");
+
+verifyNotEnumerable(arrObj, "length");
+
+verifyNotConfigurable(arrObj, "length");
 
-        Object.defineProperty(arrObj, "length", {
-            writable: false
-        });
-        return dataPropertyAttributesAreCorrect(arrObj, "length", 0, false, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-190.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-190.js
index 95365ed274..30e2c59bb2 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-190.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-190.js
@@ -11,26 +11,31 @@ description: >
     named property, 'name' is own data property, test TypeError is
     thrown on updating the configurable attribute from false to true
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
-        Object.defineProperty(arrObj, 0, {
-            value: "ownDataProperty",
-            configurable: false
-        });
-
-        try {
-            Object.defineProperty(arrObj, 0, {
-                configurable: true
-            });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError &&
-                dataPropertyAttributesAreCorrect(arrObj, "0", "ownDataProperty", false, false, false);
-        }
+var arrObj = [];
+
+Object.defineProperty(arrObj, 0, {
+    value: "ownDataProperty",
+    configurable: false
+});
+
+try {
+    Object.defineProperty(arrObj, 0, {
+        configurable: true
+    });
+        $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arrObj, "0", "ownDataProperty");
+
+    verifyNotWritable(arrObj, "0");
+
+    verifyNotEnumerable(arrObj, "0");
+
+    verifyNotConfigurable(arrObj, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-191.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-191.js
index 2681ef4ac5..9f9d54f4cf 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-191.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-191.js
@@ -10,25 +10,30 @@ description: >
     Object.defineProperty - 'O' is an Array, 'name' is an array index
     named property, 'name' is an inherited data property, test that
     defining own index named property is successful (15.4.5.1 step 4.c)
-includes: [runTestCase.js]
 ---*/
 
-function testcase() {
-        try {
-            Object.defineProperty(Array.prototype, "0", {
-                value: 11,
-                configurable: true
-            });
+try {
+    Object.defineProperty(Array.prototype, "0", {
+        value: 11,
+        configurable: true
+    });
 
-            var arrObj = [];
+    var arrObj = [];
 
-            Object.defineProperty(arrObj, "0", {
-                configurable: false
-            });
-            return arrObj.hasOwnProperty("0") && Array.prototype[0] === 11 && typeof arrObj[0] === "undefined";
-        } finally {
-            delete Array.prototype[0];
-        }
+    Object.defineProperty(arrObj, "0", {
+        configurable: false
+    });
 
+    if (!arrObj.hasOwnProperty("0")) {
+        $ERROR("Expected arrObj.hasOwnProperty('0') === true, actually " + arrObj.hasOwnProperty("0"));
     }
-runTestCase(testcase);
+    if (Array.prototype[0] !== 11) {
+        $ERROR("Expected Array.prototype[0] === 11), actually " + Array.prototype[0]);
+    }
+    if (typeof arrObj[0] !== "undefined") {
+        $ERROR("Expected typeof arrObj[0] === 'undefined'), actually " + typeof arrObj[0]);
+    }
+
+} finally {
+    delete Array.prototype[0];
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-194.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-194.js
index e5861d80aa..baf3ec2eb7 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-194.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-194.js
@@ -11,30 +11,33 @@ description: >
     named property, 'name' is own accessor property, test TypeError is
     thrown on updating the configurable attribute from false to true
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
-        var getFunc = function () {
-            return 11;
-        };
-
-        Object.defineProperty(arrObj, "0", {
-            get: getFunc,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperty(arrObj, "0", {
-                configurable: true
-            });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError &&
-                accessorPropertyAttributesAreCorrect(arrObj, "0", getFunc, undefined, undefined, false, false);
-        }
+var arrObj = [];
+var getFunc = function () {
+    return 11;
+};
+
+Object.defineProperty(arrObj, "0", {
+    get: getFunc,
+    configurable: false
+});
+
+try {
+    Object.defineProperty(arrObj, "0", {
+        configurable: true
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arrObj, "0", getFunc());
+
+    verifyNotEnumerable(arrObj, "0");
+
+    verifyNotConfigurable(arrObj, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e.name);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-195.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-195.js
index cd4c93e99c..2abb5b0e52 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-195.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-195.js
@@ -10,40 +10,42 @@ description: >
     Object.defineProperty - 'O' is an Array, 'name' is an array index
     named property, 'name' is an inherited accessor property (15.4.5.1
     step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        try {
-            Object.defineProperty(Array.prototype, "0", {
-                get: function () {
-                    return 11;
-                },
-                configurable: true
-            });
-
-            var arrObj = [];
-
-            function getFunc() {
-                return arrObj.helpVerifySet;
-            }
-            function setFunc(value) {
-                arrObj.helpVerifySet = value;
-            }
-
-            Object.defineProperty(arrObj, "0", {
-                get: getFunc,
-                set: setFunc,
-                configurable: false
-            });
-
-            arrObj[0] = 13;
-
-            return accessorPropertyAttributesAreCorrect(arrObj, "0", getFunc, setFunc, "helpVerifySet", false, false);
-        } finally {
-            delete Array.prototype[0];
-        }
-    }
-runTestCase(testcase);
+function getFunc() {
+    return arrObj.helpVerifySet;
+}
+function setFunc(value) {
+    arrObj.helpVerifySet = value;
+}
+
+try {
+    Object.defineProperty(Array.prototype, "0", {
+        get: function () {
+            return 11;
+        },
+        configurable: true
+    });
+
+    var arrObj = [];
+
+
+    Object.defineProperty(arrObj, "0", {
+        get: getFunc,
+        set: setFunc,
+        configurable: false
+    });
+
+    arrObj[0] = 13;
+
+    verifyEqualTo(arrObj, "0", getFunc());
+
+    verifyWritable(arrObj, "0", "helpVerifySet");
+
+    verifyNotEnumerable(arrObj, "0");
+
+    verifyNotConfigurable(arrObj, "0");
+} finally {
+    delete Array.prototype[0];
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-199.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-199.js
index 76ee9cce33..42156b5ab1 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-199.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-199.js
@@ -11,18 +11,20 @@ description: >
     named property, 'name' property doesn't exist in 'O', test 'name'
     is defined as data property when 'desc' is generic descriptor
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "0", {
-            enumerable: true
-        });
+Object.defineProperty(arrObj, "0", {
+    enumerable: true
+});
+
+verifyEqualTo(arrObj, "0", undefined);
+
+verifyNotWritable(arrObj, "0");
+
+verifyEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
 
-        return dataPropertyAttributesAreCorrect(arrObj, "0", undefined, false, true, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-200.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-200.js
index 56028a480c..3f2c3a64cc 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-200.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-200.js
@@ -12,20 +12,22 @@ description: >
     [[Value]] of 'name' property of 'Attributes' is set as undefined
     if [[Value]] is absent in data descriptor 'desc' (15.4.5.1 step
     4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "0", {
-            writable: true,
-            enumerable: true,
-            configurable: false
-        });
+Object.defineProperty(arrObj, "0", {
+    writable: true,
+    enumerable: true,
+    configurable: false
+});
+
+verifyEqualTo(arrObj, "0", undefined);
+
+verifyWritable(arrObj, "0");
+
+verifyEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
 
-        return dataPropertyAttributesAreCorrect(arrObj, "0", undefined, true, true, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-201.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-201.js
index f51aba2e5c..d08ac93799 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-201.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-201.js
@@ -12,19 +12,21 @@ description: >
     [[Writable]] is absent in data descriptor 'desc', test
     [[Writable]] attribute of  property 'name' is set to false
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
+
+Object.defineProperty(arrObj, "0", {
+    value: 1001,
+    enumerable: true,
+    configurable: false
+});
+verifyEqualTo(arrObj, "0", 1001);
+
+verifyNotWritable(arrObj, "0");
+
+verifyEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
 
-        Object.defineProperty(arrObj, "0", {
-            value: 1001,
-            enumerable: true,
-            configurable: false
-        });
-        return dataPropertyAttributesAreCorrect(arrObj, "0", 1001, false, true, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-202.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-202.js
index 0d8195705e..169f5211e1 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-202.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-202.js
@@ -12,19 +12,21 @@ description: >
     [[Enumerable]] is absent in data descriptor 'desc', test
     [[Enumerable]] of property 'name' is set to false (15.4.5.1 step
     4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
+
+Object.defineProperty(arrObj, "0", {
+    value: 1001,
+    writable: true,
+    configurable: true
+});
+verifyEqualTo(arrObj, "0", 1001);
+
+verifyWritable(arrObj, "0");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
 
-        Object.defineProperty(arrObj, "0", {
-            value: 1001,
-            writable: true,
-            configurable: true
-        });
-        return dataPropertyAttributesAreCorrect(arrObj, "0", 1001, true, false, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-203.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-203.js
index e482f04c12..b4f2d9b375 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-203.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-203.js
@@ -12,19 +12,21 @@ description: >
     [[Configurable]] is absent in data descriptor 'desc', test
     [[Configurable]] of property 'name' is set to false (15.4.5.1 step
     4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
+
+Object.defineProperty(arrObj, "0", {
+    value: 1001,
+    writable: true,
+    enumerable: true
+});
+verifyEqualTo(arrObj, "0", 1001);
+
+verifyWritable(arrObj, "0");
+
+verifyEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
 
-        Object.defineProperty(arrObj, "0", {
-            value: 1001,
-            writable: true,
-            enumerable: true
-        });
-        return dataPropertyAttributesAreCorrect(arrObj, "0", 1001, true, true, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-204.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-204.js
index 43732577ac..b681d90b47 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-204.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-204.js
@@ -10,21 +10,23 @@ description: >
     Object.defineProperty - 'O' is an Array, 'name' is an array index
     named property, 'desc' is data descriptor, test updating all
     attribute values of 'name' (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [1]; // default value of attributes: writable: true, configurable: true, enumerable: true
+var arrObj = [1]; // default value of attributes: writable: true, configurable: true, enumerable: true
 
-        Object.defineProperty(arrObj, "0", {
-            value: 1001,
-            writable: false,
-            enumerable: false,
-            configurable: false
-        });
+Object.defineProperty(arrObj, "0", {
+    value: 1001,
+    writable: false,
+    enumerable: false,
+    configurable: false
+});
+
+verifyEqualTo(arrObj, "0", 1001);
+
+verifyNotWritable(arrObj, "0");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
 
-        return dataPropertyAttributesAreCorrect(arrObj, "0", 1001, false, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-205.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-205.js
index 63c540b5f2..a87266087b 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-205.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-205.js
@@ -11,23 +11,22 @@ description: >
     named property, 'name' property doesn't exist in 'O' and [[Get]]
     is absent in accessor descriptor 'desc', test [[Get]] attribute of
     property 'name' is set to undefined (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
-        var setFunc = function (value) {
-            arrObj.setVerifyHelpProp = value;
-        };
+var arrObj = [];
+var setFunc = function (value) {
+    arrObj.setVerifyHelpProp = value;
+};
 
-        Object.defineProperty(arrObj, "0", {
-            set: setFunc,
-            enumerable: true,
-            configurable: true
-        });
+Object.defineProperty(arrObj, "0", {
+    set: setFunc,
+    enumerable: true,
+    configurable: true
+});
 
-        return accessorPropertyAttributesAreCorrect(arrObj, "0", undefined, setFunc, "setVerifyHelpProp", true, true);
-    }
-runTestCase(testcase);
+verifyWritable(arrObj, "0", "setVerifyHelpProp");
+
+verifyEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-207.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-207.js
index 6f71b052f8..571de2095c 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-207.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-207.js
@@ -12,24 +12,25 @@ description: >
     [[Enumerable]] is absent in accessor descriptor 'desc', test
     [[Enumerable]] attribute of property 'name' is set to false
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        var setFunc = function (value) {
-            arrObj.setVerifyHelpProp = value;
-        };
-        var getFunc = function () { };
+var setFunc = function (value) {
+    arrObj.setVerifyHelpProp = value;
+};
+var getFunc = function () { };
 
-        Object.defineProperty(arrObj, "0", {
-            set: setFunc,
-            get: getFunc,
-            configurable: true
-        });
-        return accessorPropertyAttributesAreCorrect(arrObj, "0", getFunc, setFunc, "setVerifyHelpProp", false, true);
-    }
-runTestCase(testcase);
+Object.defineProperty(arrObj, "0", {
+    set: setFunc,
+    get: getFunc,
+    configurable: true
+});
+verifyEqualTo(arrObj, "0", getFunc());
+
+verifyWritable(arrObj, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-208.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-208.js
index cef424e072..e21e28f90b 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-208.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-208.js
@@ -12,23 +12,24 @@ description: >
     [[Configurable]] is absent in accessor descriptor 'desc', test
     [[Configurable]] attribute of property 'name' is set to false
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
-        var setFunc = function (value) {
-            arrObj.setVerifyHelpProp = value;
-        };
-        var getFunc = function () { };
+var arrObj = [];
+var setFunc = function (value) {
+    arrObj.setVerifyHelpProp = value;
+};
+var getFunc = function () { };
 
-        Object.defineProperty(arrObj, "0", {
-            set: setFunc,
-            get: getFunc,
-            enumerable: true
-        });
-        return accessorPropertyAttributesAreCorrect(arrObj, "0", getFunc, setFunc, "setVerifyHelpProp", true, false);
-    }
-runTestCase(testcase);
+Object.defineProperty(arrObj, "0", {
+    set: setFunc,
+    get: getFunc,
+    enumerable: true
+});
+verifyEqualTo(arrObj, "0", getFunc());
+
+verifyWritable(arrObj, "0", "setVerifyHelpProp");
+
+verifyEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-209.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-209.js
index b031f70d02..25930ae34a 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-209.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-209.js
@@ -10,36 +10,37 @@ description: >
     Object.defineProperty - 'O' is an Array, 'name' is an array index
     named property, 'desc' is accessor descriptor, test updating all
     attribute values of 'name' (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
-        var setFunc = function (value) {
-            arrObj.setVerifyHelpProp = value;
-        };
-        var getFunc = function () {
-            return 14;
-        };
-
-        Object.defineProperty(arrObj, "0", {
-            get: function () {
-                return 11;
-            },
-            set: function () { },
-            configurable: true,
-            enumerable: true
-        });
-
-        Object.defineProperty(arrObj, "0", {
-            get: getFunc,
-            set: setFunc,
-            configurable: false,
-            enumerable: false
-        });
-
-        return accessorPropertyAttributesAreCorrect(arrObj, "0", getFunc, setFunc, "setVerifyHelpProp", false, false);
-    }
-runTestCase(testcase);
+var arrObj = [];
+var setFunc = function (value) {
+    arrObj.setVerifyHelpProp = value;
+};
+var getFunc = function () {
+    return 14;
+};
+
+Object.defineProperty(arrObj, "0", {
+    get: function () {
+        return 11;
+    },
+    set: function () { },
+    configurable: true,
+    enumerable: true
+});
+
+Object.defineProperty(arrObj, "0", {
+    get: getFunc,
+    set: setFunc,
+    configurable: false,
+    enumerable: false
+});
+
+verifyEqualTo(arrObj, "0", getFunc());
+
+verifyWritable(arrObj, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-210.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-210.js
index e9cdbe2e05..5f7a355000 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-210.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-210.js
@@ -10,17 +10,19 @@ description: >
     Object.defineProperty - 'O' is an Array, 'name' is an array index
     named property, 'name' makes no change if every field in 'desc' is
     absent (name is data property) (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        arrObj[0] = 101; // default value of attributes: writable: true, configurable: true, enumerable: true
+arrObj[0] = 101; // default value of attributes: writable: true, configurable: true, enumerable: true
+
+Object.defineProperty(arrObj, "0", {});
+verifyEqualTo(arrObj, "0", 101);
+
+verifyWritable(arrObj, "0");
+
+verifyEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
 
-        Object.defineProperty(arrObj, "0", {});
-        return dataPropertyAttributesAreCorrect(arrObj, "0", 101, true, true, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-211.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-211.js
index 892bfff666..59c38fe57e 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-211.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-211.js
@@ -10,29 +10,30 @@ description: >
     Object.defineProperty - 'O' is an Array, 'name' is an array index
     named property, 'name' makes no change if every field in 'desc' is
     absent(name is accessor property) (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
-
-        function getFunc() {
-            return 11;
-        }
-        function setFunc(value) {
-            arrObj.setVerifyHelpProp = value;
-        }
-
-        Object.defineProperty(arrObj, "0", {
-            get: getFunc,
-            set: setFunc,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.defineProperty(arrObj, "0", {});
-        return accessorPropertyAttributesAreCorrect(arrObj, "0", getFunc, setFunc, "setVerifyHelpProp", true, true);
-    }
-runTestCase(testcase);
+var arrObj = [];
+
+function getFunc() {
+    return 11;
+}
+function setFunc(value) {
+    arrObj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(arrObj, "0", {
+    get: getFunc,
+    set: setFunc,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperty(arrObj, "0", {});
+verifyEqualTo(arrObj, "0", getFunc());
+
+verifyWritable(arrObj, "0", "setVerifyHelpProp");
+
+verifyEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-212.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-212.js
index 356e4fa1a8..a818160251 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-212.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-212.js
@@ -11,23 +11,25 @@ description: >
     named property, 'name' makes no change if the value of every field
     in 'desc' is the same value as the corresponding field in
     'name'(desc is data property) (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        arrObj[0] = 100; // default value of attributes: writable: true, configurable: true, enumerable: true
+arrObj[0] = 100; // default value of attributes: writable: true, configurable: true, enumerable: true
 
-        Object.defineProperty(arrObj, "0", {
-            value: 100,
-            writable: true,
-            enumerable: true,
-            configurable: true
-        });
+Object.defineProperty(arrObj, "0", {
+    value: 100,
+    writable: true,
+    enumerable: true,
+    configurable: true
+});
+
+verifyEqualTo(arrObj, "0", 100);
+
+verifyWritable(arrObj, "0");
+
+verifyEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
 
-        return dataPropertyAttributesAreCorrect(arrObj, "0", 100, true, true, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-213.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-213.js
index 10f5117cf6..ef39603056 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-213.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-213.js
@@ -11,36 +11,37 @@ description: >
     named property, 'name' makes no change if the value of every field
     in 'desc' is the same value as the corresponding field in
     'name'(desc is accessor property) (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
-        var getFunc = function () {
-            return "100";
-        };
-        var setFunc = function (value) {
-            arrObj.setVerifyHelpProp = value;
-        };
-
-        var desc = {
-            get: getFunc,
-            set: setFunc,
-            enumerable: true,
-            configurable: true
-        };
-
-        Object.defineProperty(arrObj, "0", {
-            get: getFunc,
-            set: setFunc,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.defineProperty(arrObj, "0", desc);
-
-        return accessorPropertyAttributesAreCorrect(arrObj, "0", getFunc, setFunc, "setVerifyHelpProp", true, true);
-    }
-runTestCase(testcase);
+var arrObj = [];
+var getFunc = function () {
+    return "100";
+};
+var setFunc = function (value) {
+    arrObj.setVerifyHelpProp = value;
+};
+
+var desc = {
+    get: getFunc,
+    set: setFunc,
+    enumerable: true,
+    configurable: true
+};
+
+Object.defineProperty(arrObj, "0", {
+    get: getFunc,
+    set: setFunc,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperty(arrObj, "0", desc);
+
+verifyEqualTo(arrObj, "0", getFunc());
+
+verifyWritable(arrObj, "0", "setVerifyHelpProp");
+
+verifyEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-214.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-214.js
index 3cdb626d56..837112c141 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-214.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-214.js
@@ -12,25 +12,31 @@ description: >
     false, test TypeError is thrown when the type of the [[Value]]
     field of 'desc' is different from the type of the [[Value]]
     attribute value of 'name' (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
-
-        Object.defineProperty(arrObj, 0, {
-            value: 101,
-            writable: false,
-            configurable: false 
-        });
-
-        try {
-            Object.defineProperty(arrObj, "0", { value: "abc" });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(arrObj, "0", 101, false, false, false);
-        }
+var arrObj = [];
+
+Object.defineProperty(arrObj, 0, {
+    value: 101,
+    writable: false,
+    configurable: false
+});
+
+try {
+    Object.defineProperty(arrObj, "0", { value: "abc" });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arrObj, "0", 101);
+
+    verifyNotWritable(arrObj, "0");
+
+    verifyNotEnumerable(arrObj, "0");
+
+    verifyNotConfigurable(arrObj, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-215.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-215.js
index 9df867e408..7d44cc4ad3 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-215.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-215.js
@@ -10,17 +10,19 @@ description: >
     Object.defineProperty - '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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "0", { value: undefined });
+Object.defineProperty(arrObj, "0", { value: undefined });
+
+Object.defineProperty(arrObj, "0", { value: undefined });
+verifyEqualTo(arrObj, "0", undefined);
+
+verifyNotWritable(arrObj, "0");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
 
-        Object.defineProperty(arrObj, "0", { value: undefined });
-        return dataPropertyAttributesAreCorrect(arrObj, "0", undefined, false, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-216.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-216.js
index 91c911003b..080eefdfab 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-216.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-216.js
@@ -10,17 +10,19 @@ description: >
     Object.defineProperty - 'O' is an Array, 'name' is an array index
     property, both the [[Value]] field of 'desc' and the [[Value]]
     attribute value of 'name' are null  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "0", { value: null });
+Object.defineProperty(arrObj, "0", { value: null });
+
+Object.defineProperty(arrObj, "0", { value: null });
+verifyEqualTo(arrObj, "0", null);
+
+verifyNotWritable(arrObj, "0");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
 
-        Object.defineProperty(arrObj, "0", { value: null });
-        return dataPropertyAttributesAreCorrect(arrObj, "0", null, false, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-218.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-218.js
index 606a6bc92b..7c2be01d5e 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-218.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-218.js
@@ -11,21 +11,27 @@ description: >
     property, test TypeError is thrown when the [[Value]] field of
     'desc' is +0, and the [[Value]] attribute value of 'name' is -0
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "0", { value: -0 });
+Object.defineProperty(arrObj, "0", { value: -0 });
 
-        try {
-            Object.defineProperty(arrObj, "0", { value: +0 });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(arrObj, "0", -0, false, false, false);
-        }
+try {
+    Object.defineProperty(arrObj, "0", { value: +0 });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arrObj, "0", -0);
+
+    verifyNotWritable(arrObj, "0");
+
+    verifyNotEnumerable(arrObj, "0");
+
+    verifyNotConfigurable(arrObj, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-219.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-219.js
index 8f1336f6b8..a391b96a99 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-219.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-219.js
@@ -11,21 +11,27 @@ description: >
     property, test TypeError is thrown when the [[Value]] field of
     'desc' is -0, and the [[Value]] attribute value of 'name' is +0
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "0", { value: +0 });
+Object.defineProperty(arrObj, "0", { value: +0 });
 
-        try {
-            Object.defineProperty(arrObj, "0", { value: -0 });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(arrObj, "0", +0, false, false, false);
-        }
+try {
+    Object.defineProperty(arrObj, "0", { value: -0 });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arrObj, "0", +0);
+
+    verifyNotWritable(arrObj, "0");
+
+    verifyNotEnumerable(arrObj, "0");
+
+    verifyNotConfigurable(arrObj, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-220.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-220.js
index e40c6e41c9..dc72730438 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-220.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-220.js
@@ -11,17 +11,18 @@ description: >
     property, the [[Value]] field of 'desc' and the [[Value]]
     attribute value of 'name' are two numbers with same vaule
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "0", { value: 101 });
+Object.defineProperty(arrObj, "0", { value: 101 });
 
-        Object.defineProperty(arrObj, "0", { value: 101 });
-        return dataPropertyAttributesAreCorrect(arrObj, "0", 101, false, false, false);
-    }
-runTestCase(testcase);
+Object.defineProperty(arrObj, "0", { value: 101 });
+verifyEqualTo(arrObj, "0", 101);
+
+verifyNotWritable(arrObj, "0");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-221.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-221.js
index fbc3ae6e3e..b0065a1c2e 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-221.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-221.js
@@ -11,25 +11,31 @@ description: >
     property, test TypeError is thrown  when the [[Value]] field of
     'desc' and the [[Value]] attribute value of 'name' are two numbers
     with different values (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
-
-        Object.defineProperty(arrObj, 0, {
-            value: 101,
-            writable: false,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperty(arrObj, "0", { value: 123 });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(arrObj, "0", 101, false, false, false);
-        }
+var arrObj = [];
+
+Object.defineProperty(arrObj, 0, {
+    value: 101,
+    writable: false,
+    configurable: false
+});
+
+try {
+    Object.defineProperty(arrObj, "0", { value: 123 });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arrObj, "0", 101);
+
+    verifyNotWritable(arrObj, "0");
+
+    verifyNotEnumerable(arrObj, "0");
+
+    verifyNotConfigurable(arrObj, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-222.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-222.js
index 1b0e5ba7e7..dc9f8112fa 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-222.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-222.js
@@ -11,17 +11,19 @@ description: >
     property, the [[Value]] field of 'desc' and the [[Value]]
     attribute value of 'name' are two strings which have same length
     and same characters in corresponding positions (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "0", { value: "abcd" });
+Object.defineProperty(arrObj, "0", { value: "abcd" });
+
+Object.defineProperty(arrObj, "0", { value: "abcd" });
+verifyEqualTo(arrObj, "0", "abcd");
+
+verifyNotWritable(arrObj, "0");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
 
-        Object.defineProperty(arrObj, "0", { value: "abcd" });
-        return dataPropertyAttributesAreCorrect(arrObj, "0", "abcd", false, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-223.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-223.js
index 42bd5ac785..8cf2925fc5 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-223.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-223.js
@@ -11,25 +11,31 @@ description: >
     property, test TypeError is thrown  when the [[Value]] field of
     'desc' and the [[Value]] attribute value of 'name' are two strings
     with different values (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
-
-        Object.defineProperty(arrObj, 0, {
-            value: "abcd",
-            writable: false,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperty(arrObj, "0", { value: "fghj" });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(arrObj, "0", "abcd", false, false, false);
-        }
+var arrObj = [];
+
+Object.defineProperty(arrObj, 0, {
+    value: "abcd",
+    writable: false,
+    configurable: false
+});
+
+try {
+    Object.defineProperty(arrObj, "0", { value: "fghj" });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arrObj, "0", "abcd");
+
+    verifyNotWritable(arrObj, "0");
+
+    verifyNotEnumerable(arrObj, "0");
+
+    verifyNotConfigurable(arrObj, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-224.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-224.js
index 78d4ef9c6d..f99e33c4b2 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-224.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-224.js
@@ -11,17 +11,19 @@ description: >
     property, the [[Value]] field of 'desc' and the [[Value]]
     attribute value of 'name' are two booleans with same value
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "0", { value: true });
+Object.defineProperty(arrObj, "0", { value: true });
+
+Object.defineProperty(arrObj, "0", { value: true });
+verifyEqualTo(arrObj, "0", true);
+
+verifyNotWritable(arrObj, "0");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
 
-        Object.defineProperty(arrObj, "0", { value: true });
-        return dataPropertyAttributesAreCorrect(arrObj, "0", true, false, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-225.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-225.js
index 40d655eca6..aa26f857bc 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-225.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-225.js
@@ -11,25 +11,31 @@ description: >
     property, test TypeError is thrown when the [[Value]] field of
     'desc' and the [[Value]] attribute value of 'name' are two
     booleans with different values (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
-
-        Object.defineProperty(arrObj, 0, {
-            value: true,
-            writable: false,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperty(arrObj, "0", { value: false });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(arrObj, "0", true, false, false, false);
-        }
+var arrObj = [];
+
+Object.defineProperty(arrObj, 0, {
+    value: true,
+    writable: false,
+    configurable: false
+});
+
+try {
+    Object.defineProperty(arrObj, "0", { value: false });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arrObj, "0", true);
+
+    verifyNotWritable(arrObj, "0");
+
+    verifyNotEnumerable(arrObj, "0");
+
+    verifyNotConfigurable(arrObj, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-226.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-226.js
index 78d60fe0e6..41a7d59b53 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-226.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-226.js
@@ -11,19 +11,21 @@ description: >
     property, the [[Value]] field of 'desc' and the [[Value]]
     attribute value of 'name' are two objects which refer to the same
     object (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        var obj1 = { length: 10 };
+var obj1 = { length: 10 };
 
-        Object.defineProperty(arrObj, "0", { value: obj1 });
+Object.defineProperty(arrObj, "0", { value: obj1 });
+
+Object.defineProperty(arrObj, "0", { value: obj1 });
+verifyEqualTo(arrObj, "0", obj1);
+
+verifyNotWritable(arrObj, "0");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
 
-        Object.defineProperty(arrObj, "0", { value: obj1 });
-        return dataPropertyAttributesAreCorrect(arrObj, "0", obj1, false, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-227.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-227.js
index 2d68820d72..159c41f79e 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-227.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-227.js
@@ -11,28 +11,34 @@ description: >
     property, test TypeError is thrown when the [[Value]] field of
     'desc' and the [[Value]] attribute value of 'name' are two objects
     which refer to two different objects (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        var obj1 = { length: 10 };
-        Object.defineProperty(arrObj, 0, {
-            value: obj1,
-            writable: false,
-            configurable: false
-        });
+var obj1 = { length: 10 };
+Object.defineProperty(arrObj, 0, {
+    value: obj1,
+    writable: false,
+    configurable: false
+});
 
-        var obj2 = { length: 20 };
+var obj2 = { length: 20 };
 
-        try {
-            Object.defineProperty(arrObj, "0", { value: obj2 });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(arrObj, "0", obj1, false, false, false);
-        }
+try {
+    Object.defineProperty(arrObj, "0", { value: obj2 });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arrObj, "0", obj1);
+
+    verifyNotWritable(arrObj, "0");
+
+    verifyNotEnumerable(arrObj, "0");
+
+    verifyNotConfigurable(arrObj, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-228.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-228.js
index e3e8b71df9..0608409885 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-228.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-228.js
@@ -11,17 +11,19 @@ description: >
     property, the [[Writable]] field of 'desc' and the [[Writable]]
     attribute value of 'name' are two booleans with same value
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "0", { writable: false });
+Object.defineProperty(arrObj, "0", { writable: false });
+
+Object.defineProperty(arrObj, "0", { writable: false });
+verifyEqualTo(arrObj, "0", undefined);
+
+verifyNotWritable(arrObj, "0");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
 
-        Object.defineProperty(arrObj, "0", { writable: false });
-        return dataPropertyAttributesAreCorrect(arrObj, "0", undefined, false, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-229.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-229.js
index 8b6c5f7aa5..981ee7d12a 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-229.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-229.js
@@ -11,17 +11,18 @@ description: >
     property, the [[Writable]] field of 'desc' and the [[Writable]]
     attribute value of 'name' are two booleans with different values
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "0", { writable: false, configurable: true });
+Object.defineProperty(arrObj, "0", { writable: false, configurable: true });
 
-        Object.defineProperty(arrObj, "0", { writable: true });
-        return dataPropertyAttributesAreCorrect(arrObj, "0", undefined, true, false, true);
-    }
-runTestCase(testcase);
+Object.defineProperty(arrObj, "0", { writable: true });
+verifyEqualTo(arrObj, "0", undefined);
+
+verifyWritable(arrObj, "0");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-230.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-230.js
index d2e7d2b4aa..e9e48f1c01 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-230.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-230.js
@@ -11,30 +11,31 @@ description: >
     property, the [[Get]] field of 'desc' and the [[Get]] attribute
     value of 'name' are two objects which refer to the same object
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
-        arrObj.helpVerifySet = 10;
-
-        function getFunc() {
-            return arrObj.helpVerifySet;
-        }
-        function setFunc(value) {
-            arrObj.helpVerifySet = value;
-        }
-
-        Object.defineProperty(arrObj, "0", {
-            get: getFunc,
-            set: setFunc
-        });
-
-        Object.defineProperty(arrObj, "0", {
-            get: getFunc
-        });
-        return accessorPropertyAttributesAreCorrect(arrObj, "0", getFunc, setFunc, "helpVerifySet", false, false);
-    }
-runTestCase(testcase);
+var arrObj = [];
+arrObj.helpVerifySet = 10;
+
+function getFunc() {
+    return arrObj.helpVerifySet;
+}
+function setFunc(value) {
+    arrObj.helpVerifySet = value;
+}
+
+Object.defineProperty(arrObj, "0", {
+    get: getFunc,
+    set: setFunc
+});
+
+Object.defineProperty(arrObj, "0", {
+    get: getFunc
+});
+verifyEqualTo(arrObj, "0", getFunc());
+
+verifyWritable(arrObj, "0", "helpVerifySet");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-231.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-231.js
index 2e682ba13a..2e68e8b085 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-231.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-231.js
@@ -11,35 +11,36 @@ description: >
     property, the [[Get]] field of 'desc' and the [[Get]] attribute
     value of 'name' are two objects which refer to the different
     objects (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
-        arrObj.helpVerifySet = 10;
-
-        function getFunc1() {
-            return 20;
-        }
-        function getFunc2() {
-            return arrObj.helpVerifySet;
-        }
-        function setFunc(value) {
-            arrObj.helpVerifySet = value;
-        }
-
-        Object.defineProperty(arrObj, "0", {
-            get: getFunc1,
-            set: setFunc,
-            configurable: true
-        });
-        
-        Object.defineProperty(arrObj, "0", {
-            get: getFunc2
-        });
-
-        return accessorPropertyAttributesAreCorrect(arrObj, "0", getFunc2, setFunc, "helpVerifySet", false, true);
-    }
-runTestCase(testcase);
+var arrObj = [];
+arrObj.helpVerifySet = 10;
+
+function getFunc1() {
+    return 20;
+}
+function getFunc2() {
+    return arrObj.helpVerifySet;
+}
+function setFunc(value) {
+    arrObj.helpVerifySet = value;
+}
+
+Object.defineProperty(arrObj, "0", {
+    get: getFunc1,
+    set: setFunc,
+    configurable: true
+});
+
+Object.defineProperty(arrObj, "0", {
+    get: getFunc2
+});
+
+verifyEqualTo(arrObj, "0", getFunc2());
+
+verifyWritable(arrObj, "0", "helpVerifySet");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-232.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-232.js
index 9c3a9425a2..906183a7ba 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-232.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-232.js
@@ -11,21 +11,20 @@ description: >
     property, the [[Set]] field of 'desc' and the [[Set]] attribute
     value of 'name' are two objects which refer to the same object
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        function setFunc(value) {
-            arrObj.setVerifyHelpProp = value;
-        }
+function setFunc(value) {
+    arrObj.setVerifyHelpProp = value;
+}
 
-        Object.defineProperty(arrObj, "0", { set: setFunc });
+Object.defineProperty(arrObj, "0", { set: setFunc });
 
-        Object.defineProperty(arrObj, "0", { set: setFunc });
-        return accessorPropertyAttributesAreCorrect(arrObj, "0", undefined, setFunc, "setVerifyHelpProp", false, false);
-    }
-runTestCase(testcase);
+Object.defineProperty(arrObj, "0", { set: setFunc });
+verifyWritable(arrObj, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-233.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-233.js
index eb670a95f0..e4fc9c0fa9 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-233.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-233.js
@@ -11,26 +11,25 @@ description: >
     property, the [[Set]] field of 'desc' and the [[Set]] attribute
     value of 'name' are two objects which refer to the different
     objects (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        function setFunc1() { }
+function setFunc1() { }
 
-        Object.defineProperty(arrObj, "0", {
-            set: setFunc1,
-            configurable: true
-        });
+Object.defineProperty(arrObj, "0", {
+    set: setFunc1,
+    configurable: true
+});
 
-        function setFunc2(value) {
-            arrObj.setVerifyHelpProp = value;
-        }
+function setFunc2(value) {
+    arrObj.setVerifyHelpProp = value;
+}
 
-        Object.defineProperty(arrObj, "0", { set: setFunc2 });
-        return accessorPropertyAttributesAreCorrect(arrObj, "0", undefined, setFunc2, "setVerifyHelpProp", false, true);
-    }
-runTestCase(testcase);
+Object.defineProperty(arrObj, "0", { set: setFunc2 });
+verifyWritable(arrObj, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-234.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-234.js
index cab45f748a..7844538c9b 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-234.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-234.js
@@ -11,17 +11,19 @@ description: >
     property, the [[Enumerable]] field of 'desc' and the
     [[Enumerable]] attribute value of 'name' are two booleans with
     same value (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "0", { enumerable: false });
+Object.defineProperty(arrObj, "0", { enumerable: false });
+
+Object.defineProperty(arrObj, "0", { enumerable: false });
+verifyEqualTo(arrObj, "0", undefined);
+
+verifyNotWritable(arrObj, "0");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
 
-        Object.defineProperty(arrObj, "0", { enumerable: false });
-        return dataPropertyAttributesAreCorrect(arrObj, "0", undefined, false, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-235.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-235.js
index ff75a490f1..b5589fd9b1 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-235.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-235.js
@@ -11,17 +11,19 @@ description: >
     property, the [[Enumerable]] field of 'desc' and the
     [[Enumerable]] attribute value of 'name' are two booleans with
     different values (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "0", { enumerable: false, configurable: true });
+Object.defineProperty(arrObj, "0", { enumerable: false, configurable: true });
+
+Object.defineProperty(arrObj, "0", { enumerable: true });
+verifyEqualTo(arrObj, "0", undefined);
+
+verifyNotWritable(arrObj, "0");
+
+verifyEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
 
-        Object.defineProperty(arrObj, "0", { enumerable: true });
-        return dataPropertyAttributesAreCorrect(arrObj, "0", undefined, false, true, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-236.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-236.js
index f4af3d3a19..675fd9e463 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-236.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-236.js
@@ -11,17 +11,18 @@ description: >
     property, the [[Configurable]] field of 'desc' and the
     [[Configurable]] attribute value of 'name' are two booleans with
     same value  (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "0", { configurable: false });
+Object.defineProperty(arrObj, "0", { configurable: false });
 
-        Object.defineProperty(arrObj, "0", { configurable: false });
-        return dataPropertyAttributesAreCorrect(arrObj, "0", undefined, false, false, false);
-    }
-runTestCase(testcase);
+Object.defineProperty(arrObj, "0", { configurable: false });
+verifyEqualTo(arrObj, "0", undefined);
+
+verifyNotWritable(arrObj, "0");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-237.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-237.js
index 1322e386ae..b8c594548a 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-237.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-237.js
@@ -11,17 +11,19 @@ description: >
     property, the [[Configurable]] field of 'desc' and the
     [[Configurable]] attribute value of 'name' are two booleans with
     different values (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "0", { configurable: true });
+Object.defineProperty(arrObj, "0", { configurable: true });
+
+Object.defineProperty(arrObj, "0", { configurable: false });
+verifyEqualTo(arrObj, "0", undefined);
+
+verifyNotWritable(arrObj, "0");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
 
-        Object.defineProperty(arrObj, "0", { configurable: false });
-        return dataPropertyAttributesAreCorrect(arrObj, "0", undefined, false, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-238.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-238.js
index 7fb3c4f0fc..47f4d9991d 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-238.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-238.js
@@ -11,31 +11,37 @@ description: >
     named property, TypeError is thrown if the [[Configurable]]
     attribute value of 'name' is false  and the [[Configurable]] field
     of 'desc' is true (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "1", {
-            value: 3,
-            writable: true,
-            configurable: false
-        });
+Object.defineProperty(arrObj, "1", {
+    value: 3,
+    writable: true,
+    configurable: false
+});
 
-        try {
-            Object.defineProperty(arrObj, "1", {
-                value: 13,
-                writable: true,
-                configurable: true
-            });
-            return false;
+try {
+    Object.defineProperty(arrObj, "1", {
+        value: 13,
+        writable: true,
+        configurable: true
+    });
+    $ERROR("Expected an exception.");
 
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(arrObj, "1", 3, true, false, false);
-        }
+} catch (e) {
+    verifyEqualTo(arrObj, "1", 3);
+
+    verifyWritable(arrObj, "1");
+
+    verifyNotEnumerable(arrObj, "1");
+
+    verifyNotConfigurable(arrObj, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-239.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-239.js
index 5a965d5b31..1b51b2d640 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-239.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-239.js
@@ -12,32 +12,38 @@ description: >
     attribute value of 'name' is false, and [[Enumerable]] of 'desc'
     is present and its value is different from the [[Enumerable]]
     attribute value of 'name' (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "1", {
-            value: 3,
-            writable: true,
-            configurable: false,
-            enumerable: false
-        });
+Object.defineProperty(arrObj, "1", {
+    value: 3,
+    writable: true,
+    configurable: false,
+    enumerable: false
+});
 
-        try {
-            Object.defineProperty(arrObj, "1", {
-                value: 13,
-                writable: true,
-                enumerable: true
-            });
-            return false;
+try {
+    Object.defineProperty(arrObj, "1", {
+        value: 13,
+        writable: true,
+        enumerable: true
+    });
+    $ERROR("Expected an exception.");
 
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(arrObj, "1", 3, true, false, false);
-        }
+} catch (e) {
+    verifyEqualTo(arrObj, "1", 3);
+
+    verifyWritable(arrObj, "1");
+
+    verifyNotEnumerable(arrObj, "1");
+
+    verifyNotConfigurable(arrObj, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-240.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-240.js
index e25653ab19..dc6e35f5d2 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-240.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-240.js
@@ -11,32 +11,36 @@ description: >
     named property, TypeError is thrown if 'name' is accessor
     property, and 'desc' is data descriptor, and the [[Configurable]]
     attribute value of 'name' is false (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [];
+var arrObj = [];
 
-        function setFunc(value) {
-            arrObj.setVerifyHelpProp = value;
-        }
+function setFunc(value) {
+    arrObj.setVerifyHelpProp = value;
+}
 
-        Object.defineProperty(arrObj, "1", {
-            set: setFunc,
-            configurable: false
-        });
+Object.defineProperty(arrObj, "1", {
+    set: setFunc,
+    configurable: false
+});
 
-        try {
-            Object.defineProperty(arrObj, "1", {
-                value: 13
-            });
-            return false;
+try {
+    Object.defineProperty(arrObj, "1", {
+        value: 13
+    });
+    $ERROR("Expected an exception.");
 
-        } catch (e) {
-            return e instanceof TypeError && accessorPropertyAttributesAreCorrect(arrObj, "1", undefined, setFunc, "setVerifyHelpProp", false, false);
-        }
+} catch (e) {
+    verifyWritable(arrObj, "1", "setVerifyHelpProp");
+
+    verifyNotEnumerable(arrObj, "1");
+
+    verifyNotConfigurable(arrObj, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-241.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-241.js
index b09ad9e878..63556e2b2c 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-241.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-241.js
@@ -11,28 +11,34 @@ description: >
     named property, TypeError is thrown if  'name' is data property,
     and'desc' is accessor descriptor, and the [[Configurable]]
     attribute value of 'name' is false (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "1", {
-            value: 3,
-            configurable: false
-        });
+Object.defineProperty(arrObj, "1", {
+    value: 3,
+    configurable: false
+});
 
-        try {
-            Object.defineProperty(arrObj, "1", {
-                set: function () { }
-            });
-            return false;
+try {
+    Object.defineProperty(arrObj, "1", {
+        set: function () { }
+    });
+    $ERROR("Expected an exception.");
 
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(arrObj, "1", 3, false, false, false);
-        }
+} catch (e) {
+    verifyEqualTo(arrObj, "1", 3);
+
+    verifyNotWritable(arrObj, "1");
+
+    verifyNotEnumerable(arrObj, "1");
+
+    verifyNotConfigurable(arrObj, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-242-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-242-1.js
index b41c3a75ea..555ab89145 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-242-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-242-1.js
@@ -11,21 +11,23 @@ description: >
     named property,  'name' is data property and 'desc' is data
     descriptor, and the [[Configurable]] attribute value of 'name' is
     true, test 'name' is updated successfully (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [3];
+var arrObj = [3];
 
-        Object.defineProperty(arrObj, "0", {
-            value: 1001,
-            writable: false,
-            enumerable: false
-        });
+Object.defineProperty(arrObj, "0", {
+    value: 1001,
+    writable: false,
+    enumerable: false
+});
+
+verifyEqualTo(arrObj, "0", 1001);
+
+verifyNotWritable(arrObj, "0");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
 
-        return dataPropertyAttributesAreCorrect(arrObj, "0", 1001, false, false, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-242.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-242.js
index 1a93be344a..30306ebd22 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-242.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-242.js
@@ -12,22 +12,21 @@ description: >
     descriptor, and the [[Configurable]] attribute value of 'name' is
     true, test 'name' is converted from data property to accessor
     property (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [3];
+var arrObj = [3];
 
-        function setFunc(value) {
-            arrObj.setVerifyHelpProp = value;
-        }
-        Object.defineProperty(arrObj, "0", {
-            set: setFunc
-        });
+function setFunc(value) {
+    arrObj.setVerifyHelpProp = value;
+}
+Object.defineProperty(arrObj, "0", {
+    set: setFunc
+});
 
-        return accessorPropertyAttributesAreCorrect(arrObj, "0", undefined, setFunc, "setVerifyHelpProp", true, true);
-    }
-runTestCase(testcase);
+verifyWritable(arrObj, "0", "setVerifyHelpProp");
+
+verifyEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-243-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-243-1.js
index ee3e8ff4ae..a3a5a63946 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-243-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-243-1.js
@@ -11,25 +11,25 @@ description: >
     named property,  'name' is accessor property and  assignment to
     the accessor property, fails to convert accessor property from
     accessor property to data property (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
+flags: [noStrict]
 ---*/
 
-function testcase() {
 
-        var arrObj = [];
+var arrObj = [];
 
-        function getFunc() {
-            return 3;
-        }
-        Object.defineProperty(arrObj, "1", {
-            get: getFunc,
-            configurable: true
-        });
+function getFunc() {
+    return 3;
+}
+Object.defineProperty(arrObj, "1", {
+    get: getFunc,
+    configurable: true
+});
 
-        arrObj[1] = 4;
+arrObj[1] = 4;
 
-        return accessorPropertyAttributesAreCorrect(arrObj, "1", getFunc, undefined, undefined, false, true);
-    }
-runTestCase(testcase);
+verifyEqualTo(arrObj, "1", getFunc());
+
+verifyNotEnumerable(arrObj, "1");
+
+verifyConfigurable(arrObj, "1");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-243-2.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-243-2.js
new file mode 100644
index 0000000000..c158aba396
--- /dev/null
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-243-2.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International.  All rights reserved.
+// Ecma International makes this code available under the terms and conditions set
+// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+// "Use Terms").   Any redistribution of this code must retain the above
+// copyright and this notice and otherwise comply with the Use Terms.
+
+/*---
+es5id: 15.2.3.6-4-243-2
+description: >
+    Object.defineProperty - 'O' is an Array, 'name' is an array index
+    named property,  'name' is accessor property and  assignment to
+    the accessor property, fails to convert accessor property from
+    accessor property to data property (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+flags: [onlyStrict]
+---*/
+
+
+var arrObj = [];
+
+function getFunc() {
+    return 3;
+}
+Object.defineProperty(arrObj, "1", {
+    get: getFunc,
+    configurable: true
+});
+
+try {
+    arrObj[1] = 4;
+} catch (e) {
+    verifyEqualTo(arrObj, "1", getFunc());
+
+    verifyNotEnumerable(arrObj, "1");
+
+    verifyConfigurable(arrObj, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
+    }
+
+}
+
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-243.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-243.js
index 1f2db50eb7..dd56d69bf2 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-243.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-243.js
@@ -12,27 +12,29 @@ description: >
     descriptor, and the [[Configurable]] attribute value of 'name' is
     true, test 'name' is converted from accessor property to data
     property (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [];
+var arrObj = [];
 
-        function getFunc() {
-            return 3;
-        }
-        Object.defineProperty(arrObj, "1", {
-            get: getFunc,
-            configurable: true
-        });
+function getFunc() {
+    return 3;
+}
+Object.defineProperty(arrObj, "1", {
+    get: getFunc,
+    configurable: true
+});
 
-        Object.defineProperty(arrObj, "1", {
-            value: 12
-        });
+Object.defineProperty(arrObj, "1", {
+    value: 12
+});
+
+verifyEqualTo(arrObj, "1", 12);
+
+verifyNotWritable(arrObj, "1");
+
+verifyNotEnumerable(arrObj, "1");
+
+verifyConfigurable(arrObj, "1");
 
-        return dataPropertyAttributesAreCorrect(arrObj, "1", 12, false, false, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-244.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-244.js
index df4ace8a4a..1f2d865e01 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-244.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-244.js
@@ -13,28 +13,35 @@ description: >
     false, test TypeError is thrown if the [[Writable]] attribute
     value of 'name' is false and the [[Writable]] field of 'desc' is
     true (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "1", {
-            writable: false,
-            configurable: false
-        });
+Object.defineProperty(arrObj, "1", {
+    writable: false,
+    configurable: false
+});
 
-        try {
+try {
 
-            Object.defineProperty(arrObj, "1", {
-                writable: true
-            });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(arrObj, "1", undefined, false, false, false);
-        }
+    Object.defineProperty(arrObj, "1", {
+        writable: true
+    });
+    $ERROR("Expected an exception.");
+
+} catch (e) {
+    verifyEqualTo(arrObj, "1", undefined);
+
+    verifyNotWritable(arrObj, "1");
+
+    verifyNotEnumerable(arrObj, "1");
+
+    verifyNotConfigurable(arrObj, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-245.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-245.js
index 4db654f76d..8a70e1d301 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-245.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-245.js
@@ -14,29 +14,34 @@ description: >
     value of 'name' is false, and the type of the [[Value]] field of
     'desc' is different from the type of the [[Value]] attribute value
     of 'name' (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "1", {
-            value: 3,
-            writable: false,
-            configurable: false
-        });
+Object.defineProperty(arrObj, "1", {
+    value: 3,
+    writable: false,
+    configurable: false
+});
 
-        try {
+try {
+    Object.defineProperty(arrObj, "1", {
+        value: "abc"
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arrObj, "1", 3);
 
-            Object.defineProperty(arrObj, "1", {
-                value: "abc"
-            });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(arrObj, "1", 3, false, false, false);
-        }
+    verifyNotWritable(arrObj, "1");
+
+    verifyNotEnumerable(arrObj, "1");
+
+    verifyNotConfigurable(arrObj, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-246.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-246.js
index a822a5e889..50f518202a 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-246.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-246.js
@@ -14,27 +14,32 @@ description: >
     value of 'name' is false, and the [[Value]] field of 'desc' is +0,
     and the [[Value]] attribute value of 'name' is -0 (15.4.5.1 step
     4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "1", {
-            value: -0
+Object.defineProperty(arrObj, "1", {
+    value: -0
 
-        });
+});
 
-        try {
-            Object.defineProperty(arrObj, "1", {
-                value: +0
-            });
+try {
+    Object.defineProperty(arrObj, "1", {
+        value: +0
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arrObj, "1", -0);
 
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(arrObj, "1", -0, false, false, false);
-        }
+    verifyNotWritable(arrObj, "1");
+
+    verifyNotEnumerable(arrObj, "1");
+
+    verifyNotConfigurable(arrObj, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-247.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-247.js
index 51e1acb3f6..ebe4abfe81 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-247.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-247.js
@@ -14,26 +14,32 @@ description: >
     value of 'name' is false, and the [[Value]] field of 'desc' is -0,
     and the [[Value]] attribute value of 'name' is +0 (15.4.5.1 step
     4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "1", {
-            value: +0
-        });
+Object.defineProperty(arrObj, "1", {
+    value: +0
+});
 
-        try {
+try {
 
-            Object.defineProperty(arrObj, "1", {
-                value: -0
-            });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(arrObj, "1", +0, false, false, false);
-        }
+    Object.defineProperty(arrObj, "1", {
+        value: -0
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arrObj, "1", +0);
+
+    verifyNotWritable(arrObj, "1");
+
+    verifyNotEnumerable(arrObj, "1");
+
+    verifyNotConfigurable(arrObj, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-248.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-248.js
index 39f410325a..8476bdb89c 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-248.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-248.js
@@ -14,25 +14,31 @@ description: >
     value of 'name' is false, and the [[Value]] field of 'desc' and
     the [[Value]] attribute value of 'name' are two numbers with
     different vaules (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
-
-        Object.defineProperty(arrObj, "1", {
-            value: 12
-        });
-
-        try {
-            Object.defineProperty(arrObj, "1", {
-                value: 15
-            });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(arrObj, "1", 12, false, false, false);
-        }
+var arrObj = [];
+
+Object.defineProperty(arrObj, "1", {
+    value: 12
+});
+
+try {
+    Object.defineProperty(arrObj, "1", {
+        value: 15
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arrObj, "1", 12);
+
+    verifyNotWritable(arrObj, "1");
+
+    verifyNotEnumerable(arrObj, "1");
+
+    verifyNotConfigurable(arrObj, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-249.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-249.js
index 84aaa2ed0b..e8da0e5fff 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-249.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-249.js
@@ -14,26 +14,32 @@ description: >
     value of 'name' is false, and the [[Value]] field of 'desc' and
     the [[Value]] attribute value of 'name' are two strings with
     different values (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "1", {
-            value: "abc"
-        });
+Object.defineProperty(arrObj, "1", {
+    value: "abc"
+});
 
-        try {
-            Object.defineProperty(arrObj, "1", {
-                value: "fgh"
-            });
+try {
+    Object.defineProperty(arrObj, "1", {
+        value: "fgh"
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arrObj, "1", "abc");
 
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(arrObj, "1", "abc", false, false, false);
-        }
+    verifyNotWritable(arrObj, "1");
+
+    verifyNotEnumerable(arrObj, "1");
+
+    verifyNotConfigurable(arrObj, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
+
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-250.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-250.js
index 0c9a705ad8..d7235a4f30 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-250.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-250.js
@@ -14,26 +14,31 @@ description: >
     value of 'name' is false, and the [[Value]] field of 'desc' and
     the [[Value]] attribute value of 'name' are two booleans with
     different values (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "1", {
-            value: false
-        });
+Object.defineProperty(arrObj, "1", {
+    value: false
+});
 
-        try {
-            Object.defineProperty(arrObj, "1", {
-                value: true
-            });
+try {
+    Object.defineProperty(arrObj, "1", {
+        value: true
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arrObj, "1", false);
 
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(arrObj, "1", false, false, false, false);
-        }
+    verifyNotWritable(arrObj, "1");
+
+    verifyNotEnumerable(arrObj, "1");
+
+    verifyNotConfigurable(arrObj, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-251.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-251.js
index ce1c459b36..0afa71a425 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-251.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-251.js
@@ -14,25 +14,31 @@ description: >
     value of 'name' is false, and the [[Value]] field of 'desc' and
     the [[Value]] attribute value of 'name' are two objects which
     refer to the different objects (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
-        var obj = { length: 10 };
+var arrObj = [];
+var obj = { length: 10 };
 
-        Object.defineProperty(arrObj, "1", {
-            value: obj
-        });
+Object.defineProperty(arrObj, "1", {
+    value: obj
+});
 
-        try {
-            Object.defineProperty(arrObj, "1", { value: {} });
+try {
+    Object.defineProperty(arrObj, "1", { value: {} });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arrObj, "1", obj);
 
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(arrObj, "1", obj, false, false, false);
-        }
+    verifyNotWritable(arrObj, "1");
+
+    verifyNotEnumerable(arrObj, "1");
+
+    verifyNotConfigurable(arrObj, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
+
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-252.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-252.js
index a098e29dbb..4f4dc16f71 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-252.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-252.js
@@ -14,29 +14,33 @@ description: >
     present, and the [[Set]] field of 'desc' and the [[Set]] attribute
     value of 'name' are two objects which refer to the different
     objects (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
-
-        function setFunc(value) {
-            arrObj.setVerifyHelpProp = value;
-        }
-        Object.defineProperty(arrObj, "1", {
-            set: setFunc
-        });
-
-        try {
-            Object.defineProperty(arrObj, "1", {
-                set: function () { }
-            });
-
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && accessorPropertyAttributesAreCorrect(arrObj, "1", undefined, setFunc, "setVerifyHelpProp", false, false);
-        }
+var arrObj = [];
+
+function setFunc(value) {
+    arrObj.setVerifyHelpProp = value;
+}
+Object.defineProperty(arrObj, "1", {
+    set: setFunc
+});
+
+try {
+    Object.defineProperty(arrObj, "1", {
+        set: function () { }
+    });
+    $ERROR("Expected an exception.");
+
+} catch (e) {
+    verifyWritable(arrObj, "1", "setVerifyHelpProp");
+
+    verifyNotEnumerable(arrObj, "1");
+
+    verifyNotConfigurable(arrObj, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-253.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-253.js
index 6abe4e9bc3..325da97095 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-253.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-253.js
@@ -13,29 +13,33 @@ description: >
     false, test TypeError is thrown if the [[Set]] field of 'desc' is
     present, and the [[Set]] field of 'desc' is an object and the
     [[Set]] attribute value of 'name' is undefined (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
-        function getFunc() {
-            return 12;
-        }
-
-        Object.defineProperty(arrObj, "1", {
-            get: getFunc,
-            set: undefined
-        });
-
-        try {
-            Object.defineProperty(arrObj, "1", {
-                set: function () { }
-            });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && accessorPropertyAttributesAreCorrect(arrObj, "1", getFunc, undefined, undefined, false, false);
-        }
+var arrObj = [];
+function getFunc() {
+    return 12;
+}
+
+Object.defineProperty(arrObj, "1", {
+    get: getFunc,
+    set: undefined
+});
+
+try {
+    Object.defineProperty(arrObj, "1", {
+        set: function () { }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arrObj, "1", getFunc());
+
+    verifyNotEnumerable(arrObj, "1");
+
+    verifyNotConfigurable(arrObj, "1");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-257.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-257.js
index 9da91a48e6..475da8ecd1 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-257.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-257.js
@@ -13,31 +13,26 @@ description: >
     false, 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 'name' are undefined (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
-        function setFunc(value) {
-            arrObj.setVerifyHelpProp = value;
-        }
+var arrObj = [];
+function setFunc(value) {
+    arrObj.setVerifyHelpProp = value;
+}
 
-        Object.defineProperty(arrObj, "1", {
-            get: undefined,
-            set: setFunc,
-            configurable: false
-        });
+Object.defineProperty(arrObj, "1", {
+    get: undefined,
+    set: setFunc,
+    configurable: false
+});
 
-        try {
-            Object.defineProperty(arrObj, "1", {
-                get: undefined
-            });
+Object.defineProperty(arrObj, "1", {
+    get: undefined
+});
 
-            return accessorPropertyAttributesAreCorrect(arrObj, "1", undefined, setFunc, "setVerifyHelpProp", false, false);
-        } catch (e) {
-            return false;
-        }
-    }
-runTestCase(testcase);
+verifyWritable(arrObj, "1", "setVerifyHelpProp");
+
+verifyNotEnumerable(arrObj, "1");
+
+verifyNotConfigurable(arrObj, "1");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-258.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-258.js
index d7b90d21ff..b61831d416 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-258.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-258.js
@@ -11,18 +11,20 @@ description: >
     named property, name is data property and 'desc' is data
     descriptor, test updating the [[Value]] attribute value of 'name'
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [100];
+var arrObj = [100];
+
+Object.defineProperty(arrObj, "0", {
+    value: 200
+});
+verifyEqualTo(arrObj, "0", 200);
+
+verifyWritable(arrObj, "0");
+
+verifyEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
 
-        Object.defineProperty(arrObj, "0", {
-            value: 200
-        });
-        return dataPropertyAttributesAreCorrect(arrObj, "0", 200, true, true, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-259.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-259.js
index 9db0995084..88aee4f4dc 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-259.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-259.js
@@ -11,18 +11,20 @@ description: >
     named property, name is data property and 'desc' is data
     descriptor, test setting the [[Value]] attribute value of 'name'
     as undefined (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [100];
+var arrObj = [100];
+
+Object.defineProperty(arrObj, "0", {
+    value: undefined
+});
+verifyEqualTo(arrObj, "0", undefined);
+
+verifyWritable(arrObj, "0");
+
+verifyEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
 
-        Object.defineProperty(arrObj, "0", {
-            value: undefined
-        });
-        return dataPropertyAttributesAreCorrect(arrObj, "0", undefined, true, true, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-260.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-260.js
index 7feaa01ce2..e3f41ee669 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-260.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-260.js
@@ -11,17 +11,19 @@ description: >
     named property, name is data property and 'desc' is data
     descriptor, test setting the [[Value]] attribute value of 'name'
     from undefined to number (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [undefined];
-        Object.defineProperty(arrObj, "0", {
-            value: 100
-        });
-        return dataPropertyAttributesAreCorrect(arrObj, "0", 100, true, true, true);
-    }
-runTestCase(testcase);
+var arrObj = [undefined];
+Object.defineProperty(arrObj, "0", {
+    value: 100
+});
+verifyEqualTo(arrObj, "0", 100);
+
+verifyWritable(arrObj, "0");
+
+verifyEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
+
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-261.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-261.js
index 6fad4c8b26..39add17472 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-261.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-261.js
@@ -11,17 +11,19 @@ description: >
     named property, name is data property and 'desc' is data
     descriptor, test updating the [[Writable]] attribute value of
     'name' (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [100];
-        Object.defineProperty(arrObj, "0", {
-            writable: false
-        });
-        return dataPropertyAttributesAreCorrect(arrObj, "0", 100, false, true, true);
-    }
-runTestCase(testcase);
+var arrObj = [100];
+Object.defineProperty(arrObj, "0", {
+    writable: false
+});
+verifyEqualTo(arrObj, "0", 100);
+
+verifyNotWritable(arrObj, "0");
+
+verifyEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
+
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-262.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-262.js
index 5eef4c6b07..cbca50654a 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-262.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-262.js
@@ -11,18 +11,20 @@ description: >
     named property, name is data property and 'desc' is data
     descriptor, test updating the [[Enumerable]] attribute value of
     'name' (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [100];
+var arrObj = [100];
+
+Object.defineProperty(arrObj, "0", {
+    enumerable: false
+});
+verifyEqualTo(arrObj, "0", 100);
+
+verifyWritable(arrObj, "0");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
 
-        Object.defineProperty(arrObj, "0", {
-            enumerable: false
-        });
-        return dataPropertyAttributesAreCorrect(arrObj, "0", 100, true, false, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-263.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-263.js
index fd5644efec..4cc2aae0c9 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-263.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-263.js
@@ -11,18 +11,20 @@ description: >
     named property, name is data property and 'desc' is data
     descriptor, test updating the [[Configurable]] attribute value of
     'name' (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [100];
+var arrObj = [100];
+
+Object.defineProperty(arrObj, "0", {
+    configurable: false
+});
+verifyEqualTo(arrObj, "0", 100);
+
+verifyWritable(arrObj, "0");
+
+verifyEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
 
-        Object.defineProperty(arrObj, "0", {
-            configurable: false
-        });
-        return dataPropertyAttributesAreCorrect(arrObj, "0", 100, true, true, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-264.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-264.js
index fab104a503..d852286202 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-264.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-264.js
@@ -11,19 +11,21 @@ description: >
     named property, name is data property and 'desc' is data
     descriptor, test updating multiple attribute values of 'name'
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [100];
-        Object.defineProperty(arrObj, "0", {
-            writable: false,
-            enumerable: false,
-            configurable: false
-        });
-        return dataPropertyAttributesAreCorrect(arrObj, "0", 100, false, false, false);
-    }
-runTestCase(testcase);
+var arrObj = [100];
+Object.defineProperty(arrObj, "0", {
+    writable: false,
+    enumerable: false,
+    configurable: false
+});
+verifyEqualTo(arrObj, "0", 100);
+
+verifyNotWritable(arrObj, "0");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
+
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-265.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-265.js
index bcdcef9655..dc9d0e4d40 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-265.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-265.js
@@ -11,27 +11,26 @@ description: >
     named property, name is accessor property and 'desc' is accessor
     descriptor, test updating the [[Get]] attribute value of 'name'
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [];
+var arrObj = [];
 
-        function getFunc() {
-            return 100;
-        }
-        Object.defineProperty(arrObj, "0", {
-            get: function () {
-                return 12;
-            },
-            configurable: true
-        });
-        Object.defineProperty(arrObj, "0", {
-            get: getFunc
-        });
-        return accessorPropertyAttributesAreCorrect(arrObj, "0", getFunc, undefined, undefined, false, true);
-    }
-runTestCase(testcase);
+function getFunc() {
+    return 100;
+}
+Object.defineProperty(arrObj, "0", {
+    get: function () {
+        return 12;
+    },
+    configurable: true
+});
+Object.defineProperty(arrObj, "0", {
+    get: getFunc
+});
+verifyEqualTo(arrObj, "0", getFunc());
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-266.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-266.js
index 4102d77f37..d6fd1826f5 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-266.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-266.js
@@ -11,26 +11,23 @@ description: >
     named property, name is accessor property and 'desc' is accessor
     descriptor, test setting the [[Get]] attribute value of 'name' as
     undefined (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [];
-        function getFunc() {
-            return 12;
-        }
+var arrObj = [];
+function getFunc() {
+    return 12;
+}
 
-        Object.defineProperty(arrObj, "0", {
-            get: getFunc,
-            configurable: true
-        });
+Object.defineProperty(arrObj, "0", {
+    get: getFunc,
+    configurable: true
+});
 
-        Object.defineProperty(arrObj, "0", {
-            get: undefined
-        });
-        return accessorPropertyAttributesAreCorrect(arrObj, "0", undefined, undefined, undefined, false, true);
-    }
-runTestCase(testcase);
+Object.defineProperty(arrObj, "0", {
+    get: undefined
+});
+verifyNotEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-267.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-267.js
index 2c8a50323d..ddca9e2e3f 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-267.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-267.js
@@ -11,26 +11,25 @@ description: >
     named property, name is accessor property and 'desc' is accessor
     descriptor, test updating the [[Get]] attribute value of 'name'
     from undefined to function object (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [];
+var arrObj = [];
 
-        function getFunc() {
-            return 12;
-        }
-        Object.defineProperty(arrObj, "0", {
-            get: undefined,
-            configurable: true
-        });
+function getFunc() {
+    return 12;
+}
+Object.defineProperty(arrObj, "0", {
+    get: undefined,
+    configurable: true
+});
 
-        Object.defineProperty(arrObj, "0", {
-            get: getFunc
-        });
-        return accessorPropertyAttributesAreCorrect(arrObj, "0", getFunc, undefined, undefined, false, true);
-    }
-runTestCase(testcase);
+Object.defineProperty(arrObj, "0", {
+    get: getFunc
+});
+verifyEqualTo(arrObj, "0", getFunc());
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-268.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-268.js
index 251838b551..5f5124f276 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-268.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-268.js
@@ -11,26 +11,25 @@ description: >
     named property, name is accessor property and 'desc' is accessor
     descriptor, test updating the [[Set]] attribute value of 'name'
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [];
+var arrObj = [];
 
-        function setFunc(value) {
-            arrObj.setVerifyHelpProp = value;
-        }
-        Object.defineProperty(arrObj, "0", {
-            set: function () { },
-            configurable: true
-        });
+function setFunc(value) {
+    arrObj.setVerifyHelpProp = value;
+}
+Object.defineProperty(arrObj, "0", {
+    set: function () { },
+    configurable: true
+});
 
-        Object.defineProperty(arrObj, "0", {
-            set: setFunc
-        });
-        return accessorPropertyAttributesAreCorrect(arrObj, "0", undefined, setFunc, "setVerifyHelpProp", false, true);
-    }
-runTestCase(testcase);
+Object.defineProperty(arrObj, "0", {
+    set: setFunc
+});
+verifyWritable(arrObj, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-269.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-269.js
index 988ddeb480..c7443ae582 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-269.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-269.js
@@ -11,23 +11,20 @@ description: >
     named property, name is accessor property and 'desc' is accessor
     descriptor, test setting the [[Set]] attribute value of 'name' as
     undefined (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "0", {
-            set: function () { },
-            configurable: true
-        });
+Object.defineProperty(arrObj, "0", {
+    set: function () { },
+    configurable: true
+});
 
-        Object.defineProperty(arrObj, "0", {
-            set: undefined
-        });
-        return accessorPropertyAttributesAreCorrect(arrObj, "0", undefined, undefined, undefined, false, true);
-    }
-runTestCase(testcase);
+Object.defineProperty(arrObj, "0", {
+    set: undefined
+});
+verifyNotEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-270.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-270.js
index 7d1d3a42bf..595a006f44 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-270.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-270.js
@@ -11,27 +11,26 @@ description: >
     named property, name is accessor property and 'desc' is accessor
     descriptor, test updating the [[Set]] attribute value of 'name'
     from undefined to function object (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [];
+var arrObj = [];
 
-        function setFunc(value) {
-            arrObj.setVerifyHelpProp = value;
-        }
+function setFunc(value) {
+    arrObj.setVerifyHelpProp = value;
+}
 
-        Object.defineProperty(arrObj, "0", {
-            set: undefined,
-            configurable: true
-        });
+Object.defineProperty(arrObj, "0", {
+    set: undefined,
+    configurable: true
+});
 
-        Object.defineProperty(arrObj, "0", {
-            set: setFunc
-        });
-        return accessorPropertyAttributesAreCorrect(arrObj, "0", undefined, setFunc, "setVerifyHelpProp", false, true);
-    }
-runTestCase(testcase);
+Object.defineProperty(arrObj, "0", {
+    set: setFunc
+});
+verifyWritable(arrObj, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-271.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-271.js
index 82fab3164d..3ff40cf0ef 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-271.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-271.js
@@ -11,28 +11,27 @@ description: >
     named property, name is accessor property and 'desc' is accessor
     descriptor, test updating the [[Enumerable]] attribute value of
     'name' (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [];
+var arrObj = [];
 
-        function setFunc(value) {
-            arrObj.setVerifyHelpProp = value;
-        }
+function setFunc(value) {
+    arrObj.setVerifyHelpProp = value;
+}
 
-        Object.defineProperty(arrObj, "0", {
-            set: setFunc,
-            enumerable: true,
-            configurable: true
-        });
+Object.defineProperty(arrObj, "0", {
+    set: setFunc,
+    enumerable: true,
+    configurable: true
+});
 
-        Object.defineProperty(arrObj, "0", {
-            enumerable: false
-        });
-        return accessorPropertyAttributesAreCorrect(arrObj, "0", undefined, setFunc, "setVerifyHelpProp", false, true);
-    }
-runTestCase(testcase);
+Object.defineProperty(arrObj, "0", {
+    enumerable: false
+});
+verifyWritable(arrObj, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-272.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-272.js
index e0a35ebd0d..15bf2f351c 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-272.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-272.js
@@ -11,26 +11,25 @@ description: >
     named property, name is accessor property and 'desc' is accessor
     descriptor, test updating the [[Configurable]] attribute value of
     'name' (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [];
-        function setFunc(value) {
-            arrObj.setVerifyHelpProp = value;
-        }
+var arrObj = [];
+function setFunc(value) {
+    arrObj.setVerifyHelpProp = value;
+}
 
-        Object.defineProperty(arrObj, "0", {
-            set: setFunc,
-            configurable: true
-        });
+Object.defineProperty(arrObj, "0", {
+    set: setFunc,
+    configurable: true
+});
 
-        Object.defineProperty(arrObj, "0", {
-            configurable: false
-        });
-        return accessorPropertyAttributesAreCorrect(arrObj, "0", undefined, setFunc, "setVerifyHelpProp", false, false);
-    }
-runTestCase(testcase);
+Object.defineProperty(arrObj, "0", {
+    configurable: false
+});
+verifyWritable(arrObj, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-273.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-273.js
index b79561e2c3..51df8990e5 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-273.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-273.js
@@ -11,35 +11,36 @@ description: >
     named property, name is accessor property and 'desc' is accessor
     descriptor, test updating multiple attribute values of 'name'
     (15.4.5.1 step 4.c)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var arrObj = [];
-
-        function setFunc(value) {
-            arrObj.setVerifyHelpProp = value;
-        }
-        function getFunc() {
-            return 12;
-        }
-        Object.defineProperty(arrObj, "1", {
-            get: function () {
-                return 6;
-            },
-            set: setFunc,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.defineProperty(arrObj, "1", {
-            get: getFunc,
-            enumerable: false,
-            configurable: false
-        });
-        return accessorPropertyAttributesAreCorrect(arrObj, "1", getFunc, setFunc, "setVerifyHelpProp", false, false);
-    }
-runTestCase(testcase);
+
+var arrObj = [];
+
+function setFunc(value) {
+    arrObj.setVerifyHelpProp = value;
+}
+function getFunc() {
+    return 12;
+}
+Object.defineProperty(arrObj, "1", {
+    get: function () {
+        return 6;
+    },
+    set: setFunc,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperty(arrObj, "1", {
+    get: getFunc,
+    enumerable: false,
+    configurable: false
+});
+verifyEqualTo(arrObj, "1", getFunc());
+
+verifyWritable(arrObj, "1", "setVerifyHelpProp");
+
+verifyNotEnumerable(arrObj, "1");
+
+verifyNotConfigurable(arrObj, "1");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-277.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-277.js
index cde4ef3798..f017d274d1 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-277.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-277.js
@@ -11,22 +11,24 @@ description: >
     property that won't exist on 'O', and 'desc' is data descriptor,
     test 'name' is defined in 'O' with all correct attribute values
     (15.4.5.1 step 5)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [];
+var arrObj = [];
 
-        Object.defineProperty(arrObj, "property", {
-            value: 12,
-            writable: true,
-            enumerable: true,
-            configurable: true
-        });
+Object.defineProperty(arrObj, "property", {
+    value: 12,
+    writable: true,
+    enumerable: true,
+    configurable: true
+});
+
+verifyEqualTo(arrObj, "property", 12);
+
+verifyWritable(arrObj, "property");
+
+verifyEnumerable(arrObj, "property");
+
+verifyConfigurable(arrObj, "property");
 
-        return dataPropertyAttributesAreCorrect(arrObj, "property", 12, true, true, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-278.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-278.js
index 832fbcb053..462bbbec40 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-278.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-278.js
@@ -10,29 +10,30 @@ description: >
     Object.defineProperty - 'name' is generic property that won't
     exist on 'O', and 'desc' is accessor descriptor, test 'name' is
     defined in 'O' with all correct attribute values (15.4.5.1 step 5)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [];
+var arrObj = [];
 
-        function getFunc() {
-            return 12;
-        }
-        function setFunc(value) {
-            arrObj.setVerifyHelpProp = value;
-        }
+function getFunc() {
+    return 12;
+}
+function setFunc(value) {
+    arrObj.setVerifyHelpProp = value;
+}
 
-        Object.defineProperty(arrObj, "property", {
-            get: getFunc,
-            set: setFunc,
-            enumerable: true,
-            configurable: true
-        });
+Object.defineProperty(arrObj, "property", {
+    get: getFunc,
+    set: setFunc,
+    enumerable: true,
+    configurable: true
+});
 
-        return accessorPropertyAttributesAreCorrect(arrObj, "property", getFunc, setFunc, "setVerifyHelpProp", true, true);
-    }
-runTestCase(testcase);
+verifyEqualTo(arrObj, "property", getFunc());
+
+verifyWritable(arrObj, "property", "setVerifyHelpProp");
+
+verifyEnumerable(arrObj, "property");
+
+verifyConfigurable(arrObj, "property");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-279.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-279.js
index dc0f32a82c..734a243445 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-279.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-279.js
@@ -10,35 +10,36 @@ description: >
     Object.defineProperty - 'O' is an Array, 'name' is generic own
     accessor property of 'O', and 'desc' is accessor descriptor, test
     updating multiple attribute values of 'name' (15.4.5.1 step 5)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var arrObj = [];
-
-        function getFunc() {
-            return 12;
-        }
-        function setFunc(value) {
-            arrObj.setVerifyHelpProp = value;
-        }
-        Object.defineProperty(arrObj, "property", {
-            get: function () {
-                return 24;
-            },
-            enumerable: true,
-            configurable: true
-        });
-        Object.defineProperty(arrObj, "property", {
-            get: getFunc,
-            set: setFunc,
-            enumerable: false,
-            configurable: false
-        });
-
-        return accessorPropertyAttributesAreCorrect(arrObj, "property", getFunc, setFunc, "setVerifyHelpProp", false, false);
-    }
-runTestCase(testcase);
+
+var arrObj = [];
+
+function getFunc() {
+    return 12;
+}
+function setFunc(value) {
+    arrObj.setVerifyHelpProp = value;
+}
+Object.defineProperty(arrObj, "property", {
+    get: function () {
+        return 24;
+    },
+    enumerable: true,
+    configurable: true
+});
+Object.defineProperty(arrObj, "property", {
+    get: getFunc,
+    set: setFunc,
+    enumerable: false,
+    configurable: false
+});
+
+verifyEqualTo(arrObj, "property", getFunc());
+
+verifyWritable(arrObj, "property", "setVerifyHelpProp");
+
+verifyNotEnumerable(arrObj, "property");
+
+verifyNotConfigurable(arrObj, "property");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-280.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-280.js
index b27fcf84a3..da869b279a 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-280.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-280.js
@@ -10,23 +10,25 @@ description: >
     Object.defineProperty - 'O' is an Array, 'name' is generic own
     data property of 'O', and 'desc' is data descriptor, test updating
     multiple attribute values of 'name' (15.4.5.1 step 5)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [];
+var arrObj = [];
 
-        arrObj.property = 12; // default value of attributes: writable: true, configurable: true, enumerable: true
+arrObj.property = 12; // default value of attributes: writable: true, configurable: true, enumerable: true
 
-        Object.defineProperty(arrObj, "property", {
-            writable: false,
-            enumerable: false,
-            configurable: false
-        });
+Object.defineProperty(arrObj, "property", {
+    writable: false,
+    enumerable: false,
+    configurable: false
+});
+
+verifyEqualTo(arrObj, "property", 12);
+
+verifyNotWritable(arrObj, "property");
+
+verifyNotEnumerable(arrObj, "property");
+
+verifyNotConfigurable(arrObj, "property");
 
-        return dataPropertyAttributesAreCorrect(arrObj, "property", 12, false, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-281.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-281.js
index 665ee2b403..f4309fe251 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-281.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-281.js
@@ -11,25 +11,31 @@ description: >
     data property of 'O', test TypeError is thrown when updating the
     [[Value]] attribute value of 'name' which is defined as
     non-writable and non-configurable (15.4.5.1 step 5)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var arrObj = [];
-
-        Object.defineProperty(arrObj, "property", {
-            value: 12
-        });
-        try {
-            Object.defineProperty(arrObj, "property", {
-                value: 36
-            });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(arrObj, "property", 12, false, false, false);
-        }
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "property", {
+    value: 12
+});
+try {
+    Object.defineProperty(arrObj, "property", {
+        value: 36
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arrObj, "property", 12);
+
+    verifyNotWritable(arrObj, "property");
+
+    verifyNotEnumerable(arrObj, "property");
+
+    verifyNotConfigurable(arrObj, "property");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-282.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-282.js
index 1e965821a6..807545446e 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-282.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-282.js
@@ -11,25 +11,31 @@ description: >
     data property of 'O', test TypeError is thrown when updating the
     [[Writable]] attribute value of 'name' which is defined as
     non-configurable (15.4.5.1 step 5)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var arrObj = [];
-
-        Object.defineProperty(arrObj, "property", {
-            writable: false
-        });
-        try {
-            Object.defineProperty(arrObj, "property", {
-                writable: true
-            });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(arrObj, "property", undefined, false, false, false);
-        }
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "property", {
+    writable: false
+});
+try {
+    Object.defineProperty(arrObj, "property", {
+        writable: true
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arrObj, "property", undefined);
+
+    verifyNotWritable(arrObj, "property");
+
+    verifyNotEnumerable(arrObj, "property");
+
+    verifyNotConfigurable(arrObj, "property");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-283.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-283.js
index bc6ae00696..c918fd7365 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-283.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-283.js
@@ -11,25 +11,31 @@ description: >
     data property of 'O', test TypeError is thrown when updating the
     [[Enumerable]] attribute value of 'name' which is defined as
     non-configurable (15.4.5.1 step 5)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var arrObj = [];
-
-        Object.defineProperty(arrObj, "property", {
-            value: 12,
-            enumerable: false
-        });
-        try {
-            Object.defineProperty(arrObj, "property", {
-                enumerable: true
-            });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(arrObj, "property", 12, false, false, false);
-        }
+var arrObj = [];
+
+Object.defineProperty(arrObj, "property", {
+    value: 12,
+    enumerable: false
+});
+try {
+    Object.defineProperty(arrObj, "property", {
+        enumerable: true
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arrObj, "property", 12);
+
+    verifyNotWritable(arrObj, "property");
+
+    verifyNotEnumerable(arrObj, "property");
+
+    verifyNotConfigurable(arrObj, "property");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-284.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-284.js
index a59e053610..0492a581e3 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-284.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-284.js
@@ -11,25 +11,31 @@ description: >
     data property of 'O', test TypeError is thrown when updating the
     [[Configurable]] attribute value of 'name' which is defined as
     non-configurable (15.4.5.1 step 5)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var arrObj = [];
-
-        Object.defineProperty(arrObj, "property", {
-            value: 12
-        });
-        try {
-            Object.defineProperty(arrObj, "property", {
-                configurable: true
-            });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(arrObj, "property", 12, false, false, false);
-        }
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "property", {
+    value: 12
+});
+try {
+    Object.defineProperty(arrObj, "property", {
+        configurable: true
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arrObj, "property", 12);
+
+    verifyNotWritable(arrObj, "property");
+
+    verifyNotEnumerable(arrObj, "property");
+
+    verifyNotConfigurable(arrObj, "property");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-285.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-285.js
index 35bb914e35..88de722520 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-285.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-285.js
@@ -11,34 +11,40 @@ description: >
     accessor property of 'O', test TypeError is thrown when updating
     the [[Get]] attribute value of 'name' which is defined as
     non-configurable (15.4.5.1 step 5)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var arrObj = [];
+var arrObj = [];
 
-        function getFunc() {
-            return 12;
-        }
-        function setFunc(value) {
-            arrObj.setVerifyHelpProp = value;
-        }
-        Object.defineProperty(arrObj, "property", {
-            get: getFunc,
-            set: setFunc
-        });
-        try {
-            Object.defineProperty(arrObj, "property", {
-                get: function () {
-                    return 36;
-                }
-            });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && accessorPropertyAttributesAreCorrect(arrObj, "property", getFunc, setFunc, "setVerifyHelpProp", false, false);
+function getFunc() {
+    return 12;
+}
+function setFunc(value) {
+    arrObj.setVerifyHelpProp = value;
+}
+Object.defineProperty(arrObj, "property", {
+    get: getFunc,
+    set: setFunc
+});
+try {
+    Object.defineProperty(arrObj, "property", {
+        get: function () {
+            return 36;
         }
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(arrObj, "property", getFunc());
+
+    verifyWritable(arrObj, "property", "setVerifyHelpProp");
+
+    verifyNotEnumerable(arrObj, "property");
+
+    verifyNotConfigurable(arrObj, "property");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-286.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-286.js
index 05930b970e..5c0884c066 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-286.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-286.js
@@ -11,28 +11,32 @@ description: >
     accessor property of 'O', and 'desc' is accessor descriptor, test
     TypeError is thrown when updating the [[Set]] attribute value of
     'name' (15.4.5.1 step 5)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var arrObj = [];
-
-        function setFunc(value) {
-            arrObj.setVerifyHelpProp = value;
-        }
-        Object.defineProperty(arrObj, "property", {
-            set: setFunc
-        });
-        try {
-            Object.defineProperty(arrObj, "property", {
-                set: function () {}
-            });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && accessorPropertyAttributesAreCorrect(arrObj, "property", undefined, setFunc, "setVerifyHelpProp", false, false);
-        }
+
+var arrObj = [];
+
+function setFunc(value) {
+    arrObj.setVerifyHelpProp = value;
+}
+Object.defineProperty(arrObj, "property", {
+    set: setFunc
+});
+try {
+    Object.defineProperty(arrObj, "property", {
+        set: function () {}
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyWritable(arrObj, "property", "setVerifyHelpProp");
+
+    verifyNotEnumerable(arrObj, "property");
+
+    verifyNotConfigurable(arrObj, "property");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-287.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-287.js
index a2e2cb8a76..474e8d5c7f 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-287.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-287.js
@@ -11,29 +11,33 @@ description: >
     accessor property of 'O', test TypeError is thrown when updating
     the [[Enumerable]] attribute value of 'name' which is defined as
     non-configurable (15.4.5.1 step 5)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var arrObj = [];
-
-        function setFunc(value) {
-            arrObj.setVerifyHelpProp = value;
-        }
-        Object.defineProperty(arrObj, "property", {
-            set: setFunc,
-            enumerable: false
-        });
-        try {
-            Object.defineProperty(arrObj, "property", {
-                enumerable: true
-            });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && accessorPropertyAttributesAreCorrect(arrObj, "property", undefined, setFunc, "setVerifyHelpProp", false, false);
-        }
+
+var arrObj = [];
+
+function setFunc(value) {
+    arrObj.setVerifyHelpProp = value;
+}
+Object.defineProperty(arrObj, "property", {
+    set: setFunc,
+    enumerable: false
+});
+try {
+    Object.defineProperty(arrObj, "property", {
+        enumerable: true
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyWritable(arrObj, "property", "setVerifyHelpProp");
+
+    verifyNotEnumerable(arrObj, "property");
+
+    verifyNotConfigurable(arrObj, "property");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-288.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-288.js
index 77a5fc240f..41212c239f 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-288.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-288.js
@@ -11,29 +11,33 @@ description: >
     accessor property of 'O', test TypeError is thrown when updating
     the [[Configurable]] attribute value of 'name' which is defined as
     non-configurable (15.4.5.1 step 5)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var arrObj = [];
-
-        function setFunc(value) {
-            arrObj.setVerifyHelpProp = value;
-        }
-        Object.defineProperty(arrObj, "property", {
-            set: setFunc,
-            configurable: false
-        });
-        try {
-            Object.defineProperty(arrObj, "property", {
-                configurable: true
-            });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && accessorPropertyAttributesAreCorrect(arrObj, "property", undefined, setFunc, "setVerifyHelpProp", false, false);
-        }
+
+var arrObj = [];
+
+function setFunc(value) {
+    arrObj.setVerifyHelpProp = value;
+}
+Object.defineProperty(arrObj, "property", {
+    set: setFunc,
+    configurable: false
+});
+try {
+    Object.defineProperty(arrObj, "property", {
+        configurable: true
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyWritable(arrObj, "property", "setVerifyHelpProp");
+
+    verifyNotEnumerable(arrObj, "property");
+
+    verifyNotConfigurable(arrObj, "property");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-289-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-289-1.js
index 07b2729e38..15cae2a8b8 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-289-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-289-1.js
@@ -7,28 +7,34 @@
 /*---
 es5id: 15.2.3.6-4-289-1
 description: >
-    Object.defineProperty - 'O' is an Arguments object of a function
-    that has formal parameters, 'name' is own property which is
-    defined in both [[ParameterMap]] of 'O' and 'O', and is deleted
-    afterwards, and 'desc' is data descriptor, test 'name' is
-    redefined in 'O' with all correct attribute values (10.6
-    [[DefineOwnProperty]] step 3)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
----*/
+ Object.defineProperty - 'O' is an Arguments object of a function
+ that has formal parameters, 'name' is own property which is
+ defined in both [[ParameterMap]] of 'O' and 'O', and is deleted
+ afterwards, and 'desc' is data descriptor, test 'name' is
+ redefined in 'O' with all correct attribute values (10.6
+ [[DefineOwnProperty]] step 3)
+includes: [propertyHelper.js]
+ ---*/
 
-function testcase() {
-        return (function (a, b, c) {
-            delete arguments[0];
-            Object.defineProperty(arguments, "0", {
-                value: 10,
-                writable: true,
-                enumerable: true,
-                configurable: true
-            });
-            var verifyFormal = a === 0;
-            return dataPropertyAttributesAreCorrect(arguments, "0", 10, true, true, true) && verifyFormal;
-        }(0, 1, 2));
+;(function (a, b, c) {
+    delete arguments[0];
+
+    Object.defineProperty(arguments, "0", {
+        value: 10,
+        writable: true,
+        enumerable: true,
+        configurable: true
+    });
+
+    if (a !== 0) {
+        $ERROR("Expected a === 0, actually " + a);
     }
-runTestCase(testcase);
+    
+    verifyEqualTo(arguments, "0", 10);
+
+    verifyWritable(arguments, "0");
+
+    verifyEnumerable(arguments, "0");
+
+    verifyConfigurable(arguments, "0");
+}(0, 1, 2));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-289.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-289.js
index 997f3ef565..f66c10d37c 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-289.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-289.js
@@ -11,21 +11,23 @@ description: >
     property of 'O', and is deleted afterwards, and 'desc' is data
     descriptor, test 'name' is redefined in 'O' with all correct
     attribute values (10.6 [[DefineOwnProperty]] step 3)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () { 
-            delete arguments[0];
-            Object.defineProperty(arguments, "0", {
-                value: 10,
-                writable: true,
-                enumerable: true,
-                configurable: true
-            });
-            return dataPropertyAttributesAreCorrect(arguments, "0", 10, true, true, true);
-        }(0, 1, 2));
-    }
-runTestCase(testcase);
+(function () { 
+    delete arguments[0];
+    Object.defineProperty(arguments, "0", {
+        value: 10,
+        writable: true,
+        enumerable: true,
+        configurable: true
+    });
+    verifyEqualTo(arguments, "0", 10);
+
+    verifyWritable(arguments, "0");
+
+    verifyEnumerable(arguments, "0");
+
+    verifyConfigurable(arguments, "0");
+}(0, 1, 2));
+
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-290-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-290-1.js
index e76e4ae239..515c5e9856 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-290-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-290-1.js
@@ -13,28 +13,32 @@ description: >
     afterwards, and 'desc' is accessor descriptor, test 'name' is
     redefined in 'O' with all correct attribute values (10.6
     [[DefineOwnProperty]] step 3)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) { 
-            delete arguments[0];
-            function getFunc() {
-                return 10;
-            }
-            function setFunc(value) {
-                this.setVerifyHelpProp = value;
-            }
-            Object.defineProperty(arguments, "0", {
-                get: getFunc,
-                set: setFunc,
-                enumerable: true,
-                configurable: true
-            });
-            var verifyFormal = a === 0;
-            return accessorPropertyAttributesAreCorrect(arguments, "0", getFunc, setFunc, "setVerifyHelpProp", true, true) && verifyFormal;
-        }(0, 1, 2));
+(function (a, b, c) { 
+    delete arguments[0];
+    function getFunc() {
+        return 10;
     }
-runTestCase(testcase);
+    function setFunc(value) {
+        this.setVerifyHelpProp = value;
+    }
+    Object.defineProperty(arguments, "0", {
+        get: getFunc,
+        set: setFunc,
+        enumerable: true,
+        configurable: true
+    });
+    if (a !== 0) {
+        $ERROR('Expected a === 0, actually ' + a);
+    }
+
+    verifyEqualTo(arguments, "0", getFunc());
+
+    verifyWritable(arguments, "0", "setVerifyHelpProp");
+
+    verifyEnumerable(arguments, "0");
+
+    verifyConfigurable(arguments, "0");
+}(0, 1, 2));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-290.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-290.js
index 0736bdf066..87fe260e04 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-290.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-290.js
@@ -11,27 +11,28 @@ description: >
     property of 'O', and is deleted afterwards, and 'desc' is accessor
     descriptor, test 'name' is redefined in 'O' with all correct
     attribute values (10.6 [[DefineOwnProperty]] step 3)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () { 
-            delete arguments[0];
-            function getFunc() {
-                return 10;
-            }
-            function setFunc(value) {
-                this.setVerifyHelpProp = value;
-            }
-            Object.defineProperty(arguments, "0", {
-                get: getFunc,
-                set: setFunc,
-                enumerable: true,
-                configurable: true
-            });
-            return accessorPropertyAttributesAreCorrect(arguments, "0", getFunc, setFunc, "setVerifyHelpProp", true, true);
-        }(0, 1, 2));    
+(function () { 
+    delete arguments[0];
+    function getFunc() {
+        return 10;
     }
-runTestCase(testcase);
+    function setFunc(value) {
+        this.setVerifyHelpProp = value;
+    }
+    Object.defineProperty(arguments, "0", {
+        get: getFunc,
+        set: setFunc,
+        enumerable: true,
+        configurable: true
+    });
+    verifyEqualTo(arguments, "0", getFunc());
+
+    verifyWritable(arguments, "0", "setVerifyHelpProp");
+
+    verifyEnumerable(arguments, "0");
+
+    verifyConfigurable(arguments, "0");
+}(0, 1, 2));    
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-291-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-291-1.js
index cc4ca10128..17e1248af3 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-291-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-291-1.js
@@ -12,31 +12,33 @@ description: >
     which is also defined in [[ParameterMap]] of 'O', and 'desc' is
     accessor descriptor, test updating multiple attribute values of
     'name' (10.6 [[DefineOwnProperty]] step 3 and 5.a.i)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) { 
-            function getFunc1() {
-                return 10;
-            }
-            Object.defineProperty(arguments, "0", {
-                get: getFunc1,
-                enumerable: true,
-                configurable: true
-            });
-            function getFunc2() {
-                return 20;
-            }
-            Object.defineProperty(arguments, "0", {
-                get: getFunc2,
-                enumerable: false,
-                configurable: false
-            });
-            var verifyFormal = a === 0;
-            return accessorPropertyAttributesAreCorrect(arguments, "0", getFunc2, undefined, undefined, false, false) && verifyFormal;
-        }(0, 1, 2));
+(function (a, b, c) { 
+    function getFunc1() {
+        return 10;
     }
-runTestCase(testcase);
+    Object.defineProperty(arguments, "0", {
+        get: getFunc1,
+        enumerable: true,
+        configurable: true
+    });
+    function getFunc2() {
+        return 20;
+    }
+    Object.defineProperty(arguments, "0", {
+        get: getFunc2,
+        enumerable: false,
+        configurable: false
+    });
+    if (a !== 0) {
+        $ERROR('Expected a === 0, actually ' + a);
+    }
+
+    verifyEqualTo(arguments, "0", getFunc2());
+
+    verifyNotEnumerable(arguments, "0");
+
+    verifyNotConfigurable(arguments, "0");
+}(0, 1, 2));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-291.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-291.js
index d156266093..be6a157310 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-291.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-291.js
@@ -11,30 +11,29 @@ description: >
     accessor property of 'O', and 'desc' is accessor descriptor, test
     updating multiple attribute values of 'name' (10.6
     [[DefineOwnProperty]] step 3)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            function getFunc1() {
-                return 10;
-            }
-            Object.defineProperty(arguments, "0", {
-                get: getFunc1,
-                enumerable: true,
-                configurable: true
-            });
-            function getFunc2() {
-                return 20;
-            }
-            Object.defineProperty(arguments, "0", {
-                get: getFunc2,
-                enumerable: false,
-                configurable: false
-            });
-            return accessorPropertyAttributesAreCorrect(arguments, "0", getFunc2, undefined, undefined, false, false);
-        }(0, 1, 2));
+(function () {
+    function getFunc1() {
+        return 10;
     }
-runTestCase(testcase);
+    Object.defineProperty(arguments, "0", {
+        get: getFunc1,
+        enumerable: true,
+        configurable: true
+    });
+    function getFunc2() {
+        return 20;
+    }
+    Object.defineProperty(arguments, "0", {
+        get: getFunc2,
+        enumerable: false,
+        configurable: false
+    });
+    verifyEqualTo(arguments, "0", getFunc2());
+
+    verifyNotEnumerable(arguments, "0");
+
+    verifyNotConfigurable(arguments, "0");
+}(0, 1, 2));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-292-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-292-1.js
index 392578ffd3..81810554bd 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-292-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-292-1.js
@@ -12,21 +12,27 @@ description: >
     also defined in [[ParameterMap]] of 'O', and 'desc' is data
     descriptor, test updating multiple attribute values of 'name'
     (10.6 [[DefineOwnProperty]] step 3 and 5.b)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
+flags: [noStrict]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) { 
-            Object.defineProperty(arguments, "0", {
-                value: 20,
-                writable: false,
-                enumerable: false,
-                configurable: false
-            });
-            var verifyFormal = a === 20;
-            return dataPropertyAttributesAreCorrect(arguments, "0", 20, false, false, false) && verifyFormal;
-        }(0, 1, 2));
+(function (a, b, c) {
+    Object.defineProperty(arguments, "0", {
+        value: 20,
+        writable: false,
+        enumerable: false,
+        configurable: false
+    });
+
+    if (a !== 20) {
+        $ERROR('Expected a === 20, actually ' + a);
     }
-runTestCase(testcase);
+
+    verifyEqualTo(arguments, "0", 20);
+
+    verifyNotWritable(arguments, "0");
+
+    verifyNotEnumerable(arguments, "0");
+
+    verifyNotConfigurable(arguments, "0");
+}(0, 1, 2));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-292-2.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-292-2.js
new file mode 100644
index 0000000000..312f82a29f
--- /dev/null
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-292-2.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International.  All rights reserved.
+// Ecma International makes this code available under the terms and conditions set
+// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+// "Use Terms").   Any redistribution of this code must retain the above
+// copyright and this notice and otherwise comply with the Use Terms.
+
+/*---
+es5id: 15.2.3.6-4-292-1
+description: >
+    Object.defineProperty - 'O' is an Arguments object of a function
+    that has formal parameters, 'name' is own property of 'O' which is
+    also defined in [[ParameterMap]] of 'O', and 'desc' is data
+    descriptor, test updating multiple attribute values of 'name'
+    (10.6 [[DefineOwnProperty]] step 3 and 5.b)
+includes: [propertyHelper.js]
+flags: [onlyStrict]
+---*/
+
+(function (a, b, c) {
+    "use strict";
+
+    Object.defineProperty(arguments, "0", {
+        value: 20,
+        writable: false,
+        enumerable: false,
+        configurable: false
+    });
+
+    if (a !== 0) {
+        $ERROR('Expected a === 0, actually ' + a);
+    }
+
+    verifyEqualTo(arguments, "0", 20);
+
+    verifyNotWritable(arguments, "0");
+
+    verifyNotEnumerable(arguments, "0");
+
+    verifyNotConfigurable(arguments, "0");
+}(0, 1, 2));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-292.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-292.js
index 64d9d5de94..6aad654c36 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-292.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-292.js
@@ -11,20 +11,22 @@ description: >
     data property of 'O', and 'desc' is data descriptor, test updating
     multiple attribute values of 'name' (10.6 [[DefineOwnProperty]]
     step 3)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            Object.defineProperty(arguments, "0", {
-                value: 20,
-                writable: false,
-                enumerable: false,
-                configurable: false
-            });
-            return dataPropertyAttributesAreCorrect(arguments, "0", 20, false, false, false);
-        }(0, 1, 2));
-    }
-runTestCase(testcase);
+(function () {
+    Object.defineProperty(arguments, "0", {
+        value: 20,
+        writable: false,
+        enumerable: false,
+        configurable: false
+    });
+    verifyEqualTo(arguments, "0", 20);
+
+    verifyNotWritable(arguments, "0");
+
+    verifyNotEnumerable(arguments, "0");
+
+    verifyNotConfigurable(arguments, "0");
+}(0, 1, 2));
+
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-293-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-293-1.js
index d7d07da1d4..f8fb8cc926 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-293-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-293-1.js
@@ -12,21 +12,23 @@ description: >
     the [[Value]] attribute value of 'name' which is defined as
     non-writable and configurable (10.6 [[DefineOwnProperty]] step 3
     and 5b)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            Object.defineProperty(arguments, "0", {
-                value: 10,
-                writable: false
-            });
-            Object.defineProperty(arguments, "0", {
-                value: 20
-            });
-            return dataPropertyAttributesAreCorrect(arguments, "0", 20, false, true, true);
-        }(0, 1, 2));
-    }
-runTestCase(testcase);
+(function () {
+    Object.defineProperty(arguments, "0", {
+        value: 10,
+        writable: false
+    });
+    Object.defineProperty(arguments, "0", {
+        value: 20
+    });
+    verifyEqualTo(arguments, "0", 20);
+
+    verifyNotWritable(arguments, "0");
+
+    verifyEnumerable(arguments, "0");
+
+    verifyConfigurable(arguments, "0");
+}(0, 1, 2));
+
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-293-2.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-293-2.js
index d4659057b3..5cfdd482b0 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-293-2.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-293-2.js
@@ -13,28 +13,40 @@ description: >
     is thrown when updating the [[Value]] attribute value of 'name'
     which is defined as unwritable and non-configurable (10.6
     [[DefineOwnProperty]] step 4 and step 5b)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
+flags: [noStrict]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) {
-            Object.defineProperty(arguments, "0", {
-                value: 10,
-                writable: false,
-                enumerable: false,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "0", {
-                    value: 20
-                });
-            } catch (e) {
-                var verifyFormal = a === 10;
-                return e instanceof TypeError && dataPropertyAttributesAreCorrect(arguments, "0", 10, false, false, false) && verifyFormal;
-            }
-            return false;
-        }(0, 1, 2));
+(function (a, b, c) {
+    Object.defineProperty(arguments, "0", {
+        value: 10,
+        writable: false,
+        enumerable: false,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "0", {
+            value: 20
+        });
+        $ERROR("Expected an exception.");
+	
+    } catch (e) {
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
+        verifyEqualTo(arguments, "0", 10);
+
+        verifyNotWritable(arguments, "0");
+
+        verifyNotEnumerable(arguments, "0");
+
+        verifyNotConfigurable(arguments, "0");
+
+        if (a !== 10) {
+            $ERROR('Expected "a === 10", actually ' + a);
+        }
+
     }
-runTestCase(testcase);
+}(0, 1, 2));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-293-3.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-293-3.js
index 91068d57c9..1f51f9870b 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-293-3.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-293-3.js
@@ -13,22 +13,27 @@ description: >
     is not thrown when updating the [[Value]] attribute value of
     'name' which is defined as non-writable and configurable (10.6
     [[DefineOwnProperty]] step 3 and step 5.b)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
+flags: [noStrict]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) {
-        Object.defineProperty(arguments, "0", {
-            value: 10,
-            writable: false,
-        });
-        Object.defineProperty(arguments, "0", {
-            value: 20
-        });
-        var verifyFormal = a === 10;        
-        return dataPropertyAttributesAreCorrect(arguments, "0", 20, false, true, true) && verifyFormal;
-        }(0, 1, 2));
+(function (a, b, c) {
+    Object.defineProperty(arguments, "0", {
+        value: 10,
+        writable: false,
+    });
+    Object.defineProperty(arguments, "0", {
+        value: 20
+    });
+    if (a !== 10) {
+        $ERROR('Expected "a === 10", actually ' + a);
     }
-runTestCase(testcase);
+
+    verifyEqualTo(arguments, "0", 20);
+
+    verifyNotWritable(arguments, "0");
+
+    verifyEnumerable(arguments, "0");
+
+    verifyConfigurable(arguments, "0");
+}(0, 1, 2));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-293-4.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-293-4.js
new file mode 100644
index 0000000000..5296f3f3f9
--- /dev/null
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-293-4.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International.  All rights reserved.
+// Ecma International makes this code available under the terms and conditions set
+// forth on http://hg.ecmascript.org/tests/test262/raw-file/tip/LICENSE (the
+// "Use Terms").   Any redistribution of this code must retain the above
+// copyright and this notice and otherwise comply with the Use Terms.
+
+/*---
+es5id: 15.2.3.6-4-293-4
+description: >
+    Object.defineProperty - 'O' is an Arguments object of a function
+    that has formal parameters, 'name' is own data property of 'O'
+    which is also defined in [[ParameterMap]] of 'O', test TypeError
+    is not thrown when updating the [[Value]] attribute value of
+    'name' which is defined as non-writable and configurable (10.6
+    [[DefineOwnProperty]] step 3 and step 5.b)
+includes: [propertyHelper.js]
+flags: [onlyStrict]
+---*/
+
+(function (a, b, c) {
+    Object.defineProperty(arguments, "0", {
+        value: 10,
+        writable: false,
+    });
+    Object.defineProperty(arguments, "0", {
+        value: 20
+    });
+    if (a !== 0) {
+        $ERROR('Expected "a === 0", actually ' + a);
+    }
+
+    verifyEqualTo(arguments, "0", 20);
+
+    verifyNotWritable(arguments, "0");
+
+    verifyEnumerable(arguments, "0");
+
+    verifyConfigurable(arguments, "0");
+}(0, 1, 2));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-293.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-293.js
index a24456bad3..767d965315 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-293.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-293.js
@@ -12,27 +12,33 @@ description: >
     [[Value]] attribute value of 'name' which is defined as
     non-writable and non-configurable (10.6 [[DefineOwnProperty]] step
     3)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            Object.defineProperty(arguments, "0", {
-                value: 10,
-                writable: false,
-                enumerable: false,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "0", {
-                    value: 20
-                });
-            } catch (e) {
-                return e instanceof TypeError && dataPropertyAttributesAreCorrect(arguments, "0", 10, false, false, false);
-            }
-            return false;
-        }(0, 1, 2));
+(function () {
+    Object.defineProperty(arguments, "0", {
+        value: 10,
+        writable: false,
+        enumerable: false,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "0", {
+            value: 20
+        });
+        $ERROR("Expected an exception.");	
+    } catch (e) {
+        verifyEqualTo(arguments, "0", 10);
+
+        verifyNotWritable(arguments, "0");
+
+        verifyNotEnumerable(arguments, "0");
+
+        verifyNotConfigurable(arguments, "0");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
     }
-runTestCase(testcase);
+}(0, 1, 2));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-294-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-294-1.js
index 100ec52e12..4bc30b1f70 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-294-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-294-1.js
@@ -13,28 +13,41 @@ description: >
     is thrown when updating the [[Writable]] attribute value of 'name'
     which is defined as non-configurable (10.6 [[DefineOwnProperty]]
     step 4 and 5b)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
+flags: [noStrict]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) {
-            Object.defineProperty(arguments, "0", {
-                value: 10,
-                writable: false,
-                enumerable: false,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "0", {
-                    writable: true
-                });
-            } catch (e) {
-                var verifyFormal = a === 10;
-                return e instanceof TypeError && dataPropertyAttributesAreCorrect(arguments, "0", 10, false, false, false) && verifyFormal;
-            }
-            return false;
-        }(0, 1, 2));
+(function (a, b, c) {
+    Object.defineProperty(arguments, "0", {
+        value: 10,
+        writable: false,
+        enumerable: false,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "0", {
+            writable: true
+        });
+        $ERROR("Expected an exception.");	
+    } catch (e) {
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
+        verifyEqualTo(arguments, "0", 10);
+
+        verifyNotWritable(arguments, "0");
+
+        verifyNotEnumerable(arguments, "0");
+
+        verifyNotConfigurable(arguments, "0");
+
+        if (a !== 10) {
+            $ERROR('Expected "a === 10", actually ' + a);
+        }
+
     }
-runTestCase(testcase);
+
+}(0, 1, 2));
+
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-294.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-294.js
index 5b82a901a5..44566f5ce4 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-294.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-294.js
@@ -11,27 +11,33 @@ description: >
     data property of 'O', test TypeError is thrown when updating the
     [[Writable]] attribute value of 'name' which is defined as
     non-configurable (10.6 [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            Object.defineProperty(arguments, "0", {
-                value: 10,
-                writable: false,
-                enumerable: false,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "0", {
-                    writable: true
-                });
-            } catch (e) {
-                return e instanceof TypeError && dataPropertyAttributesAreCorrect(arguments, "0", 10, false, false, false);
-            }
-            return false;
-        }(0, 1, 2));
+(function () {
+    Object.defineProperty(arguments, "0", {
+        value: 10,
+        writable: false,
+        enumerable: false,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "0", {
+            writable: true
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyEqualTo(arguments, "0", 10);
+
+        verifyNotWritable(arguments, "0");
+
+        verifyNotEnumerable(arguments, "0");
+
+        verifyNotConfigurable(arguments, "0");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
     }
-runTestCase(testcase);
+}(0, 1, 2));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-295-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-295-1.js
index c485e86c6d..d8c53d4263 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-295-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-295-1.js
@@ -13,28 +13,38 @@ description: >
     is thrown when updating the [[Enumerable]] attribute value of
     'name' which is defined as non-configurable (10.6
     [[DefineOwnProperty]] step 4 and step 5b)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
+flags: [noStrict]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) {
-            Object.defineProperty(arguments, "0", {
-                value: 10,
-                writable: false,
-                enumerable: true,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "0", {
-                    enumerable: false
-                });
-            } catch (e) {
-                var verifyFormal = a === 10;
-                return e instanceof TypeError && dataPropertyAttributesAreCorrect(arguments, "0", 10, false, true, false) && verifyFormal;
-            }
-            return false;
-        }(0, 1, 2));
+
+(function (a, b, c) {
+    Object.defineProperty(arguments, "0", {
+        value: 10,
+        writable: false,
+        enumerable: true,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "0", {
+            enumerable: false
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
+        verifyEqualTo(arguments, "0", 10);
+
+        verifyNotWritable(arguments, "0");
+
+        verifyEnumerable(arguments, "0");
+
+        verifyNotConfigurable(arguments, "0");
+
+        if (a !== 10) {
+            $ERROR('Expected "a === 10", actually ' + a);
+        }
     }
-runTestCase(testcase);
+}(0, 1, 2));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-295.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-295.js
index 4965a2aa72..a15919c64d 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-295.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-295.js
@@ -11,27 +11,33 @@ description: >
     data property of 'O', test TypeError is thrown when updating the
     [[Enumerable]] attribute value of 'name' which is defined as
     non-configurable (10.6 [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            Object.defineProperty(arguments, "0", {
-                value: 10,
-                writable: false,
-                enumerable: true,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "0", {
-                    enumerable: false
-                });
-            } catch (e) {
-                return e instanceof TypeError && dataPropertyAttributesAreCorrect(arguments, "0", 10, false, true, false);
-            }
-            return false;
-        }(0, 1, 2));
+(function () {
+    Object.defineProperty(arguments, "0", {
+        value: 10,
+        writable: false,
+        enumerable: true,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "0", {
+            enumerable: false
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyEqualTo(arguments, "0", 10);
+
+        verifyNotWritable(arguments, "0");
+
+        verifyEnumerable(arguments, "0");
+
+        verifyNotConfigurable(arguments, "0");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
     }
-runTestCase(testcase);
+}(0, 1, 2));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-296-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-296-1.js
index 570a234da4..ff03da1019 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-296-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-296-1.js
@@ -13,28 +13,37 @@ description: >
     is thrown when updating the [[Configurable]] attribute value of
     'name' which is defined as non-configurable (10.6
     [[DefineOwnProperty]] step 4 and step 5b)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
+flags: [noStrict]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) {
-            Object.defineProperty(arguments, "0", {
-                value: 10,
-                writable: false,
-                enumerable: false,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "0", {
-                    configurable: true
-                });
-            } catch (e) {
-                var verifyFormal = a === 10;
-                return e instanceof TypeError && dataPropertyAttributesAreCorrect(arguments, "0", 10, false, false, false) && verifyFormal;
-            }
-            return false;
-        }(0, 1, 2));
+(function (a, b, c) {
+    Object.defineProperty(arguments, "0", {
+        value: 10,
+        writable: false,
+        enumerable: false,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "0", {
+            configurable: true
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
+        verifyEqualTo(arguments, "0", 10);
+
+        verifyNotWritable(arguments, "0");
+
+        verifyNotEnumerable(arguments, "0");
+
+        verifyNotConfigurable(arguments, "0");
+
+        if (a !== 10) {
+            $ERROR('Expected "a === 10", actually ' + a);
+        }
     }
-runTestCase(testcase);
+}(0, 1, 2));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-296.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-296.js
index 45ee0515fc..ec812f9c1a 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-296.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-296.js
@@ -11,27 +11,33 @@ description: >
     data property of 'O', test TypeError is thrown when updating the
     [[Configurable]] attribute value of 'name' which is defined as
     non-configurable (10.6 [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            Object.defineProperty(arguments, "0", {
-                value: 10,
-                writable: false,
-                enumerable: false,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "0", {
-                    configurable: true
-                });
-            } catch (e) {
-                return e instanceof TypeError && dataPropertyAttributesAreCorrect(arguments, "0", 10, false, false, false);
-            }
-            return false;
-        }(0, 1, 2));
+(function () {
+    Object.defineProperty(arguments, "0", {
+        value: 10,
+        writable: false,
+        enumerable: false,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "0", {
+            configurable: true
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyEqualTo(arguments, "0", 10);
+
+        verifyNotWritable(arguments, "0");
+
+        verifyNotEnumerable(arguments, "0");
+
+        verifyNotConfigurable(arguments, "0");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
     }
-runTestCase(testcase);
+}(0, 1, 2));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-297-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-297-1.js
index d4fe4f15f4..a5ac8f3510 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-297-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-297-1.js
@@ -13,33 +13,40 @@ description: >
     is thrown when updating the [[Get]] attribute value of 'name'
     which is defined as non-configurable (10.6 [[DefineOwnProperty]]
     step 4 and step 5a)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) {
-            function getFunc1() {
-                return 10;
-            }
-            Object.defineProperty(arguments, "0", {
-                get: getFunc1,
-                enumerable: false,
-                configurable: false
-            });
-            function getFunc2() {
-                return 20;
-            }
-            try {
-                Object.defineProperty(arguments, "0", {
-                    get: getFunc2
-                });
-            } catch (e) {
-                var verifyFormal = a === 0;
-                return e instanceof TypeError && accessorPropertyAttributesAreCorrect(arguments, "0", getFunc1, undefined, undefined, false, false) && verifyFormal;
-            }
-            return false;
-        }(0, 1, 2));
+(function (a, b, c) {
+    function getFunc1() {
+        return 10;
     }
-runTestCase(testcase);
+    Object.defineProperty(arguments, "0", {
+        get: getFunc1,
+        enumerable: false,
+        configurable: false
+    });
+    function getFunc2() {
+        return 20;
+    }
+    try {
+        Object.defineProperty(arguments, "0", {
+            get: getFunc2
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        if (a !== 0) {
+            $ERROR('Expected a === 0, actually ' + a);
+        }
+
+        verifyEqualTo(arguments, "0", getFunc1());
+
+        verifyNotEnumerable(arguments, "0");
+
+        verifyNotConfigurable(arguments, "0");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
+    }
+}(0, 1, 2));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-297.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-297.js
index 6544efa66e..7af355e330 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-297.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-297.js
@@ -11,32 +11,36 @@ description: >
     accessor property of 'O', test TypeError is thrown when updating
     the [[Get]] attribute value of 'name' which is defined as
     non-configurable (10.6 [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            function getFunc1() {
-                return 10;
-            }
-            Object.defineProperty(arguments, "0", {
-                get: getFunc1,
-                enumerable: false,
-                configurable: false
-            });
-            function getFunc2() {
-                return 20;
-            }
-            try {
-                Object.defineProperty(arguments, "0", {
-                    get: getFunc2
-                });
-            } catch (e) {
-                return e instanceof TypeError && accessorPropertyAttributesAreCorrect(arguments, "0", getFunc1, undefined, undefined, false, false);
-            }
-            return false;
-        }(0, 1, 2));
+(function () {
+    function getFunc1() {
+        return 10;
     }
-runTestCase(testcase);
+    Object.defineProperty(arguments, "0", {
+        get: getFunc1,
+        enumerable: false,
+        configurable: false
+    });
+    function getFunc2() {
+        return 20;
+    }
+    try {
+        Object.defineProperty(arguments, "0", {
+            get: getFunc2
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyEqualTo(arguments, "0", getFunc1());
+
+        verifyNotEnumerable(arguments, "0");
+
+        verifyNotConfigurable(arguments, "0");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
+    }
+}(0, 1, 2));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-298-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-298-1.js
index 6e701c1e23..8e6244fffd 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-298-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-298-1.js
@@ -13,35 +13,41 @@ description: >
     is thrown when updating the [[Set]] attribute value of 'name'
     which is defined as non-configurable (10.6 [[DefineOwnProperty]]
     steps 4 and 5a)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) {
-            function getFunc() {
-                return 10;
-            }
-            Object.defineProperty(arguments, "0", {
-                get: getFunc,
-                set: undefined,
-                enumerable: false,
-                configurable: false
-            });
-            function setFunc(value) {
-                this.setVerifyHelpProp = value;
-            }
-            try {
-                Object.defineProperty(arguments, "0", {
-                    set: setFunc
-                });
-            } catch (e) {
-                var verifyFormal = a === 0;
-                return e instanceof TypeError &&
-                    accessorPropertyAttributesAreCorrect(arguments, "0", getFunc, undefined, undefined, false, false) && verifyFormal;
-            }
-            return false;
-        }(0, 1, 2));
+(function (a, b, c) {
+    function getFunc() {
+        return 10;
     }
-runTestCase(testcase);
+    Object.defineProperty(arguments, "0", {
+        get: getFunc,
+        set: undefined,
+        enumerable: false,
+        configurable: false
+    });
+    function setFunc(value) {
+        this.setVerifyHelpProp = value;
+    }
+    try {
+        Object.defineProperty(arguments, "0", {
+            set: setFunc
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        if (a !== 0) {
+            $ERROR('Expected a === 0, actually ' + a);
+        }
+
+        verifyEqualTo(arguments, "0", getFunc());
+
+        verifyNotEnumerable(arguments, "0");
+
+        verifyNotConfigurable(arguments, "0");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
+    }
+}(0, 1, 2));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-298.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-298.js
index 1e3ac280d7..628dd20af7 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-298.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-298.js
@@ -11,33 +11,37 @@ description: >
     accessor property of 'O', test TypeError is thrown when updating
     the [[Set]] attribute value of 'name' which is defined as
     non-configurable (10.6 [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            function getFunc() {
-                return 10;
-            }
-            Object.defineProperty(arguments, "0", {
-                get: getFunc,
-                set: undefined,
-                enumerable: false,
-                configurable: false
-            });
-            function setFunc(value) {
-                this.setVerifyHelpProp = value;
-            }
-            try {
-                Object.defineProperty(arguments, "0", {
-                    set: setFunc
-                });
-            } catch (e) {
-                return e instanceof TypeError && accessorPropertyAttributesAreCorrect(arguments, "0", getFunc, undefined, undefined, false, false);
-            }
-            return false;
-        }(0, 1, 2));
+(function () {
+    function getFunc() {
+        return 10;
     }
-runTestCase(testcase);
+    Object.defineProperty(arguments, "0", {
+        get: getFunc,
+        set: undefined,
+        enumerable: false,
+        configurable: false
+    });
+    function setFunc(value) {
+        this.setVerifyHelpProp = value;
+    }
+    try {
+        Object.defineProperty(arguments, "0", {
+            set: setFunc
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyEqualTo(arguments, "0", getFunc());
+
+        verifyNotEnumerable(arguments, "0");
+
+        verifyNotConfigurable(arguments, "0");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
+    }
+}(0, 1, 2));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-299-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-299-1.js
index 38ce1f45b6..160f649efd 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-299-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-299-1.js
@@ -13,31 +13,36 @@ description: >
     is thrown when updating the [[Enumerable]] attribute value of
     'name' which is defined as non-configurable (10.6
     [[DefineOwnProperty]] steps 4 and 5a)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) {
-            function getFunc() {
-                return 10;
-            }
-            Object.defineProperty(arguments, "0", {
-                get: getFunc,
-                enumerable: true,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "0", {
-                    enumerable: false
-                });
-            } catch (e) {
-                var verifyFormal = a === 0;
-                return e instanceof TypeError &&
-                    accessorPropertyAttributesAreCorrect(arguments, "0", getFunc, undefined, undefined, true, false) && verifyFormal;
-            }
-            return false;
-        }(0, 1, 2));
+(function (a, b, c) {
+    function getFunc() {
+        return 10;
     }
-runTestCase(testcase);
+    Object.defineProperty(arguments, "0", {
+        get: getFunc,
+        enumerable: true,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "0", {
+            enumerable: false
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        if (a !== 0) {
+            $ERROR('Expected a === 0, actually ' + a);
+        }
+        verifyEqualTo(arguments, "0", getFunc());
+
+        verifyEnumerable(arguments, "0");
+
+        verifyNotConfigurable(arguments, "0");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
+    }
+}(0, 1, 2));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-299.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-299.js
index fa0817b65a..a6721b9995 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-299.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-299.js
@@ -11,29 +11,33 @@ description: >
     accessor property of 'O', test TypeError is thrown when updating
     the [[Enumerable]] attribute value of 'name' which is defined as
     non-configurable (10.6 [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            function getFunc() {
-                return 10;
-            }
-            Object.defineProperty(arguments, "0", {
-                get: getFunc,
-                enumerable: true,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "0", {
-                    enumerable: false
-                });
-            } catch (e) {
-                return e instanceof TypeError && accessorPropertyAttributesAreCorrect(arguments, "0", getFunc, undefined, undefined, true, false);
-            }
-            return false;
-        }(0, 1, 2));
+(function () {
+    function getFunc() {
+        return 10;
     }
-runTestCase(testcase);
+    Object.defineProperty(arguments, "0", {
+        get: getFunc,
+        enumerable: true,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "0", {
+            enumerable: false
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyEqualTo(arguments, "0", getFunc());
+
+        verifyEnumerable(arguments, "0");
+
+        verifyNotConfigurable(arguments, "0");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
+    }
+}(0, 1, 2));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-300-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-300-1.js
index 8ad3eae8f9..c48975ff1e 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-300-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-300-1.js
@@ -13,31 +13,36 @@ description: >
     is thrown when updating the [[Configurable]] attribute value of
     'name' which is defined as non-configurable (10.6
     [[DefineOwnProperty]] step 4 and step 5a)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) {
-            function getFunc() {
-                return 0;
-            }
-            Object.defineProperty(arguments, "0", {
-                get: getFunc,
-                enumerable: true,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "0", {
-                    configurable: true
-                });
-            } catch (e) {
-                var verifyFormal = a === 0;
-                return e instanceof TypeError &&
-                    accessorPropertyAttributesAreCorrect(arguments, "0", getFunc, undefined, undefined, true, false) && verifyFormal;
-            }
-            return false;
-        }(0, 1, 2));
+(function (a, b, c) {
+    function getFunc() {
+        return 0;
     }
-runTestCase(testcase);
+    Object.defineProperty(arguments, "0", {
+        get: getFunc,
+        enumerable: true,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "0", {
+            configurable: true
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        if (a !== 0) {
+            $ERROR('Expected a === 0, actually ' + a);
+        }
+        verifyEqualTo(arguments, "0", getFunc());
+
+        verifyEnumerable(arguments, "0");
+
+        verifyNotConfigurable(arguments, "0");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
+    }
+}(0, 1, 2));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-300.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-300.js
index c126506f1d..61f4ecc5aa 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-300.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-300.js
@@ -11,29 +11,33 @@ description: >
     accessor property of 'O', test TypeError is thrown when updating
     the [[Configurable]] attribute value of 'name' which is defined as
     non-configurable (10.6 [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            function getFunc() {
-                return 10;
-            }
-            Object.defineProperty(arguments, "0", {
-                get: getFunc,
-                enumerable: true,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "0", {
-                    configurable: true
-                });
-            } catch (e) {
-                return e instanceof TypeError && accessorPropertyAttributesAreCorrect(arguments, "0", getFunc, undefined, undefined, true, false);
-            }
-            return false;
-        }(0, 1, 2));
+(function () {
+    function getFunc() {
+        return 10;
     }
-runTestCase(testcase);
+    Object.defineProperty(arguments, "0", {
+        get: getFunc,
+        enumerable: true,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "0", {
+            configurable: true
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyEqualTo(arguments, "0", getFunc());
+
+        verifyEnumerable(arguments, "0");
+
+        verifyNotConfigurable(arguments, "0");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
+    }
+}(0, 1, 2));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-301-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-301-1.js
index 6b1ec784e9..10b1e63eca 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-301-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-301-1.js
@@ -12,22 +12,26 @@ description: >
     'O', and 'desc' is data descriptor, test 'name' is defined in 'O'
     with all correct attribute values (10.6 [[DefineOwnProperty]] step
     3)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) {
-            delete arguments[0];
-            Object.defineProperty(arguments, "0", {
-                value: 10,
-                writable: false,
-                enumerable: false,
-                configurable: false
-            });
-            var verifyFormal = a === 0;
-            return dataPropertyAttributesAreCorrect(arguments, "0", 10, false, false, false) && verifyFormal;
-        }(0, 1, 2));
+(function (a, b, c) {
+    delete arguments[0];
+    Object.defineProperty(arguments, "0", {
+        value: 10,
+        writable: false,
+        enumerable: false,
+        configurable: false
+    });
+    if (a !== 0) {
+        $ERROR("Expected a === 0, actually " + a);
     }
-runTestCase(testcase);
+    verifyEqualTo(arguments, "0", 10);
+
+    verifyNotWritable(arguments, "0");
+
+    verifyNotEnumerable(arguments, "0");
+
+    verifyNotConfigurable(arguments, "0");
+}(0, 1, 2));
+
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-301.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-301.js
index 84af90c001..1708a50cd5 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-301.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-301.js
@@ -12,21 +12,23 @@ description: >
     [[ParameterMap]] of 'O', and 'desc' is data descriptor, test
     'name' is defined in 'O' with all correct attribute values (10.6
     [[DefineOwnProperty]] step 3)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () { 
-            delete arguments[0];
-            Object.defineProperty(arguments, "0", {
-                value: 10,
-                writable: false,
-                enumerable: false,
-                configurable: false
-            });
-            return dataPropertyAttributesAreCorrect(arguments, "0", 10, false, false, false);
-        }(0, 1, 2));
-    }
-runTestCase(testcase);
+(function () { 
+    delete arguments[0];
+    Object.defineProperty(arguments, "0", {
+        value: 10,
+        writable: false,
+        enumerable: false,
+        configurable: false
+    });
+    verifyEqualTo(arguments, "0", 10);
+
+    verifyNotWritable(arguments, "0");
+
+    verifyNotEnumerable(arguments, "0");
+
+    verifyNotConfigurable(arguments, "0");
+}(0, 1, 2));
+
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-302-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-302-1.js
index f64d1b88bf..86faf60222 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-302-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-302-1.js
@@ -13,28 +13,31 @@ description: >
     accessor descriptor, test 'name' is defined in 'O' with all
     correct attribute values (10.6 [[DefineOwnProperty]] step 3 and
     step 5a)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) {
-            delete arguments[0];
-            function getFunc() {
-                return 10;
-            }
-            function setFunc(value) {
-                this.setVerifyHelpProp = value;
-            }
-            Object.defineProperty(arguments, "0", {
-                get: getFunc,
-                set: setFunc,
-                enumerable: false,
-                configurable: false
-            });
-            var verifyFormal = a === 0;
-            return accessorPropertyAttributesAreCorrect(arguments, "0", getFunc, setFunc, "setVerifyHelpProp", false, false) && verifyFormal;
-        }(0, 1, 2));
+(function (a, b, c) {
+    delete arguments[0];
+    function getFunc() {
+        return 10;
     }
-runTestCase(testcase);
+    function setFunc(value) {
+        this.setVerifyHelpProp = value;
+    }
+    Object.defineProperty(arguments, "0", {
+        get: getFunc,
+        set: setFunc,
+        enumerable: false,
+        configurable: false
+    });
+    if (a !== 0) {
+        $ERROR('Expected a === 0, actually ' + a);
+    }
+    verifyEqualTo(arguments, "0", getFunc());
+
+    verifyWritable(arguments, "0", "setVerifyHelpProp");
+
+    verifyNotEnumerable(arguments, "0");
+
+    verifyNotConfigurable(arguments, "0");
+}(0, 1, 2));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-302.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-302.js
index 030cbe3dd4..cb92c27f8a 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-302.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-302.js
@@ -12,27 +12,28 @@ description: >
     'O', and 'desc' is accessor descriptor, test 'name' is defined in
     'O' with all correct attribute values (10.6 [[DefineOwnProperty]]
     step 3)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            delete arguments[0];
-            function getFunc() {
-                return 10;
-            }
-            function setFunc(value) {
-                this.setVerifyHelpProp = value;
-            }
-            Object.defineProperty(arguments, "0", {
-                get: getFunc,
-                set: setFunc,
-                enumerable: false,
-                configurable: false
-            });
-            return accessorPropertyAttributesAreCorrect(arguments, "0", getFunc, setFunc, "setVerifyHelpProp", false, false);
-        }(0, 1, 2));
+(function () {
+    delete arguments[0];
+    function getFunc() {
+        return 10;
     }
-runTestCase(testcase);
+    function setFunc(value) {
+        this.setVerifyHelpProp = value;
+    }
+    Object.defineProperty(arguments, "0", {
+        get: getFunc,
+        set: setFunc,
+        enumerable: false,
+        configurable: false
+    });
+    verifyEqualTo(arguments, "0", getFunc());
+
+    verifyWritable(arguments, "0", "setVerifyHelpProp");
+
+    verifyNotEnumerable(arguments, "0");
+
+    verifyNotConfigurable(arguments, "0");
+}(0, 1, 2));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-303.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-303.js
index 4cc9b8b563..215818404a 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-303.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-303.js
@@ -12,30 +12,29 @@ description: >
     [[ParameterMap]] of 'O', and 'desc' is accessor descriptor, test
     updating multiple attribute values of 'name' (10.6
     [[DefineOwnProperty]] step 3)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            function getFunc1() {
-                return 10;
-            }
-            Object.defineProperty(arguments, "0", {
-                get: getFunc1,
-                enumerable: true,
-                configurable: true
-            });
-            function getFunc2() {
-                return 20;
-            }
-            Object.defineProperty(arguments, "0", {
-                get: getFunc2,
-                enumerable: false,
-                configurable: false
-            });
-            return accessorPropertyAttributesAreCorrect(arguments, "0", getFunc2, undefined, undefined, false, false);
-        }());
+(function () {
+    function getFunc1() {
+        return 10;
     }
-runTestCase(testcase);
+    Object.defineProperty(arguments, "0", {
+        get: getFunc1,
+        enumerable: true,
+        configurable: true
+    });
+    function getFunc2() {
+        return 20;
+    }
+    Object.defineProperty(arguments, "0", {
+        get: getFunc2,
+        enumerable: false,
+        configurable: false
+    });
+    verifyEqualTo(arguments, "0", getFunc2());
+
+    verifyNotEnumerable(arguments, "0");
+
+    verifyNotConfigurable(arguments, "0");
+}());
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-304.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-304.js
index 0af11ce929..5bf3c965bc 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-304.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-304.js
@@ -12,20 +12,22 @@ description: >
     [[ParameterMap]] of 'O', and 'desc' is data descriptor, test
     updating multiple attribute values of 'name' (10.6
     [[DefineOwnProperty]] step 3)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            Object.defineProperty(arguments, "0", {
-                value: 20,
-                writable: false,
-                enumerable: false,
-                configurable: false
-            });
-            return dataPropertyAttributesAreCorrect(arguments, "0", 20, false, false, false);
-        }());
-    }
-runTestCase(testcase);
+(function () {
+    Object.defineProperty(arguments, "0", {
+        value: 20,
+        writable: false,
+        enumerable: false,
+        configurable: false
+    });
+    verifyEqualTo(arguments, "0", 20);
+
+    verifyNotWritable(arguments, "0");
+
+    verifyNotEnumerable(arguments, "0");
+
+    verifyNotConfigurable(arguments, "0");
+}());
+
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-305.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-305.js
index a16f290b5f..1d788184b3 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-305.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-305.js
@@ -12,27 +12,33 @@ description: >
     [[ParameterMap]] of 'O', test TypeError is thrown when updating
     the [[Value]] attribute value of 'name' which is not writable and
     not configurable (10.6 [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            Object.defineProperty(arguments, "0", {
-                value: 0,
-                writable: false,
-                configurable: false
-            });
-
-            try {
-                Object.defineProperty(arguments, "0", {
-                    value: 10
-                });
-            } catch (e) {
-                return e instanceof TypeError && dataPropertyAttributesAreCorrect(arguments, "0", 0, false, false, false);
-            }
-            return false;
-        }());
+(function () {
+    Object.defineProperty(arguments, "0", {
+        value: 0,
+        writable: false,
+        configurable: false
+    });
+
+    try {
+        Object.defineProperty(arguments, "0", {
+            value: 10
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyEqualTo(arguments, "0", 0);
+
+        verifyNotWritable(arguments, "0");
+
+        verifyNotEnumerable(arguments, "0");
+
+        verifyNotConfigurable(arguments, "0");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
     }
-runTestCase(testcase);
+}());
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-306.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-306.js
index a9f64c1ddd..ba9d9b1003 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-306.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-306.js
@@ -12,27 +12,33 @@ description: >
     [[ParameterMap]] of 'O', test TypeError is thrown when updating
     the [[Writable]] attribute value of 'name' which is not
     configurable (10.6 [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            Object.defineProperty(arguments, "0", {
-                value: 0,
-                writable: false,
-                enumerable: false,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "0", {
-                    writable: true
-                });
-            } catch (e) {
-                return e instanceof TypeError && dataPropertyAttributesAreCorrect(arguments, "0", 0, false, false, false);
-            }
-            return false;
-        }());
+(function () {
+    Object.defineProperty(arguments, "0", {
+        value: 0,
+        writable: false,
+        enumerable: false,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "0", {
+            writable: true
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyEqualTo(arguments, "0", 0);
+
+        verifyNotWritable(arguments, "0");
+
+        verifyNotEnumerable(arguments, "0");
+
+        verifyNotConfigurable(arguments, "0");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
     }
-runTestCase(testcase);
+}());
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-307.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-307.js
index 933c5503a5..3a63380cca 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-307.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-307.js
@@ -12,27 +12,33 @@ description: >
     [[ParameterMap]] of 'O', test TypeError is thrown when updating
     the [[Enumerable]] attribute value of 'name' which is not
     configurable (10.6 [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            Object.defineProperty(arguments, "0", {
-                value: 0,
-                writable: false,
-                enumerable: true,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "0", {
-                    enumerable: false
-                });
-            } catch (e) {
-                return e instanceof TypeError && dataPropertyAttributesAreCorrect(arguments, "0", 0, false, true, false);
-            }
-            return false;
-        }());
+(function () {
+    Object.defineProperty(arguments, "0", {
+        value: 0,
+        writable: false,
+        enumerable: true,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "0", {
+            enumerable: false
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyEqualTo(arguments, "0", 0);
+
+        verifyNotWritable(arguments, "0");
+
+        verifyEnumerable(arguments, "0");
+
+        verifyNotConfigurable(arguments, "0");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
     }
-runTestCase(testcase);
+}());
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-308.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-308.js
index 68decc8ec9..54c2560eba 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-308.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-308.js
@@ -12,27 +12,33 @@ description: >
     [[ParameterMap]] of 'O', test TypeError is thrown when updating
     the [[Configurable]] attribute value of 'name' which is not
     configurable (10.6 [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            Object.defineProperty(arguments, "0", {
-                value: 0,
-                writable: false,
-                enumerable: false,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "0", {
-                    configurable: true
-                });
-            } catch (e) {
-                return e instanceof TypeError && dataPropertyAttributesAreCorrect(arguments, "0", 0, false, false, false);
-            }
-            return false;
-        }());
+(function () {
+    Object.defineProperty(arguments, "0", {
+        value: 0,
+        writable: false,
+        enumerable: false,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "0", {
+            configurable: true
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyEqualTo(arguments, "0", 0);
+
+        verifyNotWritable(arguments, "0");
+
+        verifyNotEnumerable(arguments, "0");
+
+        verifyNotConfigurable(arguments, "0");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
     }
-runTestCase(testcase);
+}());
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-309.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-309.js
index 5fda8e75c6..db14b5bedb 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-309.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-309.js
@@ -12,32 +12,36 @@ description: >
     [[ParameterMap]] of 'O', test TypeError is thrown when updating
     the [[Get]] attribute value of 'name' which is not configurable
     (10.6 [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            function getFunc1() {
-                return 0;
-            }
-            Object.defineProperty(arguments, "0", {
-                get: getFunc1,
-                enumerable: false,
-                configurable: false
-            });
-            function getFunc2() {
-                return 10;
-            }
-            try {
-                Object.defineProperty(arguments, "0", {
-                    get: getFunc2
-                });
-                return false;
-            } catch (e) {
-                return e instanceof TypeError && accessorPropertyAttributesAreCorrect(arguments, "0", getFunc1, undefined, undefined, false, false);
-            }
-        }());
+(function () {
+    function getFunc1() {
+        return 0;
     }
-runTestCase(testcase);
+    Object.defineProperty(arguments, "0", {
+        get: getFunc1,
+        enumerable: false,
+        configurable: false
+    });
+    function getFunc2() {
+        return 10;
+    }
+    try {
+        Object.defineProperty(arguments, "0", {
+            get: getFunc2
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyEqualTo(arguments, "0", getFunc1());
+
+        verifyNotEnumerable(arguments, "0");
+
+        verifyNotConfigurable(arguments, "0");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
+    }
+}());
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-310.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-310.js
index e37e898cfa..6d82c2650f 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-310.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-310.js
@@ -12,33 +12,37 @@ description: >
     [[ParameterMap]] of 'O', test TypeError is thrown when updating
     the [[Set]] attribute value of 'name' which is not configurable
     (10.6 [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            function getFunc() {
-                return 0;
-            }
-            Object.defineProperty(arguments, "0", {
-                get: getFunc,
-                set: undefined,
-                enumerable: false,
-                configurable: false
-            });
-            function setFunc(value) {
-                this.setVerifyHelpProp = value;
-            }
-            try {
-                Object.defineProperty(arguments, "0", {
-                    set: setFunc
-                });            
-            } catch (e) {
-                return e instanceof TypeError && accessorPropertyAttributesAreCorrect(arguments, "0", getFunc, undefined, undefined, false, false);
-            }
-            return false;
-        }());
+(function () {
+    function getFunc() {
+        return 0;
     }
-runTestCase(testcase);
+    Object.defineProperty(arguments, "0", {
+        get: getFunc,
+        set: undefined,
+        enumerable: false,
+        configurable: false
+    });
+    function setFunc(value) {
+        this.setVerifyHelpProp = value;
+    }
+    try {
+        Object.defineProperty(arguments, "0", {
+            set: setFunc
+        });            
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyEqualTo(arguments, "0", getFunc());
+
+        verifyNotEnumerable(arguments, "0");
+
+        verifyNotConfigurable(arguments, "0");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
+    }
+}());
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-311.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-311.js
index 2c267d3255..55652b21cf 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-311.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-311.js
@@ -12,29 +12,33 @@ description: >
     [[ParameterMap]] of 'O', test TypeError is thrown when updating
     the [[Enumerable]] attribute value of 'name' which is not
     configurable (10.6 [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            function getFunc() {
-                return 0;
-            }
-            Object.defineProperty(arguments, "0", {
-                get: getFunc,
-                enumerable: true,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "0", {
-                    enumerable: false
-                });
-            } catch (e) {
-                return e instanceof TypeError && accessorPropertyAttributesAreCorrect(arguments, "0", getFunc, undefined, undefined, true, false);
-            }
-            return false;
-        }());
+(function () {
+    function getFunc() {
+        return 0;
     }
-runTestCase(testcase);
+    Object.defineProperty(arguments, "0", {
+        get: getFunc,
+        enumerable: true,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "0", {
+            enumerable: false
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyEqualTo(arguments, "0", getFunc());
+
+        verifyEnumerable(arguments, "0");
+
+        verifyNotConfigurable(arguments, "0");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
+    }
+}());
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-312.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-312.js
index 2ff3706505..779971a74e 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-312.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-312.js
@@ -12,29 +12,32 @@ description: >
     [[ParameterMap]] of 'O', test TypeError is thrown when updating
     the [[Configurable]] attribute value of 'name' which is not
     configurable (10.6 [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            function getFunc() {
-                return 0;
-            }
-            Object.defineProperty(arguments, "0", {
-                get: getFunc,
-                enumerable: true,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "0", {
-                    configurable: true
-                });
-            } catch (e) {
-                return e instanceof TypeError && accessorPropertyAttributesAreCorrect(arguments, "0", getFunc, undefined, undefined, true, false);
-            }
-            return false;
-        }());
+(function () {
+    function getFunc() {
     }
-runTestCase(testcase);
+    Object.defineProperty(arguments, "0", {
+        get: getFunc,
+        enumerable: true,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "0", {
+            configurable: true
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyEqualTo(arguments, "0", getFunc());
+
+        verifyEnumerable(arguments, "0");
+
+        verifyNotConfigurable(arguments, "0");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
+    }
+}());
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-313-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-313-1.js
index 94b29a6e35..48f7ad4c52 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-313-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-313-1.js
@@ -11,20 +11,22 @@ description: >
     that has formal parameters, 'P' is own property, and 'desc' is
     data descriptor, test 'P' is defined in 'O' with all correct
     attribute values (10.6 [[DefineOwnProperty]] step 3)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) {
-            Object.defineProperty(arguments, "genericProperty", {
-                value: 1001,
-                writable: true,
-                enumerable: true,
-                configurable: true
-            });
-            return dataPropertyAttributesAreCorrect(arguments, "genericProperty", 1001, true, true, true);
-        }(1, 2, 3));
-    }
-runTestCase(testcase);
+(function (a, b, c) {
+    Object.defineProperty(arguments, "genericProperty", {
+        value: 1001,
+        writable: true,
+        enumerable: true,
+        configurable: true
+    });
+    verifyEqualTo(arguments, "genericProperty", 1001);
+
+    verifyWritable(arguments, "genericProperty");
+
+    verifyEnumerable(arguments, "genericProperty");
+
+    verifyConfigurable(arguments, "genericProperty");
+}(1, 2, 3));
+
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-313.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-313.js
index 1061ac675d..3157bc48ab 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-313.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-313.js
@@ -11,20 +11,22 @@ description: >
     property, and 'desc' is data descriptor, test 'P' is defined in
     'O' with all correct attribute values (10.6 [[DefineOwnProperty]]
     step 3)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            Object.defineProperty(arguments, "genericProperty", {
-                value: 1001,
-                writable: true,
-                enumerable: true,
-                configurable: true
-            });
-            return dataPropertyAttributesAreCorrect(arguments, "genericProperty", 1001, true, true, true);
-        }(1, 2, 3));
-    }
-runTestCase(testcase);
+(function () {
+    Object.defineProperty(arguments, "genericProperty", {
+        value: 1001,
+        writable: true,
+        enumerable: true,
+        configurable: true
+    });
+    verifyEqualTo(arguments, "genericProperty", 1001);
+
+    verifyWritable(arguments, "genericProperty");
+
+    verifyEnumerable(arguments, "genericProperty");
+
+    verifyConfigurable(arguments, "genericProperty");
+}(1, 2, 3));
+
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-314-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-314-1.js
index 11dcfd9a03..26d60af348 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-314-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-314-1.js
@@ -11,26 +11,27 @@ description: >
     that has formal parameters, 'P' is property, and 'desc' is
     accessor descriptor, test 'P' is defined in 'O' with all correct
     attribute values (10.6 [[DefineOwnProperty]] step 3)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) {
-            function getFunc() {
-                return "getFunctionString";
-            }
-            function setFunc(value) {
-                this.testgetFunction = value;
-            }
-            Object.defineProperty(arguments, "genericProperty", {
-                get: getFunc,
-                set: setFunc,
-                enumerable: true,
-                configurable: true
-            });
-            return accessorPropertyAttributesAreCorrect(arguments, "genericProperty", getFunc, setFunc, "testgetFunction", true, true);
-            }(1, 2, 3));
+(function (a, b, c) {
+    function getFunc() {
+        return "getFunctionString";
     }
-runTestCase(testcase);
+    function setFunc(value) {
+        this.testgetFunction = value;
+    }
+    Object.defineProperty(arguments, "genericProperty", {
+        get: getFunc,
+        set: setFunc,
+        enumerable: true,
+        configurable: true
+    });
+    verifyEqualTo(arguments, "genericProperty", getFunc());
+
+    verifyWritable(arguments, "genericProperty", "testgetFunction");
+
+    verifyEnumerable(arguments, "genericProperty");
+
+    verifyConfigurable(arguments, "genericProperty");
+}(1, 2, 3));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-314.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-314.js
index a82c9fe4e2..1072420a05 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-314.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-314.js
@@ -11,26 +11,27 @@ description: >
     property, and 'desc' is accessor descriptor, test 'P' is defined
     in 'O' with all correct attribute values (10.6
     [[DefineOwnProperty]] step 3)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            function getFunc() {
-                return "getFunctionString";
-            }
-            function setFunc(value) {
-                this.testgetFunction = value;
-            }
-            Object.defineProperty(arguments, "genericProperty", {
-                get: getFunc,
-                set: setFunc,
-                enumerable: true,
-                configurable: true
-            });
-            return accessorPropertyAttributesAreCorrect(arguments, "genericProperty", getFunc, setFunc, "testgetFunction", true, true);
-        }(1, 2, 3));
+(function () {
+    function getFunc() {
+        return "getFunctionString";
     }
-runTestCase(testcase);
+    function setFunc(value) {
+        this.testgetFunction = value;
+    }
+    Object.defineProperty(arguments, "genericProperty", {
+        get: getFunc,
+        set: setFunc,
+        enumerable: true,
+        configurable: true
+    });
+    verifyEqualTo(arguments, "genericProperty", getFunc());
+
+    verifyWritable(arguments, "genericProperty", "testgetFunction");
+
+    verifyEnumerable(arguments, "genericProperty");
+
+    verifyConfigurable(arguments, "genericProperty");
+}(1, 2, 3));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-315-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-315-1.js
index 934c465e40..82c7cb3605 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-315-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-315-1.js
@@ -11,37 +11,41 @@ description: >
     that has formal parameters, 'P' is own accessor property of 'O',
     and 'desc' is accessor descriptor, test updating multiple
     attribute values of 'P' (10.6 [[DefineOwnProperty]] step 3)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) {
-            Object.defineProperty(arguments, "genericProperty", {
-                get: function () {
-                    return 1001;
-                },
-                set: function (value) {
-                    this.testgetFunction1 = value;
-                },
-                enumerable: true,
-                configurable: true
-            });
-            function getFunc() {
-                return "getFunctionString";
-            }
-            function setFunc(value) {
-                this.testgetFunction = value;
-            }
-            Object.defineProperty(arguments, "genericProperty", {
-                get: getFunc,
-                set: setFunc,
-                enumerable: false,
-                configurable: false
-            });
-            var verifyFormal = c === 3;
-            return accessorPropertyAttributesAreCorrect(arguments, "genericProperty", getFunc, setFunc, "testgetFunction", false, false) && verifyFormal;
-        }(1, 2, 3));
+(function (a, b, c) {
+    Object.defineProperty(arguments, "genericProperty", {
+        get: function () {
+            return 1001;
+        },
+        set: function (value) {
+            this.testgetFunction1 = value;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    function getFunc() {
+        return "getFunctionString";
     }
-runTestCase(testcase);
+    function setFunc(value) {
+        this.testgetFunction = value;
+    }
+    Object.defineProperty(arguments, "genericProperty", {
+        get: getFunc,
+        set: setFunc,
+        enumerable: false,
+        configurable: false
+    });
+    if (c !== 3) {
+        $ERROR('Expected c === 3, actually ' + c);
+    }
+
+    verifyEqualTo(arguments, "genericProperty", getFunc());
+
+    verifyWritable(arguments, "genericProperty", "testgetFunction");
+
+    verifyNotEnumerable(arguments, "genericProperty");
+
+    verifyNotConfigurable(arguments, "genericProperty");
+}(1, 2, 3));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-315.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-315.js
index b999c26343..980da213fb 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-315.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-315.js
@@ -11,36 +11,37 @@ description: >
     own accessor property of 'O', and 'desc' is accessor descriptor,
     test updating multiple attribute values of 'P' (10.6
     [[DefineOwnProperty]] step 3)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            Object.defineProperty(arguments, "genericProperty", {
-                get: function () {
-                    return 1001;
-                },
-                set: function (value) {
-                    this.testgetFunction1 = value;
-                },
-                enumerable: true,
-                configurable: true
-            });
-            function getFunc() {
-                return "getFunctionString";
-            }
-            function setFunc(value) {
-                this.testgetFunction = value;
-            }
-            Object.defineProperty(arguments, "genericProperty", {
-                get: getFunc,
-                set: setFunc,
-                enumerable: false,
-                configurable: false
-            });
-            return accessorPropertyAttributesAreCorrect(arguments, "genericProperty", getFunc, setFunc, "testgetFunction", false, false);
-        }(1, 2, 3));
+(function () {
+    Object.defineProperty(arguments, "genericProperty", {
+        get: function () {
+            return 1001;
+        },
+        set: function (value) {
+            this.testgetFunction1 = value;
+        },
+        enumerable: true,
+        configurable: true
+    });
+    function getFunc() {
+        return "getFunctionString";
     }
-runTestCase(testcase);
+    function setFunc(value) {
+        this.testgetFunction = value;
+    }
+    Object.defineProperty(arguments, "genericProperty", {
+        get: getFunc,
+        set: setFunc,
+        enumerable: false,
+        configurable: false
+    });
+    verifyEqualTo(arguments, "genericProperty", getFunc());
+
+    verifyWritable(arguments, "genericProperty", "testgetFunction");
+
+    verifyNotEnumerable(arguments, "genericProperty");
+
+    verifyNotConfigurable(arguments, "genericProperty");
+}(1, 2, 3));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-316-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-316-1.js
index 4f9b508619..5ffa599e02 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-316-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-316-1.js
@@ -11,25 +11,27 @@ description: >
     that has formal parameters, 'P' is own data property of 'O', and
     'desc' is data descriptor, test updating multiple attribute values
     of 'P' (10.6 [[DefineOwnProperty]] step 3)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) {
-            Object.defineProperty(arguments, "genericProperty", {
-                value: 1001,
-                writable: true,
-                enumerable: true,
-                configurable: true
-            });
-            Object.defineProperty(arguments, "genericProperty", {
-                value: 1002,
-                enumerable: false,
-                configurable: false
-            });
-            return dataPropertyAttributesAreCorrect(arguments, "genericProperty", 1002, true, false, false);
-        }(1, 2, 3));
-    }
-runTestCase(testcase);
+(function (a, b, c) {
+    Object.defineProperty(arguments, "genericProperty", {
+        value: 1001,
+        writable: true,
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(arguments, "genericProperty", {
+        value: 1002,
+        enumerable: false,
+        configurable: false
+    });
+    verifyEqualTo(arguments, "genericProperty", 1002);
+
+    verifyWritable(arguments, "genericProperty");
+
+    verifyNotEnumerable(arguments, "genericProperty");
+
+    verifyNotConfigurable(arguments, "genericProperty");
+}(1, 2, 3));
+
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-316.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-316.js
index c12cf363ce..f72c0bc9cc 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-316.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-316.js
@@ -11,25 +11,27 @@ description: >
     own data property of 'O', and 'desc' is data descriptor, test
     updating multiple attribute values of 'P' (10.6
     [[DefineOwnProperty]] step 3)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            Object.defineProperty(arguments, "genericProperty", {
-                value: 1001,
-                writable: true,
-                enumerable: true,
-                configurable: true
-            });
-            Object.defineProperty(arguments, "genericProperty", {
-                value: 1002,
-                enumerable: false,
-                configurable: false
-            });
-            return dataPropertyAttributesAreCorrect(arguments, "genericProperty", 1002, true, false, false);
-        }(1, 2, 3));
-    }
-runTestCase(testcase);
+(function () {
+    Object.defineProperty(arguments, "genericProperty", {
+        value: 1001,
+        writable: true,
+        enumerable: true,
+        configurable: true
+    });
+    Object.defineProperty(arguments, "genericProperty", {
+        value: 1002,
+        enumerable: false,
+        configurable: false
+    });
+    verifyEqualTo(arguments, "genericProperty", 1002);
+
+    verifyWritable(arguments, "genericProperty");
+
+    verifyNotEnumerable(arguments, "genericProperty");
+
+    verifyNotConfigurable(arguments, "genericProperty");
+}(1, 2, 3));
+
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-317-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-317-1.js
index 67f92c9112..a518f7efbe 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-317-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-317-1.js
@@ -12,28 +12,36 @@ description: >
     TypeError is thrown when updating the [[Value]] attribute value of
     'P' which is not writable and not configurable (10.6
     [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) {
-            Object.defineProperty(arguments, "genericProperty", {
-                value: 1001,
-                writable: false,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "genericProperty", {
-                    value: 1002
-                });
-            } catch (e) {
-                var verifyFormal = b === 2;
-                return e instanceof TypeError &&
-                    dataPropertyAttributesAreCorrect(arguments, "genericProperty", 1001, false, false, false) && verifyFormal;
-            }
-            return false;
-        }(1, 2, 3));
+(function (a, b, c) {
+    Object.defineProperty(arguments, "genericProperty", {
+        value: 1001,
+        writable: false,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "genericProperty", {
+            value: 1002
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        if (b !== 2) {
+            $ERROR('Expected "b === 2;", actually ' + b);
+        }
+
+        verifyEqualTo(arguments, "genericProperty", 1001);
+
+        verifyNotWritable(arguments, "genericProperty");
+
+        verifyNotEnumerable(arguments, "genericProperty");
+
+        verifyNotConfigurable(arguments, "genericProperty");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
     }
-runTestCase(testcase);
+}(1, 2, 3));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-317.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-317.js
index d6932e0c02..c3f3d81409 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-317.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-317.js
@@ -11,27 +11,32 @@ description: >
     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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            Object.defineProperty(arguments, "genericProperty", {
-                value: 1001,
-                writable: false,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "genericProperty", {
-                    value: 1002
-                });
-            } catch (e) {
-                return e instanceof TypeError &&
-                    dataPropertyAttributesAreCorrect(arguments, "genericProperty", 1001, false, false, false);
-            }
-            return false;
-        }(1, 2, 3));
+(function () {
+    Object.defineProperty(arguments, "genericProperty", {
+        value: 1001,
+        writable: false,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "genericProperty", {
+            value: 1002
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyEqualTo(arguments, "genericProperty", 1001);
+
+        verifyNotWritable(arguments, "genericProperty");
+
+        verifyNotEnumerable(arguments, "genericProperty");
+
+        verifyNotConfigurable(arguments, "genericProperty");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
     }
-runTestCase(testcase);
+}(1, 2, 3));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-318-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-318-1.js
index 27d5c6a7db..95ab97a734 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-318-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-318-1.js
@@ -12,26 +12,31 @@ description: >
     test TypeError is thrown when updating the [[Writable]] attribute
     value of 'name' which is not configurable (10.6
     [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) {
-            Object.defineProperty(arguments, "genericProperty", {
-                writable: false,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "genericProperty", {
-                    writable: true
-                });
-            } catch (e) {
-                return e instanceof TypeError &&
-                    dataPropertyAttributesAreCorrect(arguments, "genericProperty", undefined, false, false, false);
-            }
-            return false;
-        }(1, 2, 3));
+(function (a, b, c) {
+    Object.defineProperty(arguments, "genericProperty", {
+        writable: false,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "genericProperty", {
+            writable: true
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyEqualTo(arguments, "genericProperty", undefined);
+
+        verifyNotWritable(arguments, "genericProperty");
+
+        verifyNotEnumerable(arguments, "genericProperty");
+
+        verifyNotConfigurable(arguments, "genericProperty");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
     }
-runTestCase(testcase);
+}(1, 2, 3));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-318.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-318.js
index f1425044d2..c09bc86838 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-318.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-318.js
@@ -11,26 +11,33 @@ description: >
     generic own data property of 'O', test TypeError is thrown when
     updating the [[Writable]] attribute value of 'name' which is not
     configurable (10.6 [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            Object.defineProperty(arguments, "genericProperty", {
-                writable: false,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "genericProperty", {
-                    writable: true
-                });
-            } catch (e) {
-                return e instanceof TypeError &&
-                    dataPropertyAttributesAreCorrect(arguments, "genericProperty", undefined, false, false, false);
-            }
-            return false;
-        }(1, 2, 3));
+(function () {
+    Object.defineProperty(arguments, "genericProperty", {
+        writable: false,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "genericProperty", {
+            writable: true
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyEqualTo(arguments, "genericProperty", undefined);
+
+        verifyNotWritable(arguments, "genericProperty");
+
+        verifyNotEnumerable(arguments, "genericProperty");
+
+        verifyNotConfigurable(arguments, "genericProperty");
+
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
     }
-runTestCase(testcase);
+
+}(1, 2, 3));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-319-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-319-1.js
index 2df5b34ad9..b1615409b1 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-319-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-319-1.js
@@ -12,26 +12,32 @@ description: >
     TypeError is thrown when updating the [[Enumerable]] attribute
     value of 'P' which is not configurable (10.6 [[DefineOwnProperty]]
     step 4)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) {
-            Object.defineProperty(arguments, "genericProperty", {
-                enumerable: true,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "genericProperty", {
-                    enumerable: false
-                });
-            } catch (e) {
-                return e instanceof TypeError &&
-                    dataPropertyAttributesAreCorrect(arguments, "genericProperty", undefined, false, true, false);
-            }
-            return false;
-        }(1, 2, 3));
+(function (a, b, c) {
+    Object.defineProperty(arguments, "genericProperty", {
+        enumerable: true,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "genericProperty", {
+            enumerable: false
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyEqualTo(arguments, "genericProperty", undefined);
+
+        verifyNotWritable(arguments, "genericProperty");
+
+        verifyEnumerable(arguments, "genericProperty");
+
+        verifyNotConfigurable(arguments, "genericProperty");
+
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
     }
-runTestCase(testcase);
+}(1, 2, 3));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-319.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-319.js
index 916de45316..0811edd624 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-319.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-319.js
@@ -11,26 +11,31 @@ description: >
     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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            Object.defineProperty(arguments, "genericProperty", {
-                enumerable: true,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "genericProperty", {
-                    enumerable: false
-                });
-            } catch (e) {
-                return e instanceof TypeError &&
-                    dataPropertyAttributesAreCorrect(arguments, "genericProperty", undefined, false, true, false);
-            }
-            return false;
-        }(1, 2, 3));
+(function () {
+    Object.defineProperty(arguments, "genericProperty", {
+        enumerable: true,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "genericProperty", {
+            enumerable: false
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyEqualTo(arguments, "genericProperty", undefined);
+
+        verifyNotWritable(arguments, "genericProperty");
+
+        verifyEnumerable(arguments, "genericProperty");
+
+        verifyNotConfigurable(arguments, "genericProperty");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
     }
-runTestCase(testcase);
+}(1, 2, 3));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-320-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-320-1.js
index 614468a7cf..c1c9a17903 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-320-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-320-1.js
@@ -12,25 +12,30 @@ description: >
     TypeError is thrown when updating the [[Configurable]] attribute
     value of 'P' which is not configurable (10.6 [[DefineOwnProperty]]
     step 4)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) {
-            Object.defineProperty(arguments, "genericProperty", {
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "genericProperty", {
-                    configurable: true
-                });
-            } catch (e) {
-                return e instanceof TypeError &&
-                    dataPropertyAttributesAreCorrect(arguments, "genericProperty", undefined, false, false, false);
-            }
-            return false;
-        }(1, 2, 3));
+(function (a, b, c) {
+    Object.defineProperty(arguments, "genericProperty", {
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "genericProperty", {
+            configurable: true
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyEqualTo(arguments, "genericProperty", undefined);
+
+        verifyNotWritable(arguments, "genericProperty");
+
+        verifyNotEnumerable(arguments, "genericProperty");
+
+        verifyNotConfigurable(arguments, "genericProperty");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
     }
-runTestCase(testcase);
+}(1, 2, 3));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-320.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-320.js
index 7ad8de9e69..32d2987c11 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-320.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-320.js
@@ -11,25 +11,32 @@ description: >
     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)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            Object.defineProperty(arguments, "genericProperty", {
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "genericProperty", {
-                    configurable: true
-                });
-            } catch (e) {
-                return e instanceof TypeError &&
-                    dataPropertyAttributesAreCorrect(arguments, "genericProperty", undefined, false, false, false);
-            }
-            return false;
-        }(1, 2, 3));
+(function () {
+    Object.defineProperty(arguments, "genericProperty", {
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "genericProperty", {
+            configurable: true
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyEqualTo(arguments, "genericProperty", undefined);
+
+        verifyNotWritable(arguments, "genericProperty");
+
+        verifyNotEnumerable(arguments, "genericProperty");
+
+        verifyNotConfigurable(arguments, "genericProperty");
+
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
     }
-runTestCase(testcase);
+
+}(1, 2, 3));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-321-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-321-1.js
index 3805e0f288..323460968f 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-321-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-321-1.js
@@ -12,36 +12,44 @@ description: >
     test TypeError is thrown when updating the [[Get]] attribute value
     of 'P' which is not configurable (10.6 [[DefineOwnProperty]] step
     4)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) {
-            function getFunc() {
-                return "genericPropertyString";
-            }
-            function setFunc(value) {
-                this.helpVerifyGet = value;
-            }
-            Object.defineProperty(arguments, "genericProperty", {
-                get: getFunc,
-                set: setFunc,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "genericProperty", {
-                    get: function () {
-                        return "overideGenericPropertyString";
-                    }
-                });
-            } catch (e) {
-                var verifyFormal = a === 1;
-                return e instanceof TypeError &&
-                    accessorPropertyAttributesAreCorrect(arguments, "genericProperty", getFunc, setFunc, "helpVerifyGet", false, false, false) && verifyFormal;
+(function (a, b, c) {
+    function getFunc() {
+        return "genericPropertyString";
+    }
+    function setFunc(value) {
+        this.helpVerifyGet = value;
+    }
+    Object.defineProperty(arguments, "genericProperty", {
+        get: getFunc,
+        set: setFunc,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "genericProperty", {
+            get: function () {
+                return "overideGenericPropertyString";
             }
-            return false;
-        }(1, 2, 3));
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        if (a !== 1) {
+            $ERROR('Expected a === 1, actually ' + a);
+        }
+
+        verifyEqualTo(arguments, "genericProperty", getFunc());
+
+        verifyWritable(arguments, "genericProperty", "helpVerifyGet");
+
+        verifyNotEnumerable(arguments, "genericProperty");
+
+        verifyNotConfigurable(arguments, "genericProperty");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
     }
-runTestCase(testcase);
+}(1, 2, 3));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-321.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-321.js
index 90a378c1cf..4abc7358d6 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-321.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-321.js
@@ -11,35 +11,40 @@ description: >
     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)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            function getFunc() {
-                return "genericPropertyString";
-            }
-            function setFunc(value) {
-                this.helpVerifyGet = value;
-            }
-            Object.defineProperty(arguments, "genericProperty", {
-                get: getFunc,
-                set: setFunc,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "genericProperty", {
-                    get: function () {
-                        return "overideGenericPropertyString";
-                    }
-                });
-            } catch (e) {
-                return e instanceof TypeError &&
-                    accessorPropertyAttributesAreCorrect(arguments, "genericProperty", getFunc, setFunc, "helpVerifyGet", false, false, false);
+(function () {
+    function getFunc() {
+        return "genericPropertyString";
+    }
+    function setFunc(value) {
+        this.helpVerifyGet = value;
+    }
+    Object.defineProperty(arguments, "genericProperty", {
+        get: getFunc,
+        set: setFunc,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "genericProperty", {
+            get: function () {
+                return "overideGenericPropertyString";
             }
-            return false;
-        }(1, 2, 3));
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyEqualTo(arguments, "genericProperty", getFunc());
+
+        verifyWritable(arguments, "genericProperty", "helpVerifyGet");
+
+        verifyNotEnumerable(arguments, "genericProperty");
+
+        verifyNotConfigurable(arguments, "genericProperty");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
     }
-runTestCase(testcase);
+}(1, 2, 3));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-322-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-322-1.js
index c62fde7169..ca8a2ebcc9 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-322-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-322-1.js
@@ -12,31 +12,34 @@ description: >
     test TypeError is thrown when updating the [[Set]] attribute value
     of 'P' which is not configurable (10.6 [[DefineOwnProperty]] step
     4)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) {
-            function setFunc(value) {
-                this.genericPropertyString = value;
-            }
-            Object.defineProperty(arguments, "genericProperty", {
-                set: setFunc,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "genericProperty", {
-                    set: function (value) {
-                        this.genericPropertyString1 = value;
-                    }
-                });
-            } catch (e) {
-                return e instanceof TypeError &&
-                    accessorPropertyAttributesAreCorrect(arguments, "genericProperty", undefined, setFunc, "genericPropertyString", false, false, false);
+(function (a, b, c) {
+    function setFunc(value) {
+        this.genericPropertyString = value;
+    }
+    Object.defineProperty(arguments, "genericProperty", {
+        set: setFunc,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "genericProperty", {
+            set: function (value) {
+                this.genericPropertyString1 = value;
             }
-            return false;
-        }(1, 2, 3));
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyWritable(arguments, "genericProperty", "genericPropertyString");
+
+        verifyNotEnumerable(arguments, "genericProperty");
+
+        verifyNotConfigurable(arguments, "genericProperty");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
     }
-runTestCase(testcase);
+}(1, 2, 3));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-322.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-322.js
index f53eb4ed23..fdb86cd9b1 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-322.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-322.js
@@ -11,31 +11,34 @@ description: >
     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)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            function setFunc(value) {
-                this.genericPropertyString = value;
-            }
-            Object.defineProperty(arguments, "genericProperty", {
-                set: setFunc,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "genericProperty", {
-                    set: function (value) {
-                        this.genericPropertyString1 = value;
-                    }
-                });
-            } catch (e) {
-                return e instanceof TypeError &&
-                    accessorPropertyAttributesAreCorrect(arguments, "genericProperty", undefined, setFunc, "genericPropertyString", false, false, false);
+(function () {
+    function setFunc(value) {
+        this.genericPropertyString = value;
+    }
+    Object.defineProperty(arguments, "genericProperty", {
+        set: setFunc,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "genericProperty", {
+            set: function (value) {
+                this.genericPropertyString1 = value;
             }
-            return false;
-        }(1, 2, 3));
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyWritable(arguments, "genericProperty", "genericPropertyString");
+
+        verifyNotEnumerable(arguments, "genericProperty");
+
+        verifyNotConfigurable(arguments, "genericProperty");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
     }
-runTestCase(testcase);
+}(1, 2, 3));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-323-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-323-1.js
index 4f38a72106..9f6d38845b 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-323-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-323-1.js
@@ -12,31 +12,37 @@ description: >
     test TypeError is thrown when updating the [[Enumerable]]
     attribute value of 'P' which is not configurable (10.6
     [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) {
-            function setFunc(value) {
-                this.genericPropertyString = value;
-            }
-            Object.defineProperty(arguments, "genericProperty", {
-                set: setFunc,
-                enumerable: true,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "genericProperty", {
-                    enumerable: false
-                });
-            } catch (e) {
-                verifyFormal = c === 3;
-                return e instanceof TypeError &&
-                    accessorPropertyAttributesAreCorrect(arguments, "genericProperty", undefined, setFunc, "genericPropertyString", true, false) && verifyFormal;
-            }
-            return false;
-        }(1, 2, 3));
+(function (a, b, c) {
+    function setFunc(value) {
+        this.genericPropertyString = value;
     }
-runTestCase(testcase);
+    Object.defineProperty(arguments, "genericProperty", {
+        set: setFunc,
+        enumerable: true,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "genericProperty", {
+            enumerable: false
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        if (c !== 3) {
+            $ERROR('Expected c === 3, actually ' + c);
+        }
+        verifyWritable(arguments, "genericProperty", "genericPropertyString");
+
+        verifyEnumerable(arguments, "genericProperty");
+
+        verifyNotConfigurable(arguments, "genericProperty");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
+    }
+
+}(1, 2, 3));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-323.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-323.js
index 7b3937b842..f353c688d2 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-323.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-323.js
@@ -11,30 +11,33 @@ description: >
     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)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            function setFunc(value) {
-                this.genericPropertyString = value;
-            }
-            Object.defineProperty(arguments, "genericProperty", {
-                set: setFunc,
-                enumerable: true,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "genericProperty", {
-                    enumerable: false
-                });
-            } catch (e) {
-                return e instanceof TypeError &&
-                    accessorPropertyAttributesAreCorrect(arguments, "genericProperty", undefined, setFunc, "genericPropertyString", true, false);
-            }
-            return false;
-        }(1, 2, 3));
+(function () {
+    function setFunc(value) {
+        this.genericPropertyString = value;
     }
-runTestCase(testcase);
+    Object.defineProperty(arguments, "genericProperty", {
+        set: setFunc,
+        enumerable: true,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "genericProperty", {
+            enumerable: false
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyWritable(arguments, "genericProperty", "genericPropertyString");
+
+        verifyEnumerable(arguments, "genericProperty");
+
+        verifyNotConfigurable(arguments, "genericProperty");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
+    }
+}(1, 2, 3));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-324-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-324-1.js
index 12384ea2ac..821ebbcab1 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-324-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-324-1.js
@@ -12,29 +12,32 @@ description: >
     test TypeError is thrown when updating the [[Configurable]]
     attribute value of 'P' which is not configurable (10.6
     [[DefineOwnProperty]] step 4)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function (a, b, c) {
-            function setFunc(value) {
-                this.genericPropertyString = value;
-            }
-            Object.defineProperty(arguments, "genericProperty", {
-                set: setFunc,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "genericProperty", {
-                    configurable: true
-                });
-            } catch (e) {
-                return e instanceof TypeError &&
-                    accessorPropertyAttributesAreCorrect(arguments, "genericProperty", undefined, setFunc, "genericPropertyString", false, false, false);
-            }
-            return false;
-        }(1, 2, 3));
+(function (a, b, c) {
+    function setFunc(value) {
+        this.genericPropertyString = value;
     }
-runTestCase(testcase);
+    Object.defineProperty(arguments, "genericProperty", {
+        set: setFunc,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "genericProperty", {
+            configurable: true
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyWritable(arguments, "genericProperty", "genericPropertyString");
+
+        verifyNotEnumerable(arguments, "genericProperty");
+
+        verifyNotConfigurable(arguments, "genericProperty");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
+    }
+}(1, 2, 3));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-324.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-324.js
index 00e2d81dc3..6fdb4a7749 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-324.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-324.js
@@ -11,29 +11,33 @@ description: >
     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)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        return (function () {
-            function setFunc(value) {
-                this.genericPropertyString = value;
-            }
-            Object.defineProperty(arguments, "genericProperty", {
-                set: setFunc,
-                configurable: false
-            });
-            try {
-                Object.defineProperty(arguments, "genericProperty", {
-                    configurable: true
-                });
-            } catch (e) {
-                return e instanceof TypeError &&
-                    accessorPropertyAttributesAreCorrect(arguments, "genericProperty", undefined, setFunc, "genericPropertyString", false, false, false);
-            }
-            return false;
-        }(1, 2, 3));
+(function () {
+    function setFunc(value) {
+        this.genericPropertyString = value;
     }
-runTestCase(testcase);
+    Object.defineProperty(arguments, "genericProperty", {
+        set: setFunc,
+        configurable: false
+    });
+    try {
+        Object.defineProperty(arguments, "genericProperty", {
+            configurable: true
+        });
+        $ERROR("Expected an exception.");
+    } catch (e) {
+        verifyWritable(arguments, "genericProperty", "genericPropertyString");
+
+        verifyNotEnumerable(arguments, "genericProperty");
+
+        verifyNotConfigurable(arguments, "genericProperty");
+
+        if (!(e instanceof TypeError)) {
+            $ERROR("Expected TypeError, got " + e);
+        }
+
+    }
+    false;
+}(1, 2, 3));
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-333-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-333-1.js
index 3e91e0e6a2..9acb30ee41 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-333-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-333-1.js
@@ -11,25 +11,27 @@ description: >
     property 'P' successfully when [[Configurable]] attribute is
     false, [[Writable]] attribute is true and 'O' is an Object object
     (8.12.9 - step 10)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "property", {
-            value: 1001,
-            writable: true,
-            configurable: false
-        });
+Object.defineProperty(obj, "property", {
+    value: 1001,
+    writable: true,
+    configurable: false
+});
 
-        Object.defineProperty(obj, "property", {
-            value: 1002
-        });
+Object.defineProperty(obj, "property", {
+    value: 1002
+});
+
+verifyEqualTo(obj, "property", 1002);
+
+verifyWritable(obj, "property");
+
+verifyNotEnumerable(obj, "property");
+
+verifyNotConfigurable(obj, "property");
 
-        return dataPropertyAttributesAreCorrect(obj, "property", 1002, true, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-333-2.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-333-2.js
index 12981e7979..9bba5f341d 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-333-2.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-333-2.js
@@ -11,25 +11,27 @@ description: >
     property 'P' successfully when [[Configurable]] attribute is
     false, [[Writable]] attribute is true and 'A' is an Array object
     (8.12.9 - step 10)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = [];
+var obj = [];
 
-        Object.defineProperty(obj, "0", {
-            value: 1001,
-            writable: true,
-            configurable: false
-        });
+Object.defineProperty(obj, "0", {
+    value: 1001,
+    writable: true,
+    configurable: false
+});
 
-        Object.defineProperty(obj, "0", {
-            value: 1002
-        });
+Object.defineProperty(obj, "0", {
+    value: 1002
+});
+
+verifyEqualTo(obj, "0", 1002);
+
+verifyWritable(obj, "0");
+
+verifyNotEnumerable(obj, "0");
+
+verifyNotConfigurable(obj, "0");
 
-        return dataPropertyAttributesAreCorrect(obj, "0", 1002, true, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-333-3.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-333-3.js
index 140ddcb5e3..a5501e2d13 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-333-3.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-333-3.js
@@ -11,27 +11,29 @@ description: >
     property 'P' successfully when [[Configurable]] attribute is
     false, [[Writable]] attribute is true and 'O' is an Arguments
     object (8.12.9 - step 10)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = (function () {
-            return arguments;
-        }());
+var obj = (function () {
+    return arguments;
+}());
 
-        Object.defineProperty(obj, "property", {
-            value: 1001,
-            writable: true,
-            configurable: false
-        });
+Object.defineProperty(obj, "property", {
+    value: 1001,
+    writable: true,
+    configurable: false
+});
 
-        Object.defineProperty(obj, "property", {
-            value: 1002
-        });
+Object.defineProperty(obj, "property", {
+    value: 1002
+});
+
+verifyEqualTo(obj, "property", 1002);
+
+verifyWritable(obj, "property");
+
+verifyNotEnumerable(obj, "property");
+
+verifyNotConfigurable(obj, "property");
 
-        return dataPropertyAttributesAreCorrect(obj, "property", 1002, true, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-333-6.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-333-6.js
index d768025744..4655075d39 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-333-6.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-333-6.js
@@ -11,25 +11,27 @@ description: >
     property 'P' successfully when [[Configurable]] attribute is
     false, [[Writable]] attribute is true and 'O' is an Object object
     (8.12.9 - step 10)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "0", {
-            value: 1001,
-            writable: true,
-            configurable: false
-        });
+Object.defineProperty(obj, "0", {
+    value: 1001,
+    writable: true,
+    configurable: false
+});
 
-        Object.defineProperty(obj, "0", {
-            value: 1002
-        });
+Object.defineProperty(obj, "0", {
+    value: 1002
+});
+
+verifyEqualTo(obj, "0", 1002);
+
+verifyWritable(obj, "0");
+
+verifyNotEnumerable(obj, "0");
+
+verifyNotConfigurable(obj, "0");
 
-        return dataPropertyAttributesAreCorrect(obj, "0", 1002, true, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-333-7.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-333-7.js
index 4f15006f1e..fd7dcdef7a 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-333-7.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-333-7.js
@@ -11,25 +11,27 @@ description: >
     property 'P' successfully when [[Configurable]] attribute is
     false, [[Writable]] attribute is true and 'A' is an Array object
     (8.12.9 - step 10)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = [];
+var obj = [];
 
-        Object.defineProperty(obj, "prop", {
-            value: 1001,
-            writable: true,
-            configurable: false
-        });
+Object.defineProperty(obj, "prop", {
+    value: 1001,
+    writable: true,
+    configurable: false
+});
 
-        Object.defineProperty(obj, "prop", {
-            value: 1002
-        });
+Object.defineProperty(obj, "prop", {
+    value: 1002
+});
+
+verifyEqualTo(obj, "prop", 1002);
+
+verifyWritable(obj, "prop");
+
+verifyNotEnumerable(obj, "prop");
+
+verifyNotConfigurable(obj, "prop");
 
-        return dataPropertyAttributesAreCorrect(obj, "prop", 1002, true, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-333-8.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-333-8.js
index 89d18fed0c..14962c4672 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-333-8.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-333-8.js
@@ -11,27 +11,29 @@ description: >
     property 'P'successfully when [[Configurable]] attribute is false,
     [[Writable]] attribute is true and 'O' is an Arguments object
     (8.12.9 - step 10)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = (function () {
-            return arguments;
-        }());
+var obj = (function () {
+    return arguments;
+}());
 
-        Object.defineProperty(obj, "0", {
-            value: 1001,
-            writable: true,
-            configurable: false
-        });
+Object.defineProperty(obj, "0", {
+    value: 1001,
+    writable: true,
+    configurable: false
+});
 
-        Object.defineProperty(obj, "0", {
-            value: 1002
-        });
+Object.defineProperty(obj, "0", {
+    value: 1002
+});
+
+verifyEqualTo(obj, "0", 1002);
+
+verifyWritable(obj, "0");
+
+verifyNotEnumerable(obj, "0");
+
+verifyNotConfigurable(obj, "0");
 
-        return dataPropertyAttributesAreCorrect(obj, "0", 1002, true, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-354-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-354-1.js
index 6df341a796..8a0ec1cfe8 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-354-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-354-1.js
@@ -11,25 +11,27 @@ description: >
     property 'P' successfully when [[Configurable]] attribute is true
     and [[Writable]] attribute is false, 'O' is an Object object
     (8.12.9 step - Note)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "property", {
-            value: 1001,
-            writable: false,
-            configurable: true
-        });
+Object.defineProperty(obj, "property", {
+    value: 1001,
+    writable: false,
+    configurable: true
+});
 
-        Object.defineProperty(obj, "property", {
-            value: 1002
-        });
+Object.defineProperty(obj, "property", {
+    value: 1002
+});
+
+verifyEqualTo(obj, "property", 1002);
+
+verifyNotWritable(obj, "property");
+
+verifyNotEnumerable(obj, "property");
+
+verifyConfigurable(obj, "property");
 
-        return dataPropertyAttributesAreCorrect(obj, "property", 1002, false, false, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-354-10.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-354-10.js
index be6c692264..b888037735 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-354-10.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-354-10.js
@@ -11,25 +11,27 @@ description: >
     property 'P' successfully when [[Configurable]] attribute is true
     and [[Writable]] attribute is false, 'O' is an Object object
     (8.12.9 step - Note)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "0", {
-            value: 1001,
-            writable: false,
-            configurable: true
-        });
+Object.defineProperty(obj, "0", {
+    value: 1001,
+    writable: false,
+    configurable: true
+});
 
-        Object.defineProperty(obj, "0", {
-            value: 1002
-        });
+Object.defineProperty(obj, "0", {
+    value: 1002
+});
+
+verifyEqualTo(obj, "0", 1002);
+
+verifyNotWritable(obj, "0");
+
+verifyNotEnumerable(obj, "0");
+
+verifyConfigurable(obj, "0");
 
-        return dataPropertyAttributesAreCorrect(obj, "0", 1002, false, false, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-354-11.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-354-11.js
index d93238f5fb..c82f6340f1 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-354-11.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-354-11.js
@@ -11,25 +11,27 @@ description: >
     property 'P' successfully when [[Configurable]] attribute is true
     and [[Writable]] attribute is false, 'A' is an Array object
     (8.12.9 step - Note)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = [];
+var obj = [];
 
-        Object.defineProperty(obj, "prop", {
-            value: 1001,
-            writable: false,
-            configurable: true
-        });
+Object.defineProperty(obj, "prop", {
+    value: 1001,
+    writable: false,
+    configurable: true
+});
 
-        Object.defineProperty(obj, "prop", {
-            value: 1002
-        });
+Object.defineProperty(obj, "prop", {
+    value: 1002
+});
+
+verifyEqualTo(obj, "prop", 1002);
+
+verifyNotWritable(obj, "prop");
+
+verifyNotEnumerable(obj, "prop");
+
+verifyConfigurable(obj, "prop");
 
-        return dataPropertyAttributesAreCorrect(obj, "prop", 1002, false, false, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-354-12.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-354-12.js
index d3f8b3467b..f0381b5f90 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-354-12.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-354-12.js
@@ -11,27 +11,29 @@ description: >
     property successfully when [[Configurable]] attribute is true and
     [[Writable]] attribute is false, 'O' is an Arguments object
     (8.12.9 - step Note)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = (function () {
-            return arguments;
-        }());
+var obj = (function () {
+    return arguments;
+}());
 
-        Object.defineProperty(obj, "0", {
-            value: 1001,
-            writable: false,
-            configurable: true
-        });
+Object.defineProperty(obj, "0", {
+    value: 1001,
+    writable: false,
+    configurable: true
+});
 
-        Object.defineProperty(obj, "0", {
-            value: 1002
-        });
+Object.defineProperty(obj, "0", {
+    value: 1002
+});
+
+verifyEqualTo(obj, "0", 1002);
+
+verifyNotWritable(obj, "0");
+
+verifyNotEnumerable(obj, "0");
+
+verifyConfigurable(obj, "0");
 
-        return dataPropertyAttributesAreCorrect(obj, "0", 1002, false, false, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-354-13.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-354-13.js
index 3f7aece493..9c6c7f1010 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-354-13.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-354-13.js
@@ -11,30 +11,31 @@ description: >
     property successfully when [[Configurable]] attribute is true and
     [[Writable]] attribute is false, 'O' is the global object (8.12.9
     - step Note)
-includes:
-    - runTestCase.js
-    - fnGlobalObject.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js, fnGlobalObject.js]
 ---*/
 
-function testcase() {
 
-        var obj = fnGlobalObject();
+var obj = fnGlobalObject();
 
-        try {
-            Object.defineProperty(obj, "0", {
-                value: 1001,
-                writable: false,
-                configurable: true
-            });
+try {
+    Object.defineProperty(obj, "0", {
+        value: 1001,
+        writable: false,
+        configurable: true
+    });
 
-            Object.defineProperty(obj, "0", {
-                value: 1002
-            });
+    Object.defineProperty(obj, "0", {
+        value: 1002
+    });
+
+    verifyEqualTo(obj, "0", 1002);
+
+    verifyNotWritable(obj, "0");
+
+    verifyNotEnumerable(obj, "0");
+
+    verifyConfigurable(obj, "0");
+} finally {
+    delete obj[0];
+}
 
-            return dataPropertyAttributesAreCorrect(obj, "0", 1002, false, false, true);
-        } finally {
-            delete obj[0];
-        }
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-354-2.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-354-2.js
index 3719a1991c..ce4b5919ca 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-354-2.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-354-2.js
@@ -11,25 +11,27 @@ description: >
     property 'P' successfully when [[Configurable]] attribute is true
     and [[Writable]] attribute is false, 'A' is an Array object
     (8.12.9 step - Note)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js, fnGlobalObject.js]
 ---*/
 
-function testcase() {
 
-        var obj = [];
+var obj = [];
 
-        Object.defineProperty(obj, "0", {
-            value: 1001,
-            writable: false,
-            configurable: true
-        });
+Object.defineProperty(obj, "0", {
+    value: 1001,
+    writable: false,
+    configurable: true
+});
 
-        Object.defineProperty(obj, "0", {
-            value: 1002
-        });
+Object.defineProperty(obj, "0", {
+    value: 1002
+});
+
+verifyEqualTo(obj, "0", 1002);
+
+verifyNotWritable(obj, "0");
+
+verifyNotEnumerable(obj, "0");
+
+verifyConfigurable(obj, "0");
 
-        return dataPropertyAttributesAreCorrect(obj, "0", 1002, false, false, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-354-3.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-354-3.js
index f5dfce189a..5e824ae5c9 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-354-3.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-354-3.js
@@ -10,27 +10,29 @@ description: >
     Object.defineProperty will update [[Value]] attribute successfully
     when [[Configurable]] attribute is true and [[Writable]] attribute
     is false, 'O' is an Arguments object (8.12.9 - step Note)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = (function () {
-            return arguments;
-        }());
+var obj = (function () {
+    return arguments;
+}());
 
-        Object.defineProperty(obj, "property", {
-            value: 1001,
-            writable: false,
-            configurable: true
-        });
+Object.defineProperty(obj, "property", {
+    value: 1001,
+    writable: false,
+    configurable: true
+});
 
-        Object.defineProperty(obj, "property", {
-            value: 1002
-        });
+Object.defineProperty(obj, "property", {
+    value: 1002
+});
+
+verifyEqualTo(obj, "property", 1002);
+
+verifyNotWritable(obj, "property");
+
+verifyNotEnumerable(obj, "property");
+
+verifyConfigurable(obj, "property");
 
-        return dataPropertyAttributesAreCorrect(obj, "property", 1002, false, false, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-354-4.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-354-4.js
index fc5e8d4d4b..0958aa32dd 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-354-4.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-354-4.js
@@ -10,30 +10,31 @@ description: >
     Object.defineProperty will update [[Value]] attribute successfully
     when [[Configurable]] attribute is true and [[Writable]] attribute
     is false, 'O' is the global object (8.12.9 - step Note)
-includes:
-    - runTestCase.js
-    - fnGlobalObject.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js, fnGlobalObject.js]
 ---*/
 
-function testcase() {
 
-        var obj = fnGlobalObject();
+var obj = fnGlobalObject();
 
-        try {
-            Object.defineProperty(obj, "property", {
-                value: 1001,
-                writable: false,
-                configurable: true
-            });
+try {
+    Object.defineProperty(obj, "property", {
+        value: 1001,
+        writable: false,
+        configurable: true
+    });
 
-            Object.defineProperty(obj, "property", {
-                value: 1002
-            });
+    Object.defineProperty(obj, "property", {
+        value: 1002
+    });
+
+    verifyEqualTo(obj, "property", 1002);
+
+    verifyNotWritable(obj, "property");
+
+    verifyNotEnumerable(obj, "property");
+
+    verifyConfigurable(obj, "property");
+} finally {
+    delete obj.property;
+}
 
-            return dataPropertyAttributesAreCorrect(obj, "property", 1002, false, false, true);
-        } finally {
-            delete obj.property;
-        }
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-360-7.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-360-7.js
index dee88492bf..909ce5308b 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-360-7.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-360-7.js
@@ -11,35 +11,44 @@ description: >
     attributes are [[Writable]]: false, [[Enumerable]]: true,
     [[Configurable]]: true to an accessor property, 'O' is the global
     object (8.12.9 - step 9.b.i)
-includes:
-    - runTestCase.js
-    - fnGlobalObject.js
+includes: [propertyHelper.js, fnGlobalObject.js]
 ---*/
 
-function testcase() {
-        var obj = fnGlobalObject();
-        try {
-            Object.defineProperty(obj, "0", {
-                value: 2010,
-                writable: false,
-                enumerable: true,
-                configurable: true
-            });
-            var desc1 = Object.getOwnPropertyDescriptor(obj, "0");
-
-            function getFunc() {
-                return 20;
-            }
-            Object.defineProperty(obj, "0", {
-                get: getFunc
-            });
-            var desc2 = Object.getOwnPropertyDescriptor(obj, "0");
-
-            return desc1.hasOwnProperty("value") && desc2.hasOwnProperty("get") &&
-                desc2.enumerable === true && desc2.configurable === true &&
-                obj[0] === 20 && typeof desc2.set === "undefined" && desc2.get === getFunc;
-        } finally {
-            delete obj[0];
-        }
+function getFunc() {
+        return 20;
     }
-runTestCase(testcase);
+
+var obj = fnGlobalObject();
+try {
+    Object.defineProperty(obj, "0", {
+        value: 2010,
+        writable: false,
+        enumerable: true,
+        configurable: true
+    });
+    var desc1 = Object.getOwnPropertyDescriptor(obj, "0");
+
+    Object.defineProperty(obj, "0", {
+        get: getFunc
+    });
+    var desc2 = Object.getOwnPropertyDescriptor(obj, "0");
+
+    if (!Object.prototype.hasOwnProperty.call(desc1, "value")) {
+        $ERROR("Expected to find ownProperty 'value'");
+    }
+
+    if (!(desc2.hasOwnProperty("get") && desc2.enumerable === true && 
+          desc2.configurable === true && obj[0] === 20 && 
+          (typeof desc2.set === "undefined") && desc2.get === getFunc)) {
+        $ERROR("Expected desc2 to be as configured.");
+    }
+
+    verifyEqualTo(obj, "0", getFunc());
+
+    verifyEnumerable(obj, "0");
+
+    verifyConfigurable(obj, "0");
+
+} finally {
+    delete obj[0];
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-38.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-38.js
index ed21f85422..fd2189dd33 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-38.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-38.js
@@ -10,21 +10,23 @@ description: >
     Object.defineProperty - 'O' is the Math object that uses Object's
     [[GetOwnProperty]] method to access the 'name' property (8.12.9
     step 1)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        try {
-            Object.defineProperty(Math, "foo", {
-                value: 12,
-                configurable: true
-            });
-        
-            return dataPropertyAttributesAreCorrect(Math, "foo", 12, false, false, true);
-        } finally {
-            delete Math.foo;
-        }
-    }
-runTestCase(testcase);
+try {
+    Object.defineProperty(Math, "foo", {
+        value: 12,
+        configurable: true
+    });
+    
+    verifyEqualTo(Math, "foo", 12);
+
+    verifyNotWritable(Math, "foo");
+
+    verifyNotEnumerable(Math, "foo");
+
+    verifyConfigurable(Math, "foo");
+} finally {
+    delete Math.foo;
+}
+
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-41.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-41.js
index 895eeff91a..fbf40e15c6 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-41.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-41.js
@@ -10,22 +10,22 @@ description: >
     Object.defineProperty - 'O' is the JSON object that uses Object's
     [[GetOwnProperty]] method to access the 'name' property (8.12.9
     step 1)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        try {
-            Object.defineProperty(JSON, "foo", {
-                value: 12,
-                configurable: true
-            });
+Object.defineProperty(JSON, "foo", {
+value: 12,
+configurable: true
+});
+
+verifyEqualTo(JSON, "foo", 12);
+
+verifyNotWritable(JSON, "foo");
+
+verifyNotEnumerable(JSON, "foo");
+
+verifyConfigurable(JSON, "foo");
+
+delete JSON.foo;
 
-            return dataPropertyAttributesAreCorrect(JSON, "foo", 12, false, false, true);
-        } finally {
-            delete JSON.foo;
-        }
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-45.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-45.js
index ced4ff42fa..337ce1e7db 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-45.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-45.js
@@ -10,22 +10,18 @@ description: >
     Object.defineProperty - 'O' is the global object that uses
     Object's [[GetOwnProperty]] method to access the 'name' property
     (8.12.9 step 1)
-includes:
-    - runTestCase.js
-    - fnGlobalObject.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js, fnGlobalObject.js]
 ---*/
 
-function testcase() {
-        try {
-            Object.defineProperty(fnGlobalObject(), "foo", {
-                value: 12,
-                configurable: true
-            });
+Object.defineProperty(fnGlobalObject(), "foo", {
+    value: 12,
+    configurable: true
+});
 
-            return dataPropertyAttributesAreCorrect(fnGlobalObject(), "foo", 12, false, false, true);
-        } finally {
-            delete fnGlobalObject().foo;
-        }
-    }
-runTestCase(testcase);
+verifyEqualTo(fnGlobalObject(), "foo", 12);
+
+verifyNotWritable(fnGlobalObject(), "foo");
+
+verifyNotEnumerable(fnGlobalObject(), "foo");
+
+verifyConfigurable(fnGlobalObject(), "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-47.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-47.js
index ed2dec6ae0..b5d193705d 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-47.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-47.js
@@ -10,20 +10,22 @@ description: >
     Object.defineProperty - 'name' property doesn't exist in 'O',
     [[Value]] of 'name' property is set as undefined if it is absent
     in data descriptor 'desc' (8.12.9 step 4.a.i)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "property", {
-            writable: true,
-            enumerable: true,
-            configurable: false
-        });
+Object.defineProperty(obj, "property", {
+    writable: true,
+    enumerable: true,
+    configurable: false
+});
+
+verifyEqualTo(obj, "property", undefined);
+
+verifyWritable(obj, "property");
+
+verifyEnumerable(obj, "property");
+
+verifyNotConfigurable(obj, "property");
 
-        return dataPropertyAttributesAreCorrect(obj, "property", undefined, true, true, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-48.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-48.js
index 602305b605..6ce013387b 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-48.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-48.js
@@ -10,20 +10,22 @@ description: >
     Object.defineProperty - 'name' property doesn't exist in 'O', test
     [[Writable]] of 'name' property of 'Attributes' is set as false
     value if absent in data descriptor 'desc' (8.12.9 step 4.a.i)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "property", {
-            value: 1001,
-            enumerable: true,
-            configurable: false
-        });
+Object.defineProperty(obj, "property", {
+    value: 1001,
+    enumerable: true,
+    configurable: false
+});
+
+verifyEqualTo(obj, "property", 1001);
+
+verifyNotWritable(obj, "property");
+
+verifyEnumerable(obj, "property");
+
+verifyNotConfigurable(obj, "property");
 
-        return dataPropertyAttributesAreCorrect(obj, "property", 1001, false, true, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-49.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-49.js
index dcce164005..e55dcba156 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-49.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-49.js
@@ -10,19 +10,21 @@ description: >
     Object.defineProperty - 'name' property doesn't exist in 'O', test
     [[Enumerable]] of 'name' property of 'Attributes' is set as false
     value if absent in data descriptor 'desc' (8.12.9 step 4.a.i)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+    value: 1001,
+    writable: true,
+    configurable: true
+});
+verifyEqualTo(obj, "property", 1001);
+
+verifyWritable(obj, "property");
+
+verifyNotEnumerable(obj, "property");
+
+verifyConfigurable(obj, "property");
 
-        Object.defineProperty(obj, "property", {
-            value: 1001,
-            writable: true,
-            configurable: true
-        });
-        return dataPropertyAttributesAreCorrect(obj, "property", 1001, true, false, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-50.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-50.js
index 30d55351bf..f983d62721 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-50.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-50.js
@@ -10,19 +10,21 @@ description: >
     Object.defineProperty - 'name' property doesn't exist in 'O', test
     [[Configurable]] of 'name' property is set as false if it is
     absent in data descriptor 'desc' (8.12.9 step 4.a.i)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+    value: 1001,
+    writable: true,
+    enumerable: true
+});
+verifyEqualTo(obj, "property", 1001);
+
+verifyWritable(obj, "property");
+
+verifyEnumerable(obj, "property");
+
+verifyNotConfigurable(obj, "property");
 
-        Object.defineProperty(obj, "property", {
-            value: 1001,
-            writable: true,
-            enumerable: true
-        });
-        return dataPropertyAttributesAreCorrect(obj, "property", 1001, true, true, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-51.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-51.js
index e865661aa5..87cfab0438 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-51.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-51.js
@@ -9,21 +9,23 @@ es5id: 15.2.3.6-4-51
 description: >
     Object.defineProperty - desc is data descriptor, test updating all
     attribute values of 'name' (8.12.9 step 4.a.i)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = { "property": 1 }; // default value of attributes: writable: true, configurable: true, enumerable: true
+var obj = { "property": 1 }; // default value of attributes: writable: true, configurable: true, enumerable: true
 
-        Object.defineProperty(obj, "property", {
-            value: 1001,
-            writable: false,
-            enumerable: false,
-            configurable: false
-        });
+Object.defineProperty(obj, "property", {
+    value: 1001,
+    writable: false,
+    enumerable: false,
+    configurable: false
+});
+
+verifyEqualTo(obj, "property", 1001);
+
+verifyNotWritable(obj, "property");
+
+verifyNotEnumerable(obj, "property");
+
+verifyNotConfigurable(obj, "property");
 
-        return dataPropertyAttributesAreCorrect(obj, "property", 1001, false, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-52.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-52.js
index 416aeac5f6..cc6e4b8c9c 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-52.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-52.js
@@ -10,16 +10,18 @@ description: >
     Object.defineProperty - 'desc' is generic descriptor without any
     attribute, test 'name' is defined in 'obj' with all default
     attribute values (8.12.9 step 4.a.i)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "property", {});
+Object.defineProperty(obj, "property", {});
+
+verifyEqualTo(obj, "property", undefined);
+
+verifyNotWritable(obj, "property");
+
+verifyNotEnumerable(obj, "property");
+
+verifyNotConfigurable(obj, "property");
 
-        return dataPropertyAttributesAreCorrect(obj, "property", undefined, false, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-53.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-53.js
index 5076fe14dd..79784c6b73 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-53.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-53.js
@@ -10,23 +10,22 @@ description: >
     Object.defineProperty - 'name' property doesn't exist in 'O', test
     [[Get]] of 'name' property is set as undefined if it is absent in
     accessor descriptor 'desc' (8.12.9 step 4.b)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
-        var setFunc = function (value) {
-            obj.setVerifyHelpProp = value;
-        };
+var obj = {};
+var setFunc = function (value) {
+    obj.setVerifyHelpProp = value;
+};
 
-        Object.defineProperty(obj, "property", {
-            set: setFunc,
-            enumerable: true,
-            configurable: true
-        });
+Object.defineProperty(obj, "property", {
+    set: setFunc,
+    enumerable: true,
+    configurable: true
+});
 
-        return accessorPropertyAttributesAreCorrect(obj, "property", undefined, setFunc, "setVerifyHelpProp", true, true);
-    }
-runTestCase(testcase);
+verifyWritable(obj, "property", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "property");
+
+verifyConfigurable(obj, "property");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-531-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-531-1.js
index c361ec258d..f775b7597f 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-531-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-531-1.js
@@ -10,38 +10,39 @@ description: >
     Object.defineProperty will update [[Get]] and [[Set]] attributes
     of named accessor property 'P' successfully when [[Configurable]]
     attribute is true, 'O' is an Object object (8.12.9 step 11)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-        obj.verifySetFunction = "data";
-        Object.defineProperty(obj, "property", {
-            get: function () {
-                return obj.verifySetFunction;
-            },
-            set: function (value) {
-                obj.verifySetFunction = value;
-            },
-            configurable: true
-        });
-
-        obj.verifySetFunction1 = "data1";
-        var getFunc = function () {
-            return obj.verifySetFunction1;
-        };
-        var setFunc = function (value) {
-            obj.verifySetFunction1 = value;
-        };
-
-        Object.defineProperty(obj, "property", {
-            get: getFunc,
-            set: setFunc
-        });
-
-        return accessorPropertyAttributesAreCorrect(obj, "property", getFunc, setFunc, "verifySetFunction1", false, true);
-    }
-runTestCase(testcase);
+
+var obj = {};
+obj.verifySetFunction = "data";
+Object.defineProperty(obj, "property", {
+    get: function () {
+        return obj.verifySetFunction;
+    },
+    set: function (value) {
+        obj.verifySetFunction = value;
+    },
+    configurable: true
+});
+
+obj.verifySetFunction1 = "data1";
+var getFunc = function () {
+    return obj.verifySetFunction1;
+};
+var setFunc = function (value) {
+    obj.verifySetFunction1 = value;
+};
+
+Object.defineProperty(obj, "property", {
+    get: getFunc,
+    set: setFunc
+});
+
+verifyEqualTo(obj, "property", getFunc());
+
+verifyWritable(obj, "property", "verifySetFunction1");
+
+verifyNotEnumerable(obj, "property");
+
+verifyConfigurable(obj, "property");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-531-10.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-531-10.js
index 4a98234062..b849c330a5 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-531-10.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-531-10.js
@@ -11,39 +11,40 @@ description: >
     of indexed accessor property 'P' successfully when
     [[Configurable]] attribute is true, 'O' is an Object object
     (8.12.9 step 11)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        obj.verifySetFunction = "data";
-        Object.defineProperty(obj, "0", {
-            get: function () {
-                return obj.verifySetFunction;
-            },
-            set: function (value) {
-                obj.verifySetFunction = value;
-            },
-            configurable: true
-        });
-
-        obj.verifySetFunction1 = "data1";
-        var getFunc = function () {
-            return obj.verifySetFunction1;
-        };
-        var setFunc = function (value) {
-            obj.verifySetFunction1 = value;
-        };
-
-        Object.defineProperty(obj, "0", {
-            get: getFunc,
-            set: setFunc
-        });
-
-        return accessorPropertyAttributesAreCorrect(obj, "0", getFunc, setFunc, "verifySetFunction1", false, true);
-    }
-runTestCase(testcase);
+
+var obj = {};
+
+obj.verifySetFunction = "data";
+Object.defineProperty(obj, "0", {
+    get: function () {
+        return obj.verifySetFunction;
+    },
+    set: function (value) {
+        obj.verifySetFunction = value;
+    },
+    configurable: true
+});
+
+obj.verifySetFunction1 = "data1";
+var getFunc = function () {
+    return obj.verifySetFunction1;
+};
+var setFunc = function (value) {
+    obj.verifySetFunction1 = value;
+};
+
+Object.defineProperty(obj, "0", {
+    get: getFunc,
+    set: setFunc
+});
+
+verifyEqualTo(obj, "0", getFunc());
+
+verifyWritable(obj, "0", "verifySetFunction1");
+
+verifyNotEnumerable(obj, "0");
+
+verifyConfigurable(obj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-531-11.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-531-11.js
index b2a8871a5c..22b4b2774e 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-531-11.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-531-11.js
@@ -10,39 +10,40 @@ description: >
     Object.defineProperty will update [[Get]] and [[Set]] attributes
     of named accessor property 'P' successfully when [[Configurable]]
     attribute is true, 'A' is an Array object (8.12.9 step 11)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = [];
-
-        obj.verifySetFunction = "data";
-        Object.defineProperty(obj, "prop", {
-            get: function () {
-                return obj.verifySetFunction;
-            },
-            set: function (value) {
-                obj.verifySetFunction = value;
-            },
-            configurable: true
-        });
-
-        obj.verifySetFunction1 = "data1";
-        var getFunc = function () {
-            return obj.verifySetFunction1;
-        };
-        var setFunc = function (value) {
-            obj.verifySetFunction1 = value;
-        };
-
-        Object.defineProperty(obj, "prop", {
-            get: getFunc,
-            set: setFunc
-        });
-
-        return accessorPropertyAttributesAreCorrect(obj, "prop", getFunc, setFunc, "verifySetFunction1", false, true);
-    }
-runTestCase(testcase);
+
+var obj = [];
+
+obj.verifySetFunction = "data";
+Object.defineProperty(obj, "prop", {
+    get: function () {
+        return obj.verifySetFunction;
+    },
+    set: function (value) {
+        obj.verifySetFunction = value;
+    },
+    configurable: true
+});
+
+obj.verifySetFunction1 = "data1";
+var getFunc = function () {
+    return obj.verifySetFunction1;
+};
+var setFunc = function (value) {
+    obj.verifySetFunction1 = value;
+};
+
+Object.defineProperty(obj, "prop", {
+    get: getFunc,
+    set: setFunc
+});
+
+verifyEqualTo(obj, "prop", getFunc());
+
+verifyWritable(obj, "prop", "verifySetFunction1");
+
+verifyNotEnumerable(obj, "prop");
+
+verifyConfigurable(obj, "prop");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-531-12.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-531-12.js
index ee06fc8999..eacd44a572 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-531-12.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-531-12.js
@@ -10,41 +10,42 @@ description: >
     Object.defineProperty will update [[Get]] and [[Set]] attributes
     of indexed accessor property successfully when [[Configurable]]
     attribute is true, 'O' is an Arguments object (8.12.9 step 11)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = (function () {
-            return arguments;
-        }());
-
-        obj.verifySetFunction = "data";
-        Object.defineProperty(obj, "0", {
-            get: function () {
-                return obj.verifySetFunction;
-            },
-            set: function (value) {
-                obj.verifySetFunction = value;
-            },
-            configurable: true
-        });
-
-        obj.verifySetFunction1 = "data1";
-        var getFunc = function () {
-            return obj.verifySetFunction1;
-        };
-        var setFunc = function (value) {
-            obj.verifySetFunction1 = value;
-        };
-
-        Object.defineProperty(obj, "0", {
-            get: getFunc,
-            set: setFunc
-        });
-
-        return accessorPropertyAttributesAreCorrect(obj, "0", getFunc, setFunc, "verifySetFunction1", false, true);
-    }
-runTestCase(testcase);
+
+var obj = (function () {
+    return arguments;
+}());
+
+obj.verifySetFunction = "data";
+Object.defineProperty(obj, "0", {
+    get: function () {
+        return obj.verifySetFunction;
+    },
+    set: function (value) {
+        obj.verifySetFunction = value;
+    },
+    configurable: true
+});
+
+obj.verifySetFunction1 = "data1";
+var getFunc = function () {
+    return obj.verifySetFunction1;
+};
+var setFunc = function (value) {
+    obj.verifySetFunction1 = value;
+};
+
+Object.defineProperty(obj, "0", {
+    get: getFunc,
+    set: setFunc
+});
+
+verifyEqualTo(obj, "0", getFunc());
+
+verifyWritable(obj, "0", "verifySetFunction1");
+
+verifyNotEnumerable(obj, "0");
+
+verifyConfigurable(obj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-531-13.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-531-13.js
index 70f387324a..440b9c107b 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-531-13.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-531-13.js
@@ -11,45 +11,45 @@ description: >
     of indexed accessor property 'P' successfully when
     [[Configurable]] attribute is true, 'O' is the global object
     (8.12.9 step 11)
-includes:
-    - runTestCase.js
-    - fnGlobalObject.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js, fnGlobalObject.js]
 ---*/
 
-function testcase() {
-
-        var obj = fnGlobalObject();
-        try {
-            obj.verifySetFunction = "data";
-            Object.defineProperty(obj, "0", {
-                get: function () {
-                    return obj.verifySetFunction;
-                },
-                set: function (value) {
-                    obj.verifySetFunction = value;
-                },
-                configurable: true
-            });
-
-            obj.verifySetFunction1 = "data1";
-            var getFunc = function () {
-                return obj.verifySetFunction1;
-            };
-            var setFunc = function (value) {
-                obj.verifySetFunction1 = value;
-            };
-
-            Object.defineProperty(obj, "0", {
-                get: getFunc,
-                set: setFunc
-            });
-
-            return accessorPropertyAttributesAreCorrect(obj, "0", getFunc, setFunc, "verifySetFunction1", false, true);
-        } finally {
-            delete obj[0];
-            delete obj.verifySetFunction;
-            delete obj.verifySetFunction1;
-        }
-    }
-runTestCase(testcase);
+
+var obj = fnGlobalObject();
+try {
+    obj.verifySetFunction = "data";
+    Object.defineProperty(obj, "0", {
+        get: function () {
+            return obj.verifySetFunction;
+        },
+        set: function (value) {
+            obj.verifySetFunction = value;
+        },
+        configurable: true
+    });
+
+    obj.verifySetFunction1 = "data1";
+    var getFunc = function () {
+        return obj.verifySetFunction1;
+    };
+    var setFunc = function (value) {
+        obj.verifySetFunction1 = value;
+    };
+
+    Object.defineProperty(obj, "0", {
+        get: getFunc,
+        set: setFunc
+    });
+
+    verifyEqualTo(obj, "0", getFunc());
+
+    verifyWritable(obj, "0", "verifySetFunction1");
+
+    verifyNotEnumerable(obj, "0");
+
+    verifyConfigurable(obj, "0");
+} finally {
+    delete obj[0];
+    delete obj.verifySetFunction;
+    delete obj.verifySetFunction1;
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-531-2.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-531-2.js
index e705a17bd7..15baa9b12e 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-531-2.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-531-2.js
@@ -11,39 +11,40 @@ description: >
     of indexed accessor property 'P' successfully when
     [[Configurable]] attribute is true, 'A' is an Array object (8.12.9
     step 11)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = [];
-
-        obj.verifySetFunction = "data";
-        Object.defineProperty(obj, "0", {
-            get: function () {
-                return obj.verifySetFunction;
-            },
-            set: function (value) {
-                obj.verifySetFunction = value;
-            },
-            configurable: true
-        });
-
-        obj.verifySetFunction1 = "data1";
-        var getFunc = function () {
-            return obj.verifySetFunction1;
-        };
-        var setFunc = function (value) {
-            obj.verifySetFunction1 = value;
-        };
-
-        Object.defineProperty(obj, "0", {
-            get: getFunc,
-            set: setFunc
-        });
-
-        return accessorPropertyAttributesAreCorrect(obj, "0", getFunc, setFunc, "verifySetFunction1", false, true);
-    }
-runTestCase(testcase);
+
+var obj = [];
+
+obj.verifySetFunction = "data";
+Object.defineProperty(obj, "0", {
+    get: function () {
+        return obj.verifySetFunction;
+    },
+    set: function (value) {
+        obj.verifySetFunction = value;
+    },
+    configurable: true
+});
+
+obj.verifySetFunction1 = "data1";
+var getFunc = function () {
+    return obj.verifySetFunction1;
+};
+var setFunc = function (value) {
+    obj.verifySetFunction1 = value;
+};
+
+Object.defineProperty(obj, "0", {
+    get: getFunc,
+    set: setFunc
+});
+
+verifyEqualTo(obj, "0", getFunc());
+
+verifyWritable(obj, "0", "verifySetFunction1");
+
+verifyNotEnumerable(obj, "0");
+
+verifyConfigurable(obj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-531-3.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-531-3.js
index 85fe3ca930..458556b0da 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-531-3.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-531-3.js
@@ -10,41 +10,42 @@ description: >
     Object.defineProperty will update [[Get]] and [[Set]] attributes
     of named accessor property successfully when [[Configurable]]
     attribute is true, 'O' is an Arguments object (8.12.9 step 11)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = (function () {
-            return arguments;
-        }());
-
-        obj.verifySetFunction = "data";
-        Object.defineProperty(obj, "property", {
-            get: function () {
-                return obj.verifySetFunction;
-            },
-            set: function (value) {
-                obj.verifySetFunction = value;
-            },
-            configurable: true
-        });
-
-        obj.verifySetFunction1 = "data1";
-        var getFunc = function () {
-            return obj.verifySetFunction1;
-        };
-        var setFunc = function (value) {
-            obj.verifySetFunction1 = value;
-        };
-
-        Object.defineProperty(obj, "property", {
-            get: getFunc,
-            set: setFunc
-        });
-
-        return accessorPropertyAttributesAreCorrect(obj, "property", getFunc, setFunc, "verifySetFunction1", false, true);
-    }
-runTestCase(testcase);
+
+var obj = (function () {
+    return arguments;
+}());
+
+obj.verifySetFunction = "data";
+Object.defineProperty(obj, "property", {
+    get: function () {
+        return obj.verifySetFunction;
+    },
+    set: function (value) {
+        obj.verifySetFunction = value;
+    },
+    configurable: true
+});
+
+obj.verifySetFunction1 = "data1";
+var getFunc = function () {
+    return obj.verifySetFunction1;
+};
+var setFunc = function (value) {
+    obj.verifySetFunction1 = value;
+};
+
+Object.defineProperty(obj, "property", {
+    get: getFunc,
+    set: setFunc
+});
+
+verifyEqualTo(obj, "property", getFunc());
+
+verifyWritable(obj, "property", "verifySetFunction1");
+
+verifyNotEnumerable(obj, "property");
+
+verifyConfigurable(obj, "property");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-531-4.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-531-4.js
index b0f2a80347..54a4956613 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-531-4.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-531-4.js
@@ -10,45 +10,45 @@ description: >
     Object.defineProperty will update [[Get]] and [[Set]] attributes
     of named accessor property 'P' successfully when [[Configurable]]
     attribute is true, 'O' is the global object (8.12.9 step 11)
-includes:
-    - runTestCase.js
-    - fnGlobalObject.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js, fnGlobalObject.js]
 ---*/
 
-function testcase() {
-
-        var obj = fnGlobalObject();
-        try {
-            obj.verifySetFunction = "data";
-            Object.defineProperty(obj, "property", {
-                get: function () {
-                    return obj.verifySetFunction;
-                },
-                set: function (value) {
-                    obj.verifySetFunction = value;
-                },
-                configurable: true
-            });
-
-            obj.verifySetFunction1 = "data1";
-            var getFunc = function () {
-                return obj.verifySetFunction1;
-            };
-            var setFunc = function (value) {
-                obj.verifySetFunction1 = value;
-            };
-
-            Object.defineProperty(obj, "property", {
-                get: getFunc,
-                set: setFunc
-            });
-
-            return accessorPropertyAttributesAreCorrect(obj, "property", getFunc, setFunc, "verifySetFunction1", false, true);
-        } finally {
-            delete obj.property;
-            delete obj.verifySetFunction;
-            delete obj.verifySetFunction1;
-        }
-    }
-runTestCase(testcase);
+
+var obj = fnGlobalObject();
+try {
+    obj.verifySetFunction = "data";
+    Object.defineProperty(obj, "property", {
+        get: function () {
+            return obj.verifySetFunction;
+        },
+        set: function (value) {
+            obj.verifySetFunction = value;
+        },
+        configurable: true
+    });
+
+    obj.verifySetFunction1 = "data1";
+    var getFunc = function () {
+        return obj.verifySetFunction1;
+    };
+    var setFunc = function (value) {
+        obj.verifySetFunction1 = value;
+    };
+
+    Object.defineProperty(obj, "property", {
+        get: getFunc,
+        set: setFunc
+    });
+
+    verifyEqualTo(obj, "property", getFunc());
+
+    verifyWritable(obj, "property", "verifySetFunction1");
+
+    verifyNotEnumerable(obj, "property");
+
+    verifyConfigurable(obj, "property");
+} finally {
+    delete obj.property;
+    delete obj.verifySetFunction;
+    delete obj.verifySetFunction1;
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-538-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-538-1.js
index ce59418d56..99918d5634 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-538-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-538-1.js
@@ -10,38 +10,53 @@ description: >
     ES5 Attributes - Updating an indexed 'P' whose [[Configurable]]
     attribute is true to a data property is successful, 'A' is an
     Array object (8.12.9 - step 9.c.i)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = [];
-
-        obj.verifySetFunc = "data";
-        var getFunc = function () {
-            return obj.verifySetFunc;
-        };
-
-        var setFunc = function (value) {
-            obj.verifySetFunc = value;
-        };
-
-        Object.defineProperty(obj, "0", {
-            get: getFunc,
-            set: setFunc,
-            enumerable: true,
-            configurable: true
-        });
-        var desc1 = Object.getOwnPropertyDescriptor(obj, "0");
-
-        Object.defineProperty(obj, "0", {
-            value: 1001
-        });
-        var desc2 = Object.getOwnPropertyDescriptor(obj, "0");
-
-        return desc1.hasOwnProperty("get") && desc2.hasOwnProperty("value") &&
-            typeof desc2.get === "undefined" && typeof desc2.get === "undefined" &&
-            dataPropertyAttributesAreCorrect(obj, "0", 1001, false, true, true);
-    }
-runTestCase(testcase);
+var obj = [];
+
+obj.verifySetFunc = "data";
+var getFunc = function () {
+    return obj.verifySetFunc;
+};
+
+var setFunc = function (value) {
+    obj.verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "0", {
+    get: getFunc,
+    set: setFunc,
+    enumerable: true,
+    configurable: true
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "0");
+
+Object.defineProperty(obj, "0", {
+    value: 1001
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "0");
+
+if (!desc1.hasOwnProperty("get")) {
+    $ERROR('Expected desc1.hasOwnProperty("get") to be true, actually ' + desc1.hasOwnProperty("get"));
+}
+
+if (!desc2.hasOwnProperty("value")) {
+    $ERROR('Expected desc2.hasOwnProperty("value") to be true, actually ' + desc2.hasOwnProperty("value"));
+}
+
+if (typeof desc2.get !== "undefined") {
+    $ERROR('Expected typeof desc2.get === "undefined", actually ' + typeof desc2.get);
+}
+
+if (typeof desc2.set !== "undefined") {
+    $ERROR('Expected typeof desc2.set === "undefined", actually ' + typeof desc2.set);
+}
+
+verifyEqualTo(obj, "0", 1001);
+
+verifyNotWritable(obj, "0");
+
+verifyEnumerable(obj, "0");
+
+verifyConfigurable(obj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-538-2.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-538-2.js
index d40aa701bf..86e34a4f32 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-538-2.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-538-2.js
@@ -10,40 +10,57 @@ description: >
     ES5 Attributes - Updating a named accessor property 'P' whose
     [[Configurable]] attribute is true to a data property is
     successful, 'O' is an Arguments object
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = (function () {
-            return arguments;
-        }());
-
-        obj.verifySetFunc = "data";
-        var getFunc = function () {
-            return obj.verifySetFunc;
-        };
-
-        var setFunc = function (value) {
-            obj.verifySetFunc = value;
-        };
-
-        Object.defineProperty(obj, "prop", {
-            get: getFunc,
-            set: setFunc,
-            enumerable: true,
-            configurable: true
-        });
-        var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
-
-        Object.defineProperty(obj, "prop", {
-            value: 1001
-        });
-        var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
-
-        return desc1.hasOwnProperty("get") && desc2.hasOwnProperty("value") &&
-            typeof desc2.get === "undefined" && typeof desc2.get === "undefined" &&
-            dataPropertyAttributesAreCorrect(obj, "prop", 1001, false, true, true);
-    }
-runTestCase(testcase);
+var obj = (function () {
+    return arguments;
+}());
+
+obj.verifySetFunc = "data";
+var getFunc = function () {
+    return obj.verifySetFunc;
+};
+
+var setFunc = function (value) {
+    obj.verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+    get: getFunc,
+    set: setFunc,
+    enumerable: true,
+    configurable: true
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+    value: 1001
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+if (!desc1.hasOwnProperty("get") ) {
+    $ERROR('Expected desc1.hasOwnProperty("get") to be true, actually ' + desc1.hasOwnProperty("get"));
+}
+
+if (!desc2.hasOwnProperty("value") ) {
+    $ERROR('Expected desc2.hasOwnProperty("value") to be true, actually ' + desc2.hasOwnProperty("value"));
+}
+
+if (typeof desc2.get !== "undefined" ) {
+    $ERROR('Expected typeof desc2.get === "undefined" , actually ' + typeof desc2.get );
+}
+
+if (typeof desc2.set !== "undefined" ) {
+    $ERROR('Expected typeof desc2.set === "undefined" , actually ' + typeof desc2.set );
+}
+
+verifyEqualTo(obj, "prop", 1001);
+
+verifyNotWritable(obj, "prop");
+
+verifyEnumerable(obj, "prop");
+
+verifyConfigurable(obj, "prop");
+
+
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-538-3.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-538-3.js
index 5f1078e3d6..2f247104aa 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-538-3.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-538-3.js
@@ -10,43 +10,59 @@ description: >
     ES5 Attributes - Updating a named accessor property 'P' whose
     [[Configurable]] attribute is true to a data property is
     successful, 'O' is the global object
-includes:
-    - runTestCase.js
-    - fnGlobalObject.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js, fnGlobalObject.js]
 ---*/
 
-function testcase() {
-        var obj = fnGlobalObject();
-
-        obj.verifySetFunc = "data";
-        var getFunc = function () {
-            return obj.verifySetFunc;
-        };
-
-        var setFunc = function (value) {
-            obj.verifySetFunc = value;
-        };
-        try {
-            Object.defineProperty(obj, "prop", {
-                get: getFunc,
-                set: setFunc,
-                enumerable: true,
-                configurable: true
-            });
-            var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
-
-            Object.defineProperty(obj, "prop", {
-                value: 1001
-            });
-            var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
-
-            return desc1.hasOwnProperty("get") && desc2.hasOwnProperty("value") &&
-                typeof desc2.get === "undefined" && typeof desc2.get === "undefined" &&
-                dataPropertyAttributesAreCorrect(obj, "prop", 1001, false, true, true);
-        } finally {
-            delete obj.prop;
-            delete obj.verifySetFunc;
-        }
+var obj = fnGlobalObject();
+
+obj.verifySetFunc = "data";
+var getFunc = function () {
+    return obj.verifySetFunc;
+};
+
+var setFunc = function (value) {
+    obj.verifySetFunc = value;
+};
+try {
+    Object.defineProperty(obj, "prop", {
+        get: getFunc,
+        set: setFunc,
+        enumerable: true,
+        configurable: true
+    });
+    var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+    Object.defineProperty(obj, "prop", {
+        value: 1001
+    });
+    var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+    if (!desc1.hasOwnProperty("get")) {
+        $ERROR('Expected desc1.hasOwnProperty("get") to be true, actually ' + desc1.hasOwnProperty("get"));
     }
-runTestCase(testcase);
+
+    if (!desc2.hasOwnProperty("value")) {
+        $ERROR('Expected desc2.hasOwnProperty("value") to be true, actually ' + desc2.hasOwnProperty("value"));
+    }
+    
+    if (typeof desc2.get !== "undefined") {
+        $ERROR('Expected typeof desc2.get === "undefined", actually ' + typeof desc2.get);
+    }
+
+    if (typeof desc2.set !== "undefined") {
+        $ERROR('Expected typeof desc2.set === "undefined", actually ' + typeof desc2.set);
+    }
+
+    verifyEqualTo(obj, "prop", 1001);
+
+    verifyNotWritable(obj, "prop");
+
+    verifyEnumerable(obj, "prop");
+
+    verifyConfigurable(obj, "prop");
+
+} finally {
+    delete obj.prop;
+    delete obj.verifySetFunc;
+}
+
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-538-5.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-538-5.js
index e6b8c1596a..4cf7c3c4e4 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-538-5.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-538-5.js
@@ -10,38 +10,56 @@ description: >
     ES5 Attributes - Updating a named accessor property 'P' whose
     [[Configurable]] attribute is true to a data property is
     successful, 'A' is an Array object (8.12.9 - step 9.c.i)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = [];
-
-        obj.verifySetFunc = "data";
-        var getFunc = function () {
-            return obj.verifySetFunc;
-        };
-
-        var setFunc = function (value) {
-            obj.verifySetFunc = value;
-        };
-
-        Object.defineProperty(obj, "prop", {
-            get: getFunc,
-            set: setFunc,
-            enumerable: true,
-            configurable: true
-        });
-        var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
-
-        Object.defineProperty(obj, "prop", {
-            value: 1001
-        });
-        var desc2 = Object.getOwnPropertyDescriptor(obj, "prop"); 
-
-        return desc1.hasOwnProperty("get") && desc2.hasOwnProperty("value") &&
-            typeof desc2.get === "undefined" && typeof desc2.get === "undefined" &&
-            dataPropertyAttributesAreCorrect(obj, "prop", 1001, false, true, true);
-    }
-runTestCase(testcase);
+var obj = [];
+
+obj.verifySetFunc = "data";
+var getFunc = function () {
+    return obj.verifySetFunc;
+};
+
+var setFunc = function (value) {
+    obj.verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+    get: getFunc,
+    set: setFunc,
+    enumerable: true,
+    configurable: true
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+    value: 1001
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop"); 
+
+if (!desc1.hasOwnProperty("get") ) {
+    $ERROR('Expected desc1.hasOwnProperty("get") to be true, actually ' + desc1.hasOwnProperty("get"));
+}
+
+if (!desc2.hasOwnProperty("value") ) {
+    $ERROR('Expected desc2.hasOwnProperty("value") to be true, actually ' + desc2.hasOwnProperty("value"));
+}
+
+if (typeof desc2.get !== "undefined" ) {
+    $ERROR('Expected typeof desc2.get === "undefined" , actually ' + typeof desc2.get);
+}
+
+if (typeof desc2.set !== "undefined" ) {
+    $ERROR('Expected typeof desc2.set === "undefined" , actually ' + typeof desc2.set);
+}
+
+
+verifyEqualTo(obj, "prop", 1001);
+
+verifyNotWritable(obj, "prop");
+
+verifyEnumerable(obj, "prop");
+
+verifyConfigurable(obj, "prop");
+
+
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-538-6.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-538-6.js
index 40ce80c5f4..3d61bc301c 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-538-6.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-538-6.js
@@ -10,40 +10,55 @@ description: >
     ES5 Attributes - Updating an indexed accessor property 'P' whose
     [[Configurable]] attribute is true to a data property is
     successful, 'O' is an Arguments object
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = (function () {
-            return arguments;
-        }());
-
-        obj.verifySetFunc = "data";
-        var getFunc = function () {
-            return obj.verifySetFunc;
-        };
-
-        var setFunc = function (value) {
-            obj.verifySetFunc = value;
-        };
-
-        Object.defineProperty(obj, "0", {
-            get: getFunc,
-            set: setFunc,
-            enumerable: true,
-            configurable: true
-        });
-        var desc1 = Object.getOwnPropertyDescriptor(obj, "0");
-
-        Object.defineProperty(obj, "0", {
-            value: 1001
-        });
-        var desc2 = Object.getOwnPropertyDescriptor(obj, "0");
-
-        return desc1.hasOwnProperty("get") && desc2.hasOwnProperty("value") &&
-            typeof desc2.get === "undefined" && typeof desc2.get === "undefined" &&
-            dataPropertyAttributesAreCorrect(obj, "0", 1001, false, true, true);
-    }
-runTestCase(testcase);
+var obj = (function () {
+    return arguments;
+}());
+
+obj.verifySetFunc = "data";
+var getFunc = function () {
+    return obj.verifySetFunc;
+};
+
+var setFunc = function (value) {
+    obj.verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "0", {
+    get: getFunc,
+    set: setFunc,
+    enumerable: true,
+    configurable: true
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "0");
+
+Object.defineProperty(obj, "0", {
+    value: 1001
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "0");
+
+if (!desc1.hasOwnProperty("get") ) {
+    $ERROR('Expected desc1.hasOwnProperty("get") to be true, actually ' + desc1.hasOwnProperty("get"));
+}
+
+if (!desc2.hasOwnProperty("value") ) {
+    $ERROR('Expected desc2.hasOwnProperty("value") to be true, actually ' + desc2.hasOwnProperty("value"));
+}
+
+if (typeof desc2.get !== "undefined" ) {
+    $ERROR('Expected typeof desc2.get === "undefined" , actually ' + typeof desc2.get);
+}
+
+if (typeof desc2.set !== "undefined" ) {
+    $ERROR('Expected typeof desc2.set === "undefined" , actually ' + typeof desc2.set);
+}
+
+verifyEqualTo(obj, "0", 1001);
+
+verifyNotWritable(obj, "0");
+
+verifyEnumerable(obj, "0");
+
+verifyConfigurable(obj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-538-7.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-538-7.js
index 1273fd5e39..b7c43a7dec 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-538-7.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-538-7.js
@@ -10,43 +10,58 @@ description: >
     ES5 Attributes - Updating an indexed accessor property 'P' whose
     [[Configurable]] attribute is true to a data property is
     successful, 'O' is the global object
-includes:
-    - runTestCase.js
-    - fnGlobalObject.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js, fnGlobalObject.js]
 ---*/
 
-function testcase() {
-        var obj = fnGlobalObject();
-
-        obj.verifySetFunc = "data";
-        var getFunc = function () {
-            return obj.verifySetFunc;
-        };
-
-        var setFunc = function (value) {
-            obj.verifySetFunc = value;
-        };
-        try {
-            Object.defineProperty(obj, "0", {
-                get: getFunc,
-                set: setFunc,
-                enumerable: true,
-                configurable: true
-            });
-            var desc1 = Object.getOwnPropertyDescriptor(obj, "0");
-
-            Object.defineProperty(obj, "0", {
-                value: 1001
-            });
-            var desc2 = Object.getOwnPropertyDescriptor(obj, "0");
-
-            return desc1.hasOwnProperty("get") && desc2.hasOwnProperty("value") &&
-                typeof desc2.get === "undefined" && typeof desc2.get === "undefined" &&
-                dataPropertyAttributesAreCorrect(obj, "0", 1001, false, true, true);
-        } finally {
-            delete obj[0];
-            delete obj.verifySetFunc;
-        }
+var obj = fnGlobalObject();
+
+obj.verifySetFunc = "data";
+var getFunc = function () {
+    return obj.verifySetFunc;
+};
+
+var setFunc = function (value) {
+    obj.verifySetFunc = value;
+};
+try {
+    Object.defineProperty(obj, "0", {
+        get: getFunc,
+        set: setFunc,
+        enumerable: true,
+        configurable: true
+    });
+    var desc1 = Object.getOwnPropertyDescriptor(obj, "0");
+
+    Object.defineProperty(obj, "0", {
+        value: 1001
+    });
+    var desc2 = Object.getOwnPropertyDescriptor(obj, "0");
+
+    if (!desc1.hasOwnProperty("get")) {
+        $ERROR('Expected desc1.hasOwnProperty("get") to be true, actually ' + desc1.hasOwnProperty("get"));
+    }
+
+    if (!desc2.hasOwnProperty("value")) {
+        $ERROR('Expected desc2.hasOwnProperty("value") to be true, actually ' + desc2.hasOwnProperty("value"));
+    }
+
+    if (typeof desc2.get !== "undefined") {
+        $ERROR('Expected typeof desc2.get === "undefined", actually ' + typeof desc2.get);
     }
-runTestCase(testcase);
+
+    if (typeof desc2.set !== "undefined") {
+        $ERROR('Expected typeof desc2.set === "undefined", actually ' + typeof desc2.get);
+    }
+
+    verifyEqualTo(obj, "0", 1001);
+
+    verifyNotWritable(obj, "0");
+
+    verifyEnumerable(obj, "0");
+
+    verifyConfigurable(obj, "0");
+} finally {
+    delete obj[0];
+    delete obj.verifySetFunc;
+}
+
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-538.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-538.js
index 753a63d816..19eb123e4c 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-538.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-538.js
@@ -10,38 +10,53 @@ description: >
     ES5 Attributes - success to update the accessor property ([[Get]]
     is a Function, [[Set]] is a Function, [[Enumerable]] is true,
     [[Configurable]] is true) to a data property
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.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", {
-            value: 1001
-        });
-        var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
-
-        return desc1.hasOwnProperty("get") && desc2.hasOwnProperty("value") &&
-            typeof desc2.get === "undefined" && typeof desc2.get === "undefined" &&
-            dataPropertyAttributesAreCorrect(obj, "prop", 1001, false, true, true);
-    }
-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", {
+    value: 1001
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+if (!desc1.hasOwnProperty("get") ) {
+    $ERROR('Expected desc1.hasOwnProperty("get") to be true, actually ' + desc1.hasOwnProperty("get"));
+}
+
+if (!desc2.hasOwnProperty("value") ) {
+    $ERROR('Expected desc2.hasOwnProperty("value") to be true, actually ' + desc2.hasOwnProperty("value"));
+}
+
+if (typeof desc2.get !== "undefined" ) {
+    $ERROR('Expected typeof desc2.get === "undefined" , actually ' + typeof desc2.get );
+}
+
+
+verifyEqualTo(obj, "prop", 1001);
+
+verifyNotWritable(obj, "prop");
+
+verifyEnumerable(obj, "prop");
+
+verifyConfigurable(obj, "prop");
+
+
+    
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-540-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-540-1.js
index 8017d5d92b..a94d61d7ff 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-540-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-540-1.js
@@ -11,48 +11,63 @@ description: >
     attributes of a named accessor property 'P' whose [[Configurable]]
     attribute is false and throws TypeError exception, 'O' is an
     Object object (8.12.9 step 11.a)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
-
-        obj.verifySetFunction = "data";
-        var getFunc = function () {
-            return obj.verifySetFunction;
-        };
-        var setFunc = function (value) {
-            obj.verifySetFunction = value;
-        };
-        Object.defineProperty(obj, "property", {
-            get: getFunc,
-            set: setFunc,
-            configurable: false
-        });
-
-        var result = false;
-        try {
-            Object.defineProperty(obj, "property", {
-                get: function () {
-                    return 100;
-                }
-            });
-        } catch (e) {
-            result = e instanceof TypeError &&
-                accessorPropertyAttributesAreCorrect(obj, "property", getFunc, setFunc, "verifySetFunction", false, false);
+var obj = {};
+
+obj.verifySetFunction = "data";
+var getFunc = function () {
+    return obj.verifySetFunction;
+};
+var setFunc = function (value) {
+    obj.verifySetFunction = value;
+};
+Object.defineProperty(obj, "property", {
+    get: getFunc,
+    set: setFunc,
+    configurable: false
+});
+
+var result = false;
+try {
+    Object.defineProperty(obj, "property", {
+        get: function () {
+            return 100;
         }
+    });
+} catch (e) {
+    result = e instanceof TypeError;
+    verifyEqualTo(obj, "property", getFunc());
+
+    verifyWritable(obj, "property", "verifySetFunction");
 
-        try {
-            Object.defineProperty(obj, "property", {
-                set: function (value) {
-                    obj.verifySetFunction1 = value;
-                }
-            });
-        } catch (e1) {
-            return result && e1 instanceof TypeError &&
-                accessorPropertyAttributesAreCorrect(obj, "property", getFunc, setFunc, "verifySetFunction", false, false);
+    verifyNotEnumerable(obj, "property");
+
+    verifyNotConfigurable(obj, "property");
+}
+
+try {
+    Object.defineProperty(obj, "property", {
+        set: function (value) {
+            obj.verifySetFunction1 = value;
         }
+    });
+} catch (e) {
+    if (!result) {
+        $ERROR('Expected result to be true, actually ' + result);
     }
-runTestCase(testcase);
+    
+    verifyEqualTo(obj, "property", getFunc());
+
+    verifyWritable(obj, "property", "verifySetFunction");
+
+    verifyNotEnumerable(obj, "property");
+
+    verifyNotConfigurable(obj, "property");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
+    }
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-540-2.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-540-2.js
index b02f2b210d..a4bb927b87 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-540-2.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-540-2.js
@@ -11,48 +11,63 @@ description: >
     attributes of an indexed property 'P' whose [[Configurable]]
     attribute is false and throws TypeError exception, 'A' is an Array
     object (8.12.9 step 11.a)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = [];
-
-        obj.verifySetFunction = "data";
-        var getFunc = function () {
-            return obj.verifySetFunction;
-        };
-        var setFunc = function (value) {
-            obj.verifySetFunction = value;
-        };
-        Object.defineProperty(obj, "0", {
-            get: getFunc,
-            set: setFunc,
-            configurable: false
-        });
-
-        var result = false;
-        try {
-            Object.defineProperty(obj, "0", {
-                get: function () {
-                    return 100;
-                }
-            });
-        } catch (e) {
-            result = e instanceof TypeError &&
-                accessorPropertyAttributesAreCorrect(obj, "0", getFunc, setFunc, "verifySetFunction", false, false);
+var obj = [];
+
+obj.verifySetFunction = "data";
+var getFunc = function () {
+    return obj.verifySetFunction;
+};
+var setFunc = function (value) {
+    obj.verifySetFunction = value;
+};
+Object.defineProperty(obj, "0", {
+    get: getFunc,
+    set: setFunc,
+    configurable: false
+});
+
+var result = false;
+try {
+    Object.defineProperty(obj, "0", {
+        get: function () {
+            return 100;
         }
+    });
+} catch (e) {
+    result = e instanceof TypeError;
+    verifyEqualTo(obj, "0", getFunc());
+
+    verifyWritable(obj, "0", "verifySetFunction");
 
-        try {
-            Object.defineProperty(obj, "0", {
-                set: function (value) {
-                    obj.verifySetFunction1 = value;
-                }
-            });
-        } catch (e1) {
-            return result && e1 instanceof TypeError &&
-                accessorPropertyAttributesAreCorrect(obj, "0", getFunc, setFunc, "verifySetFunction", false, false);
+    verifyNotEnumerable(obj, "0");
+
+    verifyNotConfigurable(obj, "0");
+}
+
+try {
+    Object.defineProperty(obj, "0", {
+        set: function (value) {
+            obj.verifySetFunction1 = value;
         }
+    });
+} catch (e) {
+    if (!result ) {
+        $ERROR('Expected result  to be true, actually ' + result );
     }
-runTestCase(testcase);
+    
+    verifyEqualTo(obj, "0", getFunc());
+
+    verifyWritable(obj, "0", "verifySetFunction");
+
+    verifyNotEnumerable(obj, "0");
+
+    verifyNotConfigurable(obj, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
+    }
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-540-3.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-540-3.js
index af693e6486..53abf3c1c8 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-540-3.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-540-3.js
@@ -10,50 +10,66 @@ description: >
     Object.defineProperty fails to update [[Get]] and [[Set]]
     attributes of a named accessor property 'P' whose [[Configurable]]
     attribute is false, 'O' is an Arguments object (8.12.9 step 11.a)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = (function () {
-            return arguments;
-        }());
-
-        obj.verifySetFunction = "data";
-        var getFunc = function () {
-            return obj.verifySetFunction;
-        };
-        var setFunc = function (value) {
-            obj.verifySetFunction = value;
-        };
-        Object.defineProperty(obj, "property", {
-            get: getFunc,
-            set: setFunc,
-            configurable: false
-        });
-
-        var result = false;
-        try {
-            Object.defineProperty(obj, "property", {
-                get: function () {
-                    return 100;
-                }
-            });
-        } catch (e) {
-            result = e instanceof TypeError &&
-                accessorPropertyAttributesAreCorrect(obj, "property", getFunc, setFunc, "verifySetFunction", false, false);
+var obj = (function () {
+    return arguments;
+}());
+
+obj.verifySetFunction = "data";
+var getFunc = function () {
+    return obj.verifySetFunction;
+};
+var setFunc = function (value) {
+    obj.verifySetFunction = value;
+};
+Object.defineProperty(obj, "property", {
+    get: getFunc,
+    set: setFunc,
+    configurable: false
+});
+
+var result = false;
+try {
+    Object.defineProperty(obj, "property", {
+        get: function () {
+            return 100;
         }
+    });
+} catch (e) {
+    result = e instanceof TypeError;
+    verifyEqualTo(obj, "property", getFunc());
+
+    verifyWritable(obj, "property", "verifySetFunction");
+
+    verifyNotEnumerable(obj, "property");
 
-        try {
-            Object.defineProperty(obj, "property", {
-                set: function (value) {
-                    obj.verifySetFunction1 = value;
-                }
-            });
-        } catch (e1) {
-            return result && e1 instanceof TypeError &&
-                accessorPropertyAttributesAreCorrect(obj, "property", getFunc, setFunc, "verifySetFunction", false, false);
+    verifyNotConfigurable(obj, "property");
+}
+
+try {
+    Object.defineProperty(obj, "property", {
+        set: function (value) {
+            obj.verifySetFunction1 = value;
         }
+    });
+} catch (e) {
+
+    if (!result) {
+        $ERROR('Expected result to be true, actually ' + result);
     }
-runTestCase(testcase);
+
+    verifyEqualTo(obj, "property", getFunc());
+
+    verifyWritable(obj, "property", "verifySetFunction");
+
+    verifyNotEnumerable(obj, "property");
+
+    verifyNotConfigurable(obj, "property");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
+    }
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-540-6.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-540-6.js
index b6cf00397c..86b70029cd 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-540-6.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-540-6.js
@@ -11,48 +11,65 @@ description: >
     attributes of an indexed accessor property 'P' whose
     [[Configurable]] attribute is false and throws TypeError
     exception, 'O' is an Object object (8.12.9 step 11.a)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
-
-        obj.verifySetFunction = "data";
-        var getFunc = function () {
-            return obj.verifySetFunction;
-        };
-        var setFunc = function (value) {
-            obj.verifySetFunction = value;
-        };
-        Object.defineProperty(obj, "0", {
-            get: getFunc,
-            set: setFunc,
-            configurable: false
-        });
-
-        var result = false;
-        try {
-            Object.defineProperty(obj, "0", {
-                get: function () {
-                    return 100;
-                }
-            });
-        } catch (e) {
-            result = e instanceof TypeError &&
-                accessorPropertyAttributesAreCorrect(obj, "0", getFunc, setFunc, "verifySetFunction", false, false);
+var obj = {};
+
+obj.verifySetFunction = "data";
+var getFunc = function () {
+    return obj.verifySetFunction;
+};
+var setFunc = function (value) {
+    obj.verifySetFunction = value;
+};
+Object.defineProperty(obj, "0", {
+    get: getFunc,
+    set: setFunc,
+    configurable: false
+});
+
+var result = false;
+try {
+    Object.defineProperty(obj, "0", {
+        get: function () {
+            return 100;
         }
+    });
+} catch (e) {
+    result = e instanceof TypeError;
+
+    verifyEqualTo(obj, "0", getFunc());
+
+    verifyWritable(obj, "0", "verifySetFunction");
 
-        try {
-            Object.defineProperty(obj, "0", {
-                set: function (value) {
-                    obj.verifySetFunction1 = value;
-                }
-            });
-        } catch (e1) {
-            return result && e1 instanceof TypeError &&
-                accessorPropertyAttributesAreCorrect(obj, "0", getFunc, setFunc, "verifySetFunction", false, false);
+    verifyNotEnumerable(obj, "0");
+
+    verifyNotConfigurable(obj, "0");
+}
+
+try {
+    Object.defineProperty(obj, "0", {
+        set: function (value) {
+            obj.verifySetFunction1 = value;
         }
+    });
+} catch (e) {
+    if (!result) {
+        $ERROR('Expected result to be true, actually ' + result);
     }
-runTestCase(testcase);
+    
+    verifyEqualTo(obj, "0", getFunc());
+
+    verifyWritable(obj, "0", "verifySetFunction");
+
+    verifyNotEnumerable(obj, "0");
+
+    verifyNotConfigurable(obj, "0");
+
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
+    }
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-540-7.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-540-7.js
index bbf262895e..930d477ca5 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-540-7.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-540-7.js
@@ -11,48 +11,65 @@ description: >
     attributes of a named property 'P' whose [[Configurable]]
     attribute is false and throws TypeError exception, 'A' is an Array
     object (8.12.9 step 11.a)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = [];
-
-        obj.verifySetFunction = "data";
-        var getFunc = function () {
-            return obj.verifySetFunction;
-        };
-        var setFunc = function (value) {
-            obj.verifySetFunction = value;
-        };
-        Object.defineProperty(obj, "prop", {
-            get: getFunc,
-            set: setFunc,
-            configurable: false
-        });
-
-        var result = false;
-        try {
-            Object.defineProperty(obj, "prop", {
-                get: function () {
-                    return 100;
-                }
-            });
-        } catch (e) {
-            result = e instanceof TypeError &&
-                accessorPropertyAttributesAreCorrect(obj, "prop", getFunc, setFunc, "verifySetFunction", false, false);
+var obj = [];
+
+obj.verifySetFunction = "data";
+var getFunc = function () {
+    return obj.verifySetFunction;
+};
+var setFunc = function (value) {
+    obj.verifySetFunction = value;
+};
+Object.defineProperty(obj, "prop", {
+    get: getFunc,
+    set: setFunc,
+    configurable: false
+});
+
+var result = false;
+try {
+    Object.defineProperty(obj, "prop", {
+        get: function () {
+            return 100;
         }
+    });
+} catch (e) {
+    result = e instanceof TypeError;
+    verifyEqualTo(obj, "prop", getFunc());
+
+    verifyWritable(obj, "prop", "verifySetFunction");
+
+    verifyNotEnumerable(obj, "prop");
 
-        try {
-            Object.defineProperty(obj, "prop", {
-                set: function (value) {
-                    obj.verifySetFunction1 = value;
-                }
-            });
-        } catch (e1) {
-            return result && e1 instanceof TypeError &&
-                accessorPropertyAttributesAreCorrect(obj, "prop", getFunc, setFunc, "verifySetFunction", false, false);
+    verifyNotConfigurable(obj, "prop");
+}
+
+try {
+    Object.defineProperty(obj, "prop", {
+        set: function (value) {
+            obj.verifySetFunction1 = value;
         }
+    });
+} catch (e1) {
+    if (!result) {
+        $ERROR('Expected result to be true, actually ' + result);
     }
-runTestCase(testcase);
+    
+
+    verifyEqualTo(obj, "prop", getFunc());
+
+    verifyWritable(obj, "prop", "verifySetFunction");
+
+    verifyNotEnumerable(obj, "prop");
+
+    verifyNotConfigurable(obj, "prop");
+
+
+    if (!(e1 instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e1);
+    }
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-540-8.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-540-8.js
index b1851c9504..5049fac765 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-540-8.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-540-8.js
@@ -11,50 +11,65 @@ description: >
     attributes of an indexed accessor property 'P' whose
     [[Configurable]] attribute is false, 'O' is an Arguments object
     (8.12.9 step 11.a)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = (function () {
-            return arguments;
-        }());
-
-        obj.verifySetFunction = "data";
-        var getFunc = function () {
-            return obj.verifySetFunction;
-        };
-        var setFunc = function (value) {
-            obj.verifySetFunction = value;
-        };
-        Object.defineProperty(obj, "0", {
-            get: getFunc,
-            set: setFunc,
-            configurable: false
-        });
-
-        var result = false;
-        try {
-            Object.defineProperty(obj, "0", {
-                get: function () {
-                    return 100;
-                }
-            });
-        } catch (e) {
-            result = e instanceof TypeError &&
-                accessorPropertyAttributesAreCorrect(obj, "0", getFunc, setFunc, "verifySetFunction", false, false);
+var obj = (function () {
+    return arguments;
+}());
+
+obj.verifySetFunction = "data";
+var getFunc = function () {
+    return obj.verifySetFunction;
+};
+var setFunc = function (value) {
+    obj.verifySetFunction = value;
+};
+Object.defineProperty(obj, "0", {
+    get: getFunc,
+    set: setFunc,
+    configurable: false
+});
+
+var result = false;
+try {
+    Object.defineProperty(obj, "0", {
+        get: function () {
+            return 100;
         }
+    });
+} catch (e) {
+    result = e instanceof TypeError;
+    verifyEqualTo(obj, "0", getFunc());
+
+    verifyWritable(obj, "0", "verifySetFunction");
 
-        try {
-            Object.defineProperty(obj, "0", {
-                set: function (value) {
-                    obj.verifySetFunction1 = value;
-                }
-            });
-        } catch (e1) {
-            return result && e1 instanceof TypeError &&
-                accessorPropertyAttributesAreCorrect(obj, "0", getFunc, setFunc, "verifySetFunction", false, false);
+    verifyNotEnumerable(obj, "0");
+
+    verifyNotConfigurable(obj, "0");
+}
+
+try {
+    Object.defineProperty(obj, "0", {
+        set: function (value) {
+            obj.verifySetFunction1 = value;
         }
+    });
+} catch (e) {
+    if (!result ) {
+        $ERROR('Expected result  to be true, actually ' + result );
     }
-runTestCase(testcase);
+    
+    verifyEqualTo(obj, "0", getFunc());
+
+    verifyWritable(obj, "0", "verifySetFunction");
+
+    verifyNotEnumerable(obj, "0");
+
+    verifyNotConfigurable(obj, "0");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
+    }
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-547-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-547-1.js
index dd7ef5a037..64f55d76ac 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-547-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-547-1.js
@@ -10,42 +10,57 @@ description: >
     ES5 Attributes - Updating an indexed accessor property 'P' whose
     [[Configurable]] attribute is false to a data property does not
     succeed, 'A' is an Array object (8.12.9 step 9.a)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = [];
-        
-        obj.verifySetFunc = "data";
-        var getFunc = function () {
-            return obj.verifySetFunc;
-        };
-
-        var setFunc = function (value) {
-            obj.verifySetFunc = value;
-        };
-
-        Object.defineProperty(obj, "0", {
-            get: getFunc,
-            set: setFunc,
-            enumerable: true,
-            configurable: false
-        });
-        var desc1 = Object.getOwnPropertyDescriptor(obj, "0");
-
-        try {
-            Object.defineProperty(obj, "0", {
-                value: 1001
-            });
-
-            return false;
-        } catch (e) {
-            var desc2 = Object.getOwnPropertyDescriptor(obj, "0");
-
-            return desc1.hasOwnProperty("get") && !desc2.hasOwnProperty("value") && e instanceof TypeError &&
-                accessorPropertyAttributesAreCorrect(obj, "0", getFunc, setFunc, "verifySetFunc", true, false);
+var obj = [];
+
+obj.verifySetFunc = "data";
+var getFunc = function () {
+    return obj.verifySetFunc;
+};
+
+var setFunc = function (value) {
+    obj.verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "0", {
+    get: getFunc,
+    set: setFunc,
+    enumerable: true,
+    configurable: false
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "0");
+
+try {
+    Object.defineProperty(obj, "0", {
+        value: 1001
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    var desc2 = Object.getOwnPropertyDescriptor(obj, "0");
+
+    if (!desc1.hasOwnProperty("get")) {
+        $ERROR('Expected desc1.hasOwnProperty("get") to be true, actually ' + desc1.hasOwnProperty("get"));
+        }
+    
+    if (desc2.hasOwnProperty("value")) {
+        $ERROR('Expected !desc2.hasOwnProperty("value") to be true, actually ' + !desc2.hasOwnProperty("value"));
         }
+    
+
+    verifyEqualTo(obj, "0", getFunc());
+
+    verifyWritable(obj, "0", "verifySetFunc");
+
+    verifyEnumerable(obj, "0");
+
+    verifyNotConfigurable(obj, "0");
+
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-547-2.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-547-2.js
index a3a5b8e366..6fac38d037 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-547-2.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-547-2.js
@@ -10,44 +10,59 @@ description: >
     ES5 Attributes - Updating a named accessor property 'P' whose
     [[Configurable]] attribute is false to a data property does not
     succeed, 'A' is an Arguments object (8.12.9 step 9.a)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = (function () {
-            return arguments;
-        }());
-
-        obj.verifySetFunc = "data";
-        var getFunc = function () {
-            return obj.verifySetFunc;
-        };
-
-        var setFunc = function (value) {
-            obj.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", {
-                value: 1001
-            });
-
-            return false;
-        } catch (e) {
-            var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
-
-            return desc1.hasOwnProperty("get") && !desc2.hasOwnProperty("value") && e instanceof TypeError &&
-                accessorPropertyAttributesAreCorrect(obj, "prop", getFunc, setFunc, "verifySetFunc", true, false);
+var obj = (function () {
+    return arguments;
+}());
+
+obj.verifySetFunc = "data";
+var getFunc = function () {
+    return obj.verifySetFunc;
+};
+
+var setFunc = function (value) {
+    obj.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", {
+        value: 1001
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+    if (!desc1.hasOwnProperty("get")) {
+        $ERROR('Expected desc1.hasOwnProperty("get") to be true, actually ' + desc1.hasOwnProperty("get"));
         }
+    
+    if (desc2.hasOwnProperty("value")) {
+        $ERROR('Expected !desc2.hasOwnProperty("value") to be true, actually ' + !desc2.hasOwnProperty("value"));
     }
-runTestCase(testcase);
+    
+
+    verifyEqualTo(obj, "prop", getFunc());
+
+    verifyWritable(obj, "prop", "verifySetFunc");
+
+    verifyEnumerable(obj, "prop");
+
+    verifyNotConfigurable(obj, "prop");
+    
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
+    }
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-547-3.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-547-3.js
index f0723406d5..621b573af8 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-547-3.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-547-3.js
@@ -10,42 +10,56 @@ description: >
     ES5 Attributes - Updating a named accessor property 'P' whose
     [[Configurable]] attribute is false to a data property does not
     succeed, 'A' is an Array object (8.12.9 step 9.a)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = [];
-        
-        obj.verifySetFunc = "data";
-        var getFunc = function () {
-            return obj.verifySetFunc;
-        };
-
-        var setFunc = function (value) {
-            obj.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", {
-                value: 1001
-            });
-
-            return false;
-        } catch (e) {
-            var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
-
-            return desc1.hasOwnProperty("get") && !desc2.hasOwnProperty("value") && e instanceof TypeError &&
-                accessorPropertyAttributesAreCorrect(obj, "prop", getFunc, setFunc, "verifySetFunc", true, false);
-        }
+var obj = [];
+
+obj.verifySetFunc = "data";
+var getFunc = function () {
+    return obj.verifySetFunc;
+};
+
+var setFunc = function (value) {
+    obj.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", {
+        value: 1001
+    });
+
+    $ERROR("Expected an exception.");
+} catch (e) {
+    var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+    if (!desc1.hasOwnProperty("get")) {
+        $ERROR('Expected desc1.hasOwnProperty("get") to be true, actually ' + desc1.hasOwnProperty("get"));
+    }
+    
+    if (desc2.hasOwnProperty("value")) {
+        $ERROR('Expected !desc2.hasOwnProperty("value") to be true, actually ' + !desc2.hasOwnProperty("value"));
     }
-runTestCase(testcase);
+    
+
+    verifyEqualTo(obj, "prop", getFunc());
+
+    verifyWritable(obj, "prop", "verifySetFunc");
+
+    verifyEnumerable(obj, "prop");
+
+    verifyNotConfigurable(obj, "prop");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
+    }
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-547-4.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-547-4.js
index 0c724fb553..fa7f964d19 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-547-4.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-547-4.js
@@ -10,44 +10,57 @@ description: >
     ES5 Attributes - Updating an indexed accessor property 'P' whose
     [[Configurable]] attribute is false to a data property does not
     succeed, 'A' is an Arguments object (8.12.9 step 9.a)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = (function () {
-            return arguments;
-        }());
-
-        obj.verifySetFunc = "data";
-        var getFunc = function () {
-            return obj.verifySetFunc;
-        };
-
-        var setFunc = function (value) {
-            obj.verifySetFunc = value;
-        };
-
-        Object.defineProperty(obj, "0", {
-            get: getFunc,
-            set: setFunc,
-            enumerable: true,
-            configurable: false
-        });
-        var desc1 = Object.getOwnPropertyDescriptor(obj, "0");
-
-        try {
-            Object.defineProperty(obj, "0", {
-                value: 1001
-            });
-
-            return false;
-        } catch (e) {
-            var desc2 = Object.getOwnPropertyDescriptor(obj, "0");
-
-            return desc1.hasOwnProperty("get") && !desc2.hasOwnProperty("value") && e instanceof TypeError &&
-                accessorPropertyAttributesAreCorrect(obj, "0", getFunc, setFunc, "verifySetFunc", true, false);
-        }
+var obj = (function () {
+    return arguments;
+}());
+
+obj.verifySetFunc = "data";
+var getFunc = function () {
+    return obj.verifySetFunc;
+};
+
+var setFunc = function (value) {
+    obj.verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "0", {
+    get: getFunc,
+    set: setFunc,
+    enumerable: true,
+    configurable: false
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "0");
+
+try {
+    Object.defineProperty(obj, "0", {
+        value: 1001
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    var desc2 = Object.getOwnPropertyDescriptor(obj, "0");
+
+    if (!desc1.hasOwnProperty("get")) {
+        $ERROR('Expected desc1.hasOwnProperty("get") to be true, actually ' + desc1.hasOwnProperty("get"));
+    }
+    
+    if (desc2.hasOwnProperty("value")) {
+        $ERROR('Expected !desc2.hasOwnProperty("value") to be true, actually ' + !desc2.hasOwnProperty("value"));
     }
-runTestCase(testcase);
+    
+    verifyEqualTo(obj, "0", getFunc());
+
+    verifyWritable(obj, "0", "verifySetFunc");
+
+    verifyEnumerable(obj, "0");
+
+    verifyNotConfigurable(obj, "0");
+
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
+    }
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-55.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-55.js
index 50bb396b9a..d4afddacb3 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-55.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-55.js
@@ -10,26 +10,27 @@ description: >
     Object.defineProperty - 'name' property doesn't exist in 'O', test
     [[Enumerable]] of 'name' property of 'Attributes' is set as false
     value if absent in accessor descriptor 'desc' (8.12.9 step 4.b.i)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
+var obj = {};
 
-        var setFunc = function (value) {
-            obj.setVerifyHelpProp = value;
-        };
-        var getFunc = function () {
-            return 10;
-        };
+var setFunc = function (value) {
+    obj.setVerifyHelpProp = value;
+};
+var getFunc = function () {
+    return 10;
+};
 
-        Object.defineProperty(obj, "property", {
-            set: setFunc,
-            get: getFunc,
-            configurable: true
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "property", getFunc, setFunc, "setVerifyHelpProp", false, true);
-    }
-runTestCase(testcase);
+Object.defineProperty(obj, "property", {
+    set: setFunc,
+    get: getFunc,
+    configurable: true
+});
+verifyEqualTo(obj, "property", getFunc());
+
+verifyWritable(obj, "property", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "property");
+
+verifyConfigurable(obj, "property");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-56.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-56.js
index 1b8116b424..c5cdd6a387 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-56.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-56.js
@@ -10,25 +10,26 @@ description: >
     Object.defineProperty - 'name' property doesn't exist in 'O', test
     [[Configurable]] of 'name' property is set as false if it is
     absent in accessor descriptor 'desc' (8.12.9 step 4.b.i)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
-        var setFunc = function (value) {
-            obj.setVerifyHelpProp = value;
-        };
-        var getFunc = function () {
-            return 10;
-        };
+var obj = {};
+var setFunc = function (value) {
+    obj.setVerifyHelpProp = value;
+};
+var getFunc = function () {
+    return 10;
+};
 
-        Object.defineProperty(obj, "property", {
-            set: setFunc,
-            get: getFunc,
-            enumerable: true
-        });
-        return accessorPropertyAttributesAreCorrect(obj, "property", getFunc, setFunc, "setVerifyHelpProp", true, false);
-    }
-runTestCase(testcase);
+Object.defineProperty(obj, "property", {
+    set: setFunc,
+    get: getFunc,
+    enumerable: true
+});
+verifyEqualTo(obj, "property", getFunc());
+
+verifyWritable(obj, "property", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "property");
+
+verifyNotConfigurable(obj, "property");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-57.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-57.js
index 31a52d5c95..7c6dcbd630 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-57.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-57.js
@@ -9,36 +9,37 @@ es5id: 15.2.3.6-4-57
 description: >
     Object.defineProperty - 'desc' is accessor descriptor, test
     updating all attribute values of 'name' (8.12.9 step 4.b.i)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
-        var setFunc = function (value) {
-            obj.setVerifyHelpProp = value;
-        };
-        var getFunc = function () {
-            return 14;
-        };
-
-        Object.defineProperty(obj, "property", {
-            get: function () {
-                return 11;
-            },
-            set: function (value) { },
-            configurable: true,
-            enumerable: true
-        });
-
-        Object.defineProperty(obj, "property", {
-            get: getFunc,
-            set: setFunc,
-            configurable: false,
-            enumerable: false
-        });
-
-        return accessorPropertyAttributesAreCorrect(obj, "property", getFunc, setFunc, "setVerifyHelpProp", false, false);
-    }
-runTestCase(testcase);
+var obj = {};
+var setFunc = function (value) {
+    obj.setVerifyHelpProp = value;
+};
+var getFunc = function () {
+    return 14;
+};
+
+Object.defineProperty(obj, "property", {
+    get: function () {
+        return 11;
+    },
+    set: function (value) { },
+    configurable: true,
+    enumerable: true
+});
+
+Object.defineProperty(obj, "property", {
+    get: getFunc,
+    set: setFunc,
+    configurable: false,
+    enumerable: false
+});
+
+verifyEqualTo(obj, "property", getFunc());
+
+verifyWritable(obj, "property", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "property");
+
+verifyNotConfigurable(obj, "property");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-58.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-58.js
index 2df6ccb9c2..ceb2c87f1d 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-58.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-58.js
@@ -9,18 +9,20 @@ es5id: 15.2.3.6-4-58
 description: >
     Object.defineProperty - 'name' is data descriptor and every fields
     in 'desc' is absent (8.12.9 step 5)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        obj.foo = 101; // default value of attributes: writable: true, configurable: true, enumerable: true
+obj.foo = 101; // default value of attributes: writable: true, configurable: true, enumerable: true
+
+Object.defineProperty(obj, "foo", {});
+verifyEqualTo(obj, "foo", 101);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
 
-        Object.defineProperty(obj, "foo", {});
-        return dataPropertyAttributesAreCorrect(obj, "foo", 101, true, true, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-59.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-59.js
index 8dd4dde8f8..054f51fc19 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-59.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-59.js
@@ -9,28 +9,29 @@ es5id: 15.2.3.6-4-59
 description: >
     Object.defineProperty - 'name' is accessor descriptor and every
     fields in 'desc' is absent (8.12.9 step 5)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function getFunc() {
-            return 0;
-        }
-        function setFunc(value) {
-            obj.helpVerifySet = value;
-        }
+function getFunc() {
+    return 0;
+}
+function setFunc(value) {
+    obj.helpVerifySet = value;
+}
 
-        Object.defineProperty(obj, "foo", {
-            get: getFunc,
-            set: setFunc
-        });
+Object.defineProperty(obj, "foo", {
+    get: getFunc,
+    set: setFunc
+});
 
-        Object.defineProperty(obj, "foo", {});
-        return accessorPropertyAttributesAreCorrect(obj, "foo", getFunc, setFunc, "helpVerifySet", false, false);
-    }
-runTestCase(testcase);
+Object.defineProperty(obj, "foo", {});
+verifyEqualTo(obj, "foo", getFunc());
+
+verifyWritable(obj, "foo", "helpVerifySet");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-60.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-60.js
index cffda3eb54..404aeac328 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-60.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-60.js
@@ -9,18 +9,20 @@ es5id: 15.2.3.6-4-60
 description: >
     Object.defineProperty - type of desc.value is different from type
     of name.value (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        obj.foo = 101; // default value of attributes: writable: true, configurable: true, enumerable: true
+obj.foo = 101; // default value of attributes: writable: true, configurable: true, enumerable: true
+
+Object.defineProperty(obj, "foo", { value: "abc" });
+verifyEqualTo(obj, "foo", "abc");
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
 
-        Object.defineProperty(obj, "foo", { value: "abc" });
-        return dataPropertyAttributesAreCorrect(obj, "foo", "abc", true, true, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-61.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-61.js
index de032453e5..64ad1de97a 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-61.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-61.js
@@ -9,18 +9,20 @@ es5id: 15.2.3.6-4-61
 description: >
     Object.defineProperty - both desc.value and name.value are
     undefined (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", { value: undefined });
+Object.defineProperty(obj, "foo", { value: undefined });
+
+Object.defineProperty(obj, "foo", { value: undefined });
+verifyEqualTo(obj, "foo", undefined);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
 
-        Object.defineProperty(obj, "foo", { value: undefined });
-        return dataPropertyAttributesAreCorrect(obj, "foo", undefined, false, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-62.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-62.js
index cba90524de..d698a3405b 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-62.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-62.js
@@ -9,18 +9,20 @@ es5id: 15.2.3.6-4-62
 description: >
     Object.defineProperty - both desc.value and name.value are null
     (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", { value: null });
+Object.defineProperty(obj, "foo", { value: null });
+
+Object.defineProperty(obj, "foo", { value: null });
+verifyEqualTo(obj, "foo", null);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
 
-        Object.defineProperty(obj, "foo", { value: null });
-        return dataPropertyAttributesAreCorrect(obj, "foo", null, false, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-64.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-64.js
index 999ea48c52..678dceb8ee 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-64.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-64.js
@@ -9,22 +9,29 @@ es5id: 15.2.3.6-4-64
 description: >
     Object.defineProperty - desc.value = +0 and name.value = -0
     (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", { value: -0 });
+Object.defineProperty(obj, "foo", { value: -0 });
 
-        try {
-            Object.defineProperty(obj, "foo", { value: +0 });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(obj, "foo", -0, false, false, false);
-        }
+try {
+    Object.defineProperty(obj, "foo", { value: +0 });
+    $ERROR("Expected an exception.");
+} catch (e) {
+
+    verifyEqualTo(obj, "foo", -0);
+
+    verifyNotWritable(obj, "foo");
+
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-65.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-65.js
index 3c814ee1b9..7db408da3d 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-65.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-65.js
@@ -9,22 +9,28 @@ es5id: 15.2.3.6-4-65
 description: >
     Object.defineProperty - desc.value = -0 and name.value = +0
     (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", { value: +0 });
+Object.defineProperty(obj, "foo", { value: +0 });
 
-        try {
-            Object.defineProperty(obj, "foo", { value: -0 });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(obj, "foo", +0, false, false, false);
-        }
+try {
+    Object.defineProperty(obj, "foo", { value: -0 });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "foo", +0);
+
+    verifyNotWritable(obj, "foo");
+
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-66.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-66.js
index 2faf1d5403..afec0349e9 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-66.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-66.js
@@ -9,18 +9,20 @@ es5id: 15.2.3.6-4-66
 description: >
     Object.defineProperty - desc.value and name.value are two numbers
     with different values (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        obj.foo = 101; // default value of attributes: writable: true, configurable: true, enumerable: true
+obj.foo = 101; // default value of attributes: writable: true, configurable: true, enumerable: true
+
+Object.defineProperty(obj, "foo", { value: 102 });
+verifyEqualTo(obj, "foo", 102);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
 
-        Object.defineProperty(obj, "foo", { value: 102 });
-        return dataPropertyAttributesAreCorrect(obj, "foo", 102, true, true, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-67.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-67.js
index 8b859e1242..a63499e38a 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-67.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-67.js
@@ -10,18 +10,20 @@ description: >
     Object.defineProperty - both desc.value and name.value are two
     strings which have same length and same characters in
     corresponding positions (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", { value: "abcd" });
+Object.defineProperty(obj, "foo", { value: "abcd" });
+
+Object.defineProperty(obj, "foo", { value: "abcd" });
+verifyEqualTo(obj, "foo", "abcd");
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
 
-        Object.defineProperty(obj, "foo", { value: "abcd" });
-        return dataPropertyAttributesAreCorrect(obj, "foo", "abcd", false, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-68.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-68.js
index 13ca0e7248..ebccee0eef 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-68.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-68.js
@@ -9,18 +9,20 @@ es5id: 15.2.3.6-4-68
 description: >
     Object.defineProperty - desc.value and name.value are two strings
     with different values (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        obj.foo = "abcd"; // default value of attributes: writable: true, configurable: true, enumerable: true
+obj.foo = "abcd"; // default value of attributes: writable: true, configurable: true, enumerable: true
+
+Object.defineProperty(obj, "foo", { value: "fghj" });
+verifyEqualTo(obj, "foo", "fghj");
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
 
-        Object.defineProperty(obj, "foo", { value: "fghj" });
-        return dataPropertyAttributesAreCorrect(obj, "foo", "fghj", true, true, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-69.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-69.js
index d7a79be7da..e5a0fa95b4 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-69.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-69.js
@@ -9,18 +9,20 @@ es5id: 15.2.3.6-4-69
 description: >
     Object.defineProperty - both desc.value and name.value are boolean
     values with the same value (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", { value: true });
+Object.defineProperty(obj, "foo", { value: true });
+
+Object.defineProperty(obj, "foo", { value: true });
+verifyEqualTo(obj, "foo", true);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
 
-        Object.defineProperty(obj, "foo", { value: true });
-        return dataPropertyAttributesAreCorrect(obj, "foo", true, false, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-70.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-70.js
index fc8b770fb2..d9ce9ebe51 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-70.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-70.js
@@ -9,18 +9,20 @@ es5id: 15.2.3.6-4-70
 description: >
     Object.defineProperty - desc.value and name.value are two boolean
     values with different values (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        obj.foo = true; // default value of attributes: writable: true, configurable: true, enumerable: true
+obj.foo = true; // default value of attributes: writable: true, configurable: true, enumerable: true
+
+Object.defineProperty(obj, "foo", { value: false });
+verifyEqualTo(obj, "foo", false);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
 
-        Object.defineProperty(obj, "foo", { value: false });
-        return dataPropertyAttributesAreCorrect(obj, "foo", false, true, true, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-71.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-71.js
index 5d9ff11379..afbff22e4b 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-71.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-71.js
@@ -9,20 +9,22 @@ es5id: 15.2.3.6-4-71
 description: >
     Object.defineProperty - both desc.value and name.value are Ojbects
     which refer to the same Object (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        var obj1 = { length: 10 };
+var obj1 = { length: 10 };
 
-        Object.defineProperty(obj, "foo", { value: obj1 });
+Object.defineProperty(obj, "foo", { value: obj1 });
+
+Object.defineProperty(obj, "foo", { value: obj1 });
+verifyEqualTo(obj, "foo", obj1);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
 
-        Object.defineProperty(obj, "foo", { value: obj1 });
-        return dataPropertyAttributesAreCorrect(obj, "foo", obj1, false, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-72.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-72.js
index 8100afcb5f..1ed53cee5e 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-72.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-72.js
@@ -9,21 +9,23 @@ es5id: 15.2.3.6-4-72
 description: >
     Object.defineProperty - desc.value and name.value are two Ojbects
     which refer to the different objects (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        var obj1 = { length: 10 };
-        obj.foo = obj1; // default value of attributes: writable: true, configurable: true, enumerable: true
+var obj1 = { length: 10 };
+obj.foo = obj1; // default value of attributes: writable: true, configurable: true, enumerable: true
 
-        var obj2 = { length: 20 };
+var obj2 = { length: 20 };
+
+Object.defineProperty(obj, "foo", { value: obj2 });
+verifyEqualTo(obj, "foo", obj2);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
 
-        Object.defineProperty(obj, "foo", { value: obj2 });
-        return dataPropertyAttributesAreCorrect(obj, "foo", obj2, true, true, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-73.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-73.js
index 9627ae96fb..8a56f3c836 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-73.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-73.js
@@ -9,18 +9,20 @@ es5id: 15.2.3.6-4-73
 description: >
     Object.defineProperty - both desc.writable and name.writable are
     boolean values with the same value (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", { writable: false});
+Object.defineProperty(obj, "foo", { writable: false});
+
+Object.defineProperty(obj, "foo", { writable: false });
+verifyEqualTo(obj, "foo", undefined);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
 
-        Object.defineProperty(obj, "foo", { writable: false });
-        return dataPropertyAttributesAreCorrect(obj, "foo", undefined, false, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-74.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-74.js
index 39280eaedd..2cd82baa85 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-74.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-74.js
@@ -9,18 +9,20 @@ es5id: 15.2.3.6-4-74
 description: >
     Object.defineProperty - desc.writable and name.writable are two
     boolean values with different values (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-    
-        var obj = {};
 
-        Object.defineProperty(obj, "foo", { writable: false, configurable: true });
+var obj = {};
+
+Object.defineProperty(obj, "foo", { writable: false, configurable: true });
+
+Object.defineProperty(obj, "foo", { writable: true });
+verifyEqualTo(obj, "foo", undefined);
+
+verifyWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
 
-        Object.defineProperty(obj, "foo", { writable: true });
-        return dataPropertyAttributesAreCorrect(obj, "foo", undefined, true, false, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-75.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-75.js
index 2cf4f21216..699f3e6db5 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-75.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-75.js
@@ -9,28 +9,29 @@ es5id: 15.2.3.6-4-75
 description: >
     Object.defineProperty - both desc.[[Get]] and name.[[Get]] are two
     objects which refer to the same object (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function getFunc() {
-            return 10;
-        }
-        function setFunc(value) {
-            obj.helpVerifySet = value;
-        }
+function getFunc() {
+    return 10;
+}
+function setFunc(value) {
+    obj.helpVerifySet = value;
+}
 
-        Object.defineProperty(obj, "foo", {
-            get: getFunc,
-            set: setFunc
-        });
+Object.defineProperty(obj, "foo", {
+    get: getFunc,
+    set: setFunc
+});
 
-        Object.defineProperty(obj, "foo", { get: getFunc });
-        return accessorPropertyAttributesAreCorrect(obj, "foo", getFunc, setFunc, "helpVerifySet", false, false);
-    }
-runTestCase(testcase);
+Object.defineProperty(obj, "foo", { get: getFunc });
+verifyEqualTo(obj, "foo", getFunc());
+
+verifyWritable(obj, "foo", "helpVerifySet");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-76.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-76.js
index 943413aca1..3fed2a565b 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-76.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-76.js
@@ -9,33 +9,34 @@ es5id: 15.2.3.6-4-76
 description: >
     Object.defineProperty - desc.[[Get]] and name.[[Get]] are two
     objects which refer to the different objects (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function getFunc1() {
-            return 10;
-        }
-        function setFunc1(value) {
-            obj.helpVerifySet = value;
-        }
+function getFunc1() {
+    return 10;
+}
+function setFunc1(value) {
+    obj.helpVerifySet = value;
+}
 
-        Object.defineProperty(obj, "foo", {
-            get: getFunc1,
-            set: setFunc1,
-            configurable: true
-        });
+Object.defineProperty(obj, "foo", {
+    get: getFunc1,
+    set: setFunc1,
+    configurable: true
+});
 
-        function getFunc2() {
-            return 20;
-        }
+function getFunc2() {
+    return 20;
+}
 
-        Object.defineProperty(obj, "foo", { get: getFunc2 });
-        return accessorPropertyAttributesAreCorrect(obj, "foo", getFunc2, setFunc1, "helpVerifySet", false, true);
-    }
-runTestCase(testcase);
+Object.defineProperty(obj, "foo", { get: getFunc2 });
+verifyEqualTo(obj, "foo", getFunc2());
+
+verifyWritable(obj, "foo", "helpVerifySet");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-77.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-77.js
index 7903793195..6a9d4edaba 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-77.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-77.js
@@ -9,22 +9,21 @@ es5id: 15.2.3.6-4-77
 description: >
     Object.defineProperty - both desc.[[Set]] and name.[[Set]] are two
     objects which refer to the same object (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function setFunc(value) {
-            obj.setVerifyHelpProp = value;
-        }
+function setFunc(value) {
+    obj.setVerifyHelpProp = value;
+}
 
-        Object.defineProperty(obj, "foo", { set: setFunc });
+Object.defineProperty(obj, "foo", { set: setFunc });
 
-        Object.defineProperty(obj, "foo", { set: setFunc });
-        return accessorPropertyAttributesAreCorrect(obj, "foo", undefined, setFunc, "setVerifyHelpProp", false, false);
-    }
-runTestCase(testcase);
+Object.defineProperty(obj, "foo", { set: setFunc });
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-78.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-78.js
index df7d3b47a7..5c354a07ba 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-78.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-78.js
@@ -9,27 +9,26 @@ es5id: 15.2.3.6-4-78
 description: >
     Object.defineProperty - desc.[[Set]] and name.[[Set]] are two
     objects which refer to the different objects (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function setFunc1() { }
+function setFunc1() { }
 
-        Object.defineProperty(obj, "foo", {
-            set: setFunc1,
-            configurable: true
-        });
+Object.defineProperty(obj, "foo", {
+    set: setFunc1,
+    configurable: true
+});
 
-        function setFunc2(value) {
-            obj.setVerifyHelpProp = value;
-        }
+function setFunc2(value) {
+    obj.setVerifyHelpProp = value;
+}
 
-        Object.defineProperty(obj, "foo", { set: setFunc2 });
-        return accessorPropertyAttributesAreCorrect(obj, "foo", undefined, setFunc2, "setVerifyHelpProp", false, true);
-    }
-runTestCase(testcase);
+Object.defineProperty(obj, "foo", { set: setFunc2 });
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-79.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-79.js
index 122ec04648..652528224a 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-79.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-79.js
@@ -9,18 +9,20 @@ es5id: 15.2.3.6-4-79
 description: >
     Object.defineProperty - both desc.enumerable and name.enumerable
     are boolean values with the same value (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", { enumerable: false });
+Object.defineProperty(obj, "foo", { enumerable: false });
+
+Object.defineProperty(obj, "foo", { enumerable: false });
+verifyEqualTo(obj, "foo", undefined);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
 
-        Object.defineProperty(obj, "foo", { enumerable: false });
-        return dataPropertyAttributesAreCorrect(obj, "foo", undefined, false, false, false);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-80.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-80.js
index 2b4cb7dcde..8655a13c22 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-80.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-80.js
@@ -9,18 +9,20 @@ es5id: 15.2.3.6-4-80
 description: >
     Object.defineProperty - desc.enumerable and name.enumerable are
     boolean negation of each other (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", { enumerable: false, configurable: true });
+Object.defineProperty(obj, "foo", { enumerable: false, configurable: true });
+
+Object.defineProperty(obj, "foo", { enumerable: true });
+verifyEqualTo(obj, "foo", undefined);
+
+verifyNotWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
 
-        Object.defineProperty(obj, "foo", { enumerable: true });
-        return dataPropertyAttributesAreCorrect(obj, "foo", undefined, false, true, true);
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-81.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-81.js
index f32840dfdc..2c49e9198d 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-81.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-81.js
@@ -9,18 +9,19 @@ es5id: 15.2.3.6-4-81
 description: >
     Object.defineProperty - both desc.configurable and
     name.configurable are booleans with the same value (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-    
-        var obj = {};
 
-        Object.defineProperty(obj, "foo", { configurable: false });
+var obj = {};
 
-        Object.defineProperty(obj, "foo", { configurable: false });
-        return dataPropertyAttributesAreCorrect(obj, "foo", undefined, false, false, false);
-    }
-runTestCase(testcase);
+Object.defineProperty(obj, "foo", { configurable: false });
+
+Object.defineProperty(obj, "foo", { configurable: false });
+verifyEqualTo(obj, "foo", undefined);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-1.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-1.js
index 769cd95b32..d6ad349207 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-1.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-1.js
@@ -13,26 +13,27 @@ description: >
     'desc' is a generic descriptor which only contains [[Enumerable]]
     attribute as false, 'name' property is a data property (8.12.9
     step 8)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-    
-        var obj = {};
-
-        Object.defineProperty(obj, "foo", {
-            value: 1001,
-            writable: true,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.defineProperty(obj, "foo", {
-            enumerable: false
-        });
-        
-        return dataPropertyAttributesAreCorrect(obj, "foo", 1001, true, false, true);
-    }
-runTestCase(testcase);
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+    value: 1001,
+    writable: true,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperty(obj, "foo", {
+    enumerable: false
+});
+
+verifyEqualTo(obj, "foo", 1001);
+
+verifyWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-10.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-10.js
index a05dceb4e1..6da0583fe5 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-10.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-10.js
@@ -13,33 +13,34 @@ description: >
     'desc' is a generic descriptor which contains [[Enumerable]]
     attribute as true and [[Configurable]] attribute is false, 'name'
     property is an accessor property (8.12.9 step 8)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-        obj.verifySetFunction = "data";
-        var get_func = function () {
-            return obj.verifySetFunction;
-        };
-        var set_func = function (value) {
-            obj.verifySetFunction = value;
-        };
-        Object.defineProperty(obj, "foo", {
-            get: get_func,
-            set: set_func,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.defineProperty(obj, "foo", {
-            enumerable: true,
-            configurable: false
-        });
-
-        return accessorPropertyAttributesAreCorrect(obj, "foo", get_func, set_func, "verifySetFunction", true, false);
-    }
-runTestCase(testcase);
+
+var obj = {};
+obj.verifySetFunction = "data";
+var get_func = function () {
+    return obj.verifySetFunction;
+};
+var set_func = function (value) {
+    obj.verifySetFunction = value;
+};
+Object.defineProperty(obj, "foo", {
+    get: get_func,
+    set: set_func,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperty(obj, "foo", {
+    enumerable: true,
+    configurable: false
+});
+
+verifyEqualTo(obj, "foo", get_func());
+
+verifyWritable(obj, "foo", "verifySetFunction");
+
+verifyEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-11.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-11.js
index 2fac9a50e3..1174d87976 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-11.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-11.js
@@ -13,33 +13,34 @@ description: >
     are true,  the 'desc' is a generic descriptor which contains
     [[Enumerable]] and [[Configurable]] attributes as false, 'name'
     property is an accessor property (8.12.9 step 8)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-        obj.verifySetFunction = "data";
-        var get_func = function () {
-            return obj.verifySetFunction;
-        };
-        var set_func = function (value) {
-            obj.verifySetFunction = value;
-        };
-        Object.defineProperty(obj, "foo", {
-            get: get_func,
-            set: set_func,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.defineProperty(obj, "foo", {
-            enumerable: false,
-            configurable: false
-        });
-
-        return accessorPropertyAttributesAreCorrect(obj, "foo", get_func, set_func, "verifySetFunction", false, false);
-    }
-runTestCase(testcase);
+
+var obj = {};
+obj.verifySetFunction = "data";
+var get_func = function () {
+    return obj.verifySetFunction;
+};
+var set_func = function (value) {
+    obj.verifySetFunction = value;
+};
+Object.defineProperty(obj, "foo", {
+    get: get_func,
+    set: set_func,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperty(obj, "foo", {
+    enumerable: false,
+    configurable: false
+});
+
+verifyEqualTo(obj, "foo", get_func());
+
+verifyWritable(obj, "foo", "verifySetFunction");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-12.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-12.js
index 24cc41f2cf..873d8cbfe5 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-12.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-12.js
@@ -13,32 +13,33 @@ description: >
     the 'desc' is a generic descriptor which only contains
     [[Enumerable]] attribute as true, 'name' property is an accessor
     property (8.12.9 step 8)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-        obj.verifySetFunction = "data";
-        var get_func = function () {
-            return obj.verifySetFunction;
-        };
-        var set_func = function (value) {
-            obj.verifySetFunction = value;
-        };
-        Object.defineProperty(obj, "foo", {
-            get: get_func,
-            set: set_func,
-            enumerable: false,
-            configurable: true
-        });
-
-        Object.defineProperty(obj, "foo", {
-            enumerable: true
-        });
-
-        return accessorPropertyAttributesAreCorrect(obj, "foo", get_func, set_func, "verifySetFunction", true, true);
-    }
-runTestCase(testcase);
+
+var obj = {};
+obj.verifySetFunction = "data";
+var get_func = function () {
+    return obj.verifySetFunction;
+};
+var set_func = function (value) {
+    obj.verifySetFunction = value;
+};
+Object.defineProperty(obj, "foo", {
+    get: get_func,
+    set: set_func,
+    enumerable: false,
+    configurable: true
+});
+
+Object.defineProperty(obj, "foo", {
+    enumerable: true
+});
+
+verifyEqualTo(obj, "foo", get_func());
+
+verifyWritable(obj, "foo", "verifySetFunction");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-13.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-13.js
index ae0699c336..f6915786b9 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-13.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-13.js
@@ -13,26 +13,27 @@ description: >
     'desc' is a generic descriptor which only contains [[Enumerable]]
     attribute as false, 'name' property is an index data property
     (8.12.9 step 8)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-    
-        var obj = {};
-
-        Object.defineProperty(obj, "0", {
-            value: 1001,
-            writable: true,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.defineProperty(obj, "0", {
-            enumerable: false
-        });
-        
-        return dataPropertyAttributesAreCorrect(obj, "0", 1001, true, false, true);
-    }
-runTestCase(testcase);
+
+var obj = {};
+
+Object.defineProperty(obj, "0", {
+    value: 1001,
+    writable: true,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperty(obj, "0", {
+    enumerable: false
+});
+
+verifyEqualTo(obj, "0", 1001);
+
+verifyWritable(obj, "0");
+
+verifyNotEnumerable(obj, "0");
+
+verifyConfigurable(obj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-14.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-14.js
index ef0755d245..5622180a14 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-14.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-14.js
@@ -13,27 +13,28 @@ description: >
     'desc' is a generic descriptor which contains [[Enumerable]]
     attribute as false and [[Configurable]] attribute as true, 'name'
     property is an index data property (8.12.9 step 8)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-    
-        var obj = {};
-
-        Object.defineProperty(obj, "0", {
-            value: 1001,
-            writable: true,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.defineProperty(obj, "0", {
-            enumerable: false,
-            configurable: true
-        });
-        
-        return dataPropertyAttributesAreCorrect(obj, "0", 1001, true, false, true);
-    }
-runTestCase(testcase);
+
+var obj = {};
+
+Object.defineProperty(obj, "0", {
+    value: 1001,
+    writable: true,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperty(obj, "0", {
+    enumerable: false,
+    configurable: true
+});
+
+verifyEqualTo(obj, "0", 1001);
+
+verifyWritable(obj, "0");
+
+verifyNotEnumerable(obj, "0");
+
+verifyConfigurable(obj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-15.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-15.js
index b3189647c7..6129570988 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-15.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-15.js
@@ -12,26 +12,27 @@ description: >
     attribute of 'name' property is true,  the 'desc' is a generic
     descriptor which contains [[Configurable]] attribute as false,
     'name' property is an index data property (8.12.9 step 8)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-    
-        var obj = {};
 
-        Object.defineProperty(obj, "0", {
-            value: 1001,
-            writable: true,
-            enumerable: true,
-            configurable: true
-        });
+var obj = {};
 
-        Object.defineProperty(obj, "0", {
-            configurable: false
-        });
+Object.defineProperty(obj, "0", {
+    value: 1001,
+    writable: true,
+    enumerable: true,
+    configurable: true
+});
 
-        return dataPropertyAttributesAreCorrect(obj, "0", 1001, true, true, false);
-    }
-runTestCase(testcase);
+Object.defineProperty(obj, "0", {
+    configurable: false
+});
+
+verifyEqualTo(obj, "0", 1001);
+
+verifyWritable(obj, "0");
+
+verifyEnumerable(obj, "0");
+
+verifyNotConfigurable(obj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-16.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-16.js
index b4ed23d8cb..a76d1ad43f 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-16.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-16.js
@@ -13,27 +13,28 @@ description: >
     'desc' is a generic descriptor which contains [[Enumerable]]
     attribute as true and [[Configurable]] attribute as false, 'name'
     property is an index data property (8.12.9 step 8)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-    
-        var obj = {};
-
-        Object.defineProperty(obj, "0", {
-            value: 1001,
-            writable: true,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.defineProperty(obj, "0", {
-            enumerable: true, 
-            configurable: false
-        });
-
-        return dataPropertyAttributesAreCorrect(obj, "0", 1001, true, true, false);
-    }
-runTestCase(testcase);
+
+var obj = {};
+
+Object.defineProperty(obj, "0", {
+    value: 1001,
+    writable: true,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperty(obj, "0", {
+    enumerable: true, 
+    configurable: false
+});
+
+verifyEqualTo(obj, "0", 1001);
+
+verifyWritable(obj, "0");
+
+verifyEnumerable(obj, "0");
+
+verifyNotConfigurable(obj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-17.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-17.js
index 448d8c7751..dc78b88c0b 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-17.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-17.js
@@ -13,27 +13,28 @@ description: >
     are true, the 'desc' is a generic descriptor which contains
     [[Enumerable]] and [[Configurable]] attributes as false, 'name'
     property is an index data property (8.12.9 step 8)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-    
-        var obj = {};
-
-        Object.defineProperty(obj, "0", {
-            value: 1001,
-            writable: true,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.defineProperty(obj, "0", {
-            enumerable: false,
-            configurable: false
-        });
-
-        return dataPropertyAttributesAreCorrect(obj, "0", 1001, true, false, false);
-    }
-runTestCase(testcase);
+
+var obj = {};
+
+Object.defineProperty(obj, "0", {
+    value: 1001,
+    writable: true,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperty(obj, "0", {
+    enumerable: false,
+    configurable: false
+});
+
+verifyEqualTo(obj, "0", 1001);
+
+verifyWritable(obj, "0");
+
+verifyNotEnumerable(obj, "0");
+
+verifyNotConfigurable(obj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-18.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-18.js
index 614ad6039e..2cd3041a9f 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-18.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-18.js
@@ -13,26 +13,27 @@ description: >
     the 'desc' is a generic descriptor which only contains
     [[Enumerable]] attribute as true, 'name' property is an index data
     property (8.12.9 step 8)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-    
-        var obj = {};
 
-        Object.defineProperty(obj, "0", {
-            value: 1001,
-            writable: true,
-            enumerable: false,
-            configurable: true
-        });
+var obj = {};
 
-        Object.defineProperty(obj, "0", {
-            enumerable: true
-        });
+Object.defineProperty(obj, "0", {
+    value: 1001,
+    writable: true,
+    enumerable: false,
+    configurable: true
+});
 
-        return dataPropertyAttributesAreCorrect(obj, "0", 1001, true, true, true);
-    }
-runTestCase(testcase);
+Object.defineProperty(obj, "0", {
+    enumerable: true
+});
+
+verifyEqualTo(obj, "0", 1001);
+
+verifyWritable(obj, "0");
+
+verifyEnumerable(obj, "0");
+
+verifyConfigurable(obj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-19.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-19.js
index 939fd49d18..f4322c4b0c 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-19.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-19.js
@@ -13,32 +13,33 @@ description: >
     'desc' is a generic descriptor which only contains [Enumerable]]
     attribute as false and 'name' property is an index accessor
     property (8.12.9 step 8)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-        obj.verifySetFunction = "data";
-        var get_func = function () {
-            return obj.verifySetFunction;
-        };
-        var set_func = function (value) {
-            obj.verifySetFunction = value;
-        };
-        Object.defineProperty(obj, "0", {
-            get: get_func,
-            set: set_func,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.defineProperty(obj, "0", {
-            enumerable: false
-        });
-
-        return accessorPropertyAttributesAreCorrect(obj, "0", get_func, set_func, "verifySetFunction", false, true);
-    }
-runTestCase(testcase);
+
+var obj = {};
+obj.verifySetFunction = "data";
+var get_func = function () {
+    return obj.verifySetFunction;
+};
+var set_func = function (value) {
+    obj.verifySetFunction = value;
+};
+Object.defineProperty(obj, "0", {
+    get: get_func,
+    set: set_func,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperty(obj, "0", {
+    enumerable: false
+});
+
+verifyEqualTo(obj, "0", get_func());
+
+verifyWritable(obj, "0", "verifySetFunction");
+
+verifyNotEnumerable(obj, "0");
+
+verifyConfigurable(obj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-2.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-2.js
index 87966dcce4..7c7eec05bd 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-2.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-2.js
@@ -13,27 +13,28 @@ description: >
     'desc' is a generic descriptor which contains [[Enumerable]]
     attribute as false and [[Configurable]] attribute as true, 'name'
     property is a data property (8.12.9 step 8)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-    
-        var obj = {};
-
-        Object.defineProperty(obj, "foo", {
-            value: 1001,
-            writable: true,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.defineProperty(obj, "foo", {
-            enumerable: false,
-            configurable: true
-        });
-        
-        return dataPropertyAttributesAreCorrect(obj, "foo", 1001, true, false, true);
-    }
-runTestCase(testcase);
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+    value: 1001,
+    writable: true,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperty(obj, "foo", {
+    enumerable: false,
+    configurable: true
+});
+
+verifyEqualTo(obj, "foo", 1001);
+
+verifyWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-20.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-20.js
index 386f5cf2bb..dee406ff91 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-20.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-20.js
@@ -13,33 +13,34 @@ description: >
     'desc' is a generic descriptor which contains [Enumerable]]
     attribute as false and [[Configurable]] property is true, 'name'
     property is an index accessor property (8.12.9 step 8)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-        obj.verifySetFunction = "data";
-        var get_func = function () {
-            return obj.verifySetFunction;
-        };
-        var set_func = function (value) {
-            obj.verifySetFunction = value;
-        };
-        Object.defineProperty(obj, "0", {
-            get: get_func,
-            set: set_func,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.defineProperty(obj, "0", {
-            enumerable: false,
-            configurable: true
-        });
-
-        return accessorPropertyAttributesAreCorrect(obj, "0", get_func, set_func, "verifySetFunction", false, true);
-    }
-runTestCase(testcase);
+
+var obj = {};
+obj.verifySetFunction = "data";
+var get_func = function () {
+    return obj.verifySetFunction;
+};
+var set_func = function (value) {
+    obj.verifySetFunction = value;
+};
+Object.defineProperty(obj, "0", {
+    get: get_func,
+    set: set_func,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperty(obj, "0", {
+    enumerable: false,
+    configurable: true
+});
+
+verifyEqualTo(obj, "0", get_func());
+
+verifyWritable(obj, "0", "verifySetFunction");
+
+verifyNotEnumerable(obj, "0");
+
+verifyConfigurable(obj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-21.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-21.js
index 4a6e5e620c..95b1d14862 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-21.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-21.js
@@ -13,32 +13,33 @@ description: >
     'desc' is a generic descriptor which only contains
     [[Configurable]] attribute as false, 'name' property is an index
     accessor property (8.12.9 step 8)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-        obj.verifySetFunction = "data";
-        var get_func = function () {
-            return obj.verifySetFunction;
-        };
-        var set_func = function (value) {
-            obj.verifySetFunction = value;
-        };
-        Object.defineProperty(obj, "0", {
-            get: get_func,
-            set: set_func,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.defineProperty(obj, "0", {
-            configurable: false
-        });
-
-        return accessorPropertyAttributesAreCorrect(obj, "0", get_func, set_func, "verifySetFunction", true, false);
-    }
-runTestCase(testcase);
+
+var obj = {};
+obj.verifySetFunction = "data";
+var get_func = function () {
+    return obj.verifySetFunction;
+};
+var set_func = function (value) {
+    obj.verifySetFunction = value;
+};
+Object.defineProperty(obj, "0", {
+    get: get_func,
+    set: set_func,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperty(obj, "0", {
+    configurable: false
+});
+
+verifyEqualTo(obj, "0", get_func());
+
+verifyWritable(obj, "0", "verifySetFunction");
+
+verifyEnumerable(obj, "0");
+
+verifyNotConfigurable(obj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-22.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-22.js
index fceaa5941a..531055dc44 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-22.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-22.js
@@ -13,33 +13,34 @@ description: >
     'desc' is a generic descriptor which contains [[Enumerable]]
     attribute as true and [[Configurable]] attribute is false, 'name'
     property is an index accessor property (8.12.9 step 8)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-        obj.verifySetFunction = "data";
-        var get_func = function () {
-            return obj.verifySetFunction;
-        };
-        var set_func = function (value) {
-            obj.verifySetFunction = value;
-        };
-        Object.defineProperty(obj, "0", {
-            get: get_func,
-            set: set_func,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.defineProperty(obj, "0", {
-            enumerable: true,
-            configurable: false
-        });
-
-        return accessorPropertyAttributesAreCorrect(obj, "0", get_func, set_func, "verifySetFunction", true, false);
-    }
-runTestCase(testcase);
+
+var obj = {};
+obj.verifySetFunction = "data";
+var get_func = function () {
+    return obj.verifySetFunction;
+};
+var set_func = function (value) {
+    obj.verifySetFunction = value;
+};
+Object.defineProperty(obj, "0", {
+    get: get_func,
+    set: set_func,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperty(obj, "0", {
+    enumerable: true,
+    configurable: false
+});
+
+verifyEqualTo(obj, "0", get_func());
+
+verifyWritable(obj, "0", "verifySetFunction");
+
+verifyEnumerable(obj, "0");
+
+verifyNotConfigurable(obj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-23.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-23.js
index 29a637a453..276afbcf46 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-23.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-23.js
@@ -13,33 +13,34 @@ description: >
     are true,  the 'desc' is a generic descriptor which contains
     [[Enumerable]] and [[Configurable]] attributes as false, 'name'
     property is an index accessor property (8.12.9 step 8)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-        obj.verifySetFunction = "data";
-        var get_func = function () {
-            return obj.verifySetFunction;
-        };
-        var set_func = function (value) {
-            obj.verifySetFunction = value;
-        };
-        Object.defineProperty(obj, "0", {
-            get: get_func,
-            set: set_func,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.defineProperty(obj, "0", {
-            enumerable: false,
-            configurable: false
-        });
-
-        return accessorPropertyAttributesAreCorrect(obj, "0", get_func, set_func, "verifySetFunction", false, false);
-    }
-runTestCase(testcase);
+
+var obj = {};
+obj.verifySetFunction = "data";
+var get_func = function () {
+    return obj.verifySetFunction;
+};
+var set_func = function (value) {
+    obj.verifySetFunction = value;
+};
+Object.defineProperty(obj, "0", {
+    get: get_func,
+    set: set_func,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperty(obj, "0", {
+    enumerable: false,
+    configurable: false
+});
+
+verifyEqualTo(obj, "0", get_func());
+
+verifyWritable(obj, "0", "verifySetFunction");
+
+verifyNotEnumerable(obj, "0");
+
+verifyNotConfigurable(obj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-24.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-24.js
index ea8c8f96b1..ffd239946a 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-24.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-24.js
@@ -13,32 +13,33 @@ description: >
     the 'desc' is a generic descriptor which only contains
     [[Enumerable]] attribute as true, 'name' property is an index
     accessor property (8.12.9 step 8)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-        obj.verifySetFunction = "data";
-        var get_func = function () {
-            return obj.verifySetFunction;
-        };
-        var set_func = function (value) {
-            obj.verifySetFunction = value;
-        };
-        Object.defineProperty(obj, "0", {
-            get: get_func,
-            set: set_func,
-            enumerable: false,
-            configurable: true
-        });
-
-        Object.defineProperty(obj, "0", {
-            enumerable: true
-        });
-
-        return accessorPropertyAttributesAreCorrect(obj, "0", get_func, set_func, "verifySetFunction", true, true);
-    }
-runTestCase(testcase);
+
+var obj = {};
+obj.verifySetFunction = "data";
+var get_func = function () {
+    return obj.verifySetFunction;
+};
+var set_func = function (value) {
+    obj.verifySetFunction = value;
+};
+Object.defineProperty(obj, "0", {
+    get: get_func,
+    set: set_func,
+    enumerable: false,
+    configurable: true
+});
+
+Object.defineProperty(obj, "0", {
+    enumerable: true
+});
+
+verifyEqualTo(obj, "0", get_func());
+
+verifyWritable(obj, "0", "verifySetFunction");
+
+verifyEnumerable(obj, "0");
+
+verifyConfigurable(obj, "0");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-3.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-3.js
index c7feb4307f..218a93790f 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-3.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-3.js
@@ -12,26 +12,27 @@ description: >
     attribute of 'name' property is true,  the 'desc' is a generic
     descriptor which contains [[Configurable]] attribute as false,
     'name' property is a data property (8.12.9 step 8)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-    
-        var obj = {};
 
-        Object.defineProperty(obj, "foo", {
-            value: 1001,
-            writable: true,
-            enumerable: true,
-            configurable: true
-        });
+var obj = {};
 
-        Object.defineProperty(obj, "foo", {
-            configurable: false
-        });
+Object.defineProperty(obj, "foo", {
+    value: 1001,
+    writable: true,
+    enumerable: true,
+    configurable: true
+});
 
-        return dataPropertyAttributesAreCorrect(obj, "foo", 1001, true, true, false);
-    }
-runTestCase(testcase);
+Object.defineProperty(obj, "foo", {
+    configurable: false
+});
+
+verifyEqualTo(obj, "foo", 1001);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-4.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-4.js
index 9a0acc052d..5f29862231 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-4.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-4.js
@@ -13,27 +13,28 @@ description: >
     'desc' is a generic descriptor which contains [[Enumerable]]
     attribute as true and [[Configurable]] attribute as false, 'name'
     property is a data property (8.12.9 step 8)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-    
-        var obj = {};
-
-        Object.defineProperty(obj, "foo", {
-            value: 1001,
-            writable: true,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.defineProperty(obj, "foo", {
-            enumerable: true, 
-            configurable: false
-        });
-
-        return dataPropertyAttributesAreCorrect(obj, "foo", 1001, true, true, false);
-    }
-runTestCase(testcase);
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+    value: 1001,
+    writable: true,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperty(obj, "foo", {
+    enumerable: true, 
+    configurable: false
+});
+
+verifyEqualTo(obj, "foo", 1001);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-5.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-5.js
index 78a4d85949..e94a7a3199 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-5.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-5.js
@@ -13,27 +13,28 @@ description: >
     are true, the 'desc' is a generic descriptor which contains
     [[Enumerable]] and [[Configurable]] attributes as false, 'name'
     property is a data property (8.12.9 step 8)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-    
-        var obj = {};
-
-        Object.defineProperty(obj, "foo", {
-            value: 1001,
-            writable: true,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.defineProperty(obj, "foo", {
-            enumerable: false,
-            configurable: false
-        });
-
-        return dataPropertyAttributesAreCorrect(obj, "foo", 1001, true, false, false);
-    }
-runTestCase(testcase);
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+    value: 1001,
+    writable: true,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperty(obj, "foo", {
+    enumerable: false,
+    configurable: false
+});
+
+verifyEqualTo(obj, "foo", 1001);
+
+verifyWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-6.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-6.js
index 1367232c37..abf5c3424f 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-6.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-6.js
@@ -13,26 +13,27 @@ description: >
     the 'desc' is a generic descriptor which only contains
     [[Enumerable]] attribute as true, 'name' property is a data
     property (8.12.9 step 8)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-    
-        var obj = {};
 
-        Object.defineProperty(obj, "foo", {
-            value: 1001,
-            writable: true,
-            enumerable: false,
-            configurable: true
-        });
+var obj = {};
 
-        Object.defineProperty(obj, "foo", {
-            enumerable: true
-        });
+Object.defineProperty(obj, "foo", {
+    value: 1001,
+    writable: true,
+    enumerable: false,
+    configurable: true
+});
 
-        return dataPropertyAttributesAreCorrect(obj, "foo", 1001, true, true, true);
-    }
-runTestCase(testcase);
+Object.defineProperty(obj, "foo", {
+    enumerable: true
+});
+
+verifyEqualTo(obj, "foo", 1001);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-7.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-7.js
index d49a50b5e4..feb76fbd3d 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-7.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-7.js
@@ -13,32 +13,33 @@ description: >
     'desc' is a generic descriptor which only contains [Enumerable]]
     attribute as false and 'name' property is an accessor property
     (8.12.9 step 8)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-        obj.verifySetFunction = "data";
-        var get_func = function () {
-            return obj.verifySetFunction;
-        };
-        var set_func = function (value) {
-            obj.verifySetFunction = value;
-        };
-        Object.defineProperty(obj, "foo", {
-            get: get_func,
-            set: set_func,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.defineProperty(obj, "foo", {
-            enumerable: false
-        });
-
-        return accessorPropertyAttributesAreCorrect(obj, "foo", get_func, set_func, "verifySetFunction", false, true);
-    }
-runTestCase(testcase);
+
+var obj = {};
+obj.verifySetFunction = "data";
+var get_func = function () {
+    return obj.verifySetFunction;
+};
+var set_func = function (value) {
+    obj.verifySetFunction = value;
+};
+Object.defineProperty(obj, "foo", {
+    get: get_func,
+    set: set_func,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperty(obj, "foo", {
+    enumerable: false
+});
+
+verifyEqualTo(obj, "foo", get_func());
+
+verifyWritable(obj, "foo", "verifySetFunction");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-8.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-8.js
index 3cad3541ca..483f2cbd24 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-8.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-8.js
@@ -13,33 +13,34 @@ description: >
     'desc' is a generic descriptor which contains [Enumerable]]
     attribute as false and [[Configurable]] property is true, 'name'
     property is an accessor property (8.12.9 step 8)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-        obj.verifySetFunction = "data";
-        var get_func = function () {
-            return obj.verifySetFunction;
-        };
-        var set_func = function (value) {
-            obj.verifySetFunction = value;
-        };
-        Object.defineProperty(obj, "foo", {
-            get: get_func,
-            set: set_func,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.defineProperty(obj, "foo", {
-            enumerable: false,
-            configurable: true
-        });
-
-        return accessorPropertyAttributesAreCorrect(obj, "foo", get_func, set_func, "verifySetFunction", false, true);
-    }
-runTestCase(testcase);
+
+var obj = {};
+obj.verifySetFunction = "data";
+var get_func = function () {
+    return obj.verifySetFunction;
+};
+var set_func = function (value) {
+    obj.verifySetFunction = value;
+};
+Object.defineProperty(obj, "foo", {
+    get: get_func,
+    set: set_func,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperty(obj, "foo", {
+    enumerable: false,
+    configurable: true
+});
+
+verifyEqualTo(obj, "foo", get_func());
+
+verifyWritable(obj, "foo", "verifySetFunction");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-9.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-9.js
index a8b2def02a..fa40ce3520 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-82-9.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-82-9.js
@@ -13,32 +13,33 @@ description: >
     'desc' is a generic descriptor which only contains
     [[Configurable]] attribute as false, 'name' property is an
     accessor property (8.12.9 step 8)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-        obj.verifySetFunction = "data";
-        var get_func = function () {
-            return obj.verifySetFunction;
-        };
-        var set_func = function (value) {
-            obj.verifySetFunction = value;
-        };
-        Object.defineProperty(obj, "foo", {
-            get: get_func,
-            set: set_func,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.defineProperty(obj, "foo", {
-            configurable: false
-        });
-
-        return accessorPropertyAttributesAreCorrect(obj, "foo", get_func, set_func, "verifySetFunction", true, false);
-    }
-runTestCase(testcase);
+
+var obj = {};
+obj.verifySetFunction = "data";
+var get_func = function () {
+    return obj.verifySetFunction;
+};
+var set_func = function (value) {
+    obj.verifySetFunction = value;
+};
+Object.defineProperty(obj, "foo", {
+    get: get_func,
+    set: set_func,
+    enumerable: true,
+    configurable: true
+});
+
+Object.defineProperty(obj, "foo", {
+    configurable: false
+});
+
+verifyEqualTo(obj, "foo", get_func());
+
+verifyWritable(obj, "foo", "verifySetFunction");
+
+verifyEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-82.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-82.js
index 22f8911a75..feafd69efa 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-82.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-82.js
@@ -9,18 +9,19 @@ es5id: 15.2.3.6-4-82
 description: >
     Object.defineProperty - desc.configurable and name.configurable
     are boolean negation of each other (8.12.9 step 6)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-    
-        var obj = {};
 
-        Object.defineProperty(obj, "foo", { configurable: true });
+var obj = {};
 
-        Object.defineProperty(obj, "foo", { configurable: false });
-        return dataPropertyAttributesAreCorrect(obj, "foo", undefined, false, false, false);
-    }
-runTestCase(testcase);
+Object.defineProperty(obj, "foo", { configurable: true });
+
+Object.defineProperty(obj, "foo", { configurable: false });
+verifyEqualTo(obj, "foo", undefined);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-83.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-83.js
index 0516f9521b..aaf98d3c6a 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-83.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-83.js
@@ -10,26 +10,27 @@ description: >
     Object.defineProperty will not throw TypeError if
     name.configurable = false, name.writable = false, name.value =
     undefined and desc.value = undefined (8.12.9 step 10.a.ii.1)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", { 
-            value: undefined, 
-            writable: false, 
-            configurable: false 
-        });
+Object.defineProperty(obj, "foo", { 
+    value: undefined, 
+    writable: false, 
+    configurable: false 
+});
 
-        Object.defineProperty(obj, "foo", { 
-            value: undefined, 
-            writable: false, 
-            configurable: false
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", undefined, false, false, false);
-    }
-runTestCase(testcase);
+Object.defineProperty(obj, "foo", { 
+    value: undefined, 
+    writable: false, 
+    configurable: false
+});
+verifyEqualTo(obj, "foo", undefined);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-84.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-84.js
index 732f8f3d81..aeb9af2480 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-84.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-84.js
@@ -10,26 +10,27 @@ description: >
     Object.defineProperty will not throw TypeError if
     name.configurable = false, name.writable = false, name.value =
     null and desc.value = null (8.12.9 step 10.a.ii.1)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", { 
-            value: null, 
-            writable: false, 
-            configurable: false 
-        });
+Object.defineProperty(obj, "foo", { 
+    value: null, 
+    writable: false, 
+    configurable: false 
+});
 
-        Object.defineProperty(obj, "foo", { 
-            value: null,  
-            writable: false, 
-            configurable: false 
-        });
-        return dataPropertyAttributesAreCorrect(obj, "foo", null, false, false, false);
-    }
-runTestCase(testcase);
+Object.defineProperty(obj, "foo", { 
+    value: null,  
+    writable: false, 
+    configurable: false 
+});
+verifyEqualTo(obj, "foo", null);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-86.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-86.js
index 70df96be68..ad4017d4fe 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-86.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-86.js
@@ -10,26 +10,32 @@ description: >
     Object.defineProperty will throw TypeError when name.configurable
     = false, name.writable = false, desc.value = +0 and name.value =
     -0 (8.12.9 step 10.a.ii.1)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", { 
-            value: -0, 
-            writable: false, 
-            configurable: false 
-        });
+Object.defineProperty(obj, "foo", { 
+    value: -0, 
+    writable: false, 
+    configurable: false 
+});
 
-        try {
-            Object.defineProperty(obj, "foo", { value: +0 });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(obj, "foo", -0, false, false, false);
-        }
+try {
+    Object.defineProperty(obj, "foo", { value: +0 });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "foo", -0);
+
+    verifyNotWritable(obj, "foo");
+
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-87.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-87.js
index 18c7b2fec3..9bec40b886 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-87.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-87.js
@@ -10,26 +10,32 @@ description: >
     Object.defineProperty will throw TypeError when name.configurable
     = false, name.writable = false, desc.value = -0 and name.value =
     +0 (8.12.9 step 10.a.ii.1)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", { 
-            value: +0, 
-            writable: false, 
-            configurable: false 
-        });
+Object.defineProperty(obj, "foo", { 
+    value: +0, 
+    writable: false, 
+    configurable: false 
+});
 
-        try {
-            Object.defineProperty(obj, "foo", { value: -0 });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(obj, "foo", +0, false, false, false);
-        }
+try {
+    Object.defineProperty(obj, "foo", { value: -0 });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "foo", +0);
+
+    verifyNotWritable(obj, "foo");
+
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-88.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-88.js
index de86c82c16..8e4b065a13 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-88.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-88.js
@@ -11,26 +11,23 @@ description: >
     name.configurable = false, name.writable = false, desc.value and
     name.value are two numbers with the same value (8.12.9 step
     10.a.ii.1)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", { 
-            value: 100, 
-            writable: false, 
-            configurable: false 
-        });
+Object.defineProperty(obj, "foo", { 
+    value: 100, 
+    writable: false, 
+    configurable: false 
+});
 
-        try {
-            Object.defineProperty(obj, "foo", { value: 100 });
-            return dataPropertyAttributesAreCorrect(obj, "foo", 100, false, false, false);
-        } catch (e) {
-            return false;
-        }
-    }
-runTestCase(testcase);
+Object.defineProperty(obj, "foo", { value: 100 });
+verifyEqualTo(obj, "foo", 100);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-89.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-89.js
index 340f34baa8..34d7382d3a 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-89.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-89.js
@@ -10,26 +10,32 @@ description: >
     Object.defineProperty will throw TypeError when name.configurable
     = false, name.writable = false, desc.value and name.value are two
     numbers with different values (8.12.9 step 10.a.ii.1)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        Object.defineProperty(obj, "foo", { 
-            value: 10, 
-            writable: false, 
-            configurable: false 
-        });
-        
-        try {
-            Object.defineProperty(obj, "foo", { value: 20 });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(obj, "foo", 10, false, false, false);
-        }
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", { 
+    value: 10, 
+    writable: false, 
+    configurable: false 
+});
+
+try {
+    Object.defineProperty(obj, "foo", { value: 20 });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "foo", 10);
+
+    verifyNotWritable(obj, "foo");
+
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-90.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-90.js
index 3557a0de82..28a8a31869 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-90.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-90.js
@@ -11,26 +11,23 @@ description: >
     name.configurable = false, name.writable = false, desc.value and
     name.value are two strings with the same value (8.12.9 step
     10.a.ii.1)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", {
-            value: "abcd",
-            writable: false,
-            configurable: false 
-        });
+Object.defineProperty(obj, "foo", {
+    value: "abcd",
+    writable: false,
+    configurable: false 
+});
 
-        try {
-            Object.defineProperty(obj, "foo", { value: "abcd" });
-            return dataPropertyAttributesAreCorrect(obj, "foo", "abcd", false, false, false);
-        } catch (e) {
-            return false;
-        }
-    }
-runTestCase(testcase);
+Object.defineProperty(obj, "foo", { value: "abcd" });
+verifyEqualTo(obj, "foo", "abcd");
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-91.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-91.js
index eb7d259f31..ac00eed1c4 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-91.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-91.js
@@ -10,26 +10,32 @@ description: >
     Object.defineProperty will throw TypeError when name.configurable
     = false, name.writable = false, desc.value and name.value are two
     strings with different values (8.12.9 step 10.a.ii.1)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", {
-            value: "abcd",
-            writable: false,
-            configurable: false 
-        });
+Object.defineProperty(obj, "foo", {
+    value: "abcd",
+    writable: false,
+    configurable: false 
+});
 
-        try {
-            Object.defineProperty(obj, "foo", { value: "fghj" });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(obj, "foo", "abcd", false, false, false);
-        }
+try {
+    Object.defineProperty(obj, "foo", { value: "fghj" });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "foo", "abcd");
+
+    verifyNotWritable(obj, "foo");
+
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-92.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-92.js
index fe298d2a64..22b1ff1689 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-92.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-92.js
@@ -11,26 +11,23 @@ description: >
     name.configurable = false, name.writable = false, desc.value and
     name.value are two booleans with the same value (8.12.9 step
     10.a.ii.1)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", {
-            value: false,
-            writable: false,
-            configurable: false 
-        });
+Object.defineProperty(obj, "foo", {
+    value: false,
+    writable: false,
+    configurable: false 
+});
 
-        try {
-            Object.defineProperty(obj, "foo", { value: false });
-            return dataPropertyAttributesAreCorrect(obj, "foo", false, false, false, false);
-        } catch (e) {
-            return false;
-        }
-    }
-runTestCase(testcase);
+Object.defineProperty(obj, "foo", { value: false });
+verifyEqualTo(obj, "foo", false);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-93.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-93.js
index 4d58ee2ea2..b4a045220b 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-93.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-93.js
@@ -10,26 +10,32 @@ description: >
     Object.defineProperty will throw TypeError when name.configurable
     = false, name.writable = false, desc.value and name.value are two
     booleans with different values (8.12.9 step 10.a.ii.1)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", {
-            value: false,
-            writable: false,
-            configurable: false 
-        });
+Object.defineProperty(obj, "foo", {
+    value: false,
+    writable: false,
+    configurable: false 
+});
 
-        try {
-            Object.defineProperty(obj, "foo", { value: true });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(obj, "foo", false, false, false, false);
-        }
+try {
+    Object.defineProperty(obj, "foo", { value: true });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "foo", false);
+
+    verifyNotWritable(obj, "foo");
+
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-94.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-94.js
index c12367ddb0..54fb888f5c 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-94.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-94.js
@@ -11,28 +11,26 @@ description: >
     name.configurable = false, name.writable = false, desc.value and
     name.value are two Objects refer to the same object (8.12.9 step
     10.a.ii.1)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        var obj1 = { length: 10 };
+var obj1 = { length: 10 };
 
-        Object.defineProperty(obj, "foo", {
-            value: obj1,
-            writable: false,
-            configurable: false 
-        });
+Object.defineProperty(obj, "foo", {
+    value: obj1,
+    writable: false,
+    configurable: false 
+});
+
+Object.defineProperty(obj, "foo", { value: obj1 });
+verifyEqualTo(obj, "foo", obj1);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
 
-        try {
-            Object.defineProperty(obj, "foo", { value: obj1 });
-            return dataPropertyAttributesAreCorrect(obj, "foo", obj1, false, false, false);
-        } catch (e) {
-            return false;
-        }
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-95.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-95.js
index a41f683145..b715972438 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-95.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-95.js
@@ -11,30 +11,36 @@ description: >
     = false, name.writable = false, desc.value and name.value are two
     objects which refer to the different objects (8.12.9 step
     10.a.ii.1)
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        var obj1 = { length: 10 };
+var obj1 = { length: 10 };
 
-        Object.defineProperty(obj, "foo", {
-            value: obj1,
-            writable: false,
-            configurable: false 
-        });
+Object.defineProperty(obj, "foo", {
+    value: obj1,
+    writable: false,
+    configurable: false 
+});
 
-        var obj2 = { length: 20 };
+var obj2 = { length: 20 };
 
-        try {
-            Object.defineProperty(obj, "foo", { value: obj2 });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && dataPropertyAttributesAreCorrect(obj, "foo", obj1, false, false, false);
-        }
+try {
+    Object.defineProperty(obj, "foo", { value: obj2 });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "foo", obj1);
+
+    verifyNotWritable(obj, "foo");
+
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-96.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-96.js
index ba8ab66ea8..fdfc645d6b 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-96.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-96.js
@@ -10,29 +10,24 @@ description: >
     Object.defineProperty will not throw TypeError when
     name.configurable = false, both desc.[[Set]] and name.[[Set]] are
     two objects which refer to the same object (8.12.9 step 11.a.i)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function setFunc(value) {
-            obj.setVerifyHelpProp = value;
-        }
+function setFunc(value) {
+    obj.setVerifyHelpProp = value;
+}
 
-        Object.defineProperty(obj, "foo", {
-            set: setFunc,
-            configurable: false
-        });
+Object.defineProperty(obj, "foo", {
+    set: setFunc,
+    configurable: false
+});
 
-        try {
-            Object.defineProperty(obj, "foo", { set: setFunc });
-            return accessorPropertyAttributesAreCorrect(obj, "foo", undefined, setFunc, "setVerifyHelpProp", false, false);
-        } catch (e) {
-            return false;
-        }
-    }
-runTestCase(testcase);
+Object.defineProperty(obj, "foo", { set: setFunc });
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-97.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-97.js
index 93ec84c6c1..b9f32c4694 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-97.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-97.js
@@ -10,35 +10,38 @@ description: >
     Object.defineProperty will throw TypeError when name.configurable
     = false, name.[[Set]] is undefined, desc.[[Set]] refers to an
     object (8.12.9 step 11.a.i)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function getFunc() {
-            return "property";
-        }
+function getFunc() {
+    return "property";
+}
 
-        Object.defineProperty(obj, "property", {
-            get: getFunc,
-            configurable: false
-        });
+Object.defineProperty(obj, "property", {
+    get: getFunc,
+    configurable: false
+});
 
-        try {
-            Object.defineProperty(obj, "property", {
-                get: getFunc,
-                set: function () { },
-                configurable: false
-            });
+try {
+    Object.defineProperty(obj, "property", {
+        get: getFunc,
+        set: function () { },
+        configurable: false
+    });
 
-            return false;
-        } catch (e) {
-            return e instanceof TypeError &&
-                accessorPropertyAttributesAreCorrect(obj, "property", getFunc, undefined, undefined, false, false);
-        }
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyEqualTo(obj, "property", getFunc());
+
+    verifyNotEnumerable(obj, "property");
+
+    verifyNotConfigurable(obj, "property");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-98.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-98.js
index 9b788e4819..95e7080053 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-98.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-98.js
@@ -10,33 +10,31 @@ description: >
     Object.defineProperty will not throw TypeError when
     name.configurable = false, both desc.[[Get]] and name.[[Get]] are
     two objects which refer to the same object (8.12.9 step 11.a.ii)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-
-        var obj = {};
-
-        function getFunc() {
-            return 10;
-        }
-        function setFunc(value) {
-            obj.verifyGetHelpMethod = value;
-        }
-
-        Object.defineProperty(obj, "foo", {
-            get: getFunc,
-            set: setFunc,
-            configurable: false
-        });
-
-        try {
-            Object.defineProperty(obj, "foo", { get: getFunc });
-            return accessorPropertyAttributesAreCorrect(obj, "foo", getFunc, setFunc, "verifyGetHelpMethod", false, false);
-        } catch (e) {
-            return false;
-        }
-    }
-runTestCase(testcase);
+
+var obj = {};
+
+function getFunc() {
+    return 10;
+}
+function setFunc(value) {
+    obj.verifyGetHelpMethod = value;
+}
+
+Object.defineProperty(obj, "foo", {
+    get: getFunc,
+    set: setFunc,
+    configurable: false
+});
+
+Object.defineProperty(obj, "foo", { get: getFunc });
+
+verifyEqualTo(obj, "foo", getFunc());
+
+verifyWritable(obj, "foo", "verifyGetHelpMethod");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/defineProperty/15.2.3.6-4-99.js b/test/built-ins/Object/defineProperty/15.2.3.6-4-99.js
index 5c62c6f912..ddcec50625 100644
--- a/test/built-ins/Object/defineProperty/15.2.3.6-4-99.js
+++ b/test/built-ins/Object/defineProperty/15.2.3.6-4-99.js
@@ -10,36 +10,40 @@ description: >
     Object.defineProperty will throw TypeError when name.configurable
     = false, name.[[Get]] is undefined, desc.[[Get]] refers to an
     object (8.12.9 step 11.a.ii)
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
 
-        var obj = {};
+var obj = {};
 
-        function setFunc(value) {
-            obj.setVerifyHelpProp = value;
-        }
+function setFunc(value) {
+    obj.setVerifyHelpProp = value;
+}
 
-        Object.defineProperty(obj, "foo", {
-            set: setFunc,
-            configurable: false
-        });
+Object.defineProperty(obj, "foo", {
+    set: setFunc,
+    configurable: false
+});
 
-        function getFunc() {
-            return 10;
-        }
+function getFunc() {
+    return 10;
+}
 
-        try {
-            Object.defineProperty(obj, "foo", {
-                get: getFunc,
-                set: setFunc
-            });
-            return false;
-        } catch (e) {
-            return e instanceof TypeError && accessorPropertyAttributesAreCorrect(obj, "foo", undefined, setFunc, "setVerifyHelpProp", false, false);
-        }
+try {
+    Object.defineProperty(obj, "foo", {
+        get: getFunc,
+        set: setFunc
+    });
+    $ERROR("Expected an exception.");
+} catch (e) {
+    verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+    verifyNotEnumerable(obj, "foo");
+
+    verifyNotConfigurable(obj, "foo");
+
+    if (!(e instanceof TypeError)) {
+        $ERROR("Expected TypeError, got " + e);
     }
-runTestCase(testcase);
+
+}
diff --git a/test/built-ins/Object/freeze/15.2.3.9-2-b-i-1.js b/test/built-ins/Object/freeze/15.2.3.9-2-b-i-1.js
index 10fc296827..d921745ca7 100644
--- a/test/built-ins/Object/freeze/15.2.3.9-2-b-i-1.js
+++ b/test/built-ins/Object/freeze/15.2.3.9-2-b-i-1.js
@@ -9,25 +9,34 @@ es5id: 15.2.3.9-2-b-i-1
 description: >
     Object.freeze - The [[Wrtiable]] attribute of own data property of
     'O' is set to false while other attributes are unchanged
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", {
-            value: 10,
-            writable: true,
-            enumerable: true,
-            configurable: false
-        });
+Object.defineProperty(obj, "foo", {
+    value: 10,
+    writable: true,
+    enumerable: true,
+    configurable: false
+});
 
-        Object.freeze(obj);
-        var desc = Object.getOwnPropertyDescriptor(obj, "foo");
+Object.freeze(obj);
+var desc = Object.getOwnPropertyDescriptor(obj, "foo");
+
+verifyEqualTo(obj, "foo", 10);
+
+verifyNotWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+if (desc.writable !== false) {
+    $ERROR('Expected desc.writable === false, actually ' + desc.writable);
+}
+
+if (desc.configurable !== false) {
+    $ERROR('Expected desc.configurable === false, actually ' + desc.configurable);
+}
 
-        return dataPropertyAttributesAreCorrect(obj, "foo", 10, false, true, false) &&
-            desc.writable === false && desc.configurable === false;
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/freeze/15.2.3.9-2-b-i-2.js b/test/built-ins/Object/freeze/15.2.3.9-2-b-i-2.js
index f985e57df5..561832fa2d 100644
--- a/test/built-ins/Object/freeze/15.2.3.9-2-b-i-2.js
+++ b/test/built-ins/Object/freeze/15.2.3.9-2-b-i-2.js
@@ -10,36 +10,59 @@ description: >
     Object.freeze - The [[Wrtiable]] attribute of all own data
     property of 'O' is set to false while other attributes are
     unchanged
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
-
-        Object.defineProperty(obj, "foo1", {
-            value: 10,
-            writable: false,
-            enumerable: true,
-            configurable: false
-        });
-
-        Object.defineProperty(obj, "foo2", {
-            value: 20,
-            writable: true,
-            enumerable: false,
-            configurable: false
-        });
-
-        Object.freeze(obj);
-
-        var desc1 = Object.getOwnPropertyDescriptor(obj, "foo1");
-        var desc2 = Object.getOwnPropertyDescriptor(obj, "foo2");
-
-        return dataPropertyAttributesAreCorrect(obj, "foo1", 10, false, true, false) &&
-            dataPropertyAttributesAreCorrect(obj, "foo2", 20, false, false, false) &&
-            desc1.configurable === false && desc1.writable === false &&
-            desc2.configurable === false && desc2.writable === false;
-    }
-runTestCase(testcase);
+var obj = {};
+
+Object.defineProperty(obj, "foo1", {
+    value: 10,
+    writable: false,
+    enumerable: true,
+    configurable: false
+});
+
+Object.defineProperty(obj, "foo2", {
+    value: 20,
+    writable: true,
+    enumerable: false,
+    configurable: false
+});
+
+Object.freeze(obj);
+
+var desc1 = Object.getOwnPropertyDescriptor(obj, "foo1");
+var desc2 = Object.getOwnPropertyDescriptor(obj, "foo2");
+
+verifyEqualTo(obj, "foo1", 10);
+
+verifyNotWritable(obj, "foo1");
+
+verifyEnumerable(obj, "foo1");
+
+verifyNotConfigurable(obj, "foo1");
+
+verifyEqualTo(obj, "foo2", 20);
+
+verifyNotWritable(obj, "foo2");
+
+verifyNotEnumerable(obj, "foo2");
+
+verifyNotConfigurable(obj, "foo2");
+
+if (desc1.configurable !== false) {
+    $ERROR('Expected desc1.configurable === false, actually ' + desc1.configurable);
+}
+
+if (desc1.writable !== false) {
+    $ERROR('Expected desc1.writable === false, actually ' + desc1.writable);
+}
+
+if (desc2.configurable !== false) {
+    $ERROR('Expected desc2.configurable === false, actually ' + desc2.configurable);
+}
+
+if (desc2.writable !== false) {
+    $ERROR('Expected desc2.writable === false, actually ' + desc2.writable);
+}
+
diff --git a/test/built-ins/Object/freeze/15.2.3.9-2-c-1.js b/test/built-ins/Object/freeze/15.2.3.9-2-c-1.js
index 9ef22a3d74..6a8a544c4f 100644
--- a/test/built-ins/Object/freeze/15.2.3.9-2-c-1.js
+++ b/test/built-ins/Object/freeze/15.2.3.9-2-c-1.js
@@ -10,25 +10,34 @@ description: >
     Object.freeze - The [[Configurable]] attribute of own data
     property of 'O' is set to false while other attributes are
     unchanged
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
+var obj = {};
 
-        Object.defineProperty(obj, "foo", {
-            value: 10,
-            writable: false,
-            enumerable: true,
-            configurable: true
-        });
+Object.defineProperty(obj, "foo", {
+    value: 10,
+    writable: false,
+    enumerable: true,
+    configurable: true
+});
 
-        Object.freeze(obj);
-        var desc = Object.getOwnPropertyDescriptor(obj, "foo");
+Object.freeze(obj);
+
+var desc = Object.getOwnPropertyDescriptor(obj, "foo");
+
+if (desc.configurable !== false) {
+    $ERROR("Expected desc.configurable to be false, actually " + desc.configurable);
+}
+if (desc.writable !== false) {
+    $ERROR("Expected desc.writable to be false, actually " + desc.writable);
+}
+
+verifyEqualTo(obj, "foo", 10);
+
+verifyNotWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
 
-        return dataPropertyAttributesAreCorrect(obj, "foo", 10, false, true, false) &&
-            desc.configurable === false && desc.writable === false;
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/freeze/15.2.3.9-2-c-3.js b/test/built-ins/Object/freeze/15.2.3.9-2-c-3.js
index 81ab9fe037..69135e6c5e 100644
--- a/test/built-ins/Object/freeze/15.2.3.9-2-c-3.js
+++ b/test/built-ins/Object/freeze/15.2.3.9-2-c-3.js
@@ -10,62 +10,63 @@ description: >
     Object.freeze - The [[Configurable]] attribute of all own data
     property of 'O' is set to false while other attributes are
     unchanged
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
+var obj = {};
+var resultSetFun = false;
 
-        var obj = {};
-        var resultSetFun = false;
+Object.defineProperty(obj, "foo1", {
+    value: 10,
+    writable: false,
+    enumerable: true,
+    configurable: true
+});
 
-        Object.defineProperty(obj, "foo1", {
-            value: 10,
-            writable: false,
-            enumerable: true,
-            configurable: true
-        });
+function get_func() {
+    return 10;
+}
 
-        function get_func() {
-            return 10;
-        }
+function set_func() {
+    resultSetFun = true;
+}
 
-        function set_func() {
-            resultSetFun = true;
-        }
+Object.defineProperty(obj, "foo2", {
+    get: get_func,
+    set: set_func,
+    enumerable: true,
+    configurable: true
+});
 
-        Object.defineProperty(obj, "foo2", {
-            get: get_func,
-            set: set_func,
-            enumerable: true,
-            configurable: true
-        });
+Object.freeze(obj);
 
-        Object.freeze(obj);
+verifyNotConfigurable(obj, "foo2");
+verifyEqualTo(obj, "foo2", 10);
 
-        var res1 = obj.hasOwnProperty("foo2");
-        delete obj.foo2;
-        var res2 = obj.hasOwnProperty("foo2");
-        var resultConfigurable = (res1 && res2);
+obj.foo2 = 12;
+if (!resultSetFun) {
+    $ERROR('Expected obj["foo2"] set() to be called, but was not.');
+}
 
-        var resultGetFun = (obj.foo2 === 10);
-        obj.foo2 = 12;
+if (!isEnumerable(obj, "foo2")) {
+    $ERROR('Expected obj["foo2"] to be enumerable.');
+}
 
-        var resultEnumerable = false;
-        for (var prop in obj) {
-            if (prop === "foo2") {
-                resultEnumerable = true;
-            }
-        }
+var desc1 = Object.getOwnPropertyDescriptor(obj, "foo1");
+if (desc1.configurable || desc1.writable) {
+    $ERROR('Expected obj["foo1"] to be non-writable, non-configurable; actually ' + JSON.stringify(desc1));
+}
 
-        var desc1 = Object.getOwnPropertyDescriptor(obj, "foo1");
-        var desc2 = Object.getOwnPropertyDescriptor(obj, "foo2");
+var desc2 = Object.getOwnPropertyDescriptor(obj, "foo2");
+if (desc2.configurable || desc2.writable) {
+    $ERROR('Expected obj["foo2"] to be non-writable, non-configurable; actually ' + JSON.stringify(desc2));
+}
 
-        var result = resultConfigurable && resultEnumerable && resultGetFun && resultSetFun;
+verifyEqualTo(obj, "foo1", 10);
 
-        return dataPropertyAttributesAreCorrect(obj, "foo1", 10, false, true, false) && result &&
-            desc1.configurable === false && desc1.writable === false && desc2.configurable === false;
+verifyNotWritable(obj, "foo1");
+
+verifyEnumerable(obj, "foo1");
+
+verifyNotConfigurable(obj, "foo1");
 
-    }
-runTestCase(testcase);
diff --git a/test/built-ins/Object/freeze/15.2.3.9-2-c-4.js b/test/built-ins/Object/freeze/15.2.3.9-2-c-4.js
index b438bea8d4..7e7a2c925e 100644
--- a/test/built-ins/Object/freeze/15.2.3.9-2-c-4.js
+++ b/test/built-ins/Object/freeze/15.2.3.9-2-c-4.js
@@ -9,60 +9,61 @@ es5id: 15.2.3.9-2-c-4
 description: >
     Object.freeze - all own properties of 'O' are not writable and not
     configurable
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
-        var resultSetFun = false;
-
-        Object.defineProperty(obj, "foo1", {
-            value: 10,
-            writable: false,
-            enumerable: true,
-            configurable: false
-        });
-
-        function get_func() {
-            return 10;
-        }
-
-        function set_func() {
-            resultSetFun = true;
-        }
-
-        Object.defineProperty(obj, "foo2", {
-            get: get_func,
-            set: set_func,
-            enumerable: true,
-            configurable: true
-        });
-
-        Object.freeze(obj);
-
-        var res1 = obj.hasOwnProperty("foo2");
-        delete obj.foo2;
-        var res2 = obj.hasOwnProperty("foo2");
-        var resultConfigurable = (res1 && res2);
-
-        var resultGetFun = (obj.foo2 === 10);
-        obj.foo2 = 12;
-
-        var resultEnumerable = false;
-        for (var prop in obj) {
-            if (prop === "foo2") {
-                resultEnumerable = true;
-            }
-        }
-
-        var desc1 = Object.getOwnPropertyDescriptor(obj, "foo1");
-        var desc2 = Object.getOwnPropertyDescriptor(obj, "foo2");
-
-        var result = resultConfigurable && resultEnumerable && resultGetFun && resultSetFun;
-
-        return dataPropertyAttributesAreCorrect(obj, "foo1", 10, false, true, false) &&
-            result && desc1.configurable === false && desc1.writable === false && desc2.configurable === false;
-    }
-runTestCase(testcase);
+var obj = {};
+var resultSetFun = false;
+
+Object.defineProperty(obj, "foo1", {
+    value: 10,
+    writable: false,
+    enumerable: true,
+    configurable: false
+});
+
+function get_func() {
+    return 10;
+}
+
+function set_func() {
+    resultSetFun = true;
+}
+
+Object.defineProperty(obj, "foo2", {
+    get: get_func,
+    set: set_func,
+    enumerable: true,
+    configurable: true
+});
+
+Object.freeze(obj);
+
+verifyEqualTo(obj, "foo2", 10);
+
+verifyNotConfigurable(obj, "foo2");
+
+obj.foo2 = 12;
+if (!resultSetFun) {
+    $ERROR('Expected obj["foo2"] set() to be called, but was not.');
+}
+
+verifyEnumerable(obj, "foo2");
+
+var desc1 = Object.getOwnPropertyDescriptor(obj, "foo1");
+if (desc1.configurable || desc1.writable) {
+    $ERROR('Expected obj["foo1"] to be non-writable, non-configurable; actually ' + JSON.stringify(desc1));
+}
+
+var desc2 = Object.getOwnPropertyDescriptor(obj, "foo2");
+if (desc2.configurable || desc2.writable) {
+    $ERROR('Expected obj["foo2"] to be non-writable, non-configurable; actually ' + JSON.stringify(desc2));
+}
+
+verifyEqualTo(obj, "foo1", 10);
+
+verifyNotWritable(obj, "foo1");
+
+verifyEnumerable(obj, "foo1");
+
+verifyNotConfigurable(obj, "foo1");
diff --git a/test/built-ins/Object/seal/15.2.3.8-2-b-1.js b/test/built-ins/Object/seal/15.2.3.8-2-b-1.js
index 765f59418d..4232ebb5c2 100644
--- a/test/built-ins/Object/seal/15.2.3.8-2-b-1.js
+++ b/test/built-ins/Object/seal/15.2.3.8-2-b-1.js
@@ -10,23 +10,28 @@ description: >
     Object.seal - the [[Configurable]] attribute of own data property
     of 'O' is set from true to false and other attributes of the
     property are unaltered
-includes:
-    - runTestCase.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
-
-        Object.defineProperty(obj, "foo", {
-            value: 10,
-            writable: true,
-            enumerable: true,
-            configurable: true
-        });
-        var preCheck = Object.isExtensible(obj);
-        Object.seal(obj);
-
-        return preCheck && dataPropertyAttributesAreCorrect(obj, "foo", 10, true, true, false);
-    }
-runTestCase(testcase);
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+    value: 10,
+    writable: true,
+    enumerable: true,
+    configurable: true
+});
+var preCheck = Object.isExtensible(obj);
+Object.seal(obj);
+
+if (!preCheck) {
+    $ERROR('Expected preCheck to be true, actually ' + preCheck);
+}
+
+verifyEqualTo(obj, "foo", 10);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/seal/15.2.3.8-2-b-2.js b/test/built-ins/Object/seal/15.2.3.8-2-b-2.js
index 895622cf58..25acd60489 100644
--- a/test/built-ins/Object/seal/15.2.3.8-2-b-2.js
+++ b/test/built-ins/Object/seal/15.2.3.8-2-b-2.js
@@ -10,30 +10,35 @@ description: >
     Object.seal - the [[Configurable]] attribute of own accessor
     property of 'O' is set from true to false and other attributes of
     the property are unaltered
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
-        obj.variableForHelpVerify = "data";
-
-        function setFunc(value) {
-            obj.variableForHelpVerify = value;
-        }
-        function getFunc() {
-            return 10;
-        }
-        Object.defineProperty(obj, "foo", {
-            get: getFunc,
-            set: setFunc,
-            enumerable: true,
-            configurable: true
-        });
-        var preCheck = Object.isExtensible(obj);
-        Object.seal(obj);
-
-        return preCheck && accessorPropertyAttributesAreCorrect(obj, "foo", getFunc, setFunc, "variableForHelpVerify", true, false);
-    }
-runTestCase(testcase);
+var obj = {};
+obj.variableForHelpVerify = "data";
+
+function setFunc(value) {
+    obj.variableForHelpVerify = value;
+}
+function getFunc() {
+    return 10;
+}
+Object.defineProperty(obj, "foo", {
+    get: getFunc,
+    set: setFunc,
+    enumerable: true,
+    configurable: true
+});
+var preCheck = Object.isExtensible(obj);
+Object.seal(obj);
+
+if (!preCheck) {
+    $ERROR('Expected preCheck to be true, actually ' + preCheck);
+}
+
+verifyEqualTo(obj, "foo", getFunc());
+
+verifyWritable(obj, "foo", "variableForHelpVerify");
+
+verifyEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
diff --git a/test/built-ins/Object/seal/15.2.3.8-2-b-3.js b/test/built-ins/Object/seal/15.2.3.8-2-b-3.js
index c6d1b9c0f5..7c18fe9bd6 100644
--- a/test/built-ins/Object/seal/15.2.3.8-2-b-3.js
+++ b/test/built-ins/Object/seal/15.2.3.8-2-b-3.js
@@ -10,39 +10,51 @@ description: >
     Object.seal - the [[Configurable]] attribute of all own properties
     of 'O' are set from true to false and other attributes of the
     property are unaltered
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
-        obj.variableForHelpVerify = "data";
-
-        Object.defineProperty(obj, "foo1", {
-            value: 10,
-            writable: true,
-            enumerable: true,
-            configurable: true
-        });
-
-        function set_func(value) {
-            obj.variableForHelpVerify = value;
-        }
-        function get_func() {
-            return 10;
-        }
-        Object.defineProperty(obj, "foo2", {
-            get: get_func,
-            set: set_func,
-            enumerable: true,
-            configurable: true
-        });
-        var preCheck = Object.isExtensible(obj);
-        Object.seal(obj);
-
-        return preCheck && dataPropertyAttributesAreCorrect(obj, "foo1", 10, true, true, false) &&
-            accessorPropertyAttributesAreCorrect(obj, "foo2", get_func, set_func, "variableForHelpVerify", true, false);
-    }
-runTestCase(testcase);
+var obj = {};
+obj.variableForHelpVerify = "data";
+
+Object.defineProperty(obj, "foo1", {
+    value: 10,
+    writable: true,
+    enumerable: true,
+    configurable: true
+});
+
+function set_func(value) {
+    obj.variableForHelpVerify = value;
+}
+function get_func() {
+    return 10;
+}
+Object.defineProperty(obj, "foo2", {
+    get: get_func,
+    set: set_func,
+    enumerable: true,
+    configurable: true
+});
+var preCheck = Object.isExtensible(obj);
+Object.seal(obj);
+
+if (!preCheck) {
+    $ERROR('Expected preCheck to be true, actually ' + preCheck);
+}
+
+
+verifyEqualTo(obj, "foo1", 10);
+
+verifyWritable(obj, "foo1");
+
+verifyEnumerable(obj, "foo1");
+
+verifyNotConfigurable(obj, "foo1");
+
+verifyEqualTo(obj, "foo2", get_func());
+
+verifyWritable(obj, "foo2", "variableForHelpVerify");
+
+verifyEnumerable(obj, "foo2");
+
+verifyNotConfigurable(obj, "foo2");
diff --git a/test/built-ins/Object/seal/15.2.3.8-2-b-4.js b/test/built-ins/Object/seal/15.2.3.8-2-b-4.js
index bec8f3a5a2..885766b21a 100644
--- a/test/built-ins/Object/seal/15.2.3.8-2-b-4.js
+++ b/test/built-ins/Object/seal/15.2.3.8-2-b-4.js
@@ -9,39 +9,53 @@ es5id: 15.2.3.8-2-b-4
 description: >
     Object.seal - all own properties of 'O' are already
     non-configurable
-includes:
-    - runTestCase.js
-    - accessorPropertyAttributesAreCorrect.js
-    - dataPropertyAttributesAreCorrect.js
+includes: [propertyHelper.js]
 ---*/
 
-function testcase() {
-        var obj = {};
-        obj.variableForHelpVerify = "data";
-
-        Object.defineProperty(obj, "foo1", {
-            value: 10,
-            writable: true,
-            enumerable: true,
-            configurable: false
-        });
-
-        function set_func(value) {
-            obj.variableForHelpVerify = value;
-        }
-        function get_func() {
-            return 10;
-        }
-        Object.defineProperty(obj, "foo2", {
-            get: get_func,
-            set: set_func,
-            enumerable: true,
-            configurable: false
-        });
-        var preCheck = Object.isExtensible(obj);
-        Object.seal(obj);
-
-        return preCheck && dataPropertyAttributesAreCorrect(obj, "foo1", 10, true, true, false) &&
-            accessorPropertyAttributesAreCorrect(obj, "foo2", get_func, set_func, "variableForHelpVerify", true, false);
-    }
-runTestCase(testcase);
+var obj = {};
+obj.variableForHelpVerify = "data";
+
+Object.defineProperty(obj, "foo1", {
+    value: 10,
+    writable: true,
+    enumerable: true,
+    configurable: false
+});
+
+function set_func(value) {
+    obj.variableForHelpVerify = value;
+}
+function get_func() {
+    return 10;
+}
+Object.defineProperty(obj, "foo2", {
+    get: get_func,
+    set: set_func,
+    enumerable: true,
+    configurable: false
+});
+
+if (!Object.isExtensible(obj)) {
+    $ERROR('Expected obj to be extensible, actually ' + Object.isExtensible(obj));
+}
+
+Object.seal(obj);
+
+if (Object.isExtensible(obj)) {
+    $ERROR('Expected obj NOT to be extensible, actually ' + Object.isExtensible(obj));
+}
+
+verifyEqualTo(obj, "foo1", 10);
+
+verifyWritable(obj, "foo1");
+
+verifyEnumerable(obj, "foo1");
+
+verifyNotConfigurable(obj, "foo1");
+verifyEqualTo(obj, "foo2", get_func());
+
+verifyWritable(obj, "foo2", "variableForHelpVerify");
+
+verifyEnumerable(obj, "foo2");
+
+verifyNotConfigurable(obj, "foo2");
-- 
GitLab