summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/built-ins/Object
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /js/src/tests/test262/built-ins/Object
parentInitial commit. (diff)
downloadfirefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz
firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esrupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.1.1_A1_T1.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.1.1_A1_T2.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.1.1_A1_T3.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.1.1_A1_T4.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.1.1_A1_T5.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T1.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T10.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T11.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T12.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T13.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T14.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T2.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T3.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T4.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T5.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T6.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T7.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T8.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T9.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.1.1_A3_T1.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.1.1_A3_T2.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.1.1_A3_T3.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.2.1_A1_T1.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.2.1_A1_T2.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.2.1_A1_T3.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.2.1_A1_T4.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.2.1_A1_T5.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.2.1_A2_T1.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.2.1_A2_T2.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.2.1_A2_T3.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.2.1_A2_T5.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.2.1_A2_T6.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.2.1_A2_T7.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.2.1_A3_T1.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.2.1_A3_T2.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.2.1_A3_T3.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.2.1_A4_T1.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.2.1_A4_T2.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.2.1_A4_T3.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.2.1_A5_T1.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.2.1_A5_T2.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.2.1_A5_T3.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.2.1_A5_T4.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.2.1_A6_T1.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.2.1_A6_T2.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.2.1_A6_T3.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.3_A1.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.3_A2.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2.3_A3.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/S15.2_A1.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/S9.9_A3.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/S9.9_A4.js151
-rw-r--r--js/src/tests/test262/built-ins/Object/S9.9_A5.js66
-rw-r--r--js/src/tests/test262/built-ins/Object/S9.9_A6.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/ObjectOverride-sameproperty.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/OnlyOneArgument.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/Override-notstringtarget.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/Override.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/Source-Null-Undefined.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/Source-Number-Boolen-Symbol.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/Source-String.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/Target-Boolean.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/Target-Null.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/Target-Number.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/Target-Object.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/Target-String.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/Target-Symbol.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/Target-Undefined.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/assign-descriptor.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/assign-length.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/assignment-to-readonly-property-of-target-must-throw-a-typeerror-exception.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/invoked-as-ctor.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/name.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/not-a-constructor.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/source-get-attr-error.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/source-non-enum.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/source-own-prop-desc-missing.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/source-own-prop-error.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/source-own-prop-keys-error.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/strings-and-symbol-order-proxy.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/strings-and-symbol-order.js63
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/target-is-frozen-accessor-property-set-succeeds.js65
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/target-is-frozen-data-property-set-throws.js61
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/target-is-non-extensible-existing-accessor-property.js52
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/target-is-non-extensible-existing-data-property.js59
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/target-is-non-extensible-property-creation-throws.js55
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/target-is-sealed-existing-accessor-property.js57
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/target-is-sealed-existing-data-property.js64
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/target-is-sealed-property-creation-throws.js61
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/target-set-not-writable.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/assign/target-set-user-error.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/bigint.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-0-1.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-0-2.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-1-1.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-1-2.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-1-3.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-1-4.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-1.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-2-1.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-2-2.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-3-1.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-1.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-10.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-100.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-101.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-102.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-103.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-104.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-105.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-106.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-107.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-108.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-109.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-11.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-110.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-111.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-112.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-113.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-114.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-115.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-116.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-117.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-118.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-119.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-12.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-120.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-121.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-122.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-124.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-125.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-126.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-127.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-128.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-129.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-13.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-130.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-131.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-132.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-133.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-134.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-135.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-136.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-137.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-138.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-139.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-14.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-140.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-141.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-142.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-143.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-144.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-145.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-146.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-147.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-149.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-15.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-150.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-151.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-152.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-153.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-154.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-155.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-156.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-157.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-158.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-159.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-16.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-160.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-161.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-162.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-163.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-164.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-165.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-166.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-167.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-168.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-169.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-17.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-170.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-171.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-172.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-173.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-174.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-175.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-177.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-178.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-179.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-18.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-180.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-181.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-182.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-183.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-184.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-185.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-186.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-187.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-188.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-189.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-19.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-190.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-191.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-192.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-193.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-194.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-195.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-196.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-197.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-198.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-199.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-2.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-20.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-200.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-201.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-203.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-204.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-205.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-206.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-207.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-208.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-209.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-21.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-210.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-211.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-212.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-213.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-214.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-215.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-216.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-217.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-218.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-219.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-22.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-220.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-221.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-222.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-223.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-224.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-225.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-226.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-228.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-229.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-23.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-230.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-231.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-232.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-233.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-234.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-235.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-236.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-237.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-238.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-239.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-24.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-240.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-241.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-242.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-243.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-244.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-245.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-246.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-247.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-248.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-249.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-25.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-250.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-251.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-252.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-253.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-254.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-256.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-257.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-258.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-259.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-26.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-260.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-261.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-262.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-263.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-266.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-267.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-268.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-269.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-27.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-270.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-271.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-272.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-273.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-274.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-275.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-276.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-277.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-278.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-279.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-28.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-280.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-281.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-282.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-283.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-284.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-285.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-286.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-287.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-288.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-289.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-29.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-291.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-292.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-293.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-294.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-295.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-296.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-297.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-298.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-3.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-30.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-300.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-301.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-302.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-303.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-304.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-305.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-306.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-307.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-308.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-309.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-31.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-310.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-311.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-312.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-313.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-314.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-315.js53
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-316.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-32.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-33.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-34.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-35.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-36.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-37.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-38.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-39.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-4.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-40.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-41.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-42.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-43.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-44.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-45.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-46.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-47.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-48.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-49.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-5.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-50.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-51.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-52.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-53.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-54.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-55.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-56.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-57.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-58.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-59.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-6.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-60.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-61.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-62.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-63.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-64.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-65.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-66.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-67.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-68.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-69.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-7.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-71.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-72.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-73.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-74.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-75.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-76.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-77.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-78.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-79.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-8.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-80.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-81.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-82.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-83.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-84.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-85.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-86.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-87.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-88.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-89.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-9.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-90.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-91.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-92.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-93.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-94.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-96.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-97.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-98.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-99.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/create/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/create/name.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/create/not-a-constructor.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/create/properties-arg-to-object-bigint.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/create/properties-arg-to-object-non-empty-string.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/create/properties-arg-to-object-null.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/create/properties-arg-to-object.js61
-rw-r--r--js/src/tests/test262/built-ins/Object/create/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-0-1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-0-2.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-1-1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-1-2.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-1-3.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-1-4.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-1.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-10.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-11.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-12.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-13.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-14.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-15.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-16.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-18.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-2.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-3.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-4.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-5.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-6.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-7.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-8.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-9.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-1.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-2.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-3.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-4.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-5.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-6.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-7.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-8.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-1.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-10.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-11.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-12.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-13.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-14.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-15.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-16.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-17.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-2.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-3.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-4.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-5.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-6.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-7.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-8.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-9.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-1.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-10.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-100.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-101.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-102.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-103.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-104.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-105.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-106.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-107.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-109.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-11.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-110.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-111.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-112.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-113.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-114.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-115.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-116.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-117.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-118.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-119.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-12.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-120.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-121.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-122.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-123.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-124.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-125.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-126.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-127.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-128.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-129.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-13.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-130.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-131.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-132.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-133.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-134.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-135.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-137.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-138.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-139.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-14.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-140.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-141.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-142.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-143.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-144.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-145.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-146.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-147.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-148.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-149.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-15.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-150.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-151.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-152.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-153.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-154.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-155.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-156.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-157.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-158.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-159.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-16.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-160.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-161.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-163.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-164.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-165.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-166.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-167.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-168.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-169.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-17.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-170.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-171.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-172.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-173.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-174.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-175.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-176.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-177.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-178.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-179.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-18.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-180.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-181.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-182.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-183.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-184.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-185.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-186.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-188.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-189.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-19.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-190.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-191.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-192.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-193.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-194.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-195.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-196.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-197.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-198.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-199.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-2.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-20.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-200.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-201.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-202.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-203.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-204.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-205.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-206.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-207.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-208.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-209.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-21.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-210.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-211.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-212.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-213.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-214.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-216.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-217.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-218.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-219.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-22.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-220.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-221.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-222.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-223.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-226.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-227.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-228.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-229.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-23.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-230.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-231.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-232.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-233.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-234.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-235.js48
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-236.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-237.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-238.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-239.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-24.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-240.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-241.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-242.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-243.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-244.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-245.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-246.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-247.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-248.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-249.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-25.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-252.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-253.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-254.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-255.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-256.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-257.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-258.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-26.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-261.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-262.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-263.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-264.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-27.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-28.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-29.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-3.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-31.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-32.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-33.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-34.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-35.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-36.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-37.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-38.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-39.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-4.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-40.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-41.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-42.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-43.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-44.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-45.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-46.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-47.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-48.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-49.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-5.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-50.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-51.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-52.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-53.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-54.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-56.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-57.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-58.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-59.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-6.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-60.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-61.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-62.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-63.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-64.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-65.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-66.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-67.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-68.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-69.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-7.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-70.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-71.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-72.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-73.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-74.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-75.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-76.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-77.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-78.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-79.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-8.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-80.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-81.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-82.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-84.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-85.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-86.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-87.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-88.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-89.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-9.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-90.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-91.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-92.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-93.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-94.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-95.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-96.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-97.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-98.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-99.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-1.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-10.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-100.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-101.js48
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-102.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-103.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-104.js48
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-105.js59
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-106.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-107.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-108.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-109.js51
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-11.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-110.js54
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-111.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-112.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-113.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-114-b.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-114.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-115.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-116.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-117.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-118.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-119.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-12.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-120.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-121.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-122.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-123.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-124.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-125.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-126.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-127.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-128.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-129.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-13.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-130.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-131.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-132.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-133.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-134.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-135.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-136.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-137.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-138.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-139.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-14.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-140.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-141.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-142.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-143.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-144.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-145.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-146.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-147.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-148.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-149.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-15.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-150.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-151.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-152.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-153.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-155.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-156.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-157.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-158.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-159.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-16.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-160.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-161.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-162.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-163.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-164.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-165.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-166.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-167.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-168.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-169.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-17.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-170.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-171.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-172.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-173.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-174.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-175.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-176.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-177.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-178.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-179.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-18.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-180.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-181.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-182.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-183.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-184.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-185.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-186.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-187.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-188.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-189.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-19.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-190.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-191.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-192.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-193.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-194.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-195.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-196.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-197.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-198.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-199.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-2.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-20.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-200.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-201.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-202.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-203.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-204.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-205.js49
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-206.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-207.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-208.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-209.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-21.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-210.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-211.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-212.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-213.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-214.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-215.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-216.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-217.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-218.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-219.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-22.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-220.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-221.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-222.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-223.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-224.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-225.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-226.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-227.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-228.js48
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-229.js48
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-230.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-231.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-232.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-233.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-234.js49
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-235.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-236.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-237.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-238.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-239.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-24.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-240.js51
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-241.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-242.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-243.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-244.js49
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-245.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-246.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-247.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-248.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-249.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-25.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-250.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-251.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-252.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-253.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-254.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-255.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-256.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-257.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-258.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-259.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-26.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-260.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-261.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-262.js48
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-263.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-264.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-265.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-266.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-267.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-268.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-269.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-27.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-270.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-271.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-272.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-273.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-274.js52
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-275.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-276.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-277.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-278.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-279.js49
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-28.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-280.js48
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-281.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-282.js51
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-283.js52
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-284.js52
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-285.js52
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-286.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-287.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-288.js53
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-289.js53
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-29.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-290.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-291.js49
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-292.js50
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-293.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-294.js51
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-295.js52
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-296.js52
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-297.js52
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-298.js55
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-299.js56
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-3.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-30.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-300.js52
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-301.js52
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-302.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-303.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-304.js53
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-305.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-306.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-307.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-308.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-309.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-31.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-310.js56
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-311.js49
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-312.js48
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-313.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-314.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-32.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-33.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-34.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-35.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-36.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-37.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-38-1.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-38.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-39.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-4.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-40.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-41.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-42.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-43.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-44.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-45.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-46.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-47.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-48.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-49.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-5.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-50.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-51.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-52.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-53.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-54.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-55.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-56.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-57.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-58.js54
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-59.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-6.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-60.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-61.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-62.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-63.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-64.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-65.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-66-1.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-66.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-67.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-68.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-69.js50
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-7.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-70.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-71.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-72.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-73.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-74.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-75.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-76.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-77.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-78.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-79.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-8.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-80.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-81.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-82.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-83.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-84-1.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-84.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-85.js52
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-86-1.js49
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-86.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-87.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-88.js53
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-89.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-9.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-90.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-91.js57
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-92.js51
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-93-1.js62
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-93-2.js62
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-93-3.js62
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-93-4.js61
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-93.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-94.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-95.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-96.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-97.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-98.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-99.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/name.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-bigint.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-false.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-null.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-number.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-string.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-symbol.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-true.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-undefined.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/proxy-no-ownkeys-returned-keys-order.js53
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperties/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-0-1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-0-2.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-1-1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-1-2.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-1-3.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-1-4.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-1.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-1.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-10.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-11.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-12.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-13.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-14.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-15.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-16.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-17-1.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-17.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-18.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-19.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-2.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-20.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-21.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-22.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-23.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-24.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-25.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-26.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-27.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-28.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-29.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-3.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-30.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-31.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-32.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-33.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-34.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-35.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-36.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-37.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-38.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-39.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-4.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-40.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-41.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-42.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-43.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-44.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-45.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-46.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-47.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-48.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-5.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-6.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-7.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-8.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-9.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-1.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-10.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-100.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-101.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-102.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-103.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-104.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-105.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-106.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-107.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-108.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-109.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-11.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-110.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-111.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-112.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-113.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-114.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-115.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-116.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-117.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-118.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-119.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-12.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-120.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-121.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-123.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-124.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-125.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-126.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-127.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-129.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-13.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-130.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-131.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-132.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-133.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-134.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-135.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-136.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-137.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-138.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-139-1.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-139.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-14.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-140-1.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-140.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-141-1.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-141.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-142-1.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-142.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-143-1.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-143.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-144-1.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-144.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-145-1.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-145.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-146-1.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-146.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-147-1.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-147.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-148-1.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-148.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-149-1.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-149.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-15.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-151.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-152.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-153.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-154.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-155.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-156.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-157.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-158.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-159.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-16.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-160.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-161.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-162.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-163.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-164.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-165-1.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-165.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-166-1.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-166.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-167-1.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-167.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-168-1.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-168.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-169-1.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-169.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-17.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-170-1.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-170.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-171-1.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-171.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-172-1.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-172.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-173-1.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-173.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-174-1.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-174.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-175-1.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-175.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-177.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-178.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-179.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-18.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-180.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-181.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-182.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-183.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-184.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-185.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-186.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-187.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-188.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-189.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-19.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-190.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-191.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-192.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-193.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-194.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-195.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-196.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-197.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-198.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-199.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-2.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-20.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-200.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-202.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-203.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-204.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-205.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-206.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-207.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-208.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-209.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-21.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-210.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-211.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-212.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-213.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-214.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-215.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-216.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-217.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-218-1.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-218.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-219-1.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-219.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-22.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-220-1.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-220.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-221-1.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-221.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-222-1.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-222.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-223-1.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-223.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-224-1.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-224.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-225-1.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-225.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-226-1.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-226.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-227-1.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-227.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-228-1.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-228.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-23.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-230.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-231.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-232.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-235.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-236.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-237.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-238.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-239.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-24.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-240.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-241.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-242.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-243.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-244.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-245.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-246.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-247.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-248-1.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-248.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-249-1.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-249.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-25.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-250-1.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-250.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-251-1.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-251.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-252-1.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-252.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-253-1.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-253.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-254-1.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-254.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-255-1.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-255.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-256-1.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-256.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-257-1.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-257.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-258-1.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-258.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-26.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-260.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-261.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-262.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-27.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-28.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-29.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-3.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-30.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-31.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-32.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-33-1.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-33.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-34-1.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-34.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-35-1.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-35.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-36-1.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-36.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-37-1.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-37.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-38-1.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-38.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-39-1.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-39.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-4.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-40-1.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-40.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-41-1.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-41.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-42-1.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-42.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-43-1.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-43.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-45.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-46.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-47.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-48.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-49.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-5.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-50.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-51.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-52.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-53.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-54.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-55.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-56.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-57.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-58.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-59.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-6.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-60.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-61.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-62.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-63.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-64.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-65.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-66.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-67.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-68.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-7.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-70.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-71.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-72.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-73.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-74.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-75.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-76.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-77.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-78.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-79.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-8.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-80.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-81.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-82.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-83.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-84.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-85.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-86-1.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-86.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-87-1.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-87.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-88-1.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-88.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-89-1.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-89.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-9.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-90-1.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-90.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-91-1.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-91.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-92-1.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-92.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-93-1.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-93.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-94-1.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-94.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-95-1.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-95.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-96-1.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-96.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-98.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-99.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-1.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-10.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-100.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-101.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-102.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-103.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-104.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-105.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-106.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-107.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-108.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-109.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-11.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-110.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-111.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-112.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-113.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-114.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-115.js49
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-116.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-117.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-118.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-119.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-12.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-120.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-121.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-122.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-123.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-124.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-125.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-126.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-127.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-128.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-129.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-13.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-130.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-131.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-132.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-133.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-134.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-135.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-136.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-137.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-138.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-139.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-14.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-140.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-141.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-142.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-143.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-144.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-145.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-146.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-147.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-148.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-149.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-15.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-150.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-151.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-152.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-153.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-154.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-155.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-156.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-157.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-159.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-16.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-160.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-161.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-162.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-163.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-164.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-165.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-166.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-167.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-168.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-169.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-17.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-170.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-171.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-172.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-173.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-174.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-175.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-176.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-177.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-178.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-179-1.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-18.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-181.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-182.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-183.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-184.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-185.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-186.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-187.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-188.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-189.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-19.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-190.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-191.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-192.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-193.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-194.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-195.js51
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-196.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-197.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-198.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-199.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-2.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-20.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-200.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-201.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-202.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-203.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-204.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-205.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-206.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-207.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-208.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-209.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-21.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-210.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-211.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-212.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-213.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-214.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-215.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-216.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-217.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-218.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-219.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-22.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-220.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-221.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-222.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-223.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-224.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-225.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-226.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-227.js49
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-228.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-229.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-23.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-230.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-231.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-232.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-233.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-234.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-235.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-236.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-237.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-238.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-239.js48
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-24.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-240.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-241.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-242-1.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-242.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-243-1.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-243-2-strict.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-243.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-244.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-245.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-246.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-247.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-248.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-249.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-25.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-250.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-251.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-252.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-253.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-254.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-255.js48
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-256.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-257.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-258.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-259.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-26.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-260.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-261.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-262.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-263.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-264.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-265.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-266.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-267.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-268.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-269.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-27.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-270.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-271.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-272.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-273.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-274.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-275.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-276.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-277.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-278.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-279.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-28.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-280.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-281.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-282.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-283.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-284.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-285.js50
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-286.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-287.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-288.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-289-1.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-289.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-29.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-290-1.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-290.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-291-1.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-291.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-292-1.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-292-2-strict.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-292.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-293-1.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-293-2.js51
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-293-3.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-293-4-strict.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-293.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-294-1.js51
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-294.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-295-1.js49
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-295.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-296-1.js48
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-296.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-297-1.js52
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-297.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-298-1.js53
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-298.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-299-1.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-299.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-3.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-30.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-300-1.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-300.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-301-1.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-301.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-302-1.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-302.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-303.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-304.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-305.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-306.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-307.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-308.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-309.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-31.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-310.js48
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-311.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-312.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-313-1.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-313.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-314-1.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-314.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-315-1.js52
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-315.js48
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-316-1.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-316.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-317-1.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-317.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-318-1.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-318.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-319-1.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-319.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-32.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-320-1.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-320.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-321-1.js55
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-321.js50
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-322-1.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-322.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-323-1.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-323.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-324-1.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-324.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-325-1.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-325.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-326.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-327.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-328.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-329.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-33.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-330.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-331.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-332.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-1.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-10.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-11.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-2.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-3.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-4.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-5.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-6.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-7.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-8.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-9.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-334.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-335.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-336.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-337.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-338.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-339-1.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-339-2.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-339-3.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-339-4.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-339.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-34.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-340.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-341.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-342.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-343.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-344.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-345.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-346.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-347.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-348.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-349.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-35.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-350.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-351.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-352.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-353.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-1.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-10.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-11.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-12.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-15.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-16.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-2.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-3.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-6.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-7.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-355.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-356.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-357.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-358.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-359.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-36.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-360-1.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-360-2.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-360-5.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-360-6.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-360.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-361.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-362.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-363.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-364.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-365.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-366.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-367.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-368.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-369.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-37.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-370.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-371.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-372.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-373.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-374.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-375.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-376.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-377.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-378.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-379.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-38.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-380.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-381.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-382.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-383.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-384.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-385.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-386.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-387.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-388.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-389.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-39.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-390.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-391.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-392.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-393.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-394.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-395.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-396.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-397.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-398.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-399.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-4.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-40.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-402.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-403.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-404.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-405.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-406.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-407.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-408.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-409.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-41.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-410.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-411.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-412.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-413.js50
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-414.js60
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-415.js56
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-416.js60
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-417.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-418.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-419.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-42.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-420.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-421.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-422.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-423.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-424.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-425.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-426.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-427.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-428.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-429.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-43.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-430.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-431.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-432.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-433.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-434.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-435.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-436.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-437.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-438.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-439.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-440.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-441.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-442.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-443.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-444.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-445.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-446.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-447.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-448.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-449.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-45.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-450.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-451.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-452.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-453.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-454.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-455.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-456.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-457.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-458.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-459.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-46.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-460.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-461.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-462.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-463.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-464.js51
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-465.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-466.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-467.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-468.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-469.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-47.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-470.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-471.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-472.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-473.js52
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-474.js48
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-475.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-476.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-477.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-478.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-479.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-48.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-480.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-481.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-482.js51
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-483.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-484.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-485.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-486.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-487.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-488.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-489.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-49.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-490.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-491.js52
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-492.js48
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-493.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-494.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-495.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-496.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-497.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-498.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-499.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-5.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-50.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-500.js49
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-501.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-502.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-503.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-504.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-505.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-506.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-507.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-508.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-509.js50
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-51.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-510.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-511.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-512.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-513.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-514.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-515.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-516.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-517.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-518.js49
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-519.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-52.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-520.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-521.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-522.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-523.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-524.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-525.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-526.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-527.js50
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-528.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-529.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-53.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-530.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-1.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-10.js49
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-11.js48
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-12.js50
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-15.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-16.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-2.js49
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-3.js50
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-6.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-7.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-532.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-533.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-534.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-535.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-536.js54
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-537.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-538-1.js61
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-538-2.js63
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-538-5.js62
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-538-6.js63
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-538.js58
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-539.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-54.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-1.js72
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-10.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-2.js72
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-3.js74
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-4.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-5.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-6.js74
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-7.js74
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-8.js74
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-9.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-541.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-542.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-543.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-544.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-545.js55
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-546.js49
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-547-1.js65
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-547-2.js67
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-547-3.js64
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-547-4.js65
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-547.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-548.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-549.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-55.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-550.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-551.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-552.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-553.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-554.js55
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-555.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-556.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-557.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-558.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-559.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-56.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-560.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-561.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-562.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-563.js55
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-564.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-565.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-566.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-567.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-568.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-569.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-57.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-570.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-571.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-572.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-573.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-574.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-575.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-576.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-577.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-578.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-579.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-58.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-580.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-581.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-582.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-583.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-584.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-585.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-586.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-587.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-588.js54
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-589.js64
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-59.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-590.js73
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-591.js75
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-592.js66
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-593.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-594.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-595.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-596.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-597.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-598.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-599.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-6.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-60.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-600.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-601.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-602.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-603.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-604.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-605.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-606.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-607.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-608.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-609.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-61.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-610.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-611.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-612.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-613.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-614.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-615.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-616.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-617.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-618.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-619.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-62.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-620.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-621.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-622.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-623.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-624.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-625gs.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-63.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-64.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-65.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-66.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-67.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-68.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-69.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-7.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-70.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-71.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-72.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-73.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-74.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-75.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-76.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-77.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-78.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-79.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-8.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-80.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-81.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-1.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-10.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-11.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-12.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-13.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-14.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-15.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-16.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-17.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-18.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-19.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-2.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-20.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-21.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-22.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-23.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-24.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-3.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-4.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-5.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-6.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-7.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-8.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-9.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-83.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-84.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-85.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-86.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-87.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-88.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-89.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-9.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-90.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-91.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-92.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-93.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-94.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-95.js51
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-96.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-97.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-98.js42
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-99.js48
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/8.12.9-9-b-i_1.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/8.12.9-9-b-i_2.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/8.12.9-9-c-i_1.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/8.12.9-9-c-i_2.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/S15.2.3.6_A1.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/S15.2.3.6_A2.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/name.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-bigint.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-false.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-null.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-number.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-string.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-symbol.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-true.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-undefined.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/redefine-length-with-various-values-and-configurable-true.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/symbol-data-property-configurable.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/symbol-data-property-default-non-strict.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/symbol-data-property-default-strict-strict.js50
-rw-r--r--js/src/tests/test262/built-ins/Object/defineProperty/symbol-data-property-writable.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/entries/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/entries/exception-during-enumeration.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/entries/exception-not-object-coercible.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/entries/function-length.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/entries/function-name.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/entries/function-property-descriptor.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/entries/getter-adding-key.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/entries/getter-making-future-key-nonenumerable.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/entries/getter-removing-future-key.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/entries/inherited-properties-omitted.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/entries/not-a-constructor.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/entries/observable-operations.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/entries/order-after-define-property-with-function.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/entries/order-after-define-property.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/entries/primitive-booleans.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/entries/primitive-numbers.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/entries/primitive-strings.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/entries/primitive-symbols.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/entries/return-order.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/entries/shell.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/entries/symbols-omitted.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/entries/tamper-with-global-object.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/entries/tamper-with-object-keys.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-0-1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-0-2.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-1-1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-1-2.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-1-3.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-1-4.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-1.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-2.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-3.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-4.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-1.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-10.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-11.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-12.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-13.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-14.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-2.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-3.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-4.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-5.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-6.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-7.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-8.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-9.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-b-i-1.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-b-i-2.js66
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-c-1.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-c-2.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-c-3.js70
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-c-4.js68
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-1.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-2.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-3.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-4.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-5.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-6.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-7.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-8.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-9.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-3-1.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-4-1.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-4-2.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-4-3.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/abrupt-completion.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/frozen-object-contains-symbol-properties-non-strict.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/frozen-object-contains-symbol-properties-strict-strict.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/name.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/not-a-constructor.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/proxy-no-ownkeys-returned-keys-order.js57
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/proxy-with-defineProperty-handler.js52
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/freeze/throws-when-false.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/empty-iterable.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/evaluation-order.js84
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/iterator-closed-for-null-entry.js59
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/iterator-closed-for-string-entry.js59
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/iterator-closed-for-throwing-entry-key-accessor.js63
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/iterator-closed-for-throwing-entry-key-tostring.js65
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/iterator-closed-for-throwing-entry-value-accessor.js66
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/iterator-not-closed-for-next-returning-non-object.js53
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/iterator-not-closed-for-throwing-done-accessor.js59
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/iterator-not-closed-for-throwing-next.js54
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/iterator-not-closed-for-uncallable-next.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/key-order.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/length.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/name.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/not-a-constructor.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/prototype.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/requires-argument.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/simple-properties.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/string-entry-object-succeeds.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/string-entry-primitive-throws.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/string-entry-string-object-succeeds.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/supports-symbols.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/to-property-key.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/uses-define-semantics.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/fromEntries/uses-keys-not-iterator.js50
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-0-1.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-1-1.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-1-2.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-1-3.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-1-4.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-1.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-10.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-11.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-12.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-13.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-14.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-15.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-16.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-17.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-18.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-19.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-2.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-20.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-21.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-22.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-23.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-24.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-25.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-26.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-27.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-28.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-29.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-3.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-30.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-31.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-32.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-33.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-34.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-35.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-36.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-37.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-38.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-39.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-4.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-40.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-41.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-42.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-43.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-44.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-45.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-46.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-47.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-5.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-6.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-7.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-8.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-9.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-1.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-10.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-13.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-14.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-15.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-2.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-3.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-4.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-5.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-6.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-7.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-8.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-9.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-1.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-10.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-100.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-101.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-102.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-103.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-104.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-105.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-106.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-107.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-108.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-109.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-11.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-110.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-111.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-112.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-113.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-114.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-115.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-116.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-117.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-118.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-120.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-121.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-122.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-123.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-124.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-125.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-126.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-127.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-128.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-129.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-130.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-131.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-132.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-133.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-134.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-135.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-136.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-138.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-139.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-14.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-140.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-141.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-142.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-143.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-144.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-145.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-146.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-147.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-148.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-149.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-15.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-150.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-151.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-152.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-153.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-154.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-156.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-157.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-158.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-159.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-16.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-160.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-161.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-162.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-163.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-165.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-166.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-167.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-168.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-169.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-17.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-170.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-171.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-172.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-173.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-174.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-175.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-176.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-177.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-178.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-179.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-18.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-180.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-182.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-183.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-184.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-185.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-186.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-187.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-188.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-189.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-19.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-190.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-191.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-192.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-193.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-194.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-195.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-196.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-197.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-198.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-199.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-2.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-20.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-200.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-201.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-202.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-203.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-204.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-205.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-206.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-207.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-208.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-209.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-21.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-210.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-211.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-212.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-213.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-214.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-215.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-216.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-217.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-218.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-219.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-22.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-220.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-221.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-222.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-223.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-224.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-225.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-226.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-227.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-228.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-229.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-23.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-230.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-231.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-232.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-233.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-234.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-235.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-236.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-237.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-238.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-239.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-24.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-240.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-241.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-242.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-243.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-244.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-245.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-246.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-247.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-248.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-249.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-25.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-250.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-26.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-27.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-28.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-29.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-3.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-30.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-31.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-32.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-33.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-34.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-35.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-36.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-37.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-38.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-39.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-4.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-40.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-41.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-42.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-43.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-44.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-45.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-46.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-47.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-48.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-49.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-5.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-50.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-51.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-52.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-53.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-54.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-55.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-56.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-57.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-58.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-59.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-6.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-60.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-61.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-62.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-63.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-64.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-65.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-66.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-67.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-68.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-69.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-7.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-70.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-71.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-72.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-73.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-75.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-76.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-77.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-78.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-79.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-8.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-80.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-81.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-82.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-84.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-85.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-86.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-88.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-89.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-9.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-90.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-91.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-92.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-93.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-94.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-96.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-97.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-98.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-99.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/length.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/name.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/primitive-string.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/primitive-symbol.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/exception-not-object-coercible.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/function-length.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/function-name.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/function-property-descriptor.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/inherited-properties-omitted.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/normal-object.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/observable-operations.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/order-after-define-property.js50
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-booleans.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-numbers.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-strings.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-symbols.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/proxy-no-ownkeys-returned-keys-order.js53
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/proxy-undefined-descriptor.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/shell.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/symbols-included.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/tamper-with-global-object.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/tamper-with-object-keys.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-0-1.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-0-2.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-1-2.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-1-3.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-1-4.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-1-5.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-2-1.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-2-2.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-2-3.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-2-4.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-3-1.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-1.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-2.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-36.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-37.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-38.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-39.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-40.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-41.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-42.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-43.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-44.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-45.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-46.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-47.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-48.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-49.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-50.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-b-1.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-b-2.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-b-3.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-b-4.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-b-5.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-b-6.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/S15.2.3.4_A1_T1.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/name.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/non-object-argument-invalid.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/non-object-argument-valid.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/order-after-define-property.js50
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/proxy-invariant-absent-not-configurable-symbol-key.js56
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/proxy-invariant-duplicate-symbol-entry.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/proxy-invariant-not-extensible-absent-symbol-key.js54
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/proxy-invariant-not-extensible-extra-symbol-key.js51
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertyNames/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/length.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/name.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/non-object-argument-invalid.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/non-object-argument-valid.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/object-contains-symbol-property-with-description.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/object-contains-symbol-property-without-description.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/order-after-define-property.js48
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/proxy-invariant-absent-not-configurable-string-key.js55
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/proxy-invariant-duplicate-string-entry.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/proxy-invariant-not-extensible-absent-string-key.js51
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/proxy-invariant-not-extensible-extra-string-key.js50
-rw-r--r--js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-0-1.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-0-2.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-0-3.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-1-2.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-1-3.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-1-4.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-1.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-10.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-11.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-12.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-13.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-14.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-15.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-16.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-17.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-18.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-19.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-2.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-20.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-21.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-22.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-23.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-24.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-25.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-26.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-27.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-28.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-3.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-30.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-31.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-4.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-5.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-6.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-7.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-8.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-9.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/name.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/getPrototypeOf/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/descriptor.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_exists.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_and_setter.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_and_setter_configurable_enumerable.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_and_setter_configurable_nonenumerable.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_and_setter_nonconfigurable_enumerable.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_and_setter_nonconfigurable_nonenumerable.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_configurable_enumerable.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_configurable_nonenumerable.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_nonconfigurable_enumerable.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_nonconfigurable_nonenumerable.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_nonwritable_configurable_enumerable.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_nonwritable_configurable_nonenumerable.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_nonwritable_nonconfigurable_enumerable.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_nonwritable_nonconfigurable_nonenumerable.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_setter.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_setter_configurable_enumerable.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_setter_configurable_nonenumerable.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_setter_nonconfigurable_enumerable.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_setter_nonconfigurable_nonenumerable.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_writable_configurable_enumerable.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_writable_configurable_nonenumerable.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_writable_nonconfigurable_enumerable.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_writable_nonconfigurable_nonenumerable.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_nonexistent.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_and_setter.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_and_setter_configurable_enumerable.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_and_setter_configurable_nonenumerable.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_and_setter_nonconfigurable_enumerable.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_and_setter_nonconfigurable_nonenumerable.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_configurable_enumerable.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_configurable_nonenumerable.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_nonconfigurable_enumerable.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_nonconfigurable_nonenumerable.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_nonwritable_configurable_enumerable.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_nonwritable_nonconfigurable_enumerable.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_nonwriteable_configurable_nonenumerable.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_nonwriteable_nonconfigurable_nonenumerable.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_property_exists.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_setter.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_setter_configurable_enumerable.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_setter_configurable_nonenumerable.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_setter_nonconfigurable_enumerable.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_setter_nonconfigurable_nonenumerable.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_writable_configurable_enumerable.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_writable_configurable_nonenumerable.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_writable_nonconfigurable_enumerable.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_writable_nonconfigurable_nonenumerable.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/length.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/name.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/prototype.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/symbol_own_property.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/symbol_property_toPrimitive.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/symbol_property_toString.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/symbol_property_valueOf.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/toobject_before_topropertykey.js50
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/toobject_null.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/hasOwn/toobject_undefined.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/consistent-value-function-arguments.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/consistent-value-function-caller.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/consistent-value-regexp-dollar1.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/consistent-writable-regexp-dollar1.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/nan-equivalence-define-own-property-reassign.js70
-rw-r--r--js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/nan-equivalence-define-own-property-reconfigure.js77
-rw-r--r--js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/shell.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/internals/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/internals/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/is-a-constructor.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/is/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/is/length.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/is/name.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/is/not-a-constructor.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-boolean.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-null.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-number.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-object.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-string.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-symbol.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-type.js70
-rw-r--r--js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-undefined.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/is/object-is.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/is/same-value-x-y-boolean.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/is/same-value-x-y-empty.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/is/same-value-x-y-null.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/is/same-value-x-y-number.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/is/same-value-x-y-object.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/is/same-value-x-y-string.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/is/same-value-x-y-symbol.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/is/same-value-x-y-undefined.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/is/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/is/symbol-object-is-same-value.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-0-1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-0-2.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-0-3.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-1-1.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-1-2.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-1-3.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-1-4.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-10.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-11.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-12.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-13.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-14.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-15.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-16.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-17.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-18.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-19.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-2.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-20.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-21.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-22.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-23.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-24.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-25.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-26.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-27.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-29.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-3.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-4.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-5.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-6.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-7.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-8.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-9.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/name.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/not-a-constructor.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/isExtensible/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-0-1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-0-2.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-2.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-3.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-4.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-5.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-6.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-7.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-1.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-2.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-1.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-11.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-12.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-13.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-14.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-2.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-3.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-4.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-5.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-6.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-7.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-8.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-b-i-1.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-c-1.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-c-2.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-1.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-10.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-11.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-12.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-13.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-14.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-15.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-16.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-17.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-18.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-19.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-2.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-20.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-21.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-22.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-23.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-24.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-25.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-26.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-27.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-28.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-3.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-4.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-5.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-6.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-7.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-8.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-9.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-4-1.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/name.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/not-a-constructor.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/proxy-no-ownkeys-returned-keys-order.js54
-rw-r--r--js/src/tests/test262/built-ins/Object/isFrozen/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-0-1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-0-2.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-1.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-10.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-11.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-12.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-13.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-14.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-15.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-16.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-17.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-18.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-19.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-2.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-20.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-21.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-22.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-23.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-24.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-25.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-26.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-27.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-3.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-4.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-5.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-6.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-7.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-8.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-9.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/name.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/not-a-constructor.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/proxy-no-ownkeys-returned-keys-order.js54
-rw-r--r--js/src/tests/test262/built-ins/Object/isSealed/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-0-1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-0-2.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-1-1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-1-2.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-1-3.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-1-4.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-1-5.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-1.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-2.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-3.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-4.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-5.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-6.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-7.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-8.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-1.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-2.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-3.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-4.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-5.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-6.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-7.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-4-1.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-1.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-10.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-11.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-12.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-13.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-14.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-15.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-16.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-2.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-3.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-4.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-5.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-6.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-7.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-8.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-9.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-a-1.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-a-2.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-a-3.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-a-4.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-b-1.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-6-1.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-6-2.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-6-3.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-6-4.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/15.2.3.14-6-5.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/name.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/not-a-constructor.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/order-after-define-property-with-function.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/order-after-define-property.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/property-traps-order-with-proxied-array.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/proxy-keys.js170
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/proxy-non-enumerable-prop-invariant-1.js56
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/proxy-non-enumerable-prop-invariant-2.js59
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/proxy-non-enumerable-prop-invariant-3.js57
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/return-order.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/keys/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-0-1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-0-2.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-1-1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-1-2.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-1-3.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-1-4.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-2-1.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-2.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-1.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-10.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-11.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-12.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-13.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-14.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-15.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-16.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-17.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-18.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-19.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-2.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-20.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-21.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-22.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-23.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-24.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-3.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-4.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-5-1.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-5.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-6.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-7.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-8.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-9.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/abrupt-completion.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/name.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/symbol-object-contains-symbol-properties-non-strict.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/symbol-object-contains-symbol-properties-strict-strict.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/preventExtensions/throws-when-false.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/prop-desc.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/property-order.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/proto-from-ctor-realm.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/15.2.3.1.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/S15.2.3.1_A1.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/S15.2.3.1_A2.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/S15.2.3.1_A3.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/S15.2.4_A1_T1.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/S15.2.4_A1_T2.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/S15.2.4_A2.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/S15.2.4_A3.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/S15.2.4_A4.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/define-abrupt.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/define-existing.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/define-new.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/define-non-configurable.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/define-non-extensible.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/getter-non-callable.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/key-invalid.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/length.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/name.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/prop-desc.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/this-non-obj.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/define-abrupt.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/define-existing.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/define-new.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/define-non-configurable.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/define-non-extensible.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/key-invalid.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/length.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/name.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/prop-desc.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/setter-non-callable.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/this-non-obj.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/key-invalid.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/length.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-not-found.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-own-acsr-w-getter.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-own-acsr-wo-getter.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-own-data.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-own-get-err.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-own-proto-err.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-proto-acsr-w-getter.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-proto-acsr-wo-getter.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-proto-data.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-proto-get-err.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-proto-proto-err.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/name.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/prop-desc.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/this-non-obj.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/key-invalid.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/length.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-not-found.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-own-acsr-w-setter.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-own-acsr-wo-setter.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-own-data.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-own-get-err.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-own-proto-err.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-proto-acsr-w-setter.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-proto-acsr-wo-setter.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-proto-data.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-proto-get-err.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-proto-proto-err.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/name.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/prop-desc.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/this-non-obj.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__proto__/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__proto__/get-abrupt.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__proto__/get-fn-name.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__proto__/get-ordinary-obj.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__proto__/get-to-obj-abrupt.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__proto__/prop-desc.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__proto__/set-abrupt.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__proto__/set-cycle-shadowed.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__proto__/set-cycle.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__proto__/set-fn-name.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__proto__/set-immutable.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__proto__/set-invalid-value.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__proto__/set-non-extensible.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__proto__/set-non-obj-coercible.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__proto__/set-non-object.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__proto__/set-ordinary-obj.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/__proto__/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/constructor/S15.2.4.1_A1_T1.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/constructor/S15.2.4.1_A1_T2.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/constructor/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/constructor/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/extensibility.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_10.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_11.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_12.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_13.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_14.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_15.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_16.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_17.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_18.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_19.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_2.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_20.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_21.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_22.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_23.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_24.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_25.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_26.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_27.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_28.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_29.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_3.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_30.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_31.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_32.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_33.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_34.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_35.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_36.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_37.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_38.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_39.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_4.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_40.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_41.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_42.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_43.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_44.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_45.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_46.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_47.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_48.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_49.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_5.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_6.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_7.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_8.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_9.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/S15.2.4.5_A12.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/S15.2.4.5_A13.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/S15.2.4.5_A1_T1.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/S15.2.4.5_A1_T2.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/S15.2.4.5_A1_T3.js45
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/S15.2.4.5_A6.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/length.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/name.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/symbol_own_property.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/symbol_property_toPrimitive.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/symbol_property_toString.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/symbol_property_valueOf.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/topropertykey_before_toobject.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/arg-is-proxy.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/builtin.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/length.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/name.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/null-this-and-object-arg-throws.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/null-this-and-primitive-arg-returns-false.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/shell.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/this-value-is-in-prototype-chain-of-arg.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/undefined-this-and-object-arg-throws.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/undefined-this-and-primitive-arg-returns-false.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A10.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A11.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A12.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A13.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A1_T1.js47
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A2_T1.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A2_T2.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A6.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A8.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A9.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/name.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/symbol_own_property.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/symbol_property_toPrimitive.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/symbol_property_toString.js40
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/symbol_property_valueOf.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/proto.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/setPrototypeOf-with-different-values.js54
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/setPrototypeOf-with-same-value.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A1.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A10.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A11.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A12.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A13.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A6.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A8.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A9.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toLocaleString/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toLocaleString/name.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toLocaleString/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toLocaleString/primitive_this_value-strict.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toLocaleString/primitive_this_value_getter-strict.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toLocaleString/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-arguments.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-array.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-bigint.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-boolean.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-date.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-error.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-function.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-null.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-number.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-object.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-regexp.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-string.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-undefined.js14
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/direct-invocation.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/get-symbol-tag-err.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/length.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/name.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/no-prototype-property.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/prop-desc.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/proxy-array.js41
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/proxy-function-async.js34
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/proxy-function.js67
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/proxy-revoked-during-get-call.js52
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/proxy-revoked.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-non-str-bigint.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-non-str-builtin.js81
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-non-str-proxy-function.js57
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-non-str.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-override-bigint.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-override-instances.js57
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-override-primitives.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-str.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/valueOf/15.2.4.4-1.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/valueOf/15.2.4.4-2.js13
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A10.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A11.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A12.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A13.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A14.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A15.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T1.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T2.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T3.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T4.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T5.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T6.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T7.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A6.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A8.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A9.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/valueOf/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/valueOf/name.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/valueOf/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/prototype/valueOf/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/abrupt-completion.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/configurable-attribute-all-own-properties-set-from-true-to-false-property-are-unaltered.js60
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/configurable-attribute-own-accessor-property-set-from-true-to-false-property-are-unaltered.js44
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/length.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/name.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/not-a-constructor.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-all-own-properties-of-o-are-already-non-configurable.js61
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-configurable-attribute-of-own-data-property-of-o-is-set-from-true-to-false-and-other-attributes-of-the-property-are-unaltered.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-extensible-of-o-is-set-as-false-even-if-o-has-no-own-property.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-inherited-accessor-properties-are-ignored.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-inherited-data-properties-are-ignored.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-is-a-function.js11
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-non-enumerable-own-property-of-o-is-sealed.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-a-boolean-object.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-a-date-object.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-a-function-object.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-a-number-object.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-a-reg-exp-object.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-a-string-object.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-an-arguments-object.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-an-array-object.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-an-error-object.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-frozen-already.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-sealed-already.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-accessor-property-that-overrides-an-inherited-accessor-property.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-accessor-property-that-overrides-an-inherited-data-property.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-accessor-property.js25
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-data-property-that-overrides-an-inherited-accessor-property.js36
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-data-property-that-overrides-an-inherited-data-property.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-data-property.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-a-boolean-object-that-uses-object-s-get-own-property.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-a-date-object-that-uses-object-s-get-own-property.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-a-function-object-that-uses-object-s-get-own-property.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-a-number-object-that-uses-object-s-get-own-property.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-a-reg-exp-object-that-uses-object-s-get-own-property.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-a-string-object-which-implements-its-own-get-own-property.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-an-arguments-object-which-implements-its-own-get-own-property.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-an-array-object-that-uses-object-s-get-own-property.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-an-error-object-that-uses-object-s-get-own-property.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-returned-object-is-not-extensible.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/object-seal-the-extension-of-o-is-prevented-already.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/proxy-no-ownkeys-returned-keys-order.js54
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/proxy-with-defineProperty-handler.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-aggregateerror.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-arraybuffer.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-arrowfunction.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-asyncarrowfunction.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-asyncfunction.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-asyncgeneratorfunction.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-bigint64array.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-biguint64array.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-boolean-literal.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-boolean.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-dataview.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-date.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-error.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-evalerror.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-finalizationregistry.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-float32array.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-float64array.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-function.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-generatorfunction.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-infinity.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-int16array.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-int32array.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-int8array.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-map.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-nan.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-null.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-number.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-object.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-promise.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-proxy.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-rangeerror.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-referenceerror.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-regexp.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-set.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-sharedarraybuffer.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-string.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-symbol.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-syntaxerror.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-typeerror.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-uint16array.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-uint32array.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-uint8array.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-uint8clampedarray.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-undefined.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-urierror.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-weakmap.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-weakref.js39
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/seal-weakset.js38
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/symbol-object-contains-symbol-properties-non-strict.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/symbol-object-contains-symbol-properties-strict-strict.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/seal/throws-when-false.js30
-rw-r--r--js/src/tests/test262/built-ins/Object/setPrototypeOf/bigint.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/setPrototypeOf/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/setPrototypeOf/length.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/setPrototypeOf/name.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/setPrototypeOf/not-a-constructor.js35
-rw-r--r--js/src/tests/test262/built-ins/Object/setPrototypeOf/o-not-obj-coercible.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/setPrototypeOf/o-not-obj.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/setPrototypeOf/property-descriptor.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/setPrototypeOf/proto-not-obj.js37
-rw-r--r--js/src/tests/test262/built-ins/Object/setPrototypeOf/set-error.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/setPrototypeOf/set-failure-cycle.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/setPrototypeOf/set-failure-non-extensible.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/setPrototypeOf/shell.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/setPrototypeOf/success.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/shell.js24
-rw-r--r--js/src/tests/test262/built-ins/Object/subclass-object-arg.js28
-rw-r--r--js/src/tests/test262/built-ins/Object/symbol_object-returns-fresh-symbol.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/values/browser.js0
-rw-r--r--js/src/tests/test262/built-ins/Object/values/exception-during-enumeration.js23
-rw-r--r--js/src/tests/test262/built-ins/Object/values/exception-not-object-coercible.js18
-rw-r--r--js/src/tests/test262/built-ins/Object/values/function-length.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/values/function-name.js21
-rw-r--r--js/src/tests/test262/built-ins/Object/values/function-property-descriptor.js15
-rw-r--r--js/src/tests/test262/built-ins/Object/values/getter-adding-key.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/values/getter-making-future-key-nonenumerable.js29
-rw-r--r--js/src/tests/test262/built-ins/Object/values/getter-removing-future-key.js27
-rw-r--r--js/src/tests/test262/built-ins/Object/values/inherited-properties-omitted.js26
-rw-r--r--js/src/tests/test262/built-ins/Object/values/not-a-constructor.js31
-rw-r--r--js/src/tests/test262/built-ins/Object/values/observable-operations.js46
-rw-r--r--js/src/tests/test262/built-ins/Object/values/order-after-define-property.js57
-rw-r--r--js/src/tests/test262/built-ins/Object/values/primitive-booleans.js20
-rw-r--r--js/src/tests/test262/built-ins/Object/values/primitive-numbers.js17
-rw-r--r--js/src/tests/test262/built-ins/Object/values/primitive-strings.js19
-rw-r--r--js/src/tests/test262/built-ins/Object/values/primitive-symbols.js16
-rw-r--r--js/src/tests/test262/built-ins/Object/values/return-order.js43
-rw-r--r--js/src/tests/test262/built-ins/Object/values/shell.js33
-rw-r--r--js/src/tests/test262/built-ins/Object/values/symbols-omitted.js32
-rw-r--r--js/src/tests/test262/built-ins/Object/values/tamper-with-global-object.js22
-rw-r--r--js/src/tests/test262/built-ins/Object/values/tamper-with-object-keys.js22
3457 files changed, 97208 insertions, 0 deletions
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.1.1_A1_T1.js b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A1_T1.js
new file mode 100644
index 0000000000..1e158a9f54
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A1_T1.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object(value) is called and the value is null, undefined or not supplied,
+ create and return a new Object object if the object constructor had been called with the same arguments (15.2.2.1)
+es5id: 15.2.1.1_A1_T1
+description: Creating Object(null) and checking its properties
+---*/
+
+var __obj = Object(null);
+
+var n__obj = new Object(null);
+
+assert.sameValue(
+ __obj.toString(),
+ n__obj.toString(),
+ '__obj.toString() must return the same value returned by n__obj.toString()'
+);
+
+assert.sameValue(
+ __obj.constructor,
+ n__obj.constructor,
+ 'The value of __obj.constructor is expected to equal the value of n__obj.constructor'
+);
+
+assert.sameValue(
+ __obj.prototype,
+ n__obj.prototype,
+ 'The value of __obj.prototype is expected to equal the value of n__obj.prototype'
+);
+
+assert.sameValue(
+ __obj.toLocaleString(),
+ n__obj.toLocaleString(),
+ '__obj.toLocaleString() must return the same value returned by n__obj.toLocaleString()'
+);
+
+assert.sameValue(typeof __obj, typeof n__obj, 'The value of `typeof __obj` is expected to be typeof n__obj');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.1.1_A1_T2.js b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A1_T2.js
new file mode 100644
index 0000000000..a3733f515c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A1_T2.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object(value) is called and the value is null, undefined or not supplied,
+ create and return a new Object object if the object constructor had been called with the same arguments (15.2.2.1)
+es5id: 15.2.1.1_A1_T2
+description: Creating Object(void 0) and checking its properties
+---*/
+
+//var y= void 0;
+
+var __obj = Object(void 0);
+
+var n__obj = new Object(void 0);
+
+
+assert.sameValue(
+ __obj.toString(),
+ n__obj.toString(),
+ '__obj.toString() must return the same value returned by n__obj.toString()'
+);
+
+assert.sameValue(
+ __obj.constructor,
+ n__obj.constructor,
+ 'The value of __obj.constructor is expected to equal the value of n__obj.constructor'
+);
+
+assert.sameValue(
+ __obj.prototype,
+ n__obj.prototype,
+ 'The value of __obj.prototype is expected to equal the value of n__obj.prototype'
+);
+
+assert.sameValue(
+ __obj.toLocaleString(),
+ n__obj.toLocaleString(),
+ '__obj.toLocaleString() must return the same value returned by n__obj.toLocaleString()'
+);
+
+assert.sameValue(typeof __obj, typeof n__obj, 'The value of `typeof __obj` is expected to be typeof n__obj');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.1.1_A1_T3.js b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A1_T3.js
new file mode 100644
index 0000000000..6a658e1848
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A1_T3.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object(value) is called and the value is null, undefined or not supplied,
+ create and return a new Object object if the object constructor had been called with the same arguments (15.2.2.1)
+es5id: 15.2.1.1_A1_T3
+description: Creating Object() and checking its properties
+---*/
+
+var __obj = Object();
+
+var n__obj = new Object();
+
+assert.sameValue(
+ __obj.toString(),
+ n__obj.toString(),
+ '__obj.toString() must return the same value returned by n__obj.toString()'
+);
+
+assert.sameValue(
+ __obj.constructor,
+ n__obj.constructor,
+ 'The value of __obj.constructor is expected to equal the value of n__obj.constructor'
+);
+
+assert.sameValue(
+ __obj.prototype,
+ n__obj.prototype,
+ 'The value of __obj.prototype is expected to equal the value of n__obj.prototype'
+);
+
+assert.sameValue(
+ __obj.toLocaleString(),
+ n__obj.toLocaleString(),
+ '__obj.toLocaleString() must return the same value returned by n__obj.toLocaleString()'
+);
+
+assert.sameValue(typeof __obj, typeof n__obj, 'The value of `typeof __obj` is expected to be typeof n__obj');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.1.1_A1_T4.js b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A1_T4.js
new file mode 100644
index 0000000000..9be54489f6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A1_T4.js
@@ -0,0 +1,42 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object(value) is called and the value is null, undefined or not supplied,
+ create and return a new Object object if the object constructor had been called with the same arguments (15.2.2.1)
+es5id: 15.2.1.1_A1_T4
+description: Creating Object(undefined) and checking its properties
+---*/
+
+var __obj = Object(undefined);
+
+var n__obj = new Object(undefined);
+
+assert.sameValue(
+ __obj.toString(),
+ n__obj.toString(),
+ '__obj.toString() must return the same value returned by n__obj.toString()'
+);
+
+assert.sameValue(
+ __obj.constructor,
+ n__obj.constructor,
+ 'The value of __obj.constructor is expected to equal the value of n__obj.constructor'
+);
+
+assert.sameValue(
+ __obj.prototype,
+ n__obj.prototype,
+ 'The value of __obj.prototype is expected to equal the value of n__obj.prototype'
+);
+
+assert.sameValue(
+ __obj.toLocaleString(),
+ n__obj.toLocaleString(),
+ '__obj.toLocaleString() must return the same value returned by n__obj.toLocaleString()'
+);
+
+assert.sameValue(typeof __obj, typeof n__obj, 'The value of `typeof __obj` is expected to be typeof n__obj');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.1.1_A1_T5.js b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A1_T5.js
new file mode 100644
index 0000000000..5bb54930ac
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A1_T5.js
@@ -0,0 +1,44 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object(value) is called and the value is null, undefined or not supplied,
+ create and return a new Object object if the object constructor had been called with the same arguments (15.2.2.1)
+es5id: 15.2.1.1_A1_T5
+description: Creating Object(x) and checking its properties
+---*/
+
+var __obj = Object(x);
+
+var n__obj = new Object(x);
+
+assert.sameValue(
+ __obj.toString(),
+ n__obj.toString(),
+ '__obj.toString() must return the same value returned by n__obj.toString()'
+);
+
+assert.sameValue(
+ __obj.constructor,
+ n__obj.constructor,
+ 'The value of __obj.constructor is expected to equal the value of n__obj.constructor'
+);
+
+assert.sameValue(
+ __obj.prototype,
+ n__obj.prototype,
+ 'The value of __obj.prototype is expected to equal the value of n__obj.prototype'
+);
+
+assert.sameValue(
+ __obj.toLocaleString(),
+ n__obj.toLocaleString(),
+ '__obj.toLocaleString() must return the same value returned by n__obj.toLocaleString()'
+);
+
+assert.sameValue(typeof __obj, typeof n__obj, 'The value of `typeof __obj` is expected to be typeof n__obj');
+
+var x;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T1.js b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T1.js
new file mode 100644
index 0000000000..6cc3f59c79
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object function is called with one argument value,
+ and the value neither is null nor undefined, and is supplied, return ToObject(value)
+es5id: 15.2.1.1_A2_T1
+description: Calling Object function with boolean argument value
+---*/
+
+var bool = true;
+
+assert.sameValue(typeof bool, 'boolean', 'The value of `typeof bool` is expected to be "boolean"');
+
+var obj = Object(bool);
+
+assert.sameValue(obj.constructor, Boolean, 'The value of obj.constructor is expected to equal the value of Boolean');
+assert.sameValue(typeof obj, "object", 'The value of `typeof obj` is expected to be "object"');
+assert(!!obj, 'The value of !!obj is expected to be true');
+assert.notSameValue(obj, true, 'The value of obj is not true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T10.js b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T10.js
new file mode 100644
index 0000000000..a37953c101
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T10.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object function is called with one argument value,
+ and the value neither is null nor undefined, and is supplied, return ToObject(value)
+es5id: 15.2.1.1_A2_T10
+description: Calling Object function with array of numbers as argument value
+---*/
+
+var arr = [1, 2, 3];
+
+assert.sameValue(typeof arr, 'object', 'The value of `typeof arr` is expected to be "object"');
+
+var n_obj = Object(arr);
+
+arr.push(4);
+
+assert.sameValue(n_obj, arr, 'The value of n_obj is expected to equal the value of arr');
+assert.sameValue(n_obj[3], 4, 'The value of n_obj[3] is expected to be 4');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T11.js b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T11.js
new file mode 100644
index 0000000000..a3e7fdd4dd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T11.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object function is called with one argument value,
+ and the value neither is null nor undefined, and is supplied, return ToObject(value)
+es5id: 15.2.1.1_A2_T11
+description: Calling Object function with function declaration as argument value
+---*/
+assert.sameValue(typeof func, 'undefined', 'The value of `typeof func` is expected to be "undefined"');
+
+var n_obj = Object(function func() {
+ return 1;
+});
+
+assert.sameValue(
+ n_obj.constructor,
+ Function,
+ 'The value of n_obj.constructor is expected to equal the value of Function'
+);
+assert.sameValue(n_obj(), 1, 'n_obj() must return 1')
+assert.sameValue(typeof func, 'undefined', 'The value of `typeof func` is expected to be "undefined"');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T12.js b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T12.js
new file mode 100644
index 0000000000..2fbd10b1e1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T12.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object function is called with one argument value,
+ and the value neither is null nor undefined, and is supplied, return ToObject(value)
+es5id: 15.2.1.1_A2_T12
+description: Calling Object function with numeric expression as argument value
+---*/
+
+var obj = Object(1.1 * ([].length + {
+ q: 1
+}["q"]));
+
+assert.sameValue(typeof obj, "object", 'The value of `typeof obj` is expected to be "object"');
+assert.sameValue(obj.constructor, Number, 'The value of obj.constructor is expected to equal the value of Number');
+assert(obj == 1.1, 'The result of evaluating (obj == 1.1) is expected to be true');
+assert.notSameValue(obj, 1.1, 'The value of obj is not 1.1');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T13.js b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T13.js
new file mode 100644
index 0000000000..549c4e54de
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T13.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object function is called with one argument value,
+ and the value neither is null nor undefined, and is supplied, return ToObject(value)
+es5id: 15.2.1.1_A2_T13
+description: Calling Object function with boolean expression as argument value
+---*/
+
+var obj = Object((1 === 1) && (!false));
+
+assert.sameValue(obj.constructor, Boolean, 'The value of obj.constructor is expected to equal the value of Boolean');
+assert.sameValue(typeof obj, "object", 'The value of `typeof obj` is expected to be "object"');
+assert(!!obj, 'The value of !!obj is expected to be true');
+assert.notSameValue(obj, true, 'The value of obj is not true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T14.js b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T14.js
new file mode 100644
index 0000000000..034a21f361
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T14.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object function is called with one argument value,
+ and the value neither is null nor undefined, and is supplied, return ToObject(value)
+es5id: 15.2.1.1_A2_T14
+description: >
+ Calling Object function with sum of empty string and a number as
+ argument value
+---*/
+
+var obj = Object("" + 1);
+
+assert.sameValue(obj.constructor, String, 'The value of obj.constructor is expected to equal the value of String');
+assert.sameValue(typeof obj, "object", 'The value of `typeof obj` is expected to be "object"');
+assert(obj == "1", 'The result of evaluating (obj == "1") is expected to be true');
+assert.notSameValue(obj, "1", 'The value of obj is not "1"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T2.js b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T2.js
new file mode 100644
index 0000000000..9d71aa7784
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T2.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object function is called with one argument value,
+ and the value neither is null nor undefined, and is supplied, return ToObject(value)
+es5id: 15.2.1.1_A2_T2
+description: Calling Object function with number argument value
+---*/
+
+var num = 1.1;
+
+assert.sameValue(typeof num, 'number', 'The value of `typeof num` is expected to be "number"');
+
+var obj = Object(num);
+
+assert.sameValue(typeof obj, "object", 'The value of `typeof obj` is expected to be "object"');
+assert.sameValue(obj.constructor, Number, 'The value of obj.constructor is expected to equal the value of Number');
+
+assert(obj == 1.1, 'The result of evaluating (obj == 1.1) is expected to be true');
+assert.notSameValue(obj, 1.1, 'The value of obj is not 1.1');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T3.js b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T3.js
new file mode 100644
index 0000000000..e9cc2cc998
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T3.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object function is called with one argument value,
+ and the value neither is null nor undefined, and is supplied, return ToObject(value)
+es5id: 15.2.1.1_A2_T3
+description: Calling Object function with string argument value
+---*/
+
+var str = 'Luke Skywalker';
+
+assert.sameValue(typeof str, 'string', 'The value of `typeof str` is expected to be "string"');
+
+var obj = Object(str);
+
+assert.sameValue(obj.constructor, String, 'The value of obj.constructor is expected to equal the value of String');
+assert.sameValue(typeof obj, "object", 'The value of `typeof obj` is expected to be "object"');
+assert(obj == "Luke Skywalker", 'The result of evaluating (obj == "Luke Skywalker") is expected to be true');
+assert.notSameValue(obj, "Luke Skywalker", 'The value of obj is not "Luke Skywalker"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T4.js b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T4.js
new file mode 100644
index 0000000000..0f9bb6c120
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T4.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object function is called with one argument value,
+ and the value neither is null nor undefined, and is supplied, return ToObject(value)
+es5id: 15.2.1.1_A2_T4
+description: Calling Object function with object argument value
+---*/
+
+var obj = {
+ flag: true
+};
+
+assert.sameValue(typeof(obj), 'object', 'The value of `typeof(obj)` is expected to be "object"');
+
+var n_obj = Object(obj);
+
+assert.sameValue(n_obj, obj, 'The value of n_obj is expected to equal the value of obj');
+assert(!!n_obj['flag'], 'The value of !!n_obj["flag"] is expected to be true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T5.js b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T5.js
new file mode 100644
index 0000000000..d06be6c435
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T5.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object function is called with one argument value,
+ and the value neither is null nor undefined, and is supplied, return ToObject(value)
+es5id: 15.2.1.1_A2_T5
+description: Calling Object function with NaN argument value
+---*/
+
+var num = NaN;
+
+assert.sameValue(typeof num, 'number', 'The value of `typeof num` is expected to be "number"');
+
+var obj = Object(num);
+
+assert.sameValue(obj.constructor, Number, 'The value of obj.constructor is expected to equal the value of Number');
+assert.sameValue(typeof obj, "object", 'The value of `typeof obj` is expected to be "object"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T6.js b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T6.js
new file mode 100644
index 0000000000..62f3b3f1eb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T6.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object function is called with one argument value,
+ and the value neither is null nor undefined, and is supplied, return ToObject(value)
+es5id: 15.2.1.1_A2_T6
+description: Calling Object function with Infinity argument value
+---*/
+
+var num = Infinity;
+
+assert.sameValue(typeof num, 'number', 'The value of `typeof num` is expected to be "number"');
+
+var obj = Object(num);
+
+assert.sameValue(obj.constructor, Number, 'The value of obj.constructor is expected to equal the value of Number');
+assert.sameValue(typeof obj, "object", 'The value of `typeof obj` is expected to be "object"');
+assert(obj == Infinity, 'The result of evaluating (obj == Infinity) is expected to be true');
+assert.notSameValue(obj, Infinity, 'The value of obj is expected to not equal ``Infinity``');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T7.js b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T7.js
new file mode 100644
index 0000000000..72310316ab
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T7.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object function is called with one argument value,
+ and the value neither is null nor undefined, and is supplied, return ToObject(value)
+es5id: 15.2.1.1_A2_T7
+description: Calling Object function with empty string argument value
+---*/
+
+var str = '';
+
+assert.sameValue(typeof(str), 'string', 'The value of `typeof(str)` is expected to be "string"');
+
+var obj = Object(str);
+
+assert.sameValue(obj.constructor, String, 'The value of obj.constructor is expected to equal the value of String');
+assert.sameValue(typeof obj, "object", 'The value of `typeof obj` is expected to be "object"');
+assert(obj == "", 'The result of evaluating (obj == "") is expected to be true');
+assert.notSameValue(obj, "", 'The value of obj is not ""');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T8.js b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T8.js
new file mode 100644
index 0000000000..dc2c0df583
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T8.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object function is called with one argument value,
+ and the value neither is null nor undefined, and is supplied, return ToObject(value)
+es5id: 15.2.1.1_A2_T8
+description: Calling Object function with function variable argument value
+---*/
+
+var func = function() {
+ return 1;
+};
+
+assert.sameValue(typeof func, 'function', 'The value of `typeof func` is expected to be "function"');
+
+var n_obj = Object(func);
+
+assert.sameValue(n_obj, func, 'The value of n_obj is expected to equal the value of func');
+assert.sameValue(n_obj(), 1, 'n_obj() must return 1');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T9.js b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T9.js
new file mode 100644
index 0000000000..374606d9f9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A2_T9.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object function is called with one argument value,
+ and the value neither is null nor undefined, and is supplied, return ToObject(value)
+es5id: 15.2.1.1_A2_T9
+description: >
+ Calling Object function with function argument value. The function
+ is declared
+---*/
+function func() {
+ return 1;
+}
+
+assert.sameValue(typeof func, 'function', 'The value of `typeof func` is expected to be "function"');
+
+var n_obj = Object(func);
+
+assert.sameValue(n_obj, func, 'The value of n_obj is expected to equal the value of func');
+assert.sameValue(n_obj(), 1, 'n_obj() must return 1');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.1.1_A3_T1.js b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A3_T1.js
new file mode 100644
index 0000000000..d28f44cad0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A3_T1.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Since calling Object as a function is identical to calling a function,
+ list of arguments bracketing is allowed
+es5id: 15.2.1.1_A3_T1
+description: Creating an object with "Object(1,2,3)"
+---*/
+
+var obj = Object(1, 2, 3);
+
+assert.sameValue(obj.constructor, Number, 'The value of obj.constructor is expected to equal the value of Number');
+assert.sameValue(typeof obj, "object", 'The value of `typeof obj` is expected to be "object"');
+
+assert(obj == 1, 'The result of evaluating (obj == 1) is expected to be true');
+assert.notSameValue(obj, 1, 'The value of obj is not 1');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.1.1_A3_T2.js b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A3_T2.js
new file mode 100644
index 0000000000..478cd3f9b3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A3_T2.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Since calling Object as a function is identical to calling a function,
+ list of arguments bracketing is allowed
+es5id: 15.2.1.1_A3_T2
+description: Creating an object with "Object(null,2,3)"
+---*/
+
+var obj = Object(null, 2, 3);
+
+assert.sameValue(obj.constructor, Object, 'The value of obj.constructor is expected to equal the value of Object');
+assert.sameValue(typeof obj, "object", 'The value of `typeof obj` is expected to be "object"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.1.1_A3_T3.js b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A3_T3.js
new file mode 100644
index 0000000000..28099a7e68
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.1.1_A3_T3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Since calling Object as a function is identical to calling a function,
+ list of arguments bracketing is allowed
+es5id: 15.2.1.1_A3_T3
+description: Creating an object with "Object((null,2,3),1,2)"
+---*/
+
+var obj = Object((null, 2, 3), 1, 2);
+
+assert.sameValue(obj.constructor, Number, 'The value of obj.constructor is expected to equal the value of Number');
+assert.sameValue(typeof obj, "object", 'The value of `typeof obj` is expected to be "object"');
+
+assert(obj == 3, 'The result of evaluating (obj == 3) is expected to be true');
+assert.notSameValue(obj, 3, 'The value of obj is not 3');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.2.1_A1_T1.js b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A1_T1.js
new file mode 100644
index 0000000000..bc38af1a0b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A1_T1.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object constructor is called with no arguments the following steps are taken:
+ (The argument value was not supplied or its type was Null or Undefined.)
+ i) Create a new native ECMAScript object.
+ ii) The [[Prototype]] property of the newly constructed object is set to the Object prototype object.
+ iii) The [[Class]] property of the newly constructed object is set to "Object".
+ iv) The newly constructed object has no [[Value]] property.
+ v) Return the newly created native object
+es5id: 15.2.2.1_A1_T1
+description: Creating new Object() and checking its properties
+---*/
+
+var obj = new Object();
+
+assert.notSameValue(obj, undefined, 'The value of obj is expected to not equal ``undefined``');
+assert.sameValue(obj.constructor, Object, 'The value of obj.constructor is expected to equal the value of Object');
+
+assert(
+ !!Object.prototype.isPrototypeOf(obj),
+ 'The value of !!Object.prototype.isPrototypeOf(obj) is expected to be true'
+);
+
+var to_string_result = '[object ' + 'Object' + ']';
+assert.sameValue(obj.toString(), to_string_result, 'obj.toString() returns to_string_result');
+
+assert.sameValue(
+ obj.valueOf().toString(),
+ to_string_result.toString(),
+ 'obj.valueOf().toString() must return the same value returned by to_string_result.toString()'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.2.1_A1_T2.js b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A1_T2.js
new file mode 100644
index 0000000000..a97791e32e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A1_T2.js
@@ -0,0 +1,37 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object constructor is called with no arguments the following steps are taken:
+ (The argument value was not supplied or its type was Null or Undefined.)
+ i) Create a new native ECMAScript object.
+ ii) The [[Prototype]] property of the newly constructed object is set to the Object prototype object.
+ iii) The [[Class]] property of the newly constructed object is set to "Object".
+ iv) The newly constructed object has no [[Value]] property.
+ v) Return the newly created native object
+es5id: 15.2.2.1_A1_T2
+description: Creating new Object(void 0) and checking its properties
+---*/
+
+//var foo = void 0;
+var obj = new Object(void 0);
+
+assert.notSameValue(obj, undefined, 'The value of obj is expected to not equal ``undefined``');
+assert.sameValue(obj.constructor, Object, 'The value of obj.constructor is expected to equal the value of Object');
+
+assert(
+ !!Object.prototype.isPrototypeOf(obj),
+ 'The value of !!Object.prototype.isPrototypeOf(obj) is expected to be true'
+);
+
+var to_string_result = '[object ' + 'Object' + ']';
+assert.sameValue(obj.toString(), to_string_result, 'obj.toString() returns to_string_result');
+
+assert.sameValue(
+ obj.valueOf().toString(),
+ to_string_result.toString(),
+ 'obj.valueOf().toString() must return the same value returned by to_string_result.toString()'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.2.1_A1_T3.js b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A1_T3.js
new file mode 100644
index 0000000000..d6fb4d495a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A1_T3.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object constructor is called with no arguments the following steps are taken:
+ (The argument value was not supplied or its type was Null or Undefined.)
+ i) Create a new native ECMAScript object.
+ ii) The [[Prototype]] property of the newly constructed object is set to the Object prototype object.
+ iii) The [[Class]] property of the newly constructed object is set to "Object".
+ iv) The newly constructed object has no [[Value]] property.
+ v) Return the newly created native object
+es5id: 15.2.2.1_A1_T3
+description: Creating new Object(null) and checking its properties
+---*/
+
+var obj = new Object(null);
+
+assert.notSameValue(obj, undefined, 'The value of obj is expected to not equal ``undefined``');
+assert.sameValue(obj.constructor, Object, 'The value of obj.constructor is expected to equal the value of Object');
+
+assert(
+ !!Object.prototype.isPrototypeOf(obj),
+ 'The value of !!Object.prototype.isPrototypeOf(obj) is expected to be true'
+);
+
+var to_string_result = '[object ' + 'Object' + ']';
+assert.sameValue(obj.toString(), to_string_result, 'obj.toString() returns to_string_result');
+
+assert.sameValue(
+ obj.valueOf().toString(),
+ to_string_result.toString(),
+ 'obj.valueOf().toString() must return the same value returned by to_string_result.toString()'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.2.1_A1_T4.js b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A1_T4.js
new file mode 100644
index 0000000000..1818c88164
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A1_T4.js
@@ -0,0 +1,36 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object constructor is called with no arguments the following steps are taken:
+ (The argument value was not supplied or its type was Null or Undefined.)
+ i) Create a new native ECMAScript object.
+ ii) The [[Prototype]] property of the newly constructed object is set to the Object prototype object.
+ iii) The [[Class]] property of the newly constructed object is set to "Object".
+ iv) The newly constructed object has no [[Value]] property.
+ v) Return the newly created native object
+es5id: 15.2.2.1_A1_T4
+description: Creating new Object(undefined) and checking its properties
+---*/
+
+var obj = new Object(undefined);
+
+assert.notSameValue(obj, undefined, 'The value of obj is expected to not equal ``undefined``');
+assert.sameValue(obj.constructor, Object, 'The value of obj.constructor is expected to equal the value of Object');
+
+assert(
+ !!Object.prototype.isPrototypeOf(obj),
+ 'The value of !!Object.prototype.isPrototypeOf(obj) is expected to be true'
+);
+
+var to_string_result = '[object ' + 'Object' + ']';
+assert.sameValue(obj.toString(), to_string_result, 'obj.toString() returns to_string_result');
+
+assert.sameValue(
+ obj.valueOf().toString(),
+ to_string_result.toString(),
+ 'obj.valueOf().toString() must return the same value returned by to_string_result.toString()'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.2.1_A1_T5.js b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A1_T5.js
new file mode 100644
index 0000000000..a0ca5c6cb8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A1_T5.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object constructor is called with no arguments the following steps are taken:
+ (The argument value was not supplied or its type was Null or Undefined.)
+ i) Create a new native ECMAScript object.
+ ii) The [[Prototype]] property of the newly constructed object is set to the Object prototype object.
+ iii) The [[Class]] property of the newly constructed object is set to "Object".
+ iv) The newly constructed object has no [[Value]] property.
+ v) Return the newly created native object
+es5id: 15.2.2.1_A1_T5
+description: >
+ Creating new Object(x), where x is "undefined", and checking it
+ properties
+---*/
+
+var obj = new Object(x);
+
+assert.notSameValue(obj, undefined, 'The value of obj is expected to not equal ``undefined``');
+assert.sameValue(obj.constructor, Object, 'The value of obj.constructor is expected to equal the value of Object');
+
+assert(
+ !!Object.prototype.isPrototypeOf(obj),
+ 'The value of !!Object.prototype.isPrototypeOf(obj) is expected to be true'
+);
+
+var to_string_result = '[object ' + 'Object' + ']';
+assert.sameValue(obj.toString(), to_string_result, 'obj.toString() returns to_string_result');
+
+assert.sameValue(
+ obj.valueOf().toString(),
+ to_string_result.toString(),
+ 'obj.valueOf().toString() must return the same value returned by to_string_result.toString()'
+);
+
+var x;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.2.1_A2_T1.js b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A2_T1.js
new file mode 100644
index 0000000000..85eaa078b4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A2_T1.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object constructor is called with one argument value and
+ the value is a native ECMAScript object, do not create a new object but simply return value
+es5id: 15.2.2.1_A2_T1
+description: The value is Object
+---*/
+
+var obj = {
+ prop: 1
+};
+
+var n_obj = new Object(obj);
+
+assert.sameValue(n_obj, obj, 'The value of n_obj is expected to equal the value of obj');
+assert.sameValue(n_obj['prop'], 1, 'The value of n_obj["prop"] is expected to be 1');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.2.1_A2_T2.js b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A2_T2.js
new file mode 100644
index 0000000000..d1628d2ff6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A2_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object constructor is called with one argument value and
+ the value is a native ECMAScript object, do not create a new object but simply return value
+es5id: 15.2.2.1_A2_T2
+description: The value is a function variable
+---*/
+
+var func = function() {
+ return 1;
+};
+
+var n_obj = new Object(func);
+
+assert.sameValue(n_obj, func, 'The value of n_obj is expected to equal the value of func');
+assert.sameValue(n_obj(), 1, 'n_obj() must return 1');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.2.1_A2_T3.js b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A2_T3.js
new file mode 100644
index 0000000000..a570252dbb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A2_T3.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object constructor is called with one argument value and
+ the value is a native ECMAScript object, do not create a new object but simply return value
+es5id: 15.2.2.1_A2_T3
+description: The value is an array
+---*/
+
+var arr = [1, 2, 3];
+
+var n_obj = new Object(arr);
+
+arr.push(4);
+
+assert.sameValue(n_obj, arr, 'The value of n_obj is expected to equal the value of arr');
+assert.sameValue(n_obj[3], 4, 'The value of n_obj[3] is expected to be 4');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.2.1_A2_T5.js b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A2_T5.js
new file mode 100644
index 0000000000..b46e79e97b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A2_T5.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object constructor is called with one argument value and
+ the value is a native ECMAScript object, do not create a new object but simply return value
+es5id: 15.2.2.1_A2_T5
+description: The value is a Date object
+---*/
+
+var obj = new Date(1978, 3);
+
+var n_obj = new Object(obj);
+
+assert.sameValue(n_obj, obj, 'The value of n_obj is expected to equal the value of obj');
+assert.sameValue(n_obj.getFullYear(), 1978, 'n_obj.getFullYear() must return 1978');
+assert.sameValue(n_obj.getMonth(), 3, 'n_obj.getMonth() must return 3');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.2.1_A2_T6.js b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A2_T6.js
new file mode 100644
index 0000000000..31512f3dd3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A2_T6.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object constructor is called with one argument value and
+ the value is a native ECMAScript object, do not create a new object but simply return value
+es5id: 15.2.2.1_A2_T6
+description: The value is a declared function
+---*/
+
+var n_obj = new Object(func);
+
+assert.sameValue(n_obj, func, 'The value of n_obj is expected to equal the value of func');
+assert.sameValue(n_obj(), 1, 'n_obj() must return 1');
+
+function func() {
+ return 1;
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.2.1_A2_T7.js b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A2_T7.js
new file mode 100644
index 0000000000..0b41b080de
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A2_T7.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object constructor is called with one argument value and
+ the value is a native ECMAScript object, do not create a new object but simply return value
+es5id: 15.2.2.1_A2_T7
+description: The value is a function declaration
+---*/
+assert.sameValue(typeof func, 'undefined', 'The value of `typeof func` is expected to be "undefined"');
+
+var n_obj = new Object(function func() {
+ return 1;
+});
+
+assert.sameValue(
+ n_obj.constructor,
+ Function,
+ 'The value of n_obj.constructor is expected to equal the value of Function'
+);
+
+assert.sameValue(n_obj(), 1, 'n_obj() must return 1');
+assert.sameValue(typeof func, 'undefined', 'The value of `typeof func` is expected to be "undefined"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.2.1_A3_T1.js b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A3_T1.js
new file mode 100644
index 0000000000..a3f680a7c2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A3_T1.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object constructor is called with one argument value and
+ the type of value is String, return ToObject(string)
+es5id: 15.2.2.1_A3_T1
+description: Argument value is a nonempty string
+---*/
+
+var str = 'Obi-Wan Kenobi';
+
+assert.sameValue(typeof str, 'string', 'The value of `typeof str` is expected to be "string"');
+
+
+var n_obj = new Object(str);
+
+assert.sameValue(n_obj.constructor, String, 'The value of n_obj.constructor is expected to equal the value of String');
+assert.sameValue(typeof n_obj, 'object', 'The value of `typeof n_obj` is expected to be "object"');
+assert(n_obj == str, 'The result of evaluating (n_obj == str) is expected to be true');
+assert.notSameValue(n_obj, str, 'The value of n_obj is expected to not equal the value of `str`');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.2.1_A3_T2.js b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A3_T2.js
new file mode 100644
index 0000000000..bd0a207cbc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A3_T2.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object constructor is called with one argument value and
+ the type of value is String, return ToObject(string)
+es5id: 15.2.2.1_A3_T2
+description: Argument value is an empty string
+---*/
+
+var str = '';
+
+assert.sameValue(typeof str, 'string', 'The value of `typeof str` is expected to be "string"');
+
+var n_obj = new Object(str);
+
+assert.sameValue(n_obj.constructor, String, 'The value of n_obj.constructor is expected to equal the value of String');
+assert.sameValue(typeof n_obj, 'object', 'The value of `typeof n_obj` is expected to be "object"');
+assert(n_obj == str, 'The result of evaluating (n_obj == str) is expected to be true');
+assert.notSameValue(n_obj, str, 'The value of n_obj is expected to not equal the value of `str`');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.2.1_A3_T3.js b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A3_T3.js
new file mode 100644
index 0000000000..3aaf9fda59
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A3_T3.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object constructor is called with one argument value and
+ the type of value is String, return ToObject(string)
+es5id: 15.2.2.1_A3_T3
+description: Argument value is sum of empty string and number
+---*/
+
+var n_obj = new Object("" + 1);
+
+assert.sameValue(n_obj.constructor, String, 'The value of n_obj.constructor is expected to equal the value of String');
+assert.sameValue(typeof n_obj, 'object', 'The value of `typeof n_obj` is expected to be "object"');
+assert(n_obj == "1", 'The result of evaluating (n_obj == "1") is expected to be true');
+assert.notSameValue(n_obj, "1", 'The value of n_obj is not "1"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.2.1_A4_T1.js b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A4_T1.js
new file mode 100644
index 0000000000..85b1fde921
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A4_T1.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object constructor is called with one argument value and
+ the type of value is Boolean, return ToObject(boolean)
+es5id: 15.2.2.1_A4_T1
+description: Argument value is "true"
+---*/
+
+var bool = true;
+
+assert.sameValue(typeof bool, 'boolean', 'The value of `typeof bool` is expected to be "boolean"');
+
+var n_obj = new Object(bool);
+
+assert.sameValue(
+ n_obj.constructor,
+ Boolean,
+ 'The value of n_obj.constructor is expected to equal the value of Boolean'
+);
+
+assert.sameValue(typeof n_obj, 'object', 'The value of `typeof n_obj` is expected to be "object"');
+assert(n_obj == bool, 'The result of evaluating (n_obj == bool) is expected to be true');
+assert.notSameValue(n_obj, bool, 'The value of n_obj is expected to not equal the value of `bool`');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.2.1_A4_T2.js b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A4_T2.js
new file mode 100644
index 0000000000..33006506e9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A4_T2.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object constructor is called with one argument value and
+ the type of value is Boolean, return ToObject(boolean)
+es5id: 15.2.2.1_A4_T2
+description: Argument value is "false"
+---*/
+
+var bool = false;
+
+assert.sameValue(typeof bool, 'boolean', 'The value of `typeof bool` is expected to be "boolean"');
+
+var n_obj = new Object(bool);
+
+assert.sameValue(
+ n_obj.constructor,
+ Boolean,
+ 'The value of n_obj.constructor is expected to equal the value of Boolean'
+);
+
+assert.sameValue(typeof n_obj, 'object', 'The value of `typeof n_obj` is expected to be "object"');
+assert(n_obj == bool, 'The result of evaluating (n_obj == bool) is expected to be true');
+assert.notSameValue(n_obj, bool, 'The value of n_obj is expected to not equal the value of `bool`');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.2.1_A4_T3.js b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A4_T3.js
new file mode 100644
index 0000000000..8163612b64
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A4_T3.js
@@ -0,0 +1,24 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object constructor is called with one argument value and
+ the type of value is Boolean, return ToObject(boolean)
+es5id: 15.2.2.1_A4_T3
+description: Argument value is boolean expression
+---*/
+
+var n_obj = new Object((1 === 1) && !(false));
+
+assert.sameValue(
+ n_obj.constructor,
+ Boolean,
+ 'The value of n_obj.constructor is expected to equal the value of Boolean'
+);
+
+assert.sameValue(typeof n_obj, 'object', 'The value of `typeof n_obj` is expected to be "object"');
+assert(n_obj == true, 'The result of evaluating (n_obj == true) is expected to be true');
+assert.notSameValue(n_obj, true, 'The value of n_obj is not true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.2.1_A5_T1.js b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A5_T1.js
new file mode 100644
index 0000000000..0c1693d0fa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A5_T1.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object constructor is called with one argument value and
+ the type of value is Number, return ToObject(number)
+es5id: 15.2.2.1_A5_T1
+description: Argument value is any number
+---*/
+
+var num = 1.0;
+
+assert.sameValue(typeof num, 'number', 'The value of `typeof num` is expected to be "number"');
+
+var n_obj = new Object(num);
+
+assert.sameValue(n_obj.constructor, Number, 'The value of n_obj.constructor is expected to equal the value of Number');
+assert.sameValue(typeof n_obj, 'object', 'The value of `typeof n_obj` is expected to be "object"');
+assert(n_obj == num, 'The result of evaluating (n_obj == num) is expected to be true');
+assert.notSameValue(n_obj, num, 'The value of n_obj is expected to not equal the value of `num`');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.2.1_A5_T2.js b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A5_T2.js
new file mode 100644
index 0000000000..6641b14458
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A5_T2.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object constructor is called with one argument value and
+ the type of value is Number, return ToObject(number)
+es5id: 15.2.2.1_A5_T2
+description: Argument value is NaN
+---*/
+
+var num = NaN;
+
+assert.sameValue(typeof num, 'number', 'The value of `typeof num` is expected to be "number"');
+
+var n_obj = new Object(num);
+
+assert.sameValue(n_obj.constructor, Number, 'The value of n_obj.constructor is expected to equal the value of Number');
+assert.sameValue(typeof n_obj, 'object', 'The value of `typeof n_obj` is expected to be "object"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.2.1_A5_T3.js b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A5_T3.js
new file mode 100644
index 0000000000..8da44336bd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A5_T3.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object constructor is called with one argument value and
+ the type of value is Number, return ToObject(number)
+es5id: 15.2.2.1_A5_T3
+description: Argument value is Infinity
+---*/
+
+var num = Infinity;
+
+assert.sameValue(typeof num, 'number', 'The value of `typeof num` is expected to be "number"');
+
+var n_obj = new Object(num);
+
+assert.sameValue(n_obj.constructor, Number, 'The value of n_obj.constructor is expected to equal the value of Number');
+assert.sameValue(typeof n_obj, 'object', 'The value of `typeof n_obj` is expected to be "object"');
+assert(n_obj == num, 'The result of evaluating (n_obj == num) is expected to be true');
+assert.notSameValue(n_obj, num, 'The value of n_obj is expected to not equal the value of `num`');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.2.1_A5_T4.js b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A5_T4.js
new file mode 100644
index 0000000000..96121103bc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A5_T4.js
@@ -0,0 +1,21 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the Object constructor is called with one argument value and
+ the type of value is Number, return ToObject(number)
+es5id: 15.2.2.1_A5_T4
+description: Argument value is numeric expression
+---*/
+
+var n_obj = new Object(2 * ([].length + {
+ q: 1
+}["q"]));
+
+assert.sameValue(n_obj.constructor, Number, 'The value of n_obj.constructor is expected to equal the value of Number');
+assert.sameValue(typeof n_obj, 'object', 'The value of `typeof n_obj` is expected to be "object"');
+assert(n_obj == 2, 'The result of evaluating (n_obj == 2) is expected to be true');
+assert.notSameValue(n_obj, 2, 'The value of n_obj is not 2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.2.1_A6_T1.js b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A6_T1.js
new file mode 100644
index 0000000000..3a4ed97de1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A6_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Since calling Object as a function is identical to calling a function,
+ list of arguments bracketing is allowed
+es5id: 15.2.2.1_A6_T1
+description: Creating an object with "new Object(1,2,3)"
+---*/
+
+var obj = new Object(1, 2, 3);
+
+assert.sameValue(obj.constructor, Number, 'The value of obj.constructor is expected to equal the value of Number');
+assert.sameValue(typeof obj, "object", 'The value of `typeof obj` is expected to be "object"');
+assert(obj == 1, 'The result of evaluating (obj == 1) is expected to be true');
+assert.notSameValue(obj, 1, 'The value of obj is not 1');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.2.1_A6_T2.js b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A6_T2.js
new file mode 100644
index 0000000000..f439201107
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A6_T2.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Since calling Object as a function is identical to calling a function,
+ list of arguments bracketing is allowed
+es5id: 15.2.2.1_A6_T2
+description: Creating an object with "new Object(null,2,3)"
+---*/
+
+var obj = new Object(null, 2, 3);
+
+assert.sameValue(obj.constructor, Object, 'The value of obj.constructor is expected to equal the value of Object');
+assert.sameValue(typeof obj, "object", 'The value of `typeof obj` is expected to be "object"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.2.1_A6_T3.js b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A6_T3.js
new file mode 100644
index 0000000000..41a1c7e299
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.2.1_A6_T3.js
@@ -0,0 +1,19 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Since calling Object as a function is identical to calling a function,
+ list of arguments bracketing is allowed
+es5id: 15.2.2.1_A6_T3
+description: Creating an object with "new Object((null,2,3),2,3)"
+---*/
+
+var obj = new Object((null, 2, 3), 1, 2);
+
+assert.sameValue(obj.constructor, Number, 'The value of obj.constructor is expected to equal the value of Number');
+assert.sameValue(typeof obj, "object", 'The value of `typeof obj` is expected to be "object"');
+assert(obj == 3, 'The result of evaluating (obj == 3) is expected to be true');
+assert.notSameValue(obj, 3, 'The value of obj is not 3');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.3_A1.js b/js/src/tests/test262/built-ins/Object/S15.2.3_A1.js
new file mode 100644
index 0000000000..f553b2a0d9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.3_A1.js
@@ -0,0 +1,14 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The Object constructor has the property "prototype"
+es5id: 15.2.3_A1
+description: Checking existence of the property "prototype"
+---*/
+assert(
+ !!Object.hasOwnProperty("prototype"),
+ 'The value of !!Object.hasOwnProperty("prototype") is expected to be true'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.3_A2.js b/js/src/tests/test262/built-ins/Object/S15.2.3_A2.js
new file mode 100644
index 0000000000..bd599bccec
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.3_A2.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The value of the internal [[Prototype]] property of the Object constructor
+ is the Function prototype object
+es5id: 15.2.3_A2
+description: Checking Function.prototype.isPrototypeOf(Object)
+---*/
+assert(
+ !!Function.prototype.isPrototypeOf(Object),
+ 'The value of !!Function.prototype.isPrototypeOf(Object) is expected to be true'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2.3_A3.js b/js/src/tests/test262/built-ins/Object/S15.2.3_A3.js
new file mode 100644
index 0000000000..91d258643b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2.3_A3.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Object constructor has length property whose value is 1
+es5id: 15.2.3_A3
+description: Checking Object.length
+---*/
+assert(
+ Object.prototype.hasOwnProperty.call(Object, "length"),
+ "The Object constructor has a 'length' own property"
+);
+
+assert.sameValue(Object.length, 1, 'The value of Object.length is expected to be 1');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S15.2_A1.js b/js/src/tests/test262/built-ins/Object/S15.2_A1.js
new file mode 100644
index 0000000000..83271fdafb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S15.2_A1.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Object is the property of global
+es5id: 15.2_A1
+description: Checking if Object equals to this.Object
+---*/
+
+var obj = Object;
+
+var thisobj = this.Object;
+
+assert.sameValue(obj, thisobj, 'The value of obj is expected to equal the value of thisobj');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S9.9_A3.js b/js/src/tests/test262/built-ins/Object/S9.9_A3.js
new file mode 100644
index 0000000000..fe5b431133
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S9.9_A3.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ ToObject conversion from Boolean: create a new Boolean object
+ whose [[value]] property is set to the value of the boolean
+es5id: 9.9_A3
+description: Trying to convert from Boolean to Object
+---*/
+assert.sameValue(Object(true).valueOf(), true, 'Object(true).valueOf() must return true');
+assert.sameValue(typeof Object(true), "object", 'The value of `typeof Object(true)` is expected to be "object"');
+
+assert.sameValue(
+ Object(true).constructor.prototype,
+ Boolean.prototype,
+ 'The value of Object(true).constructor.prototype is expected to equal the value of Boolean.prototype'
+);
+
+assert.sameValue(Object(false).valueOf(), false, 'Object(false).valueOf() must return false');
+assert.sameValue(typeof Object(false), "object", 'The value of `typeof Object(false)` is expected to be "object"');
+
+assert.sameValue(
+ Object(false).constructor.prototype,
+ Boolean.prototype,
+ 'The value of Object(false).constructor.prototype is expected to equal the value of Boolean.prototype'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S9.9_A4.js b/js/src/tests/test262/built-ins/Object/S9.9_A4.js
new file mode 100644
index 0000000000..495c21b43a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S9.9_A4.js
@@ -0,0 +1,151 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ ToObject conversion from Number: create a new Number object
+ whose [[value]] property is set to the value of the number
+es5id: 9.9_A4
+description: Converting from various numbers to Object
+---*/
+assert.sameValue(Object(0).valueOf(), 0, 'Object(0).valueOf() must return 0');
+assert.sameValue(typeof Object(0), "object", 'The value of `typeof Object(0)` is expected to be "object"');
+
+assert.sameValue(
+ Object(0).constructor.prototype,
+ Number.prototype,
+ 'The value of Object(0).constructor.prototype is expected to equal the value of Number.prototype'
+);
+
+assert.sameValue(Object(-0).valueOf(), -0, 'Object(-0).valueOf() must return -0');
+assert.sameValue(typeof Object(-0), "object", 'The value of `typeof Object(-0)` is expected to be "object"');
+
+assert.sameValue(
+ Object(-0).constructor.prototype,
+ Number.prototype,
+ 'The value of Object(-0).constructor.prototype is expected to equal the value of Number.prototype'
+);
+
+assert.sameValue(Object(1).valueOf(), 1, 'Object(1).valueOf() must return 1');
+assert.sameValue(typeof Object(1), "object", 'The value of `typeof Object(1)` is expected to be "object"');
+
+assert.sameValue(
+ Object(1).constructor.prototype,
+ Number.prototype,
+ 'The value of Object(1).constructor.prototype is expected to equal the value of Number.prototype'
+);
+
+assert.sameValue(Object(-1).valueOf(), -1, 'Object(-1).valueOf() must return -1');
+assert.sameValue(typeof Object(-1), "object", 'The value of `typeof Object(-1)` is expected to be "object"');
+
+assert.sameValue(
+ Object(-1).constructor.prototype,
+ Number.prototype,
+ 'The value of Object(-1).constructor.prototype is expected to equal the value of Number.prototype'
+);
+
+assert.sameValue(
+ Object(Number.MIN_VALUE).valueOf(),
+ Number.MIN_VALUE,
+ 'Object(Number.MIN_VALUE).valueOf() returns Number.MIN_VALUE'
+);
+
+assert.sameValue(
+ typeof Object(Number.MIN_VALUE),
+ "object",
+ 'The value of `typeof Object(Number.MIN_VALUE)` is expected to be "object"'
+);
+
+assert.sameValue(
+ Object(Number.MIN_VALUE).constructor.prototype,
+ Number.prototype,
+ 'The value of Object(Number.MIN_VALUE).constructor.prototype is expected to equal the value of Number.prototype'
+);
+
+assert.sameValue(
+ Object(Number.MAX_VALUE).valueOf(),
+ Number.MAX_VALUE,
+ 'Object(Number.MAX_VALUE).valueOf() returns Number.MAX_VALUE'
+);
+
+assert.sameValue(
+ typeof Object(Number.MAX_VALUE),
+ "object",
+ 'The value of `typeof Object(Number.MAX_VALUE)` is expected to be "object"'
+);
+
+assert.sameValue(
+ Object(Number.MAX_VALUE).constructor.prototype,
+ Number.prototype,
+ 'The value of Object(Number.MAX_VALUE).constructor.prototype is expected to equal the value of Number.prototype'
+);
+
+assert.sameValue(
+ Object(Number.POSITIVE_INFINITY).valueOf(),
+ Number.POSITIVE_INFINITY,
+ 'Object(Number.POSITIVE_INFINITY).valueOf() returns Number.POSITIVE_INFINITY'
+);
+
+assert.sameValue(
+ typeof Object(Number.POSITIVE_INFINITY),
+ "object",
+ 'The value of `typeof Object(Number.POSITIVE_INFINITY)` is expected to be "object"'
+);
+
+assert.sameValue(
+ Object(Number.POSITIVE_INFINITY).constructor.prototype,
+ Number.prototype,
+ 'The value of Object(Number.POSITIVE_INFINITY).constructor.prototype is expected to equal the value of Number.prototype'
+);
+
+assert.sameValue(
+ Object(Number.NEGATIVE_INFINITY).valueOf(),
+ Number.NEGATIVE_INFINITY,
+ 'Object(Number.NEGATIVE_INFINITY).valueOf() returns Number.NEGATIVE_INFINITY'
+);
+
+assert.sameValue(
+ typeof Object(Number.NEGATIVE_INFINITY),
+ "object",
+ 'The value of `typeof Object(Number.NEGATIVE_INFINITY)` is expected to be "object"'
+);
+
+assert.sameValue(
+ Object(Number.NEGATIVE_INFINITY).constructor.prototype,
+ Number.prototype,
+ 'The value of Object(Number.NEGATIVE_INFINITY).constructor.prototype is expected to equal the value of Number.prototype'
+);
+
+assert.sameValue(Object(NaN).valueOf(), NaN, 'Object(NaN).valueOf() returns NaN');
+
+assert.sameValue(
+ typeof Object(Number.NaN),
+ "object",
+ 'The value of `typeof Object(Number.NaN)` is expected to be "object"'
+);
+
+assert.sameValue(
+ Object(Number.NaN).constructor.prototype,
+ Number.prototype,
+ 'The value of Object(Number.NaN).constructor.prototype is expected to equal the value of Number.prototype'
+);
+
+assert.sameValue(Object(1.2345).valueOf(), 1.2345, 'Object(1.2345).valueOf() must return 1.2345');
+assert.sameValue(typeof Object(1.2345), "object", 'The value of `typeof Object(1.2345)` is expected to be "object"');
+
+assert.sameValue(
+ Object(1.2345).constructor.prototype,
+ Number.prototype,
+ 'The value of Object(1.2345).constructor.prototype is expected to equal the value of Number.prototype'
+);
+
+assert.sameValue(Object(-1.2345).valueOf(), -1.2345, 'Object(-1.2345).valueOf() must return -1.2345');
+assert.sameValue(typeof Object(-1.2345), "object", 'The value of `typeof Object(-1.2345)` is expected to be "object"');
+
+assert.sameValue(
+ Object(-1.2345).constructor.prototype,
+ Number.prototype,
+ 'The value of Object(-1.2345).constructor.prototype is expected to equal the value of Number.prototype'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S9.9_A5.js b/js/src/tests/test262/built-ins/Object/S9.9_A5.js
new file mode 100644
index 0000000000..5f130f03ed
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S9.9_A5.js
@@ -0,0 +1,66 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ ToObject conversion from String: create a new String object
+ whose [[value]] property is set to the value of the string
+es5id: 9.9_A5
+description: Converting from various strings to Object
+---*/
+assert.sameValue(
+ Object("some string").valueOf(),
+ "some string",
+ 'Object("some string").valueOf() must return "some string"'
+);
+
+assert.sameValue(
+ typeof Object("some string"),
+ "object",
+ 'The value of `typeof Object("some string")` is expected to be "object"'
+);
+
+assert.sameValue(
+ Object("some string").constructor.prototype,
+ String.prototype,
+ 'The value of Object("some string").constructor.prototype is expected to equal the value of String.prototype'
+);
+
+assert.sameValue(Object("").valueOf(), "", 'Object("").valueOf() must return ""');
+assert.sameValue(typeof Object(""), "object", 'The value of `typeof Object("")` is expected to be "object"');
+
+assert.sameValue(
+ Object("").constructor.prototype,
+ String.prototype,
+ 'The value of Object("").constructor.prototype is expected to equal the value of String.prototype'
+);
+
+assert.sameValue(Object("\r\t\b\n\v\f").valueOf(), "\r\t\b\n\v\f", 'Object("rtbnvf").valueOf() must return "rtbnvf"');
+
+assert.sameValue(
+ typeof Object("\r\t\b\n\v\f"),
+ "object",
+ 'The value of `typeof Object("rtbnvf")` is expected to be "object"'
+);
+
+assert.sameValue(
+ Object("\r\t\b\n\v\f").constructor.prototype,
+ String.prototype,
+ 'The value of Object("rtbnvf").constructor.prototype is expected to equal the value of String.prototype'
+);
+
+assert.sameValue(Object(String(10)).valueOf(), "10", 'Object(String(10)).valueOf() must return "10"');
+
+assert.sameValue(
+ typeof Object(String(10)),
+ "object",
+ 'The value of `typeof Object(String(10))` is expected to be "object"'
+);
+
+assert.sameValue(
+ Object(String(10)).constructor.prototype,
+ String.prototype,
+ 'The value of Object(String(10)).constructor.prototype is expected to equal the value of String.prototype'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/S9.9_A6.js b/js/src/tests/test262/built-ins/Object/S9.9_A6.js
new file mode 100644
index 0000000000..ab0d260228
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/S9.9_A6.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ ToObject conversion from Object: The result is the input
+ argument (no conversion)
+es5id: 9.9_A6
+description: Converting from Objects to Object
+---*/
+
+function MyObject(val) {
+ this.value = val;
+ this.valueOf = function() {
+ return this.value;
+ }
+}
+
+var x = new MyObject(1);
+var y = Object(x);
+
+assert.sameValue(y.valueOf(), x.valueOf(), 'y.valueOf() must return the same value returned by x.valueOf()');
+assert.sameValue(typeof y, typeof x, 'The value of `typeof y` is expected to be typeof x');
+
+assert.sameValue(
+ y.constructor.prototype,
+ x.constructor.prototype,
+ 'The value of y.constructor.prototype is expected to equal the value of x.constructor.prototype'
+);
+
+assert.sameValue(y, x, 'The value of y is expected to equal the value of x');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/ObjectOverride-sameproperty.js b/js/src/tests/test262/built-ins/Object/assign/ObjectOverride-sameproperty.js
new file mode 100644
index 0000000000..81f0f531ac
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/ObjectOverride-sameproperty.js
@@ -0,0 +1,22 @@
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: >
+ Object properties are assigned to target in ascending index order,
+ i.e. a later assignment to the same property overrides an earlier assignment.
+es6id: 19.1.2.1
+---*/
+
+var target = {
+ a: 1
+};
+var result = Object.assign(target, {
+ a: 2
+}, {
+ a: "c"
+});
+
+assert.sameValue(result.a, "c", "The value should be 'c'.");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/OnlyOneArgument.js b/js/src/tests/test262/built-ins/Object/assign/OnlyOneArgument.js
new file mode 100644
index 0000000000..3fe6d288f2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/OnlyOneArgument.js
@@ -0,0 +1,17 @@
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: >
+ test Object.Assign(target,...sources),only one argument was passed,
+ return ToObject(target)
+es6id: 19.1.2.1.3
+---*/
+
+var target = "a";
+var result = Object.assign(target);
+
+assert.sameValue(typeof result, "object");
+assert.sameValue(result.valueOf(), "a", "The value should be 'a'.");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/Override-notstringtarget.js b/js/src/tests/test262/built-ins/Object/assign/Override-notstringtarget.js
new file mode 100644
index 0000000000..2ade2ccbbd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/Override-notstringtarget.js
@@ -0,0 +1,20 @@
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: >
+ Test override of Object.Assign(target,...sources),
+ Every string from sources will be wrapped to objects, and override from the first letter(result[0]) all the time
+es6id: 19.1.2.1
+---*/
+
+var target = 12;
+var result = Object.assign(target, "aaa", "bb2b", "1c");
+
+assert.sameValue(Object.getOwnPropertyNames(result).length, 4, "The length should be 4 in the final object.");
+assert.sameValue(result[0], "1", "The value should be {\"0\":\"1\"}.");
+assert.sameValue(result[1], "c", "The value should be {\"1\":\"c\"}.");
+assert.sameValue(result[2], "2", "The value should be {\"2\":\"2\"}.");
+assert.sameValue(result[3], "b", "The value should be {\"3\":\"b\"}.");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/Override.js b/js/src/tests/test262/built-ins/Object/assign/Override.js
new file mode 100644
index 0000000000..af125dcca7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/Override.js
@@ -0,0 +1,37 @@
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: Test Object.Assign(target,...sources).
+esid: sec-object.assign
+---*/
+
+//"a" will be an property of the final object and the value should be 1
+var target = {
+ a: 1
+};
+/*
+"1a2c3" have own enumerable properties, so it Should be wrapped to objects;
+{b:6} is an object,should be assigned to final object.
+undefined and null should be ignored;
+125 is a number,it cannot has own enumerable properties;
+{a:"c"},{a:5} will override property a, the value should be 5.
+*/
+var result = Object.assign(target, "1a2c3", {
+ a: "c"
+}, undefined, {
+ b: 6
+}, null, 125, {
+ a: 5
+});
+
+assert.sameValue(Object.getOwnPropertyNames(result).length, 7, "The length should be 7 in the final object.");
+assert.sameValue(result.a, 5, "The value should be {a:5}.");
+assert.sameValue(result[0], "1", "The value should be {\"0\":\"1\"}.");
+assert.sameValue(result[1], "a", "The value should be {\"1\":\"a\"}.");
+assert.sameValue(result[2], "2", "The value should be {\"2\":\"2\"}.");
+assert.sameValue(result[3], "c", "The value should be {\"3\":\"c\"}.");
+assert.sameValue(result[4], "3", "The value should be {\"4\":\"3\"}.");
+assert.sameValue(result.b, 6, "The value should be {b:6}.");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/Source-Null-Undefined.js b/js/src/tests/test262/built-ins/Object/assign/Source-Null-Undefined.js
new file mode 100644
index 0000000000..b2f3a87750
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/Source-Null-Undefined.js
@@ -0,0 +1,14 @@
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: null and undefined source should be ignored,result should be original object.
+esid: sec-object.assign
+---*/
+
+var target = new Object();
+var result = Object.assign(target, undefined, null);
+
+assert.sameValue(result, target, 'The value of result is expected to equal the value of target');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/Source-Number-Boolen-Symbol.js b/js/src/tests/test262/built-ins/Object/assign/Source-Number-Boolen-Symbol.js
new file mode 100644
index 0000000000..60a851d5f9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/Source-Number-Boolen-Symbol.js
@@ -0,0 +1,17 @@
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: >
+ Number,Boolean,Symbol cannot have own enumerable properties,
+ So cannot be Assigned.Here result should be original object.
+esid: sec-object.assign
+features: [Symbol]
+---*/
+
+var target = new Object();
+var result = Object.assign(target, 123, true, Symbol('foo'));
+
+assert.sameValue(result, target, 'The value of result is expected to equal the value of target');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/Source-String.js b/js/src/tests/test262/built-ins/Object/assign/Source-String.js
new file mode 100644
index 0000000000..d102c60f45
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/Source-String.js
@@ -0,0 +1,16 @@
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: Test Object.Assign(target,...sources), string have own enumerable properties, so it can be wrapped to objects.
+esid: sec-object.assign
+---*/
+
+var target = new Object();
+var result = Object.assign(target, "123");
+
+assert.sameValue(result[0], "1", 'The value of result[0] is expected to be "1"');
+assert.sameValue(result[1], "2", 'The value of result[1] is expected to be "2"');
+assert.sameValue(result[2], "3", 'The value of result[2] is expected to be "3"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/Target-Boolean.js b/js/src/tests/test262/built-ins/Object/assign/Target-Boolean.js
new file mode 100644
index 0000000000..0f367bcf2d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/Target-Boolean.js
@@ -0,0 +1,17 @@
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: >
+ Test the first argument(target) of Object.Assign(target,...sources),
+ if target is Boolean,the return value should be a new object whose value is target.
+es6id: 19.1.2.1.1
+---*/
+
+var result = Object.assign(true, {
+ a: 1
+});
+assert.sameValue(typeof result, "object", "Return value should be an object.");
+assert.sameValue(result.valueOf(), true, "Return value should be true.");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/Target-Null.js b/js/src/tests/test262/built-ins/Object/assign/Target-Null.js
new file mode 100644
index 0000000000..ffdd7fdabb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/Target-Null.js
@@ -0,0 +1,17 @@
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: >
+ Test the first argument(target) of Object.Assign(target,...sources),
+ if target is null,Should Throw a TypeError exception.
+es6id: 19.1.2.1.1
+---*/
+
+assert.throws(TypeError, function() {
+ Object.assign(null, {
+ a: 1
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/Target-Number.js b/js/src/tests/test262/built-ins/Object/assign/Target-Number.js
new file mode 100644
index 0000000000..bdda581c38
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/Target-Number.js
@@ -0,0 +1,17 @@
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: >
+ Test the first argument(target) of Object.Assign(target,...sources),
+ if target is Number,the return value should be a new object whose value is target.
+es6id: 19.1.2.1.1
+---*/
+
+var result = Object.assign(1, {
+ a: 1
+});
+assert.sameValue(typeof result, "object", "Return value should be an object.");
+assert.sameValue(result.valueOf(), 1, "Return value should be 1.");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/Target-Object.js b/js/src/tests/test262/built-ins/Object/assign/Target-Object.js
new file mode 100644
index 0000000000..f8e8a68404
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/Target-Object.js
@@ -0,0 +1,21 @@
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: >
+ Test the first argument(target) of Object.Assign(target,...sources),
+ if target is Object,its properties will be the properties of new object.
+es6id: 19.1.2.1.1
+---*/
+
+var target = {
+ foo: 1
+};
+var result = Object.assign(target, {
+ a: 2
+});
+
+assert.sameValue(result.foo, 1, "The value should be {foo: 1}.");
+assert.sameValue(result.a, 2, "The value should be {a: 2}.");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/Target-String.js b/js/src/tests/test262/built-ins/Object/assign/Target-String.js
new file mode 100644
index 0000000000..aa16b4f2b3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/Target-String.js
@@ -0,0 +1,17 @@
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: >
+ Test the first argument(target) of Object.Assign(target,...sources),
+ if target is String,the return value should be a new object whose value is target.
+es6id: 19.1.2.1.1
+---*/
+
+var result = Object.assign("test", {
+ a: 1
+});
+assert.sameValue(typeof result, "object", "Return value should be an object.");
+assert.sameValue(result.valueOf(), "test", "Return value should be 'test'.");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/Target-Symbol.js b/js/src/tests/test262/built-ins/Object/assign/Target-Symbol.js
new file mode 100644
index 0000000000..1430b4bd4f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/Target-Symbol.js
@@ -0,0 +1,20 @@
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: >
+ Test the first argument(target) of Object.Assign(target,...sources),
+ if target is Symbol,the return value should be a new Symbol object whose [[SymbolData]] value is target.
+es6id: 19.1.2.1.1
+features: [Symbol]
+---*/
+
+var target = Symbol('foo');
+var result = Object.assign(target, {
+ a: 1
+});
+
+assert.sameValue(typeof result, "object", "Return value should be a symbol object.");
+assert.sameValue(result.toString(), "Symbol(foo)", "Return value should be 'Symbol(foo)'.");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/Target-Undefined.js b/js/src/tests/test262/built-ins/Object/assign/Target-Undefined.js
new file mode 100644
index 0000000000..882c5b516b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/Target-Undefined.js
@@ -0,0 +1,17 @@
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: >
+ Test the first argument(target) of Object.Assign(target,...sources),
+ if target is Undefined,Should Throw a TypeError exception.
+es6id: 19.1.2.1.1
+---*/
+
+assert.throws(TypeError, function() {
+ Object.assign(undefined, {
+ a: 1
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/assign-descriptor.js b/js/src/tests/test262/built-ins/Object/assign/assign-descriptor.js
new file mode 100644
index 0000000000..5ee1c8216e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/assign-descriptor.js
@@ -0,0 +1,14 @@
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: Testing descriptor property of Object.assign
+includes: [propertyHelper.js]
+es6id: 19.1.2.1
+---*/
+
+verifyWritable(Object, "assign");
+verifyNotEnumerable(Object, "assign");
+verifyConfigurable(Object, "assign");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/assign-length.js b/js/src/tests/test262/built-ins/Object/assign/assign-length.js
new file mode 100644
index 0000000000..bcfe2e2eda
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/assign-length.js
@@ -0,0 +1,26 @@
+// Copyright 2015 Microsoft Corporation. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+description: The length property of the assign method should be 2
+es6id: 19.1.2.1
+info: |
+ The length property of the assign method is 2.
+
+ ES6 Section 17:
+
+ Unless otherwise specified, the length property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(
+ Object.assign.length, 2, "The length property of the assign method should be 2."
+);
+
+verifyNotEnumerable(Object.assign, 'length');
+verifyNotWritable(Object.assign, 'length');
+verifyConfigurable(Object.assign, 'length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/assignment-to-readonly-property-of-target-must-throw-a-typeerror-exception.js b/js/src/tests/test262/built-ins/Object/assign/assignment-to-readonly-property-of-target-must-throw-a-typeerror-exception.js
new file mode 100644
index 0000000000..d144ee5d49
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/assignment-to-readonly-property-of-target-must-throw-a-typeerror-exception.js
@@ -0,0 +1,31 @@
+// Copyright 2020 Rick Waldron. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+esid: sec-object.assign
+description: >
+ Assignment to readonly property of target must throw a TypeError exception
+info: |
+ Let to be ? ToObject(target).
+ If only one argument was passed, return to.
+ For each element nextSource of sources, do
+ If nextSource is neither undefined nor null, then
+ Let from be ! ToObject(nextSource).
+ Let keys be ? from.[[OwnPropertyKeys]]().
+ For each element nextKey of keys, do
+ Let desc be ? from.[[GetOwnProperty]](nextKey).
+ If desc is not undefined and desc.[[Enumerable]] is true, then
+ Let propValue be ? Get(from, nextKey).
+ Perform ? Set(to, nextKey, propValue, true).
+
+ Set ( O, P, V, Throw ) sec-set-o-p-v-throw
+
+ Let success be ? O.[[Set]](P, V, O).
+ If success is false and Throw is true, throw a TypeError exception.
+---*/
+
+assert.throws(TypeError, () => {
+ Object.assign('a', [1]);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/browser.js b/js/src/tests/test262/built-ins/Object/assign/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/assign/invoked-as-ctor.js b/js/src/tests/test262/built-ins/Object/assign/invoked-as-ctor.js
new file mode 100644
index 0000000000..e60b4ff645
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/invoked-as-ctor.js
@@ -0,0 +1,18 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.1
+description: Invoked as a constructor
+info: |
+ ES6 Section 9.3:
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+---*/
+
+assert.throws(TypeError, function() {
+ new Object.assign({});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/name.js b/js/src/tests/test262/built-ins/Object/assign/name.js
new file mode 100644
index 0000000000..bab32445c2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/name.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.1
+description: '`name` property'
+info: |
+ ES6 Section 17:
+
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value is a
+ String. Unless otherwise specified, this value is the name that is given to
+ the function in this specification.
+
+ [...]
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(
+ Object.assign.name,
+ 'assign',
+ 'The value of `Object.assign.name` is `"assign"`'
+);
+
+verifyNotEnumerable(Object.assign, 'name');
+verifyNotWritable(Object.assign, 'name');
+verifyConfigurable(Object.assign, 'name');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/assign/not-a-constructor.js
new file mode 100644
index 0000000000..3c66a4c64a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/not-a-constructor.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.assign does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(isConstructor(Object.assign), false, 'isConstructor(Object.assign) must return false');
+
+assert.throws(TypeError, () => {
+ new Object.assign({});
+}, '`new Object.assign({})` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/shell.js b/js/src/tests/test262/built-ins/Object/assign/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/assign/source-get-attr-error.js b/js/src/tests/test262/built-ins/Object/assign/source-get-attr-error.js
new file mode 100644
index 0000000000..45dd48223d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/source-get-attr-error.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.1
+description: Errors thrown during retrieval of source object attributes
+info: |
+ [...]
+ 5. For each element nextSource of sources, in ascending index order,
+ [...]
+ c. Repeat for each element nextKey of keys in List order,
+ [...]
+ iii. if desc is not undefined and desc.[[Enumerable]] is true, then
+ 1. Let propValue be Get(from, nextKey).
+ 2. ReturnIfAbrupt(propValue).
+---*/
+
+var source = {
+ get attr() {
+ throw new Test262Error();
+ }
+};
+
+assert.throws(Test262Error, function() {
+ Object.assign({}, source);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/source-non-enum.js b/js/src/tests/test262/built-ins/Object/assign/source-non-enum.js
new file mode 100644
index 0000000000..e13857c627
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/source-non-enum.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.1
+description: Does not assign non-enumerable source properties
+info: |
+ [...]
+ 5. For each element nextSource of sources, in ascending index order,
+ c. Repeat for each element nextKey of keys in List order,
+ i. Let desc be from.[[GetOwnProperty]](nextKey).
+ ii. ReturnIfAbrupt(desc).
+ iii. if desc is not undefined and desc.[[Enumerable]] is true, then
+---*/
+
+var target = {};
+var source = Object.defineProperty({}, 'attr', {
+ value: 1,
+ enumerable: false
+});
+var result;
+
+result = Object.assign(target, source);
+
+assert(
+ !Object.prototype.hasOwnProperty.call(target, 'attr'),
+ "Non-enumerable property 'attr' does not get copied to target"
+);
+assert.sameValue(result, target);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/source-own-prop-desc-missing.js b/js/src/tests/test262/built-ins/Object/assign/source-own-prop-desc-missing.js
new file mode 100644
index 0000000000..54fc0dbe66
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/source-own-prop-desc-missing.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.1
+description: Invoked with a source which does not have a descriptor for an own property
+info: |
+ [...]
+ 5. For each element nextSource of sources, in ascending index order,
+ [...]
+ c. Repeat for each element nextKey of keys in List order,
+ i. Let desc be from.[[GetOwnProperty]](nextKey).
+ ii. ReturnIfAbrupt(desc).
+ iii. if desc is not undefined and desc.[[Enumerable]] is true, then
+features: [Proxy]
+---*/
+
+var callCount = 0;
+var target = {};
+var result;
+var source = new Proxy({}, {
+ ownKeys: function() {
+ callCount += 1;
+ return ['missing'];
+ }
+});
+
+result = Object.assign(target, source);
+
+assert.sameValue(callCount, 1, 'Proxy trap was invoked exactly once');
+assert(
+ !Object.prototype.hasOwnProperty.call(target, 'missing'),
+ 'An own property was not created for a property without a property descriptor'
+);
+assert.sameValue(result, target);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/source-own-prop-error.js b/js/src/tests/test262/built-ins/Object/assign/source-own-prop-error.js
new file mode 100644
index 0000000000..0229bd3354
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/source-own-prop-error.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.1
+description: Invoked with a source whose own property descriptor cannot be retrieved
+info: |
+ [...]
+ 5. For each element nextSource of sources, in ascending index order,
+ [...]
+ c. Repeat for each element nextKey of keys in List order,
+ i. Let desc be from.[[GetOwnProperty]](nextKey).
+ ii. ReturnIfAbrupt(desc).
+features: [Proxy]
+---*/
+
+var source = new Proxy({
+ attr: null
+}, {
+ getOwnPropertyDescriptor: function() {
+ throw new Test262Error();
+ }
+});
+
+assert.throws(Test262Error, function() {
+ Object.assign({}, source);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/source-own-prop-keys-error.js b/js/src/tests/test262/built-ins/Object/assign/source-own-prop-keys-error.js
new file mode 100644
index 0000000000..5cad1fbda1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/source-own-prop-keys-error.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.1
+description: Invoked with a source whose own property keys cannot be retrieved
+info: |
+ [...]
+ 5. For each element nextSource of sources, in ascending index order,
+ a. If nextSource is undefined or null, let keys be an empty List.
+ b. Else,
+ i. Let from be ToObject(nextSource).
+ ii. ReturnIfAbrupt(from).
+ iii. Let keys be from.[[OwnPropertyKeys]]().
+ iv. ReturnIfAbrupt(keys).
+features: [Proxy]
+---*/
+
+var source = new Proxy({}, {
+ ownKeys: function() {
+ throw new Test262Error();
+ }
+});
+
+assert.throws(Test262Error, function() {
+ Object.assign({}, source);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/strings-and-symbol-order-proxy.js b/js/src/tests/test262/built-ins/Object/assign/strings-and-symbol-order-proxy.js
new file mode 100644
index 0000000000..c4523a4df5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/strings-and-symbol-order-proxy.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.assign
+description: >
+ Proxy keys are iterated in order they were provided by "ownKeys" trap.
+info: |
+ Object.assign ( target, ...sources )
+
+ [...]
+ 4. For each element nextSource of sources, in ascending index order, do
+ a. If nextSource is neither undefined nor null, then
+ [...]
+ ii. Let keys be ? from.[[OwnPropertyKeys]]().
+ iii. For each element nextKey of keys in List order, do
+ 1. Let desc be ? from.[[GetOwnProperty]](nextKey).
+
+ [[OwnPropertyKeys]] ( )
+
+ [...]
+ 7. Let trapResultArray be ? Call(trap, handler, « target »).
+ 8. Let trapResult be ? CreateListFromArrayLike(trapResultArray, « String, Symbol »).
+ [...]
+ 23. Return trapResult.
+features: [Proxy, Symbol]
+includes: [compareArray.js]
+---*/
+
+var getOwnKeys = [];
+var ownKeysResult = [Symbol(), "foo", "0"];
+var proxy = new Proxy({}, {
+ getOwnPropertyDescriptor: function(_target, key) {
+ getOwnKeys.push(key);
+ },
+ ownKeys: function() {
+ return ownKeysResult;
+ },
+});
+
+Object.assign({}, proxy);
+assert.compareArray(getOwnKeys, ownKeysResult);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/strings-and-symbol-order.js b/js/src/tests/test262/built-ins/Object/assign/strings-and-symbol-order.js
new file mode 100644
index 0000000000..57cf13c377
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/strings-and-symbol-order.js
@@ -0,0 +1,63 @@
+// Copyright (C) 2018 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.assign
+description: >
+ Symbol-valued properties are copied after String-valued properties.
+info: |
+ 19.1.2.1 Object.assign ( target, ...sources )
+
+ ...
+ 4. For each element nextSource of sources, in ascending index order, do
+ a. ...
+ b. Else,
+ i. Let from be ! ToObject(nextSource).
+ ii. Let keys be ? from.[[OwnPropertyKeys]]().
+ c. For each element nextKey of keys in List order, do
+ ...
+ ...
+
+ 9.1.11.1 OrdinaryOwnPropertyKeys ( O )
+
+ ...
+ 3. For each own property key P of O that is a String but is not an integer index,
+ in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 4. For each own property key P of O that is a Symbol, in ascending chronological
+ order of property creation, do
+ a. Add P as the last element of keys.
+ ...
+
+includes: [compareArray.js]
+---*/
+
+var log = [];
+
+var sym1 = Symbol("x");
+var sym2 = Symbol("y");
+
+var source = {};
+
+Object.defineProperty(source, sym1, {
+ get: function(){ log.push("get sym(x)") },
+ enumerable: true, configurable: true,
+});
+Object.defineProperty(source, "a", {
+ get: function(){ log.push("get a") },
+ enumerable: true, configurable: true,
+});
+Object.defineProperty(source, sym2, {
+ get: function(){ log.push("get sym(y)") },
+ enumerable: true, configurable: true,
+});
+Object.defineProperty(source, "b", {
+ get: function(){ log.push("get b") },
+ enumerable: true, configurable: true,
+});
+
+var target = Object.assign({}, source);
+
+assert.compareArray(log, ["get a", "get b", "get sym(x)", "get sym(y)"]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/target-is-frozen-accessor-property-set-succeeds.js b/js/src/tests/test262/built-ins/Object/assign/target-is-frozen-accessor-property-set-succeeds.js
new file mode 100644
index 0000000000..36d3065b26
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/target-is-frozen-accessor-property-set-succeeds.js
@@ -0,0 +1,65 @@
+// Copyright (C) 2021 Alexey Shvayka. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+esid: sec-object.assign
+description: >
+ [[Set]] to accessor property of frozen `target` succeeds.
+info: |
+ SetIntegrityLevel ( O, level )
+
+ [...]
+ 3. Let status be ? O.[[PreventExtensions]]().
+ [...]
+ 7. Else,
+ a. Assert: level is frozen.
+ b. For each element k of keys, do
+ i. Let currentDesc be ? O.[[GetOwnProperty]](k).
+ ii. If currentDesc is not undefined, then
+ 1. If IsAccessorDescriptor(currentDesc) is true, then
+ a. Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ [...]
+ 3. Perform ? DefinePropertyOrThrow(O, k, desc).
+ 8. Return true.
+
+ Object.assign ( target, ...sources )
+
+ [...]
+ 3. For each element nextSource of sources, do
+ a. If nextSource is neither undefined nor null, then
+ [...]
+ iii. For each element nextKey of keys, do
+ 1. Let desc be ? from.[[GetOwnProperty]](nextKey).
+ 2. If desc is not undefined and desc.[[Enumerable]] is true, then
+ [...]
+ b. Perform ? Set(to, nextKey, propValue, true).
+
+ OrdinarySetWithOwnDescriptor ( O, P, V, Receiver, ownDesc )
+
+ [...]
+ 7. Perform ? Call(setter, Receiver, « V »).
+ 8. Return true.
+features: [Symbol]
+---*/
+
+var value1 = 1;
+var target1 = {
+ set foo(val) { value1 = val; },
+};
+
+Object.freeze(target1);
+Object.assign(target1, { foo: 2 });
+assert.sameValue(value1, 2);
+
+
+var sym = Symbol();
+var value2 = 1;
+var target2 = Object.freeze({
+ set [sym](val) { value2 = val; },
+});
+
+Object.freeze(target2);
+Object.assign(target2, { [sym]: 2 });
+assert.sameValue(value2, 2);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/target-is-frozen-data-property-set-throws.js b/js/src/tests/test262/built-ins/Object/assign/target-is-frozen-data-property-set-throws.js
new file mode 100644
index 0000000000..943798ccc6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/target-is-frozen-data-property-set-throws.js
@@ -0,0 +1,61 @@
+// Copyright (C) 2021 Alexey Shvayka. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+esid: sec-object.assign
+description: >
+ [[Set]] to data property of frozen `target` fails with TypeError.
+info: |
+ SetIntegrityLevel ( O, level )
+
+ [...]
+ 3. Let status be ? O.[[PreventExtensions]]().
+ [...]
+ 7. Else,
+ a. Assert: level is frozen.
+ b. For each element k of keys, do
+ i. Let currentDesc be ? O.[[GetOwnProperty]](k).
+ ii. If currentDesc is not undefined, then
+ 1. If IsAccessorDescriptor(currentDesc) is true, then
+ [...]
+ 2. Else,
+ a. Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ 3. Perform ? DefinePropertyOrThrow(O, k, desc).
+ 8. Return true.
+
+ Object.assign ( target, ...sources )
+
+ [...]
+ 3. For each element nextSource of sources, do
+ a. If nextSource is neither undefined nor null, then
+ [...]
+ iii. For each element nextKey of keys, do
+ 1. Let desc be ? from.[[GetOwnProperty]](nextKey).
+ 2. If desc is not undefined and desc.[[Enumerable]] is true, then
+ [...]
+ b. Perform ? Set(to, nextKey, propValue, true).
+
+ OrdinarySetWithOwnDescriptor ( O, P, V, Receiver, ownDesc )
+
+ [...]
+ 3. If IsDataDescriptor(ownDesc) is true, then
+ a. If ownDesc.[[Writable]] is false, return false.
+features: [Symbol, Reflect]
+---*/
+
+var sym = Symbol();
+var target1 = { [sym]: 1 };
+
+Object.freeze(target1);
+assert.throws(TypeError, function() {
+ Object.assign(target1, { [sym]: 1 });
+});
+
+
+var target2 = Object.freeze({ foo: 1 });
+
+assert.throws(TypeError, function() {
+ Object.assign(target2, { foo: 1 });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/target-is-non-extensible-existing-accessor-property.js b/js/src/tests/test262/built-ins/Object/assign/target-is-non-extensible-existing-accessor-property.js
new file mode 100644
index 0000000000..f0d1d126fa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/target-is-non-extensible-existing-accessor-property.js
@@ -0,0 +1,52 @@
+// Copyright (C) 2021 Alexey Shvayka. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+esid: sec-object.assign
+description: >
+ [[Set]] to existing accessor property of non-extensible `target` is successful.
+info: |
+ OrdinaryPreventExtensions ( O )
+
+ 1. Set O.[[Extensible]] to false.
+
+ Object.assign ( target, ...sources )
+
+ [...]
+ 3. For each element nextSource of sources, do
+ a. If nextSource is neither undefined nor null, then
+ [...]
+ iii. For each element nextKey of keys, do
+ 1. Let desc be ? from.[[GetOwnProperty]](nextKey).
+ 2. If desc is not undefined and desc.[[Enumerable]] is true, then
+ [...]
+ b. Perform ? Set(to, nextKey, propValue, true).
+
+ OrdinarySetWithOwnDescriptor ( O, P, V, Receiver, ownDesc )
+
+ [...]
+ 7. Perform ? Call(setter, Receiver, « V »).
+ 8. Return true.
+features: [Symbol]
+---*/
+
+var value1 = 1;
+var target1 = Object.preventExtensions({
+ set foo(val) { value1 = val; },
+});
+
+Object.assign(target1, { foo: 2 });
+assert.sameValue(value1, 2);
+
+
+var sym = Symbol();
+var value2 = 1;
+var target2 = {
+ set [sym](val) { value2 = val; },
+};
+
+Object.preventExtensions(target2);
+Object.assign(target2, { [sym]: 2 });
+assert.sameValue(value2, 2);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/target-is-non-extensible-existing-data-property.js b/js/src/tests/test262/built-ins/Object/assign/target-is-non-extensible-existing-data-property.js
new file mode 100644
index 0000000000..ebbf3a8e15
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/target-is-non-extensible-existing-data-property.js
@@ -0,0 +1,59 @@
+// Copyright (C) 2021 Alexey Shvayka. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+esid: sec-object.assign
+description: >
+ [[Set]] to existing data property of non-extensible `target` is successful.
+info: |
+ OrdinaryPreventExtensions ( O )
+
+ 1. Set O.[[Extensible]] to false.
+
+ Object.assign ( target, ...sources )
+
+ [...]
+ 3. For each element nextSource of sources, do
+ a. If nextSource is neither undefined nor null, then
+ [...]
+ iii. For each element nextKey of keys, do
+ 1. Let desc be ? from.[[GetOwnProperty]](nextKey).
+ 2. If desc is not undefined and desc.[[Enumerable]] is true, then
+ [...]
+ b. Perform ? Set(to, nextKey, propValue, true).
+
+ OrdinarySetWithOwnDescriptor ( O, P, V, Receiver, ownDesc )
+
+ [...]
+ 3. If IsDataDescriptor(ownDesc) is true, then
+ [...]
+ c. Let existingDescriptor be ? Receiver.[[GetOwnProperty]](P).
+ d. If existingDescriptor is not undefined, then
+ [...]
+ iii. Let valueDesc be the PropertyDescriptor { [[Value]]: V }.
+ iv. Return ? Receiver.[[DefineOwnProperty]](P, valueDesc).
+
+ ValidateAndApplyPropertyDescriptor ( O, P, extensible, Desc, current )
+
+ [...]
+ 9. If O is not undefined, then
+ a. For each field of Desc that is present, set the corresponding attribute
+ of the property named P of object O to the value of the field.
+ 10. Return true.
+features: [Symbol]
+---*/
+
+var target1 = Object.preventExtensions({ foo: 1 });
+
+Object.assign(target1, { foo: 2 });
+assert.sameValue(target1.foo, 2);
+
+
+var sym = Symbol();
+var target2 = { [sym]: 1 };
+
+Object.preventExtensions(target2);
+Object.assign(target2, { [sym]: 2 });
+assert.sameValue(target2[sym], 2);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/target-is-non-extensible-property-creation-throws.js b/js/src/tests/test262/built-ins/Object/assign/target-is-non-extensible-property-creation-throws.js
new file mode 100644
index 0000000000..cbc5dda75e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/target-is-non-extensible-property-creation-throws.js
@@ -0,0 +1,55 @@
+// Copyright (C) 2021 Alexey Shvayka. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+esid: sec-object.assign
+description: >
+ [[Set]] to non-existing property of non-extensible `target` fails with TypeError.
+info: |
+ Object.assign ( target, ...sources )
+
+ [...]
+ 3. For each element nextSource of sources, do
+ a. If nextSource is neither undefined nor null, then
+ [...]
+ iii. For each element nextKey of keys, do
+ 1. Let desc be ? from.[[GetOwnProperty]](nextKey).
+ 2. If desc is not undefined and desc.[[Enumerable]] is true, then
+ [...]
+ b. Perform ? Set(to, nextKey, propValue, true).
+
+ OrdinarySetWithOwnDescriptor ( O, P, V, Receiver, ownDesc )
+
+ [...]
+ 3. If IsDataDescriptor(ownDesc) is true, then
+ [...]
+ c. Let existingDescriptor be ? Receiver.[[GetOwnProperty]](P).
+ d. If existingDescriptor is not undefined, then
+ [...]
+ e. Else,
+ i. Assert: Receiver does not currently have a property P.
+ ii. Return ? CreateDataProperty(Receiver, P, V).
+
+ ValidateAndApplyPropertyDescriptor ( O, P, extensible, Desc, current )
+
+ [...]
+ 2. If current is undefined, then
+ a. If extensible is false, return false.
+features: [Symbol]
+---*/
+
+var target1 = Object.preventExtensions({ foo: 1 });
+
+assert.throws(TypeError, function() {
+ Object.assign(target1, { get bar() {} });
+});
+
+
+var target2 = {};
+
+Object.preventExtensions(target2);
+assert.throws(TypeError, function() {
+ Object.assign(target2, { [Symbol()]: 1 });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/target-is-sealed-existing-accessor-property.js b/js/src/tests/test262/built-ins/Object/assign/target-is-sealed-existing-accessor-property.js
new file mode 100644
index 0000000000..102511a969
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/target-is-sealed-existing-accessor-property.js
@@ -0,0 +1,57 @@
+// Copyright (C) 2021 Alexey Shvayka. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+esid: sec-object.assign
+description: >
+ [[Set]] to existing accessor property of sealed `target` is successful.
+info: |
+ SetIntegrityLevel ( O, level )
+
+ [...]
+ 3. Let status be ? O.[[PreventExtensions]]().
+ [...]
+
+ OrdinaryPreventExtensions ( O )
+
+ 1. Set O.[[Extensible]] to false.
+
+ Object.assign ( target, ...sources )
+
+ [...]
+ 3. For each element nextSource of sources, do
+ a. If nextSource is neither undefined nor null, then
+ [...]
+ iii. For each element nextKey of keys, do
+ 1. Let desc be ? from.[[GetOwnProperty]](nextKey).
+ 2. If desc is not undefined and desc.[[Enumerable]] is true, then
+ [...]
+ b. Perform ? Set(to, nextKey, propValue, true).
+
+ OrdinarySetWithOwnDescriptor ( O, P, V, Receiver, ownDesc )
+
+ [...]
+ 7. Perform ? Call(setter, Receiver, « V »).
+ 8. Return true.
+---*/
+
+var value1 = 1;
+var target1 = Object.seal({
+ set foo(val) { value1 = val; },
+});
+
+Object.assign(target1, { foo: 2 });
+assert.sameValue(value1, 2);
+
+
+var sym = Symbol();
+var value2 = 1;
+var target2 = {
+ set [sym](val) { value2 = val; },
+};
+
+Object.seal(target2);
+Object.assign(target2, { [sym]: 2 });
+assert.sameValue(value2, 2);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/target-is-sealed-existing-data-property.js b/js/src/tests/test262/built-ins/Object/assign/target-is-sealed-existing-data-property.js
new file mode 100644
index 0000000000..31c05994e1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/target-is-sealed-existing-data-property.js
@@ -0,0 +1,64 @@
+// Copyright (C) 2021 Alexey Shvayka. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+esid: sec-object.assign
+description: >
+ [[Set]] to existing data property of sealed `target` is successful.
+info: |
+ SetIntegrityLevel ( O, level )
+
+ [...]
+ 3. Let status be ? O.[[PreventExtensions]]().
+ [...]
+
+ OrdinaryPreventExtensions ( O )
+
+ 1. Set O.[[Extensible]] to false.
+
+ Object.assign ( target, ...sources )
+
+ [...]
+ 3. For each element nextSource of sources, do
+ a. If nextSource is neither undefined nor null, then
+ [...]
+ iii. For each element nextKey of keys, do
+ 1. Let desc be ? from.[[GetOwnProperty]](nextKey).
+ 2. If desc is not undefined and desc.[[Enumerable]] is true, then
+ [...]
+ b. Perform ? Set(to, nextKey, propValue, true).
+
+ OrdinarySetWithOwnDescriptor ( O, P, V, Receiver, ownDesc )
+
+ [...]
+ 3. If IsDataDescriptor(ownDesc) is true, then
+ [...]
+ c. Let existingDescriptor be ? Receiver.[[GetOwnProperty]](P).
+ d. If existingDescriptor is not undefined, then
+ [...]
+ iii. Let valueDesc be the PropertyDescriptor { [[Value]]: V }.
+ iv. Return ? Receiver.[[DefineOwnProperty]](P, valueDesc).
+
+ ValidateAndApplyPropertyDescriptor ( O, P, extensible, Desc, current )
+
+ [...]
+ 9. If O is not undefined, then
+ a. For each field of Desc that is present, set the corresponding attribute
+ of the property named P of object O to the value of the field.
+ 10. Return true.
+---*/
+
+var target1 = Object.seal({ foo: 1 });
+
+Object.assign(target1, { foo: 2 });
+assert.sameValue(target1.foo, 2);
+
+
+var sym = Symbol();
+var target2 = { [sym]: 1 };
+
+Object.seal(target2);
+Object.assign(target2, { [sym]: 2 });
+assert.sameValue(target2[sym], 2);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/target-is-sealed-property-creation-throws.js b/js/src/tests/test262/built-ins/Object/assign/target-is-sealed-property-creation-throws.js
new file mode 100644
index 0000000000..dd7ebae67b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/target-is-sealed-property-creation-throws.js
@@ -0,0 +1,61 @@
+// Copyright (C) 2021 Alexey Shvayka. All rights reserved.
+// This code is governed by the license found in the LICENSE file.
+
+/*---
+esid: sec-object.assign
+description: >
+ [[Set]] to non-existing property of sealed `target` fails with TypeError.
+info: |
+ SetIntegrityLevel ( O, level )
+
+ [...]
+ 3. Let status be ? O.[[PreventExtensions]]().
+ [...]
+
+ Object.assign ( target, ...sources )
+
+ [...]
+ 3. For each element nextSource of sources, do
+ a. If nextSource is neither undefined nor null, then
+ [...]
+ iii. For each element nextKey of keys, do
+ 1. Let desc be ? from.[[GetOwnProperty]](nextKey).
+ 2. If desc is not undefined and desc.[[Enumerable]] is true, then
+ [...]
+ b. Perform ? Set(to, nextKey, propValue, true).
+
+ OrdinarySetWithOwnDescriptor ( O, P, V, Receiver, ownDesc )
+
+ [...]
+ 3. If IsDataDescriptor(ownDesc) is true, then
+ [...]
+ c. Let existingDescriptor be ? Receiver.[[GetOwnProperty]](P).
+ d. If existingDescriptor is not undefined, then
+ [...]
+ e. Else,
+ i. Assert: Receiver does not currently have a property P.
+ ii. Return ? CreateDataProperty(Receiver, P, V).
+
+ ValidateAndApplyPropertyDescriptor ( O, P, extensible, Desc, current )
+
+ [...]
+ 2. If current is undefined, then
+ a. If extensible is false, return false.
+features: [Symbol, Reflect]
+---*/
+
+var target1 = Object.seal({ foo: 1 });
+
+assert.throws(TypeError, function() {
+ Object.assign(target1, { get bar() {} });
+});
+
+
+var target2 = {};
+
+Object.seal(target2);
+assert.throws(TypeError, function() {
+ Object.assign(target2, { [Symbol()]: 1 });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/target-set-not-writable.js b/js/src/tests/test262/built-ins/Object/assign/target-set-not-writable.js
new file mode 100644
index 0000000000..930ddb8302
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/target-set-not-writable.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.1
+description: Errors thrown during definition of target object attributes
+info: |
+ [...]
+ 5. For each element nextSource of sources, in ascending index order,
+ [...]
+ c. Repeat for each element nextKey of keys in List order,
+ [...]
+ iii. if desc is not undefined and desc.[[Enumerable]] is true, then
+ [...]
+ 3. Let status be Set(to, nextKey, propValue, true).
+ 4. ReturnIfAbrupt(status).
+---*/
+
+var target = {};
+Object.defineProperty(target, 'attr', {
+ writable: false
+});
+
+assert.throws(TypeError, function() {
+ Object.assign(target, {
+ attr: 1
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/assign/target-set-user-error.js b/js/src/tests/test262/built-ins/Object/assign/target-set-user-error.js
new file mode 100644
index 0000000000..9a71116351
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/assign/target-set-user-error.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.1
+description: Errors thrown during definition of target object attributes
+info: |
+ [...]
+ 5. For each element nextSource of sources, in ascending index order,
+ [...]
+ c. Repeat for each element nextKey of keys in List order,
+ [...]
+ iii. if desc is not undefined and desc.[[Enumerable]] is true, then
+ [...]
+ 3. Let status be Set(to, nextKey, propValue, true).
+ 4. ReturnIfAbrupt(status).
+---*/
+
+var target = {};
+Object.defineProperty(target, 'attr', {
+ set: function(_) {
+ throw new Test262Error();
+ }
+});
+
+assert.throws(Test262Error, function() {
+ Object.assign(target, {
+ attr: 1
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/bigint.js b/js/src/tests/test262/built-ins/Object/bigint.js
new file mode 100644
index 0000000000..12acf1582a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/bigint.js
@@ -0,0 +1,13 @@
+// Copyright (C) 2017 Robin Templeton. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Conversion of BigInt values to Objects
+esid: pending
+features: [BigInt]
+---*/
+
+assert(Object(0n) instanceof BigInt);
+assert.sameValue(Object(0n).valueOf(), 0n);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/browser.js b/js/src/tests/test262/built-ins/Object/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-0-1.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-0-1.js
new file mode 100644
index 0000000000..30be8c6b03
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-0-1.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-0-1
+description: Object.create must exist as a function
+---*/
+
+assert.sameValue(typeof(Object.create), "function", 'typeof(Object.create)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-0-2.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-0-2.js
new file mode 100644
index 0000000000..c87e471910
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-0-2.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-0-2
+description: Object.create must exist as a function taking 2 parameters
+---*/
+
+assert.sameValue(Object.create.length, 2, 'Object.create.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-1-1.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-1-1.js
new file mode 100644
index 0000000000..132a3a2c04
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-1-1.js
@@ -0,0 +1,14 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-1-1
+description: Object.create throws TypeError if 'O' is undefined
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.create(undefined);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-1-2.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-1-2.js
new file mode 100644
index 0000000000..cf33997d5e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-1-2.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-1-2
+description: Object.create TypeError is not thrown if 'O' is null
+---*/
+
+Object.create(null);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-1-3.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-1-3.js
new file mode 100644
index 0000000000..83db89429e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-1-3.js
@@ -0,0 +1,14 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-1-3
+description: Object.create throws TypeError if 'O' is a boolean primitive
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.create(true);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-1-4.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-1-4.js
new file mode 100644
index 0000000000..707867ba3b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-1-4.js
@@ -0,0 +1,14 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-1-4
+description: Object.create throws TypeError if 'O' is a number primitive
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.create(2);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-1.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-1.js
new file mode 100644
index 0000000000..ce91396dae
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-1.js
@@ -0,0 +1,14 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-1
+description: Object.create throws TypeError if type of first param is not Object
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.create(0);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-2-1.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-2-1.js
new file mode 100644
index 0000000000..90a3c94b7e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-2-1.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ create sets the [[Prototype]] of the created object to first parameter.
+ This can be checked using isPrototypeOf, or getPrototypeOf.
+es5id: 15.2.3.5-2-1
+description: Object.create creates new Object
+---*/
+
+function base() {}
+var b = new base();
+var prop = new Object();
+var d = Object.create(b);
+
+assert.sameValue(typeof d, 'object', 'typeof d');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-2-2.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-2-2.js
new file mode 100644
index 0000000000..000675aef1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-2-2.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-2-2
+description: Object.create - returned object is an instance of Object
+---*/
+
+var newObj = Object.create({});
+
+assert(newObj instanceof Object, 'newObj instanceof Object !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-3-1.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-3-1.js
new file mode 100644
index 0000000000..12330461c2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-3-1.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ create sets the [[Prototype]] of the created object to first parameter.
+ This can be checked using isPrototypeOf, or getPrototypeOf.
+es5id: 15.2.3.5-3-1
+description: Object.create sets the prototype of the passed-in object
+---*/
+
+function base() {}
+var b = new base();
+var d = Object.create(b);
+
+assert.sameValue(Object.getPrototypeOf(d), b, 'Object.getPrototypeOf(d)');
+assert.sameValue(b.isPrototypeOf(d), true, 'b.isPrototypeOf(d)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-1.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-1.js
new file mode 100644
index 0000000000..a314159269
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-1.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ create sets the [[Prototype]] of the created object to first parameter.
+ This can be checked using isPrototypeOf, or getPrototypeOf.
+es5id: 15.2.3.5-4-1
+description: >
+ Object.create sets the prototype of the passed-in object and adds
+ new properties
+---*/
+
+function base() {}
+var b = new base();
+var prop = new Object();
+var d = Object.create(b, {
+ "x": {
+ value: true,
+ writable: false
+ },
+ "y": {
+ value: "str",
+ writable: false
+ }
+});
+
+assert.sameValue(Object.getPrototypeOf(d), b, 'Object.getPrototypeOf(d)');
+assert.sameValue(b.isPrototypeOf(d), true, 'b.isPrototypeOf(d)');
+assert.sameValue(d.x, true, 'd.x');
+assert.sameValue(d.y, "str", 'd.y');
+assert.sameValue(b.x, undefined, 'b.x');
+assert.sameValue(b.y, undefined, 'b.y');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-10.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-10.js
new file mode 100644
index 0000000000..259d115d7d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-10.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-10
+description: >
+ Object.create - argument 'Properties' is the Math object (15.2.3.7
+ step 2)
+---*/
+
+var result = false;
+Object.defineProperty(Math, "prop", {
+ get: function() {
+ result = (this === Math);
+ return {};
+ },
+ enumerable: true,
+ configurable: true
+});
+
+var newObj = Object.create({}, Math);
+
+assert(result, 'result !== true');
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-100.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-100.js
new file mode 100644
index 0000000000..ed3a1d5d13
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-100.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-100
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is not present (8.10.5 step 4)
+includes: [propertyHelper.js]
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ value: "ownDataProperty"
+ }
+});
+
+assert(newObj.hasOwnProperty("prop"), "expected newObj to have 'prop'");
+verifyNotConfigurable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-101.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-101.js
new file mode 100644
index 0000000000..f325ce5059
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-101.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-101
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is own data property (8.10.5 step 4.a)
+includes: [propertyHelper.js]
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: false
+ }
+});
+
+assert(newObj.hasOwnProperty("prop"));
+verifyNotConfigurable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-102.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-102.js
new file mode 100644
index 0000000000..b534f64345
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-102.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-102
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is an inherited data property (8.10.5 step 4.a)
+---*/
+
+var proto = {
+ configurable: true
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var descObj = new ConstructFun();
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+var result1 = newObj.hasOwnProperty("prop");
+delete newObj.prop;
+var result2 = newObj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-103.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-103.js
new file mode 100644
index 0000000000..4da2d10566
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-103.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-103
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is own data property that overrides an inherited data
+ property (8.10.5 step 4.a)
+includes: [propertyHelper.js]
+---*/
+
+var proto = {
+ configurable: true
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var descObj = new ConstructFun();
+
+Object.defineProperty(descObj, "configurable", {
+ value: false
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert(newObj.hasOwnProperty("prop"));
+verifyNotConfigurable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-104.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-104.js
new file mode 100644
index 0000000000..b76ea8de8b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-104.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-104
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is own data property that overrides an inherited
+ accessor property (8.10.5 step 4.a)
+includes: [propertyHelper.js]
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "configurable", {
+ get: function() {
+ return true;
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var descObj = new ConstructFun();
+
+Object.defineProperty(descObj, "configurable", {
+ value: false
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert(newObj.hasOwnProperty("prop"));
+verifyNotConfigurable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-105.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-105.js
new file mode 100644
index 0000000000..c9377acdda
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-105.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-105
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is own accessor property (8.10.5 step 4.a)
+---*/
+
+var descObj = {};
+Object.defineProperty(descObj, "configurable", {
+ get: function() {
+ return true;
+ }
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+var result1 = newObj.hasOwnProperty("prop");
+delete newObj.prop;
+var result2 = newObj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-106.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-106.js
new file mode 100644
index 0000000000..68941e6176
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-106.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-106
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is an inherited accessor property (8.10.5 step 4.a)
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "configurable", {
+ get: function() {
+ return true;
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var descObj = new ConstructFun();
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+var result1 = newObj.hasOwnProperty("prop");
+delete newObj.prop;
+var result2 = newObj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-107.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-107.js
new file mode 100644
index 0000000000..867a3f4e8c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-107.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-107
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is own accessor property that overrides an inherited
+ data property (8.10.5 step 4.a)
+includes: [propertyHelper.js]
+---*/
+
+var proto = {
+ configurable: true
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var descObj = new ConstructFun();
+
+Object.defineProperty(descObj, "configurable", {
+ get: function() {
+ return false;
+ }
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert(newObj.hasOwnProperty("prop"));
+verifyNotConfigurable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-108.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-108.js
new file mode 100644
index 0000000000..14d9da3a70
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-108.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-108
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is own accessor property that overrides an inherited
+ accessor property (8.10.5 step 4.a)
+includes: [propertyHelper.js]
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "configurable", {
+ get: function() {
+ return true;
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var descObj = new ConstructFun();
+
+Object.defineProperty(descObj, "configurable", {
+ get: function() {
+ return false;
+ }
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert(newObj.hasOwnProperty("prop"));
+verifyNotConfigurable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-109.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-109.js
new file mode 100644
index 0000000000..8a38c3975e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-109.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-109
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is own accessor property without a get function
+ (8.10.5 step 4.a)
+includes: [propertyHelper.js]
+---*/
+
+var descObj = {};
+Object.defineProperty(descObj, "configurable", {
+ set: function() {}
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert(newObj.hasOwnProperty("prop"));
+verifyNotConfigurable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-11.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-11.js
new file mode 100644
index 0000000000..6c3b27e932
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-11.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-11
+description: >
+ Object.create - argument 'Properties' is a Date object (15.2.3.7
+ step 2)
+---*/
+
+var props = new Date();
+var result = false;
+
+Object.defineProperty(props, "prop", {
+ get: function() {
+ result = this instanceof Date;
+ return {};
+ },
+ enumerable: true
+});
+var newObj = Object.create({}, props);
+
+assert(result, 'result !== true');
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-110.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-110.js
new file mode 100644
index 0000000000..9ac2bcea84
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-110.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-110
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is own accessor property without a get function,
+ which overrides an inherited accessor property (8.10.5 step 4.a)
+includes: [propertyHelper.js]
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "configurable", {
+ get: function() {
+ return true;
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var descObj = new ConstructFun();
+
+Object.defineProperty(descObj, "configurable", {
+ set: function() {}
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert(newObj.hasOwnProperty("prop"));
+verifyNotConfigurable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-111.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-111.js
new file mode 100644
index 0000000000..e979fe76d7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-111.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-111
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is an inherited accessor property without a get
+ function (8.10.5 step 4.a)
+includes: [propertyHelper.js]
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "configurable", {
+ set: function() {}
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var descObj = new ConstructFun();
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert(newObj.hasOwnProperty("prop"));
+verifyNotConfigurable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-112.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-112.js
new file mode 100644
index 0000000000..a40a9a1fb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-112.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-112
+description: >
+ Object.create - one property in 'Properties' is a Function object
+ which implements its own [[Get]] method to access the
+ 'configurable' property (8.10.5 step 4.a)
+---*/
+
+var descObj = function() {};
+
+descObj.configurable = true;
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+var result1 = newObj.hasOwnProperty("prop");
+delete newObj.prop;
+var result2 = newObj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-113.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-113.js
new file mode 100644
index 0000000000..33572fe9a1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-113.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-113
+description: >
+ Object.create - one property in 'Properties' is an Array object
+ that uses Object's [[Get]] method to access the 'configurable'
+ property (8.10.5 step 4.a)
+---*/
+
+var descObj = [];
+
+descObj.configurable = true;
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+var result1 = newObj.hasOwnProperty("prop");
+delete newObj.prop;
+var result2 = newObj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-114.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-114.js
new file mode 100644
index 0000000000..205e9e1d42
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-114.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-114
+description: >
+ Object.create - one property in 'Properties' is a String object
+ that uses Object's [[Get]] method to access the 'configurable'
+ property (8.10.5 step 4.a)
+---*/
+
+var descObj = new String();
+
+descObj.configurable = true;
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+var result1 = newObj.hasOwnProperty("prop");
+delete newObj.prop;
+var result2 = newObj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-115.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-115.js
new file mode 100644
index 0000000000..f944da881b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-115.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-115
+description: >
+ Object.create - one property in 'Properties' is a Boolean object
+ that uses Object's [[Get]] method to access the 'configurable'
+ property (8.10.5 step 4.a)
+---*/
+
+var descObj = new Boolean(false);
+
+descObj.configurable = true;
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+var result1 = newObj.hasOwnProperty("prop");
+delete newObj.prop;
+var result2 = newObj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-116.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-116.js
new file mode 100644
index 0000000000..df251a783f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-116.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-116
+description: >
+ Object.create - one property in 'Properties' is a Number object
+ that uses Object's [[Get]] method to access the 'configurable'
+ property (8.10.5 step 4.a)
+---*/
+
+var descObj = new Number(-9);
+
+descObj.configurable = true;
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+var result1 = newObj.hasOwnProperty("prop");
+delete newObj.prop;
+var result2 = newObj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-117.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-117.js
new file mode 100644
index 0000000000..0dbfd9468b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-117.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-117
+description: >
+ Object.create - one property in 'Properties' is the Math object
+ that uses Object's [[Get]] method to access the 'configurable'
+ property (8.10.5 step 4.a)
+---*/
+
+Math.configurable = true;
+
+var newObj = Object.create({}, {
+ prop: Math
+});
+
+var result1 = newObj.hasOwnProperty("prop");
+delete newObj.prop;
+var result2 = newObj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-118.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-118.js
new file mode 100644
index 0000000000..31a9b559da
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-118.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-118
+description: >
+ Object.create - one property in 'Properties' is a Date object that
+ uses Object's [[Get]] method to access the 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var descObj = new Date();
+
+descObj.configurable = true;
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+var result1 = newObj.hasOwnProperty("prop");
+delete newObj.prop;
+var result2 = newObj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-119.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-119.js
new file mode 100644
index 0000000000..8ec7819b74
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-119.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-119
+description: >
+ Object.create - one property in 'Properties' is a Date object that
+ uses Object's [[Get]] method to access the 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var descObj = new RegExp();
+
+descObj.configurable = true;
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+var result1 = newObj.hasOwnProperty("prop");
+delete newObj.prop;
+var result2 = newObj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-12.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-12.js
new file mode 100644
index 0000000000..c3f751858a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-12.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-12
+description: >
+ Object.create - argument 'Properties' is a RegExp object (15.2.3.7
+ step 2)
+---*/
+
+var props = new RegExp();
+var result = false;
+
+Object.defineProperty(props, "prop", {
+ get: function() {
+ result = this instanceof RegExp;
+ return {};
+ },
+ enumerable: true
+});
+var newObj = Object.create({}, props);
+
+assert(result, 'result !== true');
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-120.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-120.js
new file mode 100644
index 0000000000..85241c1604
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-120.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-120
+description: >
+ Object.create - one property in 'Properties' is the JSON object
+ that uses Object's [[Get]] method to access the 'configurable'
+ property (8.10.5 step 4.a)
+---*/
+
+JSON.configurable = true;
+
+var newObj = Object.create({}, {
+ prop: JSON
+});
+
+var result1 = newObj.hasOwnProperty("prop");
+delete newObj.prop;
+var result2 = newObj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-121.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-121.js
new file mode 100644
index 0000000000..241862ae58
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-121.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-121
+description: >
+ Object.create - one property in 'Properties' is an Error object
+ that uses Object's [[Get]] method to access the 'configurable'
+ property (8.10.5 step 4.a)
+---*/
+
+var descObj = new Error();
+
+descObj.configurable = true;
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+var result1 = newObj.hasOwnProperty("prop");
+delete newObj.prop;
+var result2 = newObj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-122.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-122.js
new file mode 100644
index 0000000000..438850211c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-122.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-122
+description: >
+ Object.create - one property in 'Properties' is an Arguments
+ object which implements its own [[Get]] method to access the
+ 'configurable' property (8.10.5 step 4.a)
+---*/
+
+var argObj = (function() {
+ return arguments;
+})();
+
+argObj.configurable = true;
+
+var newObj = Object.create({}, {
+ prop: argObj
+});
+var result1 = newObj.hasOwnProperty("prop");
+delete newObj.prop;
+var result2 = newObj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-124.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-124.js
new file mode 100644
index 0000000000..2942ca1100
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-124.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-124
+description: >
+ Object.create - one property in 'Properties' is the global object
+ that uses Object's [[Get]] method to access the 'configurable'
+ property (8.10.5 step 4.a)
+---*/
+
+this.configurable = true;
+
+var newObj = Object.create({}, {
+ prop: this
+});
+
+var result1 = newObj.hasOwnProperty("prop");
+delete newObj.prop;
+var result2 = newObj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-125.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-125.js
new file mode 100644
index 0000000000..17eef5947c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-125.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-125
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is undefined (8.10.5 step 4.b)
+includes: [propertyHelper.js]
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: undefined
+ }
+});
+
+
+assert(newObj.hasOwnProperty("prop"));
+verifyNotConfigurable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-126.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-126.js
new file mode 100644
index 0000000000..489b57cf3e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-126.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-126
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is null (8.10.5 step 4.b)
+includes: [propertyHelper.js]
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: null
+ }
+});
+
+assert(newObj.hasOwnProperty("prop"));
+verifyNotConfigurable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-127.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-127.js
new file mode 100644
index 0000000000..d497a08093
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-127.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-127
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is true (8.10.5 step 4.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: true
+ }
+});
+
+var beforeDeleted = newObj.hasOwnProperty("prop");
+
+delete newObj.prop;
+
+var afterDeleted = newObj.hasOwnProperty("prop");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-128.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-128.js
new file mode 100644
index 0000000000..77cb2171ae
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-128.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-128
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is false (8.10.5 step 4.b)
+includes: [propertyHelper.js]
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: false
+ }
+});
+
+assert(newObj.hasOwnProperty("prop"));
+verifyNotConfigurable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-129.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-129.js
new file mode 100644
index 0000000000..1cf82338ee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-129.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-129
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is 0 (8.10.5 step 4.b)
+includes: [propertyHelper.js]
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: 0
+ }
+});
+
+assert(newObj.hasOwnProperty("prop"));
+verifyNotConfigurable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-13.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-13.js
new file mode 100644
index 0000000000..115e3764bd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-13.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-13
+description: >
+ Object.create - argument 'Properties' is the JSON object (15.2.3.7
+ step 2)
+---*/
+
+var result = false;
+
+Object.defineProperty(JSON, "prop", {
+ get: function() {
+ result = (this === JSON);
+ return {};
+ },
+ enumerable: true,
+ configurable: true
+});
+
+var newObj = Object.create({}, JSON);
+
+assert(result, 'result !== true');
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-130.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-130.js
new file mode 100644
index 0000000000..30855dd7c6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-130.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-130
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is +0 (8.10.5 step 4.b)
+includes: [propertyHelper.js]
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: +0
+ }
+});
+
+
+assert(newObj.hasOwnProperty("prop"));
+verifyNotConfigurable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-131.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-131.js
new file mode 100644
index 0000000000..a27ff05e7e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-131.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-131
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is -0 (8.10.5 step 4.b)
+includes: [propertyHelper.js]
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: -0
+ }
+});
+
+assert(newObj.hasOwnProperty("prop"));
+verifyNotConfigurable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-132.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-132.js
new file mode 100644
index 0000000000..0f59a2aa10
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-132.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-132
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is NaN (8.10.5 step 4.b)
+includes: [propertyHelper.js]
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: NaN
+ }
+});
+
+assert(newObj.hasOwnProperty("prop"));
+verifyNotConfigurable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-133.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-133.js
new file mode 100644
index 0000000000..994628f470
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-133.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-133
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is a positive number (8.10.5 step 4.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: 123
+ }
+});
+
+var beforeDeleted = newObj.hasOwnProperty("prop");
+
+delete newObj.prop;
+
+var afterDeleted = newObj.hasOwnProperty("prop");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-134.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-134.js
new file mode 100644
index 0000000000..ba54db1dd5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-134.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-134
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is a negative number (8.10.5 step 4.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: -123
+ }
+});
+
+var beforeDeleted = newObj.hasOwnProperty("prop");
+
+delete newObj.prop;
+
+var afterDeleted = newObj.hasOwnProperty("prop");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-135.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-135.js
new file mode 100644
index 0000000000..d6aef6ae19
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-135.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-135
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is an empty string (8.10.5 step 4.b)
+includes: [propertyHelper.js]
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: ""
+ }
+});
+
+assert(newObj.hasOwnProperty("prop"));
+verifyNotConfigurable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-136.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-136.js
new file mode 100644
index 0000000000..50401cc845
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-136.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-136
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is a non-empty string (8.10.5 step 4.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: "abc"
+ }
+});
+
+var beforeDeleted = newObj.hasOwnProperty("prop");
+
+delete newObj.prop;
+
+var afterDeleted = newObj.hasOwnProperty("prop");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-137.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-137.js
new file mode 100644
index 0000000000..850059b6f8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-137.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-137
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is a Function object (8.10.5 step 4.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: function() {}
+ }
+});
+
+var beforeDeleted = newObj.hasOwnProperty("prop");
+
+delete newObj.prop;
+
+var afterDeleted = newObj.hasOwnProperty("prop");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-138.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-138.js
new file mode 100644
index 0000000000..7ba9ff514e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-138.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-138
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is an Array object (8.10.5 step 4.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: []
+ }
+});
+
+var beforeDeleted = newObj.hasOwnProperty("prop");
+
+delete newObj.prop;
+
+var afterDeleted = newObj.hasOwnProperty("prop");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-139.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-139.js
new file mode 100644
index 0000000000..722d99ec58
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-139.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-139
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is a String object (8.10.5 step 4.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: new String("abc")
+ }
+});
+
+var beforeDeleted = newObj.hasOwnProperty("prop");
+
+delete newObj.prop;
+
+var afterDeleted = newObj.hasOwnProperty("prop");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-14.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-14.js
new file mode 100644
index 0000000000..6b958e0a98
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-14.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-14
+description: >
+ Object.create - argument 'Properties' is an Error object (15.2.3.7
+ step 2)
+---*/
+
+var props = new Error("test");
+var result = false;
+
+(Object.getOwnPropertyNames(props)).forEach(function(name) {
+ props[name] = {
+ value: 11,
+ configurable: true
+ }
+});
+
+Object.defineProperty(props, "prop15_2_3_5_4_14", {
+ get: function() {
+ result = this instanceof Error;
+ return {};
+ },
+ enumerable: true
+});
+var newObj = Object.create({}, props);
+
+assert(result, 'result !== true');
+assert(newObj.hasOwnProperty("prop15_2_3_5_4_14"), 'newObj.hasOwnProperty("prop15_2_3_5_4_14") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-140.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-140.js
new file mode 100644
index 0000000000..03933357ac
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-140.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-140
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is a Boolean object (8.10.5 step 4.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: new Boolean(true)
+ }
+});
+
+var beforeDeleted = newObj.hasOwnProperty("prop");
+
+delete newObj.prop;
+
+var afterDeleted = newObj.hasOwnProperty("prop");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-141.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-141.js
new file mode 100644
index 0000000000..6b4c8f931b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-141.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-141
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is a Number object (8.10.5 step 4.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: new Number(123)
+ }
+});
+
+var beforeDeleted = newObj.hasOwnProperty("prop");
+
+delete newObj.prop;
+
+var afterDeleted = newObj.hasOwnProperty("prop");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-142.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-142.js
new file mode 100644
index 0000000000..e8ad92b856
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-142.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-142
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is the Math object (8.10.5 step 4.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: Math
+ }
+});
+
+var beforeDeleted = newObj.hasOwnProperty("prop");
+
+delete newObj.prop;
+
+var afterDeleted = newObj.hasOwnProperty("prop");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-143.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-143.js
new file mode 100644
index 0000000000..59dd6d2083
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-143.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-143
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is a Date object (8.10.5 step 4.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: new Date()
+ }
+});
+
+var beforeDeleted = newObj.hasOwnProperty("prop");
+
+delete newObj.prop;
+
+var afterDeleted = newObj.hasOwnProperty("prop");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-144.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-144.js
new file mode 100644
index 0000000000..6e63c36b8f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-144.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-144
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is a RegExp object (8.10.5 step 4.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: new RegExp()
+ }
+});
+
+var beforeDeleted = newObj.hasOwnProperty("prop");
+
+delete newObj.prop;
+
+var afterDeleted = newObj.hasOwnProperty("prop");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-145.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-145.js
new file mode 100644
index 0000000000..325ef3f4bd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-145.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-145
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is the JSON object (8.10.5 step 4.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: JSON
+ }
+});
+
+var beforeDeleted = newObj.hasOwnProperty("prop");
+
+delete newObj.prop;
+
+var afterDeleted = newObj.hasOwnProperty("prop");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-146.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-146.js
new file mode 100644
index 0000000000..0fad1df18d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-146.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-146
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is an Error object (8.10.5 step 4.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: new Error()
+ }
+});
+
+var beforeDeleted = newObj.hasOwnProperty("prop");
+
+delete newObj.prop;
+
+var afterDeleted = newObj.hasOwnProperty("prop");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-147.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-147.js
new file mode 100644
index 0000000000..97e0e71335
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-147.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-147
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is an Arguments object (8.10.5 step 4.b)
+---*/
+
+var argObj = (function() {
+ return arguments;
+})();
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: argObj
+ }
+});
+
+var beforeDeleted = newObj.hasOwnProperty("prop");
+
+delete newObj.prop;
+
+var afterDeleted = newObj.hasOwnProperty("prop");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-149.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-149.js
new file mode 100644
index 0000000000..1798b3ec5e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-149.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-149
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is the global object (8.10.5 step 4.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: this
+ }
+});
+
+var beforeDeleted = newObj.hasOwnProperty("prop");
+
+delete newObj.prop;
+
+var afterDeleted = newObj.hasOwnProperty("prop");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-15.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-15.js
new file mode 100644
index 0000000000..b6e2ca0583
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-15.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-15
+description: >
+ Object.create - argument 'Properties' is the Aguments object
+ (15.2.3.7 step 2)
+---*/
+
+var result = false;
+
+var argObj = (function() {
+ return arguments;
+})();
+
+Object.defineProperty(argObj, "prop", {
+ get: function() {
+ result = ('[object Arguments]' === Object.prototype.toString.call(this));
+ return {};
+ },
+ enumerable: true
+});
+
+var newObj = Object.create({}, argObj);
+
+assert(result, 'result !== true');
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-150.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-150.js
new file mode 100644
index 0000000000..1f5d186a04
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-150.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-150
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is a string (value is 'false') which is treated as
+ the value true (8.10.5 step 4.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: "false"
+ }
+});
+
+var beforeDeleted = newObj.hasOwnProperty("prop");
+
+delete newObj.prop;
+
+var afterDeleted = newObj.hasOwnProperty("prop");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-151.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-151.js
new file mode 100644
index 0000000000..918e4b39f5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-151.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-151
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is new Boolean(false) which is treated as the value
+ true (8.10.5 step 4.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: new Boolean(false)
+ }
+});
+
+var beforeDeleted = newObj.hasOwnProperty("prop");
+
+delete newObj.prop;
+
+var afterDeleted = newObj.hasOwnProperty("prop");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-152.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-152.js
new file mode 100644
index 0000000000..ed57f23303
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-152.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-152
+description: >
+ Object.create - 'value' property of one property in 'Properties'
+ is present (8.10.5 step 5)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ value: 100
+ }
+});
+
+assert.sameValue(newObj.prop, 100, 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-153.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-153.js
new file mode 100644
index 0000000000..7fabb43bcd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-153.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-153
+description: >
+ Object.create - 'value' property of one property in 'Properties'
+ is not present (8.10.5 step 5)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {}
+});
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+assert.sameValue(typeof(newObj.prop), "undefined", 'typeof (newObj.prop)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-154.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-154.js
new file mode 100644
index 0000000000..8109c43b5a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-154.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-154
+description: >
+ Object.create - 'value' property of one property in 'Properties'
+ is own data property (8.10.5 step 5.a)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ value: "ownDataProperty"
+ }
+});
+
+assert.sameValue(newObj.prop, "ownDataProperty", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-155.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-155.js
new file mode 100644
index 0000000000..a4a0381ee3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-155.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-155
+description: >
+ Object.create - 'value' property of one property in 'Properties'
+ is an inherited data property (8.10.5 step 5.a)
+---*/
+
+var proto = {
+ value: "inheritedDataProperty"
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var descObj = new ConstructFun();
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert.sameValue(newObj.prop, "inheritedDataProperty", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-156.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-156.js
new file mode 100644
index 0000000000..b5ea7390f3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-156.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-156
+description: >
+ Object.create - 'value' property of one property in 'Properties'
+ is own data property that overrides an inherited data property
+ (8.10.5 step 5.a)
+---*/
+
+var proto = {
+ value: "inheritedDataProperty"
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var descObj = new ConstructFun();
+
+descObj.value = "ownDataProperty";
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert.sameValue(newObj.prop, "ownDataProperty", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-157.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-157.js
new file mode 100644
index 0000000000..ebc6ba2f33
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-157.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-157
+description: >
+ Object.create - 'value' property of one property in 'Properties'
+ is own data property that overrides an inherited accessor property
+ (8.10.5 step 5.a)
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "value", {
+ get: function() {
+ return "inheritedAccessorProperty";
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var descObj = new ConstructFun();
+
+Object.defineProperty(descObj, "value", {
+ get: function() {
+ return "ownDataProperty";
+ }
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert.sameValue(newObj.prop, "ownDataProperty", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-158.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-158.js
new file mode 100644
index 0000000000..f61c1b255b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-158.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-158
+description: >
+ Object.create - 'value' property of one property in 'Properties'
+ is own accessor property (8.10.5 step 5.a)
+---*/
+
+var descObj = {};
+
+Object.defineProperty(descObj, "value", {
+ get: function() {
+ return "ownAccessorProperty";
+ }
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert.sameValue(newObj.prop, "ownAccessorProperty", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-159.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-159.js
new file mode 100644
index 0000000000..0791fc477d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-159.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-159
+description: >
+ Object.create - 'value' property of one property in 'Properties'
+ is an inherited accessor property (8.10.5 step 5.a)
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "value", {
+ get: function() {
+ return "inheritedAccessorProperty";
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var descObj = new ConstructFun();
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert.sameValue(newObj.prop, "inheritedAccessorProperty", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-16.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-16.js
new file mode 100644
index 0000000000..c52c86167b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-16.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-16
+description: >
+ Object.create - own enumerable data property in 'Properties' is
+ defined in 'obj' (15.2.3.7 step 3)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {}
+});
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-160.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-160.js
new file mode 100644
index 0000000000..213b7732ac
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-160.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-160
+description: >
+ Object.create - 'value' property of one property in 'Properties'
+ is own accessor property that overrides an inherited data property
+ (8.10.5 step 5.a)
+---*/
+
+var proto = {
+ value: "inheritedDataProperty"
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var descObj = new ConstructFun();
+
+Object.defineProperty(descObj, "value", {
+ get: function() {
+ return "ownAccessorProperty";
+ }
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert.sameValue(newObj.prop, "ownAccessorProperty", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-161.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-161.js
new file mode 100644
index 0000000000..558ddbd15f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-161.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-161
+description: >
+ Object.create - 'value' property of one property in 'Properties'
+ is own accessor property that overrides an inherited accessor
+ property (8.10.5 step 5.a)
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "value", {
+ get: function() {
+ return "inheritedAccessorProperty";
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var descObj = new ConstructFun();
+
+Object.defineProperty(descObj, "value", {
+ get: function() {
+ return "ownAccessorProperty";
+ }
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert.sameValue(newObj.prop, "ownAccessorProperty", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-162.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-162.js
new file mode 100644
index 0000000000..55b4241c0f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-162.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-162
+description: >
+ Object.create - 'value' property of one property in 'Properties'
+ is own accessor property without a get function (8.10.5 step 5.a)
+---*/
+
+var descObj = {};
+
+Object.defineProperty(descObj, "value", {
+ set: function() {}
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+assert.sameValue(typeof(newObj.prop), "undefined", 'typeof (newObj.prop)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-163.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-163.js
new file mode 100644
index 0000000000..5f08cac138
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-163.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-163
+description: >
+ Object.create - 'value' property of one property in 'Properties'
+ is own accessor property without a get function, which overrides
+ an inherited accessor property (8.10.5 step 5.a)
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "value", {
+ get: function() {
+ return "inheritedAccessorProperty";
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var descObj = new ConstructFun();
+
+Object.defineProperty(descObj, "value", {
+ set: function() {}
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+assert.sameValue(typeof(newObj.prop), "undefined", 'typeof (newObj.prop)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-164.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-164.js
new file mode 100644
index 0000000000..459eb5b8fb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-164.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-164
+description: >
+ Object.create - 'value' property of one property in 'Properties'
+ is an inherited accessor property without a get function (8.10.5
+ step 5.a)
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "value", {
+ set: function() {}
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var descObj = new ConstructFun();
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+assert.sameValue(typeof(newObj.prop), "undefined", 'typeof (newObj.prop)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-165.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-165.js
new file mode 100644
index 0000000000..bad24248dd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-165.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-165
+description: >
+ Object.create - one property in 'Properties' is a Function object
+ which implements its own [[Get]] method to access the 'value'
+ property (8.10.5 step 5.a)
+---*/
+
+var Func = function(a, b) {
+ return a + b;
+};
+
+var fun = new Func();
+fun.value = "FunValue";
+
+var newObj = Object.create({}, {
+ prop: fun
+});
+
+assert.sameValue(newObj.prop, "FunValue", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-166.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-166.js
new file mode 100644
index 0000000000..6e3abcb352
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-166.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-166
+description: >
+ Object.create - one property in 'Properties' is an Array object
+ that uses Object's [[Get]] method to access the 'value' property
+ (8.10.5 step 5.a)
+---*/
+
+var arr = [1, 2, 3];
+
+arr.value = "ArrValue";
+
+var newObj = Object.create({}, {
+ prop: arr
+});
+
+assert.sameValue(newObj.prop, "ArrValue", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-167.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-167.js
new file mode 100644
index 0000000000..3c3b9af30a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-167.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-167
+description: >
+ Object.create - one property in 'Properties' is a String object
+ that uses Object's [[Get]] method to access the 'value' property
+ (8.10.5 step 5.a)
+---*/
+
+var str = new String("abc");
+
+str.value = "StrValue";
+
+var newObj = Object.create({}, {
+ prop: str
+});
+
+assert.sameValue(newObj.prop, "StrValue", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-168.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-168.js
new file mode 100644
index 0000000000..620fe5180c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-168.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-168
+description: >
+ Object.create - one property in 'Properties' is a Boolean object
+ that uses Object's [[Get]] method to access the 'value' property
+ (8.10.5 step 5.a)
+---*/
+
+var booleanObj = new Boolean(false);
+
+booleanObj.value = "BooleanValue";
+
+var newObj = Object.create({}, {
+ prop: booleanObj
+});
+
+assert.sameValue(newObj.prop, "BooleanValue", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-169.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-169.js
new file mode 100644
index 0000000000..a510eadd09
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-169.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-169
+description: >
+ Object.create - one property in 'Properties' is a Number object
+ that uses Object's [[Get]] method to access the 'value' property
+ (8.10.5 step 5.a)
+---*/
+
+var numObj = new Number(123);
+
+numObj.value = "NumValue";
+
+var newObj = Object.create({}, {
+ prop: numObj
+});
+
+assert.sameValue(newObj.prop, "NumValue", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-17.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-17.js
new file mode 100644
index 0000000000..f9970d61e8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-17.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-17
+description: >
+ Object.create - own data property in 'Properties' which is not
+ enumerable is not defined in 'obj' (15.2.3.7 step 3)
+---*/
+
+var props = {};
+Object.defineProperty(props, "prop", {
+ value: {},
+ enumerable: false
+});
+var newObj = Object.create({}, props);
+
+assert.sameValue(newObj.hasOwnProperty("prop"), false, 'newObj.hasOwnProperty("prop")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-170.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-170.js
new file mode 100644
index 0000000000..5ef1e5944b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-170.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-170
+description: >
+ Object.create - one property in 'Properties' is the Math object
+ that uses Object's [[Get]] method to access the 'value' property
+ (8.10.5 step 5.a)
+---*/
+
+Math.value = "MathValue";
+
+var newObj = Object.create({}, {
+ prop: Math
+});
+
+assert.sameValue(newObj.prop, "MathValue", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-171.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-171.js
new file mode 100644
index 0000000000..2c91ba8f1d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-171.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-171
+description: >
+ Object.create - one property in 'Properties' is a Date object that
+ uses Object's [[Get]] method to access the 'value' property
+ (8.10.5 step 5.a)
+---*/
+
+var dateObj = new Date();
+
+dateObj.value = "DateValue";
+
+var newObj = Object.create({}, {
+ prop: dateObj
+});
+
+assert.sameValue(newObj.prop, "DateValue", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-172.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-172.js
new file mode 100644
index 0000000000..ef7f8e0b11
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-172.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-172
+description: >
+ Object.create - one property in 'Properties' is a RegExp object
+ that uses Object's [[Get]] method to access the 'value' property
+ (8.10.5 step 5.a)
+---*/
+
+var regObj = new RegExp();
+
+regObj.value = "RegExpValue";
+
+var newObj = Object.create({}, {
+ prop: regObj
+});
+
+assert.sameValue(newObj.prop, "RegExpValue", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-173.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-173.js
new file mode 100644
index 0000000000..b88aad265d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-173.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-173
+description: >
+ Object.create - one property in 'Properties' is the JSON object
+ that uses Object's [[Get]] method to access the 'value' property
+ (8.10.5 step 5.a)
+---*/
+
+JSON.value = "JSONValue";
+
+var newObj = Object.create({}, {
+ prop: JSON
+});
+
+assert.sameValue(newObj.prop, "JSONValue", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-174.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-174.js
new file mode 100644
index 0000000000..670aaeb7da
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-174.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-174
+description: >
+ Object.create - one property in 'Properties' is an Error object
+ that uses Object's [[Get]] method to access the 'value' property
+ (8.10.5 step 5.a)
+---*/
+
+var errorObj = new Error();
+
+errorObj.value = "ErrorValue";
+
+var newObj = Object.create({}, {
+ prop: errorObj
+});
+
+assert.sameValue(newObj.prop, "ErrorValue", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-175.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-175.js
new file mode 100644
index 0000000000..7dfc4b1d51
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-175.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-175
+description: >
+ Object.create - one property in 'Properties' is an Arguments
+ object which implements its own [[Get]] method to access the
+ 'value' property (8.10.5 step 5.a)
+---*/
+
+var argObj = (function() {
+ return arguments;
+})();
+
+argObj.value = "ArgValue";
+
+var newObj = Object.create({}, {
+ prop: argObj
+});
+
+assert.sameValue(newObj.prop, "ArgValue", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-177.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-177.js
new file mode 100644
index 0000000000..47224e6bb3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-177.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-177
+description: >
+ Object.create - one property in 'Properties' is the global object
+ that uses Object's [[Get]] method to access the 'value' property
+ (8.10.5 step 5.a)
+---*/
+
+this.value = "GlobalValue";
+
+var newObj = Object.create({}, {
+ prop: this
+});
+
+assert.sameValue(newObj.prop, "GlobalValue", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-178.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-178.js
new file mode 100644
index 0000000000..12909a5a53
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-178.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-178
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is true (8.10.5 step 6)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: true
+ }
+});
+
+var beforeWrite = ((newObj.hasOwnProperty("prop") && typeof(newObj.prop) === "undefined"));
+
+newObj.prop = "isWritable";
+
+var afterWrite = (newObj.prop === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-179.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-179.js
new file mode 100644
index 0000000000..ceb1884864
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-179.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-179
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is not present (8.10.5 step 6)
+includes: [propertyHelper.js]
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ value: 100
+ }
+});
+
+assert.sameValue(newObj.prop, 100);
+verifyNotWritable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-18.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-18.js
new file mode 100644
index 0000000000..d2f40e6bb7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-18.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-18
+description: >
+ Object.create - an enumerable inherited data property in
+ 'Properties' is not defined in 'obj' (15.2.3.7 step 3)
+---*/
+
+var proto = {};
+
+proto.prop = {};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var child = new ConstructFun();
+
+var newObj = Object.create({}, child);
+
+assert.sameValue(newObj.hasOwnProperty("prop"), false, 'newObj.hasOwnProperty("prop")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-180.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-180.js
new file mode 100644
index 0000000000..636acd7cb1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-180.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-180
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is own data property (8.10.5 step 6.a)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: true
+ }
+});
+
+var beforeWrite = (newObj.hasOwnProperty("prop") && typeof(newObj.prop) === "undefined");
+
+newObj.prop = "isWritable";
+
+var afterWrite = (newObj.prop === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-181.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-181.js
new file mode 100644
index 0000000000..b5f479520c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-181.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-181
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is an inherited data property (8.10.5 step 6.a)
+---*/
+
+var proto = {
+ writable: true
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var descObj = new ConstructFun();
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+var beforeWrite = (newObj.hasOwnProperty("prop") && typeof(newObj.prop) === "undefined");
+
+newObj.prop = "isWritable";
+
+var afterWrite = (newObj.prop === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-182.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-182.js
new file mode 100644
index 0000000000..6411c8c6ac
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-182.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-182
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is own data property that overrides an inherited data
+ property (8.10.5 step 6.a)
+---*/
+
+var proto = {
+ writable: false
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var descObj = new ConstructFun();
+
+descObj.writable = true;
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+var beforeWrite = (newObj.hasOwnProperty("prop") && typeof(newObj.prop) === "undefined");
+
+newObj.prop = "isWritable";
+
+var afterWrite = (newObj.prop === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-183.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-183.js
new file mode 100644
index 0000000000..5b20b6b489
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-183.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-183
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is own data property that overrides an inherited
+ accessor property (8.10.5 step 6.a)
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "writable", {
+ get: function() {
+ return false;
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var descObj = new ConstructFun();
+
+Object.defineProperty(descObj, "writable", {
+ value: true
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+var beforeWrite = (newObj.hasOwnProperty("prop") && typeof(newObj.prop) === "undefined");
+
+newObj.prop = "isWritable";
+
+var afterWrite = (newObj.prop === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-184.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-184.js
new file mode 100644
index 0000000000..8730b117f0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-184.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-184
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is own accessor property (8.10.5 step 6.a)
+---*/
+
+var descObj = {};
+
+Object.defineProperty(descObj, "writable", {
+ get: function() {
+ return true;
+ }
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+var beforeWrite = (newObj.hasOwnProperty("prop") && typeof(newObj.prop) === "undefined");
+
+newObj.prop = "isWritable";
+
+var afterWrite = (newObj.prop === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-185.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-185.js
new file mode 100644
index 0000000000..7803262e89
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-185.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-185
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is an inherited accessor property (8.10.5 step 6.a)
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "writable", {
+ get: function() {
+ return true;
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var descObj = new ConstructFun();
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+var beforeWrite = (newObj.hasOwnProperty("prop") && typeof(newObj.prop) === "undefined");
+
+newObj.prop = "isWritable";
+
+var afterWrite = (newObj.prop === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-186.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-186.js
new file mode 100644
index 0000000000..5ca6b121a6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-186.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-186
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is own accessor property that overrides an inherited
+ data property (8.10.5 step 6.a)
+---*/
+
+var proto = {
+ writable: false
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var descObj = new ConstructFun();
+
+Object.defineProperty(descObj, "writable", {
+ get: function() {
+ return true;
+ }
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+var beforeWrite = (newObj.hasOwnProperty("prop") && typeof(newObj.prop) === "undefined");
+
+newObj.prop = "isWritable";
+
+var afterWrite = (newObj.prop === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-187.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-187.js
new file mode 100644
index 0000000000..b9dc52e885
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-187.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-187
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is own accessor property that overrides an inherited
+ accessor property (8.10.5 step 6.a)
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "writable", {
+ get: function() {
+ return false;
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var descObj = new ConstructFun();
+
+Object.defineProperty(descObj, "writable", {
+ get: function() {
+ return true;
+ }
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+var beforeWrite = (newObj.hasOwnProperty("prop") && typeof(newObj.prop) === "undefined");
+
+newObj.prop = "isWritable";
+
+var afterWrite = (newObj.prop === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-188.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-188.js
new file mode 100644
index 0000000000..91d8c80a52
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-188.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-188
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is own accessor property without a get function
+ (8.10.5 step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var descObj = {
+ value: 100
+};
+
+Object.defineProperty(descObj, "writable", {
+ set: function() {}
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert.sameValue(newObj.prop, 100);
+verifyNotWritable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-189.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-189.js
new file mode 100644
index 0000000000..13f8a80bd2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-189.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-189
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is own accessor property without a get function,
+ which overrides an inherited accessor property (8.10.5 step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "writable", {
+ get: function() {
+ return true;
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var descObj = new ConstructFun();
+
+Object.defineProperty(descObj, "writable", {
+ set: function() {}
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert(newObj.hasOwnProperty("prop"))
+assert.sameValue(typeof(newObj.prop), "undefined");
+verifyNotWritable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-19.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-19.js
new file mode 100644
index 0000000000..184035110f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-19.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-19
+description: >
+ Object.create - own enumerable accessor property in 'Properties'
+ is defined in 'obj' (15.2.3.7 step 3)
+---*/
+
+var props = {};
+
+Object.defineProperty(props, "prop", {
+ get: function() {
+ return {};
+ },
+ enumerable: true
+});
+
+var newObj = Object.create({}, props);
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-190.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-190.js
new file mode 100644
index 0000000000..039dd3b032
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-190.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-190
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is an inherited accessor property without a get
+ function (8.10.5 step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var proto = {
+ value: 100
+};
+
+Object.defineProperty(proto, "writable", {
+ set: function() {}
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var descObj = new ConstructFun();
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert.sameValue(newObj.prop, 100);
+verifyNotWritable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-191.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-191.js
new file mode 100644
index 0000000000..3dbadeb744
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-191.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-191
+description: >
+ Object.create - one property in 'Properties' is a Function object
+ which implements its own [[Get]] method to access the 'writable'
+ property (8.10.5 step 6.a)
+---*/
+
+var Func = function(a, b) {
+ return a + b;
+};
+
+var fun = new Func();
+fun.writable = true;
+
+var newObj = Object.create({}, {
+ prop: fun
+});
+
+var beforeWrite = (newObj.hasOwnProperty("prop") && typeof(newObj.prop) === "undefined");
+
+newObj.prop = "isWritable";
+
+var afterWrite = (newObj.prop === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-192.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-192.js
new file mode 100644
index 0000000000..6fe4fba7ff
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-192.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-192
+description: >
+ Object.create - one property in 'Properties' is an Array object
+ that uses Object's [[Get]] method to access the 'writable'
+ property (8.10.5 step 6.a)
+---*/
+
+var array = [1, 2, 3];
+
+array.writable = true;
+
+var newObj = Object.create({}, {
+ prop: array
+});
+
+var beforeWrite = (newObj.hasOwnProperty("prop") && typeof(newObj.prop) === "undefined");
+
+newObj.prop = "isWritable";
+
+var afterWrite = (newObj.prop === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-193.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-193.js
new file mode 100644
index 0000000000..47240c4dd0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-193.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-193
+description: >
+ Object.create - one property in 'Properties' is a String object
+ that uses Object's [[Get]] method to access the 'writable'
+ property (8.10.5 step 6.a)
+---*/
+
+var str = new String("abc");
+
+str.writable = true;
+
+var newObj = Object.create({}, {
+ prop: str
+});
+
+var beforeWrite = (newObj.hasOwnProperty("prop") && typeof(newObj.prop) === "undefined");
+
+newObj.prop = "isWritable";
+
+var afterWrite = (newObj.prop === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-194.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-194.js
new file mode 100644
index 0000000000..061db08d86
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-194.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-194
+description: >
+ Object.create - one property in 'Properties' is a Boolean object
+ that uses Object's [[Get]] method to access the 'writable'
+ property (8.10.5 step 6.a)
+---*/
+
+var booleanObj = new Boolean(false);
+
+booleanObj.writable = true;
+
+var newObj = Object.create({}, {
+ prop: booleanObj
+});
+
+var beforeWrite = (newObj.hasOwnProperty("prop") && typeof(newObj.prop) === "undefined");
+
+newObj.prop = "isWritable";
+
+var afterWrite = (newObj.prop === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-195.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-195.js
new file mode 100644
index 0000000000..ba44b9ce1b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-195.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-195
+description: >
+ Object.create - one property in 'Properties' is a Number object
+ that uses Object's [[Get]] method to access the 'writable'
+ property (8.10.5 step 6.a)
+---*/
+
+var numObj = new Number(123);
+
+numObj.writable = true;
+
+var newObj = Object.create({}, {
+ prop: numObj
+});
+
+var beforeWrite = (newObj.hasOwnProperty("prop") && typeof(newObj.prop) === "undefined");
+
+newObj.prop = "isWritable";
+
+var afterWrite = (newObj.prop === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-196.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-196.js
new file mode 100644
index 0000000000..126fd4d2f6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-196.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-196
+description: >
+ Object.create - one property in 'Properties' is the Math object
+ that uses Object's [[Get]] method to access the 'writable'
+ property (8.10.5 step 6.a)
+---*/
+
+Math.writable = true;
+
+var newObj = Object.create({}, {
+ prop: Math
+});
+
+var beforeWrite = (newObj.hasOwnProperty("prop") && typeof(newObj.prop) === "undefined");
+
+newObj.prop = "isWritable";
+
+var afterWrite = (newObj.prop === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-197.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-197.js
new file mode 100644
index 0000000000..f2caa7473c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-197.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-197
+description: >
+ Object.create - one property in 'Properties' is a Date object that
+ uses Object's [[Get]] method to access the 'writable' property
+ (8.10.5 step 6.a)
+---*/
+
+var dateObj = new Date();
+
+dateObj.writable = true;
+
+var newObj = Object.create({}, {
+ prop: dateObj
+});
+
+var beforeWrite = (newObj.hasOwnProperty("prop") && typeof(newObj.prop) === "undefined");
+
+newObj.prop = "isWritable";
+
+var afterWrite = (newObj.prop === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-198.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-198.js
new file mode 100644
index 0000000000..de7de58c8c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-198.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-198
+description: >
+ Object.create - one property in 'Properties' is a RegExp object
+ that uses Object's [[Get]] method to access the 'writable'
+ property (8.10.5 step 6.a)
+---*/
+
+var regObj = new RegExp();
+
+regObj.writable = true;
+
+var newObj = Object.create({}, {
+ prop: regObj
+});
+
+var beforeWrite = (newObj.hasOwnProperty("prop") && typeof(newObj.prop) === "undefined");
+
+newObj.prop = "isWritable";
+
+var afterWrite = (newObj.prop === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-199.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-199.js
new file mode 100644
index 0000000000..d63a204ed6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-199.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-199
+description: >
+ Object.create - one property in 'Properties' is the JSON object
+ that uses Object's [[Get]] method to access the 'writable'
+ property (8.10.5 step 6.a)
+---*/
+
+JSON.writable = true;
+
+var newObj = Object.create({}, {
+ prop: JSON
+});
+
+var beforeWrite = (newObj.hasOwnProperty("prop") && typeof(newObj.prop) === "undefined");
+
+newObj.prop = "isWritable";
+
+var afterWrite = (newObj.prop === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-2.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-2.js
new file mode 100644
index 0000000000..a2a0f5181f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-2.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-2
+description: Object.create - 'Properties' is undefined
+---*/
+
+var newObj = Object.create({}, undefined);
+
+assert((newObj instanceof Object), '(newObj instanceof Object) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-20.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-20.js
new file mode 100644
index 0000000000..e74f81b160
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-20.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-20
+description: >
+ Object.create - own accessor property in 'Properties' which is not
+ enumerable is not defined in 'obj' (15.2.3.7 step 3)
+---*/
+
+var props = {};
+
+Object.defineProperty(props, "prop", {
+ get: function() {
+ return {};
+ },
+ enumerable: false
+});
+
+var newObj = Object.create({}, props);
+
+assert.sameValue(newObj.hasOwnProperty("prop"), false, 'newObj.hasOwnProperty("prop")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-200.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-200.js
new file mode 100644
index 0000000000..894b392422
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-200.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-200
+description: >
+ Object.create - one property in 'Properties' is an Error object
+ that uses Object's [[Get]] method to access the 'writable'
+ property (8.10.5 step 6.a)
+---*/
+
+var errorObj = new Error();
+
+errorObj.writable = true;
+
+var newObj = Object.create({}, {
+ prop: errorObj
+});
+
+var beforeWrite = (newObj.hasOwnProperty("prop") && typeof(newObj.prop) === "undefined");
+
+newObj.prop = "isWritable";
+
+var afterWrite = (newObj.prop === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-201.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-201.js
new file mode 100644
index 0000000000..f1a3bc5ecb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-201.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-201
+description: >
+ Object.create - one property in 'Properties' is an Arguments
+ object which implements its own [[Get]] method to access the
+ 'writable' property (8.10.5 step 6.a)
+---*/
+
+var argObj = (function() {
+ return arguments;
+})();
+
+argObj.writable = true;
+
+var newObj = Object.create({}, {
+ prop: argObj
+});
+
+var beforeWrite = (newObj.hasOwnProperty("prop") && typeof(newObj.prop) === "undefined");
+
+newObj.prop = "isWritable";
+
+var afterWrite = (newObj.prop === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-203.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-203.js
new file mode 100644
index 0000000000..71a827d470
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-203.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-203
+description: >
+ Object.create - one property in 'Properties' is the global object
+ that uses Object's [[Get]] method to access the 'writable'
+ property (8.10.5 step 6.a)
+---*/
+
+this.writable = true;
+
+var newObj = Object.create({}, {
+ prop: this
+});
+
+var beforeWrite = (newObj.hasOwnProperty("prop") && typeof(newObj.prop) === "undefined");
+
+newObj.prop = "isWritable";
+
+var afterWrite = (newObj.prop === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-204.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-204.js
new file mode 100644
index 0000000000..17993ba415
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-204.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-204
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is undefined (8.10.5 step 6.b)
+includes: [propertyHelper.js]
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: undefined
+ }
+});
+
+assert(newObj.hasOwnProperty("prop"));
+assert.sameValue(typeof newObj.prop, "undefined");
+verifyNotWritable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-205.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-205.js
new file mode 100644
index 0000000000..7e414aa5dd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-205.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-205
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is null (8.10.5 step 6.b)
+includes: [propertyHelper.js]
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: null
+ }
+});
+
+assert(newObj.hasOwnProperty("prop"));
+assert.sameValue(typeof newObj.prop, "undefined");
+verifyNotWritable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-206.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-206.js
new file mode 100644
index 0000000000..48835ea81a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-206.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-206
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is true (8.10.5 step 6.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: true
+ }
+});
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = 121;
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(newObj.prop, 121, 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-207.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-207.js
new file mode 100644
index 0000000000..40513388d8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-207.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-207
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is false (8.10.5 step 6.b)
+includes: [propertyHelper.js]
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: false
+ }
+});
+
+assert(newObj.hasOwnProperty("prop"));
+assert.sameValue(typeof newObj.prop, "undefined");
+verifyNotWritable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-208.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-208.js
new file mode 100644
index 0000000000..864af6abf5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-208.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-208
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is 0 (8.10.5 step 6.b)
+includes: [propertyHelper.js]
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: 0
+ }
+});
+
+assert(newObj.hasOwnProperty("prop"));
+assert.sameValue(typeof newObj.prop, "undefined");
+verifyNotWritable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-209.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-209.js
new file mode 100644
index 0000000000..057ad51efe
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-209.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-209
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is +0 (8.10.5 step 6.b)
+includes: [propertyHelper.js]
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: +0
+ }
+});
+
+assert(newObj.hasOwnProperty("prop"));
+assert.sameValue(typeof newObj.prop, "undefined");
+verifyNotWritable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-21.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-21.js
new file mode 100644
index 0000000000..1b5fac19da
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-21.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-21
+description: >
+ Object.create - an enumerable inherited accessor property in
+ 'Properties' is not defined in 'obj' (15.2.3.7 step 3)
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "prop", {
+ get: function() {
+ return {};
+ },
+ enumerable: true
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var child = new ConstructFun();
+
+var newObj = Object.create({}, child);
+
+assert.sameValue(newObj.hasOwnProperty("prop"), false, 'newObj.hasOwnProperty("prop")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-210.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-210.js
new file mode 100644
index 0000000000..d6ff45fb8c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-210.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-210
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is -0 (8.10.5 step 6.b)
+includes: [propertyHelper.js]
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: -0
+ }
+});
+
+assert(newObj.hasOwnProperty("prop"))
+assert.sameValue(typeof newObj.prop, "undefined");
+verifyNotWritable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-211.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-211.js
new file mode 100644
index 0000000000..84a03d23c3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-211.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-211
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is NaN (8.10.5 step 6.b)
+includes: [propertyHelper.js]
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: NaN
+ }
+});
+
+assert(newObj.hasOwnProperty("prop"));
+assert.sameValue(typeof newObj.prop, "undefined")
+verifyNotWritable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-212.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-212.js
new file mode 100644
index 0000000000..723da90ebe
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-212.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-212
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is a positive number primitive (8.10.5 step 6.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: 12
+ }
+});
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = 121;
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(newObj.prop, 121, 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-213.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-213.js
new file mode 100644
index 0000000000..e1c301211b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-213.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-213
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is a negative number primitive (8.10.5 step 6.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: -9
+ }
+});
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = 121;
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(newObj.prop, 121, 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-214.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-214.js
new file mode 100644
index 0000000000..209db64dda
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-214.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-214
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is an empty string (8.10.5 step 6.b)
+includes: [propertyHelper.js]
+---*/
+
+var descObj = {
+ writable: ""
+};
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert(newObj.hasOwnProperty("prop"))
+assert.sameValue(typeof newObj.prop, "undefined");
+verifyNotWritable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-215.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-215.js
new file mode 100644
index 0000000000..2016749225
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-215.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-215
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is a non-empty string (8.10.5 step 6.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: "abc"
+ }
+});
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = 121;
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(newObj.prop, 121, 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-216.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-216.js
new file mode 100644
index 0000000000..09acc279db
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-216.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-216
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is a Function object (8.10.5 step 6.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: function() {}
+ }
+});
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = 121;
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(newObj.prop, 121, 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-217.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-217.js
new file mode 100644
index 0000000000..300cd90726
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-217.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-217
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is an Array object (8.10.5 step 6.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: []
+ }
+});
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = 121;
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(newObj.prop, 121, 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-218.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-218.js
new file mode 100644
index 0000000000..2bb6d8008e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-218.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-218
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is a String object (8.10.5 step 6.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: new String()
+ }
+});
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = 121;
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(newObj.prop, 121, 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-219.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-219.js
new file mode 100644
index 0000000000..e44bc46416
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-219.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-219
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is a Boolean object (8.10.5 step 6.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: new Boolean()
+ }
+});
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = 121;
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(newObj.prop, 121, 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-22.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-22.js
new file mode 100644
index 0000000000..65bacdb035
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-22.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-22
+description: >
+ Object.create - own enumerable data property that overrides an
+ enumerable inherited data property in 'Properties' is defined in
+ 'obj' (15.2.3.7 step 5.a)
+---*/
+
+var proto = {};
+proto.prop = {
+ value: "abc"
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+child.prop = {
+ value: "bbq"
+};
+var newObj = Object.create({}, child);
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+assert.sameValue(newObj.prop, "bbq", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-220.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-220.js
new file mode 100644
index 0000000000..a6d95f9c49
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-220.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-220
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is a Number object (8.10.5 step 6.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: new Number()
+ }
+});
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = 121;
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(newObj.prop, 121, 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-221.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-221.js
new file mode 100644
index 0000000000..3bc9d558ee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-221.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-221
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is the Math object (8.10.5 step 6.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: Math
+ }
+});
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = 121;
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(newObj.prop, 121, 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-222.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-222.js
new file mode 100644
index 0000000000..2886c38b7e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-222.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-222
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is a Date object (8.10.5 step 6.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: new Date()
+ }
+});
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = 121;
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(newObj.prop, 121, 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-223.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-223.js
new file mode 100644
index 0000000000..fb929326ee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-223.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-223
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is a RegExp object (8.10.5 step 6.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: new RegExp()
+ }
+});
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = 121;
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(newObj.prop, 121, 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-224.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-224.js
new file mode 100644
index 0000000000..0db31ebbd9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-224.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-224
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is the JSON object (8.10.5 step 6.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: JSON
+ }
+});
+var hasProperty = newObj.hasOwnProperty("prop");
+newObj.prop = 121;
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(newObj.prop, 121, 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-225.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-225.js
new file mode 100644
index 0000000000..41e5928dde
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-225.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-225
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is an Error object (8.10.5 step 6.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: new Error()
+ }
+});
+var hasProperty = newObj.hasOwnProperty("prop");
+newObj.prop = 121;
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(newObj.prop, 121, 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-226.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-226.js
new file mode 100644
index 0000000000..27f226c709
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-226.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-226
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is an Arguments object (8.10.5 step 6.b)
+---*/
+
+var argObj = (function() {
+ return arguments;
+})();
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: argObj
+ }
+});
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = 121;
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(newObj.prop, 121, 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-228.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-228.js
new file mode 100644
index 0000000000..93a21d0e7e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-228.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-228
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is the global object (8.10.5 step 6.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: this
+ }
+});
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = 121;
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(newObj.prop, 121, 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-229.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-229.js
new file mode 100644
index 0000000000..ea6c2fc911
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-229.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-229
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is a string (value is 'false') which is treated as
+ the value true (8.10.5 step 6.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: "false"
+ }
+});
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = 121;
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(newObj.prop, 121, 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-23.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-23.js
new file mode 100644
index 0000000000..fe5269854b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-23.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-23
+description: >
+ Object.create - own enumerable data property that overrides an
+ enumerable inherited accessor property in 'Properties' is defined
+ in 'obj' (15.2.3.7 step 5.a)
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "prop", {
+ get: function() {
+ return {
+ value: 9
+ };
+ },
+ enumerable: true
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "prop", {
+ value: {
+ value: 12
+ },
+ enumerable: true
+});
+var newObj = Object.create({}, child);
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+assert.sameValue(newObj.prop, 12, 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-230.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-230.js
new file mode 100644
index 0000000000..812eea4192
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-230.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-230
+description: >
+ Object.create - 'writable' property of one property in
+ 'Properties' is new Boolean(false) which is treated as the value
+ true (8.10.5 step 6.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: new Boolean(false)
+ }
+});
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = 121;
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(newObj.prop, 121, 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-231.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-231.js
new file mode 100644
index 0000000000..32b5ce06d6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-231.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-231
+description: >
+ Object.create - 'get' property of one property in 'Properties' is
+ present (8.10.5 step 7)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ get: function() {
+ return "present";
+ }
+ }
+});
+
+assert.sameValue(newObj.prop, "present", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-232.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-232.js
new file mode 100644
index 0000000000..95906d5e81
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-232.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-232
+description: >
+ Object.create - 'get' property of one property in 'Properties' is
+ not present (8.10.5 step 7)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {}
+});
+
+assert.sameValue(typeof(newObj.prop), "undefined", 'typeof (newObj.prop)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-233.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-233.js
new file mode 100644
index 0000000000..7ff6c0a662
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-233.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-233
+description: >
+ Object.create - 'get' property of one property in 'Properties' is
+ own data property (8.10.5 step 7.a)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ get: function() {
+ return "ownDataProperty";
+ }
+ }
+});
+
+assert.sameValue(newObj.prop, "ownDataProperty", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-234.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-234.js
new file mode 100644
index 0000000000..d09d67d856
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-234.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-234
+description: >
+ Object.create - 'get' property of one property in 'Properties' is
+ an inherited data property (8.10.5 step 7.a)
+---*/
+
+var proto = {
+ get: function() {
+ return "inheritedDataProperty";
+ }
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var descObj = new ConstructFun();
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert.sameValue(newObj.prop, "inheritedDataProperty", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-235.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-235.js
new file mode 100644
index 0000000000..8ebe324a04
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-235.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-235
+description: >
+ Object.create - 'get' property of one property in 'Properties' is
+ own data property that overrides an inherited data property
+ (8.10.5 step 7.a)
+---*/
+
+var proto = {
+ get: function() {
+ return "inheritedDataProperty";
+ }
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var descObj = new ConstructFun();
+
+Object.defineProperty(descObj, "get", {
+ value: function() {
+ return "ownDataProperty";
+ }
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert.sameValue(newObj.prop, "ownDataProperty", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-236.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-236.js
new file mode 100644
index 0000000000..297bba9229
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-236.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-236
+description: >
+ Object.create - 'get' property of one property in 'Properties' is
+ own data property that overrides an inherited accessor property
+ (8.10.5 step 7.a)
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "get", {
+ get: function() {
+ return function() {
+ return "inheritedAccessorProperty";
+ };
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var descObj = new ConstructFun();
+
+Object.defineProperty(descObj, "get", {
+ value: function() {
+ return "ownDataProperty";
+ }
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert.sameValue(newObj.prop, "ownDataProperty", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-237.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-237.js
new file mode 100644
index 0000000000..8cc6d0a20f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-237.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-237
+description: >
+ Object.create - 'get' property of one property in 'Properties' is
+ own accessor property (8.10.5 step 7.a)
+---*/
+
+var descObj = {};
+
+Object.defineProperty(descObj, "get", {
+ get: function() {
+ return function() {
+ return "ownAccessorProperty";
+ };
+ }
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert.sameValue(newObj.prop, "ownAccessorProperty", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-238.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-238.js
new file mode 100644
index 0000000000..f2c870acf7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-238.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-238
+description: >
+ Object.create - 'get' property of one property in 'Properties' is
+ an inherited accessor property (8.10.5 step 7.a)
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "get", {
+ get: function() {
+ return function() {
+ return "inheritedAccessorProperty";
+ };
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var descObj = new ConstructFun();
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert.sameValue(newObj.prop, "inheritedAccessorProperty", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-239.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-239.js
new file mode 100644
index 0000000000..64eb0180a1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-239.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-239
+description: >
+ Object.create - 'get' property of one property in 'Properties' is
+ own accessor property that overrides an inherited data property
+ (8.10.5 step 7.a)
+---*/
+
+var proto = {
+ get: function() {
+ return "inheritedDataProperty";
+ }
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var descObj = new ConstructFun();
+
+Object.defineProperty(descObj, "get", {
+ get: function() {
+ return function() {
+ return "ownAccessorProperty";
+ };
+ }
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert.sameValue(newObj.prop, "ownAccessorProperty", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-24.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-24.js
new file mode 100644
index 0000000000..77201cbe20
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-24.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-24
+description: >
+ Object.create - own enumerable accessor property that overrides an
+ enumerable inherited data property in 'Properties' is defined in
+ 'obj' (15.2.3.7 step 5.a)
+---*/
+
+var proto = {};
+proto.prop = {
+ value: 12
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "prop", {
+ get: function() {
+ return {
+ value: 9
+ };
+ },
+ enumerable: true
+});
+
+var newObj = Object.create({}, child);
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+assert.sameValue(newObj.prop, 9, 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-240.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-240.js
new file mode 100644
index 0000000000..5746060022
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-240.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-240
+description: >
+ Object.create - 'get' property of one property in 'Properties' is
+ own accessor property that overrides an inherited accessor
+ property (8.10.5 step 7.a)
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "get", {
+ get: function() {
+ return function() {
+ return "inheritedAccessorProperty";
+ };
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var descObj = new ConstructFun();
+
+Object.defineProperty(descObj, "get", {
+ get: function() {
+ return function() {
+ return "ownAccessorProperty";
+ };
+ }
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert.sameValue(newObj.prop, "ownAccessorProperty", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-241.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-241.js
new file mode 100644
index 0000000000..97e9ec83f8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-241.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-241
+description: >
+ Object.create - 'get' property of one property in 'Properties' is
+ own accessor property without a get function (8.10.5 step 7.a)
+---*/
+
+var descObj = {};
+
+Object.defineProperty(descObj, "get", {
+ set: function() {}
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+assert.sameValue(typeof(newObj.prop), "undefined", 'typeof (newObj.prop)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-242.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-242.js
new file mode 100644
index 0000000000..1525f501ad
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-242.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-242
+description: >
+ Object.create - 'get' property of one property in 'Properties' is
+ own accessor property without a get function, which overrides an
+ inherited accessor property (8.10.5 step 7.a)
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "get", {
+ get: function() {
+ return function() {
+ return "inheritedAccessorProperty";
+ };
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var descObj = new ConstructFun();
+
+Object.defineProperty(descObj, "get", {
+ set: function() {}
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+assert.sameValue(typeof newObj.prop, "undefined", 'typeof newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-243.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-243.js
new file mode 100644
index 0000000000..556d8901f1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-243.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-243
+description: >
+ Object.create - 'get' property of one property in 'Properties' is
+ an inherited accessor property without a get function (8.10.5 step
+ 7.a)
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "get", {
+ set: function() {}
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var descObj = new ConstructFun();
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+assert.sameValue(typeof(newObj.prop), "undefined", 'typeof (newObj.prop)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-244.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-244.js
new file mode 100644
index 0000000000..14308de518
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-244.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-244
+description: >
+ Object.create - one property in 'Properties' is a Function object
+ which implements its own [[Get]] method to access the 'get'
+ property (8.10.5 step 7.a)
+---*/
+
+var funObj = function() {};
+
+funObj.get = function() {
+ return "VerifyFunctionObject";
+};
+
+var newObj = Object.create({}, {
+ prop: funObj
+});
+
+assert.sameValue(newObj.prop, "VerifyFunctionObject", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-245.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-245.js
new file mode 100644
index 0000000000..beef095e2b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-245.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-245
+description: >
+ Object.create - one property in 'Properties' is an Array object
+ that uses Object's [[Get]] method to access the 'get' property
+ (8.10.5 step 7.a)
+---*/
+
+var arrayObj = [1, 2, 3];
+
+arrayObj.get = function() {
+ return "VerifyArrayObject";
+};
+
+var newObj = Object.create({}, {
+ prop: arrayObj
+});
+
+assert.sameValue(newObj.prop, "VerifyArrayObject", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-246.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-246.js
new file mode 100644
index 0000000000..3af5d5970d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-246.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-246
+description: >
+ Object.create - one property in 'Properties' is a String object
+ that uses Object's [[Get]] method to access the 'get' property
+ (8.10.5 step 7.a)
+---*/
+
+var strObj = new String("abc");
+
+strObj.get = function() {
+ return "VerifyStringObject";
+};
+
+var newObj = Object.create({}, {
+ prop: strObj
+});
+
+assert.sameValue(newObj.prop, "VerifyStringObject", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-247.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-247.js
new file mode 100644
index 0000000000..b0553230f7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-247.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-247
+description: >
+ Object.create - one property in 'Properties' is a Boolean object
+ that uses Object's [[Get]] method to access the 'get' property
+ (8.10.5 step 7.a)
+---*/
+
+var boolObj = new Boolean(true);
+
+boolObj.get = function() {
+ return "VerifyBooleanObject";
+};
+
+var newObj = Object.create({}, {
+ prop: boolObj
+});
+
+assert.sameValue(newObj.prop, "VerifyBooleanObject", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-248.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-248.js
new file mode 100644
index 0000000000..20063a5ad7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-248.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-248
+description: >
+ Object.create - one property in 'Properties' is a Number object
+ that uses Object's [[Get]] method to access the 'get' property
+ (8.10.5 step 7.a)
+---*/
+
+var numObj = new Number(5);
+
+numObj.get = function() {
+ return "VerifyNumberObject";
+};
+
+var newObj = Object.create({}, {
+ prop: numObj
+});
+
+assert.sameValue(newObj.prop, "VerifyNumberObject", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-249.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-249.js
new file mode 100644
index 0000000000..568792ba24
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-249.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-249
+description: >
+ Object.create - one property in 'Properties' is a Date object that
+ uses Object's [[Get]] method to access the 'get' property (8.10.5
+ step 7.a)
+---*/
+
+var dateObj = new Date();
+
+dateObj.get = function() {
+ return "VerifyDateObject";
+};
+
+var newObj = Object.create({}, {
+ prop: dateObj
+});
+
+assert.sameValue(newObj.prop, "VerifyDateObject", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-25.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-25.js
new file mode 100644
index 0000000000..684a076430
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-25.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-25
+description: >
+ Object.create - own enumerable accessor property that overrides an
+ enumerable inherited accessor property in 'Properties' is defined
+ in 'obj' (15.2.3.7 step 5.a)
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "prop", {
+ get: function() {
+ return {
+ value: 9
+ };
+ },
+ enumerable: true
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "prop", {
+ get: function() {
+ return {
+ value: 12
+ };
+ },
+ enumerable: true
+});
+var newObj = Object.create({}, child);
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+assert.sameValue(newObj.prop, 12, 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-250.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-250.js
new file mode 100644
index 0000000000..50dcac99fb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-250.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-250
+description: >
+ Object.create - one property in 'Properties' is a RegExp object
+ that uses Object's [[Get]] method to access the 'get' property
+ (8.10.5 step 7.a)
+---*/
+
+var regObj = new RegExp();
+
+regObj.get = function() {
+ return "VerifyRegExpObject";
+};
+
+var newObj = Object.create({}, {
+ prop: regObj
+});
+
+assert.sameValue(newObj.prop, "VerifyRegExpObject", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-251.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-251.js
new file mode 100644
index 0000000000..0c6493157a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-251.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-251
+description: >
+ Object.create - one property in 'Properties' is the Math object
+ that uses Object's [[Get]] method to access the 'get' property
+ (8.10.5 step 7.a)
+---*/
+
+Math.get = function() {
+ return "VerifyMathObject";
+};
+
+var newObj = Object.create({}, {
+ prop: Math
+});
+
+assert.sameValue(newObj.prop, "VerifyMathObject", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-252.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-252.js
new file mode 100644
index 0000000000..fff0d3cb5a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-252.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-252
+description: >
+ Object.create - one property in 'Properties' is the JSON object
+ that uses Object's [[Get]] method to access the 'get' property
+ (8.10.5 step 7.a)
+---*/
+
+JSON.get = function() {
+ return "VerifyJSONObject";
+};
+
+var newObj = Object.create({}, {
+ prop: JSON
+});
+
+assert.sameValue(newObj.prop, "VerifyJSONObject", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-253.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-253.js
new file mode 100644
index 0000000000..7eee063bc8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-253.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-253
+description: >
+ Object.create - one property in 'Properties' is an Error object
+ that uses Object's [[Get]] method to access the 'get' property
+ (8.10.5 step 7.a)
+---*/
+
+var errObj = new Error("error");
+
+errObj.get = function() {
+ return "VerifyErrorObject";
+};
+
+var newObj = Object.create({}, {
+ prop: errObj
+});
+
+assert.sameValue(newObj.prop, "VerifyErrorObject", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-254.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-254.js
new file mode 100644
index 0000000000..62b7957f55
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-254.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-254
+description: >
+ Object.create - one property in 'Properties' is an Arguments
+ object which implements its own [[Get]] method to access the 'get'
+ property (8.10.5 step 7.a)
+---*/
+
+var argObj = (function() {
+ return arguments;
+})();
+
+argObj.get = function() {
+ return "VerifyArgumentsObject";
+};
+
+var newObj = Object.create({}, {
+ prop: argObj
+});
+
+assert.sameValue(newObj.prop, "VerifyArgumentsObject", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-256.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-256.js
new file mode 100644
index 0000000000..d234669950
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-256.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-256
+description: >
+ Object.create - one property in 'Properties' is the global object
+ that uses Object's [[Get]] method to access the 'get' property
+ (8.10.5 step 7.a)
+---*/
+
+this.get = function() {
+ return "VerifyGlobalObject";
+};
+
+var newObj = Object.create({}, {
+ prop: this
+});
+
+assert.sameValue(newObj.prop, "VerifyGlobalObject", 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-257.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-257.js
new file mode 100644
index 0000000000..6ae2cc1099
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-257.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-257
+description: >
+ Object.create - 'get' property of one property in 'Properties' is
+ undefined (8.10.5 step 7.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ get: undefined
+ }
+});
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+assert.sameValue(typeof newObj.prop, "undefined", 'typeof newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-258.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-258.js
new file mode 100644
index 0000000000..73c7cf311b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-258.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-258
+description: >
+ Object.create - 'get' property of one property in 'Properties' is
+ the primitive value null (8.10.5 step 7.b)
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.create({}, {
+ prop: {
+ get: null
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-259.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-259.js
new file mode 100644
index 0000000000..7385349362
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-259.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-259
+description: >
+ Object.create - 'get' property of one property in 'Properties' is
+ a boolean primitive (8.10.5 step 7.b)
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.create({}, {
+ prop: {
+ get: false
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-26.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-26.js
new file mode 100644
index 0000000000..b50040b3de
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-26.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-26
+description: >
+ Object.create - TypeError is thrown when own enumerable accessor
+ property of 'Properties' without a get function (15.2.3.7 step 5.a)
+---*/
+
+var props = {};
+Object.defineProperty(props, "prop", {
+ set: function() {},
+ enumerable: true
+});
+assert.throws(TypeError, function() {
+ Object.create({}, props);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-260.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-260.js
new file mode 100644
index 0000000000..8f0889cb87
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-260.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-260
+description: >
+ Object.create - 'get' property of one property in 'Properties' is
+ a number primitive (8.10.5 step 7.b)
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.create({}, {
+ prop: {
+ get: 123
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-261.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-261.js
new file mode 100644
index 0000000000..242127990c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-261.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-261
+description: >
+ Object.create - 'get' property of one property in 'Properties' is
+ a primitive string (8.10.5 step 7.b)
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.create({}, {
+ prop: {
+ get: "string"
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-262.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-262.js
new file mode 100644
index 0000000000..58f1c79bad
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-262.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-262
+description: >
+ Object.create - 'get' property of one property in 'Properties' is
+ an Array object (8.10.5 step 7.b)
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.create({}, {
+ prop: {
+ get: [1, 2, 3]
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-263.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-263.js
new file mode 100644
index 0000000000..327a60e023
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-263.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-263
+description: >
+ Object.create - 'get' property of one property in 'Properties' is
+ a function (8.10.5 step 7.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ get: function() {}
+ }
+});
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+assert.sameValue(typeof newObj.prop, "undefined", 'typeof newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-266.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-266.js
new file mode 100644
index 0000000000..263ca214e6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-266.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-266
+description: >
+ Object.create - 'set' property of one property in 'Properties' is
+ present (8.10.5 step 8)
+---*/
+
+var data = "data";
+
+var newObj = Object.create({}, {
+ prop: {
+ set: function(value) {
+ data = value;
+ }
+ }
+});
+
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = "overrideData";
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-267.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-267.js
new file mode 100644
index 0000000000..c22b3399ed
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-267.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-267
+description: >
+ Object.create - 'set' property of one property in 'Properties' is
+ not present (8.10.5 step 8)
+includes: [propertyHelper.js]
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ get: function() {
+ return "data";
+ }
+ }
+});
+
+assert(newObj.hasOwnProperty("prop"));
+verifyNotWritable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-268.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-268.js
new file mode 100644
index 0000000000..28c11b08e1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-268.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-268
+description: >
+ Object.create - 'set' property of one property in 'Properties' is
+ own data property (8.10.5 step 8.a)
+---*/
+
+var data = "data";
+
+var newObj = Object.create({}, {
+ prop: {
+ set: function(value) {
+ data = value;
+ }
+ }
+});
+
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = "overrideData";
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-269.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-269.js
new file mode 100644
index 0000000000..97ebc48265
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-269.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-269
+description: >
+ Object.create - 'set' property of one property in 'Properties' is
+ an inherited data property (8.10.5 step 8.a)
+---*/
+
+var data = "data";
+var proto = {
+ set: function(value) {
+ data = value;
+ }
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var child = new ConstructFun();
+
+var newObj = Object.create({}, {
+ prop: child
+});
+
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = "overrideData";
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-27.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-27.js
new file mode 100644
index 0000000000..d8a713220d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-27.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-27
+description: >
+ Object.create - own enumerable accessor property in 'Properties'
+ without a get function that overrides an enumerable inherited
+ accessor property in 'Properties' is defined in 'obj' (15.2.3.7
+ step 5.a)
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "prop", {
+ get: function() {
+ return {};
+ },
+ enumerable: true
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "prop", {
+ set: function() {},
+ enumerable: true
+});
+assert.throws(TypeError, function() {
+ Object.create({}, child);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-270.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-270.js
new file mode 100644
index 0000000000..217295fc0b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-270.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-270
+description: >
+ Object.create - 'set' property of one property in 'Properties' is
+ own data property that overrides an inherited data property
+ (8.10.5 step 8.a)
+---*/
+
+var data1 = "data";
+var data2 = "data";
+var proto = {
+ set: function(value) {
+ data2 = value;
+ }
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var child = new ConstructFun();
+child.set = function(value) {
+ data1 = value;
+};
+
+var newObj = Object.create({}, {
+ prop: child
+});
+
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = "overrideData";
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(data1, "overrideData", 'data1');
+assert.sameValue(data2, "data", 'data2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-271.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-271.js
new file mode 100644
index 0000000000..e755be92f7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-271.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-271
+description: >
+ Object.create - 'set' property of one property in 'Properties' is
+ own data property that overrides an inherited accessor property
+ (8.10.5 step 8.a)
+---*/
+
+var data1 = "data";
+var data2 = "data";
+
+var proto = {};
+Object.defineProperty(proto, "set", {
+ get: function() {
+ return function(value) {
+ data2 = value;
+ };
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var child = new ConstructFun();
+Object.defineProperty(child, "set", {
+ value: function(value) {
+ data1 = value;
+ }
+});
+
+var newObj = Object.create({}, {
+ prop: child
+});
+
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = "overrideData";
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(data1, "overrideData", 'data1');
+assert.sameValue(data2, "data", 'data2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-272.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-272.js
new file mode 100644
index 0000000000..593e276e53
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-272.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-272
+description: >
+ Object.create - 'set' property of one property in 'Properties' is
+ own accessor property (8.10.5 step 8.a)
+---*/
+
+var data = "data";
+var descObj = {};
+
+Object.defineProperty(descObj, "set", {
+ get: function() {
+ return function(value) {
+ data = value;
+ };
+ }
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = "overrideData";
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-273.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-273.js
new file mode 100644
index 0000000000..a2914f6aa2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-273.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-273
+description: >
+ Object.create - 'set' property of one property in 'Properties' is
+ an inherited accessor property (8.10.5 step 8.a)
+---*/
+
+var data = "data";
+var proto = {};
+
+Object.defineProperty(proto, "set", {
+ get: function() {
+ return function(value) {
+ data = value;
+ };
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var child = new ConstructFun();
+
+var newObj = Object.create({}, {
+ prop: child
+});
+
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = "overrideData";
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-274.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-274.js
new file mode 100644
index 0000000000..fed642de3f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-274.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-274
+description: >
+ Object.create - 'set' property of one property in 'Properties' is
+ own accessor property that overrides an inherited data property
+ (8.10.5 step 8.a)
+---*/
+
+var data1 = "data";
+var data2 = "data";
+
+var proto = {};
+proto.set = function(value) {
+ data2 = value;
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var child = new ConstructFun();
+Object.defineProperty(child, "set", {
+ get: function() {
+ return function(value) {
+ data1 = value;
+ };
+ }
+});
+
+var newObj = Object.create({}, {
+ prop: child
+});
+
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = "overrideData";
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(data1, "overrideData", 'data1');
+assert.sameValue(data2, "data", 'data2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-275.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-275.js
new file mode 100644
index 0000000000..5d63922fc6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-275.js
@@ -0,0 +1,47 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-275
+description: >
+ Object.create - 'set' property of one property in 'Properties' is
+ own accessor property that overrides an inherited accessor
+ property (8.10.5 step 8.a)
+---*/
+
+var data1 = "data";
+var data2 = "data";
+var proto = {};
+
+Object.defineProperty(proto, "set", {
+ get: function() {
+ return function(value) {
+ data2 = value;
+ };
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var child = new ConstructFun();
+Object.defineProperty(child, "set", {
+ get: function() {
+ return function(value) {
+ data1 = value;
+ };
+ }
+});
+
+var newObj = Object.create({}, {
+ prop: child
+});
+
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = "overrideData";
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(data1, "overrideData", 'data1');
+assert.sameValue(data2, "data", 'data2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-276.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-276.js
new file mode 100644
index 0000000000..0b6cbebda5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-276.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-276
+description: >
+ Object.create - 'set' property of one property in 'Properties' is
+ own accessor property without a get function (8.10.5 step 8.a)
+---*/
+
+var descObj = {};
+Object.defineProperty(descObj, "set", {
+ set: function() {}
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+var hasProperty = newObj.hasOwnProperty("prop");
+
+var desc = Object.getOwnPropertyDescriptor(newObj, "prop");
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(typeof desc.set, "undefined", 'typeof desc.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-277.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-277.js
new file mode 100644
index 0000000000..634b3c68be
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-277.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-277
+description: >
+ Object.create - 'set' property of one property in 'Properties' is
+ own accessor property without a get function, which overrides an
+ inherited accessor property (8.10.5 step 8.a)
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "set", {
+ get: function() {
+ return function() {};
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var child = new ConstructFun();
+Object.defineProperty(child, "set", {
+ set: function() {}
+});
+
+var newObj = Object.create({}, {
+ prop: child
+});
+
+var desc = Object.getOwnPropertyDescriptor(newObj, "prop");
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+assert.sameValue(typeof desc.set, "undefined", 'typeof desc.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-278.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-278.js
new file mode 100644
index 0000000000..0d2de4deb5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-278.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-278
+description: >
+ Object.create - 'set' property of one property in 'Properties' is
+ an inherited accessor property without a get function (8.10.5 step
+ 8.a)
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "set", {
+ set: function() {}
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var child = new ConstructFun();
+
+var newObj = Object.create({}, {
+ prop: child
+});
+
+var desc = Object.getOwnPropertyDescriptor(newObj, "prop");
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+assert.sameValue(typeof desc.set, "undefined", 'typeof desc.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-279.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-279.js
new file mode 100644
index 0000000000..64ac9d7874
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-279.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-279
+description: >
+ Object.create - one property in 'Properties' is a Function object
+ which implements its own [[Get]] method to access the 'set'
+ property (8.10.5 step 8.a)
+---*/
+
+var funObj = function() {};
+var data = "data";
+funObj.set = function(value) {
+ data = value;
+};
+
+var newObj = Object.create({}, {
+ prop: funObj
+});
+
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = "overrideData";
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-28.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-28.js
new file mode 100644
index 0000000000..ec430cbebd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-28.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-28
+description: >
+ Object.create - 'Properties' is a Function object which implements
+ its own [[Get]] method to access own enumerable property (15.2.3.7
+ step 5.a)
+---*/
+
+var props = function() {};
+props.prop = {
+ value: 12,
+ enumerable: true
+};
+var newObj = Object.create({}, props);
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-280.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-280.js
new file mode 100644
index 0000000000..b0893d82ae
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-280.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-280
+description: >
+ Object.create - one property in 'Properties' is an Array object
+ that uses Object's [[Get]] method to access the 'set' property
+ (8.10.5 step 8.a)
+---*/
+
+var arrObj = [];
+var data = "data";
+arrObj.set = function(value) {
+ data = value;
+};
+
+var newObj = Object.create({}, {
+ prop: arrObj
+});
+
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = "overrideData";
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-281.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-281.js
new file mode 100644
index 0000000000..6a7d0abb11
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-281.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-281
+description: >
+ Object.create - one property in 'Properties' is a String object
+ that uses Object's [[Get]] method to access the 'set' property
+ (8.10.5 step 8.a)
+---*/
+
+var strObj = new String();
+var data = "data";
+strObj.set = function(value) {
+ data = value;
+};
+
+var newObj = Object.create({}, {
+ prop: strObj
+});
+
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = "overrideData";
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-282.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-282.js
new file mode 100644
index 0000000000..c1f7306a19
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-282.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-282
+description: >
+ Object.create - one property in 'Properties' is a Boolean object
+ that uses Object's [[Get]] method to access the 'set' property
+ (8.10.5 step 8.a)
+---*/
+
+var boolObj = new Boolean(true);
+var data = "data";
+boolObj.set = function(value) {
+ data = value;
+};
+
+var newObj = Object.create({}, {
+ prop: boolObj
+});
+
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = "overrideData";
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-283.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-283.js
new file mode 100644
index 0000000000..724bfaaa21
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-283.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-283
+description: >
+ Object.create - one property in 'Properties' is a Number object
+ that uses Object's [[Get]] method to access the 'set' property
+ (8.10.5 step 8.a)
+---*/
+
+var numObj = new Number(5);
+var data = "data";
+numObj.set = function(value) {
+ data = value;
+};
+
+var newObj = Object.create({}, {
+ prop: numObj
+});
+
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = "overrideData";
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-284.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-284.js
new file mode 100644
index 0000000000..b502ccd881
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-284.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-284
+description: >
+ Object.create - one property in 'Properties' is the Math object
+ that uses Object's [[Get]] method to access the 'set' property
+ (8.10.5 step 8.a)
+---*/
+
+var data = "data";
+
+Math.set = function(value) {
+ data = value;
+};
+
+var newObj = Object.create({}, {
+ prop: Math
+});
+
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = "overrideData";
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-285.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-285.js
new file mode 100644
index 0000000000..72ab88384c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-285.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-285
+description: >
+ Object.create - one property in 'Properties' is a Date object that
+ uses Object's [[Get]] method to access the 'set' property (8.10.5
+ step 8.a)
+---*/
+
+var dateObj = new Date();
+var data = "data";
+dateObj.set = function(value) {
+ data = value;
+};
+
+var newObj = Object.create({}, {
+ prop: dateObj
+});
+
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = "overrideData";
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-286.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-286.js
new file mode 100644
index 0000000000..fea17f39ea
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-286.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-286
+description: >
+ Object.create - one property in 'Properties' is a RegExp object
+ that uses Object's [[Get]] method to access the 'set' property
+ (8.10.5 step 8.a)
+---*/
+
+var regObj = new RegExp();
+var data = "data";
+regObj.set = function(value) {
+ data = value;
+};
+
+var newObj = Object.create({}, {
+ prop: regObj
+});
+
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = "overrideData";
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-287.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-287.js
new file mode 100644
index 0000000000..9f3700ab41
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-287.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-287
+description: >
+ Object.create - one property in 'Properties' is the JSON object
+ that uses Object's [[Get]] method to access the 'set' property
+ (8.10.5 step 8.a)
+---*/
+
+var data = "data";
+
+JSON.set = function(value) {
+ data = value;
+};
+
+var newObj = Object.create({}, {
+ prop: JSON
+});
+
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = "overrideData";
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-288.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-288.js
new file mode 100644
index 0000000000..57399ae256
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-288.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-288
+description: >
+ Object.create - one property in 'Properties' is an Error object
+ that uses Object's [[Get]] method to access the 'set' property
+ (8.10.5 step 8.a)
+---*/
+
+var errObj = new Error("error");
+var data = "data";
+
+errObj.set = function(value) {
+ data = value;
+};
+
+var newObj = Object.create({}, {
+ prop: errObj
+});
+
+newObj.prop = "overrideData";
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-289.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-289.js
new file mode 100644
index 0000000000..bd6f47db85
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-289.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-289
+description: >
+ Object.create - one property in 'Properties' is an Arguments
+ object which implements its own [[Get]] method to access the 'set'
+ property (8.10.5 step 8.a)
+---*/
+
+var argObj = (function() {
+ return arguments;
+})();
+
+var data = "data";
+
+argObj.set = function(value) {
+ data = value;
+};
+
+var newobj = Object.create({}, {
+ prop: argObj
+});
+
+var hasProperty = newobj.hasOwnProperty("prop");
+
+newobj.prop = "overrideData";
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-29.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-29.js
new file mode 100644
index 0000000000..359e971adf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-29.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-29
+description: >
+ Object.create - 'Properties' is an Array object that uses Object's
+ [[Get]] method to access own enumerable property (15.2.3.7 step
+ 5.a)
+---*/
+
+var props = [];
+props.prop = {
+ value: {},
+ enumerable: true
+};
+var newObj = Object.create({}, props);
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-291.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-291.js
new file mode 100644
index 0000000000..b92ba9d2c7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-291.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-291
+description: >
+ Object.create - one property in 'Properties' is the global object
+ that uses Object's [[Get]] method to access the 'set' property
+ (8.10.5 step 8.a)
+---*/
+
+var data = "data";
+
+this.set = function(value) {
+ data = value;
+};
+
+var newObj = Object.create({}, {
+ prop: this
+});
+
+var hasProperty = newObj.hasOwnProperty("prop");
+
+newObj.prop = "overrideData";
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-292.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-292.js
new file mode 100644
index 0000000000..8bc70ff9aa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-292.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-292
+description: >
+ Object.create - 'set' property of one property in 'Properties' is
+ undefined (8.10.5 step 8.b)
+includes: [propertyHelper.js]
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ set: undefined
+ }
+});
+
+assert(newObj.hasOwnProperty("prop"));
+verifyNotWritable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-293.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-293.js
new file mode 100644
index 0000000000..54c5fbfdf3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-293.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-293
+description: >
+ Object.create - 'set' property of one property in 'Properties' is
+ a primitive value null (8.10.5 step 8.b)
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.create({}, {
+ prop: {
+ set: null
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-294.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-294.js
new file mode 100644
index 0000000000..5fbf12657b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-294.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-294
+description: >
+ Object.create - 'set' property of one property in 'Properties' is
+ a primitive boolean value true (8.10.5 step 8.b)
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.create({}, {
+ prop: {
+ set: true
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-295.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-295.js
new file mode 100644
index 0000000000..51a080c703
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-295.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-295
+description: >
+ Object.create - 'set' property of one property in 'Properties' is
+ a primitive number value (8.10.5 step 8.b)
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.create({}, {
+ prop: {
+ set: 123
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-296.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-296.js
new file mode 100644
index 0000000000..0a9feccc52
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-296.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-296
+description: >
+ Object.create - 'set' property of one property in 'Properties' is
+ a primitive string value (8.10.5 step 8.b)
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.create({}, {
+ prop: {
+ set: "abc"
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-297.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-297.js
new file mode 100644
index 0000000000..7e187906a0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-297.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-297
+description: >
+ Object.create - 'set' property of one property in 'Properties' is
+ an Date object (8.10.5 step 8.b)
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.create({}, {
+ prop: {
+ set: new Date()
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-298.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-298.js
new file mode 100644
index 0000000000..3587a83d1c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-298.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-298
+description: >
+ Object.create - 'set' property of one property in 'Properties' is
+ a function (8.10.5 step 8.b)
+---*/
+
+var data = "data";
+
+var newObj = Object.create({}, {
+ prop: {
+ set: function(value) {
+ data = value;
+ }
+ }
+});
+
+newObj.prop = "overrideData";
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-3.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-3.js
new file mode 100644
index 0000000000..3976886d04
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-3.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-3
+description: >
+ Object.create throws TypeError if 'Properties' is null (15.2.3.7
+ step 2)
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.create({}, null);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-30.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-30.js
new file mode 100644
index 0000000000..4441ce9a5c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-30.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-30
+description: >
+ Object.create - 'Properties' is a String object that uses Object's
+ [[Get]] method to access own enumerable property (15.2.3.7 step
+ 5.a)
+---*/
+
+var props = new String();
+props.prop = {
+ value: 12,
+ enumerable: true
+};
+var newObj = Object.create({}, props);
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-300.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-300.js
new file mode 100644
index 0000000000..a9eb355aef
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-300.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-300
+description: >
+ Object.create - 'set' property of one property in 'Properties' is
+ a host object that isn't callable (8.10.5 step 8.b)
+---*/
+
+var global = this;
+
+assert.throws(TypeError, function() {
+ Object.create({}, {
+ prop: {
+ set: global
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-301.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-301.js
new file mode 100644
index 0000000000..32439e99c2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-301.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-301
+description: >
+ Object.create - TypeError is thrown if both 'set' property and
+ 'value' property of one property in 'Properties' are present
+ (8.10.5 step 9.a)
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.create({}, {
+ prop: {
+ set: function() {},
+ value: 100
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-302.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-302.js
new file mode 100644
index 0000000000..c2d6c5f970
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-302.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-302
+description: >
+ Object.create - TypeError is thrown if both 'set' property and
+ 'writable' property of one property in 'Properties' are present
+ (8.10.5 step 9.a)
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.create({}, {
+ prop: {
+ set: function() {},
+ writable: true
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-303.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-303.js
new file mode 100644
index 0000000000..94ae9349a3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-303.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-303
+description: >
+ Object.create - TypeError is thrown if both 'get' property and
+ 'value' property of one property in 'Properties' are present
+ (8.10.5 step 9.a)
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.create({}, {
+ prop: {
+ get: function() {},
+ value: 100
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-304.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-304.js
new file mode 100644
index 0000000000..a3b2d1bf8d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-304.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-304
+description: >
+ Object.create - TypeError is thrown if both 'get' property and
+ 'writable' property of one property in 'Properties' are present
+ (8.10.5 step 9.a)
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.create({}, {
+ prop: {
+ get: function() {},
+ writable: true
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-305.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-305.js
new file mode 100644
index 0000000000..4bca05a95a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-305.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-305
+description: >
+ Object.create defines a data property when one property in
+ 'Properties' is generic descriptor (8.12.9 step 4.a)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: true
+ }
+});
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-306.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-306.js
new file mode 100644
index 0000000000..c69b7d7982
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-306.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-306
+description: >
+ Object.create - [[Value]] is set as undefined if it is absent in
+ data descriptor of one property in 'Properties' (8.12.9 step 4.a.i)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ writable: true,
+ configurable: true,
+ enumerable: true
+ }
+});
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+assert.sameValue(newObj.prop, undefined, 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-307.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-307.js
new file mode 100644
index 0000000000..02d1a9e465
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-307.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-307
+description: >
+ Object.create - [[Writable]] is set as false if it is absent in
+ data descriptor of one property in 'Properties' (8.12.9 step 4.a.i)
+includes: [propertyHelper.js]
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ value: 1001,
+ configurable: true,
+ enumerable: true
+ }
+});
+
+assert(newObj.hasOwnProperty("prop"));
+verifyNotWritable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-308.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-308.js
new file mode 100644
index 0000000000..e9d83221f7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-308.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-308
+description: >
+ Object.create - [[Enumerable]] is set as false if it is absent in
+ data descriptor of one property in 'Properties' (8.12.9 step 4.a.i)
+---*/
+
+var isEnumerable = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ value: 1001,
+ writable: true,
+ configurable: true
+ }
+});
+
+var hasProperty = newObj.hasOwnProperty("prop");
+
+for (var p in newObj) {
+ if (p === "prop") {
+ isEnumerable = true;
+ }
+}
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(isEnumerable, false, 'isEnumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-309.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-309.js
new file mode 100644
index 0000000000..41f48bb638
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-309.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-309
+description: >
+ Object.create - [[Configurable]] is set as false if it is absent
+ in data descriptor of one property in 'Properties' (8.12.9 step
+ 4.a.i)
+includes: [propertyHelper.js]
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ value: 1001,
+ writable: true,
+ enumerable: true
+ }
+});
+
+assert(newObj.hasOwnProperty("prop"));
+verifyNotConfigurable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-31.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-31.js
new file mode 100644
index 0000000000..aa1d112091
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-31.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-31
+description: >
+ Object.create - 'Properties' is a Boolean object that uses
+ Object's [[Get]] method to access own enumerable property
+ (15.2.3.7 step 5.a)
+---*/
+
+var props = new Boolean(false);
+props.prop = {
+ value: 12,
+ enumerable: true
+};
+var newObj = Object.create({}, props);
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-310.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-310.js
new file mode 100644
index 0000000000..b771420b26
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-310.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-310
+description: >
+ Object.create - [[Get]] is set as undefined if it is absent in
+ accessor descriptor of one property in 'Properties' (8.12.9 step
+ 4.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ set: function() {},
+ enumerable: true,
+ configurable: true
+ }
+});
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+assert.sameValue(newObj.prop, undefined, 'newObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-311.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-311.js
new file mode 100644
index 0000000000..169e7a69b9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-311.js
@@ -0,0 +1,47 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-311
+description: >
+ Object.create - [[Set]] is set as undefined if it is absent in
+ accessor descriptor of one property in 'Properties' (8.12.9 step
+ 4.b)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ get: function() {
+ return "verifyCreate";
+ },
+ enumerable: true,
+ configurable: true
+ }
+});
+
+var desc = Object.getOwnPropertyDescriptor(newObj, "prop");
+var verifySet = desc.hasOwnProperty("set") && typeof desc.set === "undefined";
+
+var verifyGet = false;
+if (newObj.prop === "verifyCreate") {
+ verifyGet = true;
+}
+
+var verifyEnumerable = false;
+for (var p in newObj) {
+ if (p === "prop") {
+ verifyEnumerable = true;
+ }
+}
+
+var verifyConfigurable = false;
+var hasProperty = newObj.hasOwnProperty("prop");
+delete newObj.prop;
+verifyConfigurable = !newObj.hasOwnProperty("prop") && hasProperty;
+
+assert(verifySet, 'verifySet !== true');
+assert(verifyGet, 'verifyGet !== true');
+assert(verifyEnumerable, 'verifyEnumerable !== true');
+assert(verifyConfigurable, 'verifyConfigurable !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-312.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-312.js
new file mode 100644
index 0000000000..1ae12c5c48
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-312.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-312
+description: >
+ Object.create - [[Enumerable]] is set as false if it is absent in
+ accessor descriptor of one property in 'Properties' (8.12.9 step
+ 4.b)
+---*/
+
+var isEnumerable = false;
+var newObj = Object.create({}, {
+ prop: {
+ set: function() {},
+ get: function() {},
+ configurable: true
+ }
+});
+var hasProperty = newObj.hasOwnProperty("prop");
+for (var p in newObj) {
+ if (p === "prop") {
+ isEnumerable = true;
+ }
+}
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(isEnumerable, false, 'isEnumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-313.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-313.js
new file mode 100644
index 0000000000..b3b0299d4e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-313.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-313
+description: >
+ Object.create - [[Configurable]] is set as false if it is absent
+ in accessor descriptor of one property in 'Properties' (8.12.9
+ step 4.b)
+includes: [propertyHelper.js]
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ set: function() {},
+ get: function() {},
+ enumerable: true
+ }
+});
+
+assert(newObj.hasOwnProperty("prop"));
+verifyNotConfigurable(newObj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-314.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-314.js
new file mode 100644
index 0000000000..c6e85a09d0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-314.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-314
+description: >
+ Object.create - some enumerable own property in 'Properties' is
+ empty object (15.2.3.7 step 7)
+---*/
+
+var newObj = Object.create({}, {
+ foo: {}
+});
+
+assert(newObj.hasOwnProperty("foo"), 'newObj.hasOwnProperty("foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-315.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-315.js
new file mode 100644
index 0000000000..2c381680ce
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-315.js
@@ -0,0 +1,53 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+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
+ }
+});
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-316.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-316.js
new file mode 100644
index 0000000000..a0b3e5f8e8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-316.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-316
+description: >
+ Object.create - enumerable properties of 'Properties' are given
+ numerical names (15.2.3.7 step 7)
+---*/
+
+function getFunc() {
+ return 20;
+}
+
+function setFunc() {}
+
+var newObj = Object.create({}, {
+ 0: {
+ value: 100,
+ enumerable: true,
+ writable: true,
+ configurable: true
+ },
+ 1: {
+ get: getFunc,
+ set: setFunc,
+ enumerable: true,
+ configurable: true
+ },
+ 2: {
+ value: 200,
+ enumerable: true,
+ writable: true,
+ configurable: true
+ }
+});
+
+assert.sameValue(newObj[0], 100, 'newObj[0]');
+assert.sameValue(newObj[1], 20, 'newObj[1]');
+assert.sameValue(newObj[2], 200, 'newObj[2]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-32.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-32.js
new file mode 100644
index 0000000000..057004cafa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-32.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-32
+description: >
+ Object.create - 'Properties' is a Number object that uses Object's
+ [[Get]] method to access own enumerable property (15.2.3.7 step
+ 5.a)
+---*/
+
+var props = new Number(-9);
+props.prop = {
+ value: 12,
+ enumerable: true
+};
+var newObj = Object.create({}, props);
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-33.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-33.js
new file mode 100644
index 0000000000..07d99cd723
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-33.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-33
+description: >
+ Object.create - 'Properties' is the Math object that uses Object's
+ [[Get]] method to access own enumerable property (15.2.3.7 step
+ 5.a)
+---*/
+
+Math.prop = {
+ value: 12,
+ enumerable: true
+};
+var newObj = Object.create({}, Math);
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-34.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-34.js
new file mode 100644
index 0000000000..880041edaa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-34.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-34
+description: >
+ Object.create - 'Properties' is a Date object that uses Object's
+ [[Get]] method to access own enumerable property (15.2.3.7 step
+ 5.a)
+---*/
+
+var props = new Date();
+props.prop = {
+ value: 12,
+ enumerable: true
+};
+var newObj = Object.create({}, props);
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-35.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-35.js
new file mode 100644
index 0000000000..2e60dc5436
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-35.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-35
+description: >
+ Object.create - 'Properties' is a RegExp object that uses Object's
+ [[Get]] method to access own enumerable property (15.2.3.7 step
+ 5.a)
+---*/
+
+var props = new RegExp();
+props.prop = {
+ value: 12,
+ enumerable: true
+};
+var newObj = Object.create({}, props);
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-36.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-36.js
new file mode 100644
index 0000000000..d9de2b46e9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-36.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-36
+description: >
+ Object.create - 'Properties' is the JSON object that uses Object's
+ [[Get]] method to access own enumerable property (15.2.3.7 step
+ 5.a)
+---*/
+
+JSON.prop = {
+ value: 12,
+ enumerable: true
+};
+var newObj = Object.create({}, JSON);
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-37.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-37.js
new file mode 100644
index 0000000000..b54ed3ac21
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-37.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-37
+description: >
+ Object.create - 'Properties' is an Error object that uses Object's
+ [[Get]] method to access own enumerable property (15.2.3.7 step
+ 5.a)
+---*/
+
+var props = new Error("test");
+
+(Object.getOwnPropertyNames(props)).forEach(function(name) {
+ props[name] = {
+ value: 11,
+ configurable: true
+ }
+});
+
+props.prop15_2_3_5_4_37 = {
+ value: 12,
+ enumerable: true
+};
+var newObj = Object.create({}, props);
+
+assert(newObj.hasOwnProperty("prop15_2_3_5_4_37"), 'newObj.hasOwnProperty("prop15_2_3_5_4_37") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-38.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-38.js
new file mode 100644
index 0000000000..fd2619c125
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-38.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-38
+description: >
+ Object.create - 'Properties' is an Arguments object which
+ implements its own [[Get]] method to access own enumerable
+ property (15.2.3.7 step 5.a)
+---*/
+
+var argObj = (function() {
+ return arguments;
+})();
+
+argObj.prop = {
+ value: 12,
+ enumerable: true
+};
+
+var newObj = Object.create({}, argObj);
+
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-39.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-39.js
new file mode 100644
index 0000000000..be66c37a6a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-39.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-39
+description: >
+ Object.create - ensure that side-effects of gets occur in the same
+ order as they would for: for (P in props) props[P] (15.2.3.7 step
+ 5.a)
+---*/
+
+var props = {};
+props.prop1 = {
+ value: 12,
+ enumerable: true
+};
+props.prop2 = {
+ value: true,
+ enumerable: true
+};
+
+var tempArray = [];
+for (var p in props) {
+ if (props.hasOwnProperty(p)) {
+ tempArray.push(p);
+ }
+}
+
+var newObj = Object.create({}, props);
+var index = 0;
+for (var q in newObj) {
+ assert.sameValue(tempArray[index++] !== q && newObj.hasOwnProperty(q), false, 'tempArray[index++] !== q && newObj.hasOwnProperty(q)');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-4.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-4.js
new file mode 100644
index 0000000000..6d2d1d1968
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-4.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-4
+description: >
+ Object.create - argument 'Properties' is an object (15.2.3.7 step
+ 2).
+---*/
+
+var props = {};
+var result = false;
+
+Object.defineProperty(props, "prop", {
+ get: function() {
+ result = this instanceof Object;
+ return {};
+ },
+ enumerable: true
+});
+Object.create({}, props);
+
+assert(result, 'result !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-40.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-40.js
new file mode 100644
index 0000000000..ca7bdc44f9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-40.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-40
+description: >
+ Object.create - ensure that if an exception is thrown it occurs in
+ the correct order relative to prior and subsequent side-effects
+ (15.2.3.7 step 5.a)
+---*/
+
+var newObj = {};
+var props = {};
+var i = 0;
+
+Object.defineProperty(props, "prop1", {
+ get: function() {
+ i++;
+ return {};
+ },
+ enumerable: true
+});
+
+Object.defineProperty(props, "prop2", {
+ get: function() {
+ if (1 === i++) {
+ throw new RangeError();
+ } else {
+ return {};
+ }
+ },
+ enumerable: true
+});
+assert.throws(RangeError, function() {
+ newObj = Object.create({}, props);
+});
+assert.sameValue(newObj.hasOwnProperty("prop1"), false, 'newObj.hasOwnProperty("prop1")');
+assert.sameValue(i, 2, 'i');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-41.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-41.js
new file mode 100644
index 0000000000..505390574e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-41.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-41
+description: >
+ Object.create - value of one property in 'Properties' is undefined
+ (8.10.5 step 1)
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.create({}, {
+ prop: undefined
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-42.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-42.js
new file mode 100644
index 0000000000..612e8ce702
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-42.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-42
+description: >
+ Object.create - value of one property in 'Properties' is null
+ (8.10.5 step 1)
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.create({}, {
+ prop: null
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-43.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-43.js
new file mode 100644
index 0000000000..424835548a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-43.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-43
+description: >
+ Object.create - value of one property in 'Properties' is false
+ (8.10.5 step 1)
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.create({}, {
+ prop: false
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-44.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-44.js
new file mode 100644
index 0000000000..804b90a581
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-44.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-44
+description: >
+ Object.create - value of one property in 'Properties' is a number
+ primitive (8.10.5 step 1)
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.create({}, {
+ prop: 12
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-45.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-45.js
new file mode 100644
index 0000000000..9dcea126ca
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-45.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-45
+description: >
+ Object.create - value of one property in 'Properties' is a string
+ (8.10.5 step 1)
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.create({}, {
+ prop: "abc"
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-46.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-46.js
new file mode 100644
index 0000000000..8ab02e849f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-46.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-46
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is true (8.10.5 step 3)
+---*/
+
+var accessed = false;
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: true
+ }
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-47.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-47.js
new file mode 100644
index 0000000000..39911fe960
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-47.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-47
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is not present (8.10.5 step 3)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {}
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-48.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-48.js
new file mode 100644
index 0000000000..cd3e397298
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-48.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-48
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is own data property (8.10.5 step 3.a)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: true
+ }
+});
+
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-49.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-49.js
new file mode 100644
index 0000000000..f8ad8265a9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-49.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-49
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is an inherited data property (8.10.5 step 3.a)
+---*/
+
+var accessed = false;
+
+var proto = {
+ enumerable: true
+};
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var descObj = new ConstructFun();
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-5.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-5.js
new file mode 100644
index 0000000000..3be11de8d1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-5.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-5
+description: >
+ Object.create - argument 'Properties' is a Function object
+ (15.2.3.7 step 2)
+---*/
+
+var props = function() {};
+var result = false;
+
+Object.defineProperty(props, "prop", {
+ get: function() {
+ result = this instanceof Function;
+ return {};
+ },
+ enumerable: true
+});
+Object.create({}, props);
+
+assert(result, 'result !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-50.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-50.js
new file mode 100644
index 0000000000..7e0049e69b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-50.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-50
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is own data property that overrides an inherited data
+ property (8.10.5 step 3.a)
+---*/
+
+var accessed = false;
+var proto = {
+ enumerable: true
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var descObj = new ConstructFun();
+
+Object.defineProperty(descObj, "enumerable", {
+ value: false
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-51.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-51.js
new file mode 100644
index 0000000000..0e5f679229
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-51.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-51
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is own data property that overrides an inherited
+ accessor property (8.10.5 step 3.a)
+---*/
+
+var proto = {};
+var accessed = false;
+
+Object.defineProperty(proto, "enumerable", {
+ get: function() {
+ return true;
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var descObj = new ConstructFun();
+
+Object.defineProperty(descObj, "enumerable", {
+ value: false
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-52.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-52.js
new file mode 100644
index 0000000000..0d66e032c6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-52.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-52
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is own accessor property (8.10.5 step 3.a)
+---*/
+
+var accessed = false;
+
+var descObj = {};
+Object.defineProperty(descObj, "enumerable", {
+ get: function() {
+ return true;
+ }
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-53.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-53.js
new file mode 100644
index 0000000000..07ee309674
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-53.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-53
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is an inherited accessor property (8.10.5 step 3.a)
+---*/
+
+var proto = {};
+var accessed = false;
+
+Object.defineProperty(proto, "enumerable", {
+ get: function() {
+ return true;
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var descObj = new ConstructFun();
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-54.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-54.js
new file mode 100644
index 0000000000..2b7437e7f1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-54.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-54
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is own accessor property that overrides an inherited
+ data property (8.10.5 step 3.a)
+---*/
+
+var accessed = false;
+var proto = {
+ enumerable: true
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var descObj = new ConstructFun();
+
+Object.defineProperty(descObj, "enumerable", {
+ get: function() {
+ return false;
+ }
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-55.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-55.js
new file mode 100644
index 0000000000..d0cfc1e86c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-55.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-55
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is own accessor property that overrides an inherited
+ accessor property (8.10.5 step 3.a)
+---*/
+
+var proto = {};
+var accessed = false;
+Object.defineProperty(proto, "enumerable", {
+ get: function() {
+ return true;
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var descObj = new ConstructFun();
+
+Object.defineProperty(descObj, "enumerable", {
+ get: function() {
+ return false;
+ }
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-56.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-56.js
new file mode 100644
index 0000000000..c4efa79699
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-56.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-56
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is own accessor property without a get function
+ (8.10.5 step 3.a)
+---*/
+
+var accessed = false;
+var descObj = {};
+Object.defineProperty(descObj, "enumerable", {
+ set: function() {}
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-57.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-57.js
new file mode 100644
index 0000000000..e82b65dbff
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-57.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-57
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is own accessor property without a get function,
+ which overrides an inherited accessor property (8.10.5 step 3.a)
+---*/
+
+var proto = {};
+var accessed = false;
+Object.defineProperty(proto, "enumerable", {
+ get: function() {
+ return true;
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var descObj = new ConstructFun();
+
+Object.defineProperty(descObj, "enumerable", {
+ set: function() {}
+});
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-58.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-58.js
new file mode 100644
index 0000000000..0af4b2299e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-58.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-58
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is an inherited accessor property without a get
+ function (8.10.5 step 3.a)
+---*/
+
+var proto = {};
+var accessed = false;
+
+Object.defineProperty(proto, "enumerable", {
+ set: function() {}
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var descObj = new ConstructFun();
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-59.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-59.js
new file mode 100644
index 0000000000..b18f28b0e6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-59.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-59
+description: >
+ Object.create - one property in 'Properties' is a Function object
+ which implements its own [[Get]] method to access the 'enumerable'
+ property (8.10.5 step 3.a)
+---*/
+
+var accessed = false;
+var descObj = function() {};
+
+descObj.enumerable = true;
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-6.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-6.js
new file mode 100644
index 0000000000..c6571f5121
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-6.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-6
+description: >
+ Object.create - argument 'Properties' is an Array object (15.2.3.7
+ step 2).
+---*/
+
+var props = [];
+var result = false;
+
+Object.defineProperty(props, "prop", {
+ get: function() {
+ result = this instanceof Array;
+ return {};
+ },
+ enumerable: true
+});
+Object.create({}, props);
+
+assert(result, 'result !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-60.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-60.js
new file mode 100644
index 0000000000..79890a88b1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-60.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-60
+description: >
+ Object.create - one property in 'Properties' is an Array object
+ that uses Object's [[Get]] method to access the 'enumerable'
+ property (8.10.5 step 3.a)
+---*/
+
+var accessed = false;
+var descObj = [];
+
+descObj.enumerable = true;
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-61.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-61.js
new file mode 100644
index 0000000000..0d9f02e508
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-61.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-61
+description: >
+ Object.create - one property in 'Properties' is a String object
+ that uses Object's [[Get]] method to access the 'enumerable'
+ property (8.10.5 step 3.a)
+---*/
+
+var accessed = false;
+var descObj = new String();
+
+descObj.enumerable = true;
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-62.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-62.js
new file mode 100644
index 0000000000..3cbf56b070
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-62.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-62
+description: >
+ Object.create - one property in 'Properties' is a Boolean object
+ that uses Object's [[Get]] method to access the 'enumerable'
+ property (8.10.5 step 3.a)
+---*/
+
+var accessed = false;
+var descObj = new Boolean(false);
+
+descObj.enumerable = true;
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-63.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-63.js
new file mode 100644
index 0000000000..b97e2c07ff
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-63.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-63
+description: >
+ Object.create - one property in 'Properties' is a Number object
+ that uses Object's [[Get]] method to access the 'enumerable'
+ property (8.10.5 step 3.a)
+---*/
+
+var accessed = false;
+var descObj = new Number(-9);
+
+descObj.enumerable = true;
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-64.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-64.js
new file mode 100644
index 0000000000..1b9b943cce
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-64.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-64
+description: >
+ Object.create - one property in 'Properties' is the Math object
+ that uses Object's [[Get]] method to access the 'enumerable'
+ property (8.10.5 step 3.a)
+---*/
+
+var accessed = false;
+
+Math.enumerable = true;
+
+var newObj = Object.create({}, {
+ prop: Math
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-65.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-65.js
new file mode 100644
index 0000000000..6080685872
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-65.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-65
+description: >
+ Object.create - one property in 'Properties' is a Date object that
+ uses Object's [[Get]] method to access the 'enumerable' property
+ (8.10.5 step 3.a)
+---*/
+
+var accessed = false;
+var descObj = new Date();
+
+descObj.enumerable = true;
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-66.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-66.js
new file mode 100644
index 0000000000..a90a9a84fe
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-66.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-66
+description: >
+ Object.create - one property in 'Properties' is a RegExp object
+ that uses Object's [[Get]] method to access the 'enumerable'
+ property (8.10.5 step 3.a)
+---*/
+
+var accessed = false;
+var descObj = new RegExp();
+
+descObj.enumerable = true;
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-67.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-67.js
new file mode 100644
index 0000000000..3b55ec2225
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-67.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-67
+description: >
+ Object.create - one property in 'Properties' is the JSON object
+ that uses Object's [[Get]] method to access the 'enumerable'
+ property (8.10.5 step 3.a)
+---*/
+
+var accessed = false;
+
+JSON.enumerable = true;
+
+var newObj = Object.create({}, {
+ prop: JSON
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-68.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-68.js
new file mode 100644
index 0000000000..06977453d3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-68.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-68
+description: >
+ Object.create - one property in 'Properties' is an Error object
+ that uses Object's [[Get]] method to access the 'enumerable'
+ property (8.10.5 step 3.a)
+---*/
+
+var accessed = false;
+var descObj = new Error();
+
+descObj.enumerable = true;
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-69.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-69.js
new file mode 100644
index 0000000000..475c2b9108
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-69.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-69
+description: >
+ Object.create - one property in 'Properties' is an Arguments
+ object which implements its own [[Get]] method to access the
+ 'enumerable' property (8.10.5 step 3.a)
+---*/
+
+var accessed = false;
+var argObj = (function() {
+ return arguments;
+})();
+
+argObj.enumerable = true;
+
+var newObj = Object.create({}, {
+ prop: argObj
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-7.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-7.js
new file mode 100644
index 0000000000..934b4902e1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-7.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-7
+description: >
+ Object.create - argument 'Properties' is a String object (15.2.3.7
+ step 2)
+---*/
+
+var props = new String();
+var result = false;
+
+Object.defineProperty(props, "prop", {
+ get: function() {
+ result = this instanceof String;
+ return {};
+ },
+ enumerable: true
+});
+Object.create({}, props);
+
+assert(result, 'result !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-71.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-71.js
new file mode 100644
index 0000000000..567b68cccf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-71.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-71
+description: >
+ Object.create - one property in 'Properties' is the global object
+ that uses Object's [[Get]] method to access the 'enumerable'
+ property (8.10.5 step 3.a)
+---*/
+
+var accessed = false;
+
+this.enumerable = true;
+
+var newObj = Object.create({}, {
+ prop: this
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-72.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-72.js
new file mode 100644
index 0000000000..07923b63aa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-72.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-72
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is undefined (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: undefined
+ }
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-73.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-73.js
new file mode 100644
index 0000000000..003e3e8906
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-73.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-73
+description: >
+ Object.create - value of 'enumerable' property of one property in
+ 'Properties' is null (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: null
+ }
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-74.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-74.js
new file mode 100644
index 0000000000..9b266a47c2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-74.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-74
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is true (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: true
+ }
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-75.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-75.js
new file mode 100644
index 0000000000..18e0f9317d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-75.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-75
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is false (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+var descObj = {
+ enumerable: false
+};
+
+var newObj = Object.create({}, {
+ prop: descObj
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-76.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-76.js
new file mode 100644
index 0000000000..778b0fa6c9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-76.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-76
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is 0 (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: 0
+ }
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-77.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-77.js
new file mode 100644
index 0000000000..4a63d956a6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-77.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-77
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is +0 (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: +0
+ }
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-78.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-78.js
new file mode 100644
index 0000000000..b1677c0016
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-78.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-78
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is -0 (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: -0
+ }
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-79.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-79.js
new file mode 100644
index 0000000000..d23acdfedc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-79.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-79
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is NaN (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: NaN
+ }
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-8.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-8.js
new file mode 100644
index 0000000000..3d4dc15a88
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-8.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-8
+description: >
+ Object.create - argument 'Properties' is a Boolean object whose
+ primitive value is true (15.2.3.7 step 2).
+---*/
+
+var props = new Boolean(true);
+var result = false;
+
+Object.defineProperty(props, "prop", {
+ get: function() {
+ result = this instanceof Boolean;
+ return {};
+ },
+ enumerable: true
+});
+Object.create({}, props);
+
+assert(result, 'result !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-80.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-80.js
new file mode 100644
index 0000000000..b239ec8add
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-80.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-80
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is a positive number primitive (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: 12
+ }
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-81.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-81.js
new file mode 100644
index 0000000000..c94967c1d8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-81.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-81
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is a negative number primitive (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: -9
+ }
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-82.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-82.js
new file mode 100644
index 0000000000..238d87cd0c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-82.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-82
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is an empty string (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: ""
+ }
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+assert(newObj.hasOwnProperty("prop"), 'newObj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-83.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-83.js
new file mode 100644
index 0000000000..d75ae08b10
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-83.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-83
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is a non-empty string (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: "AB\n\\cd"
+ }
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-84.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-84.js
new file mode 100644
index 0000000000..465512f852
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-84.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-84
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is a Function object (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: function() {}
+ }
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-85.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-85.js
new file mode 100644
index 0000000000..8396312eed
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-85.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-85
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is an Array object (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: []
+ }
+});
+
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-86.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-86.js
new file mode 100644
index 0000000000..6b8bf1b198
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-86.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-86
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is a String object (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: new String()
+ }
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-87.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-87.js
new file mode 100644
index 0000000000..7ce2a3eb6c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-87.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-87
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is a Boolean object (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: new Boolean(true)
+ }
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-88.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-88.js
new file mode 100644
index 0000000000..8568fe302b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-88.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-88
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is a Number object (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: new Number(-9)
+ }
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-89.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-89.js
new file mode 100644
index 0000000000..6bdc03c2f2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-89.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-89
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is the Math object (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: Math
+ }
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-9.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-9.js
new file mode 100644
index 0000000000..fd12a2c08e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-9.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-9
+description: >
+ Object.create - argument 'Properties' is a Number object whose
+ primitive value is any interesting number (15.2.3.7 step 2).
+---*/
+
+var props = new Number(12);
+var result = false;
+
+Object.defineProperty(props, "prop", {
+ get: function() {
+ result = this instanceof Number;
+ return {};
+ },
+ enumerable: true
+});
+Object.create({}, props);
+
+assert(result, 'result !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-90.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-90.js
new file mode 100644
index 0000000000..07972bdf64
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-90.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-90
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is a Date object (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: new Date()
+ }
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-91.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-91.js
new file mode 100644
index 0000000000..98fd988908
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-91.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-91
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is a RegExp object (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: new RegExp()
+ }
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-92.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-92.js
new file mode 100644
index 0000000000..3b5cb1dc9a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-92.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-92
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is the JSON object (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: JSON
+ }
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-93.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-93.js
new file mode 100644
index 0000000000..031209d4d9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-93.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-93
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is an Error object (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: new Error()
+ }
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-94.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-94.js
new file mode 100644
index 0000000000..e8ed726a94
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-94.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-94
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is an Arguments object (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+var argObj = (function() {
+ return arguments;
+})();
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: argObj
+ }
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-96.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-96.js
new file mode 100644
index 0000000000..19f6d7d7a5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-96.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-96
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is the global object (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: this
+ }
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-97.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-97.js
new file mode 100644
index 0000000000..77b6339504
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-97.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-97
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is a string (value is 'false'), which is treated as
+ the value true (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: "false"
+ }
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-98.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-98.js
new file mode 100644
index 0000000000..9950402b7a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-98.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-98
+description: >
+ Object.create - 'enumerable' property of one property in
+ 'Properties' is new Boolean(false), which is treated as the value
+ true (8.10.5 step 3.b)
+---*/
+
+var accessed = false;
+
+var newObj = Object.create({}, {
+ prop: {
+ enumerable: new Boolean(false)
+ }
+});
+for (var property in newObj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-99.js b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-99.js
new file mode 100644
index 0000000000..2aa497d673
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/15.2.3.5-4-99.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.5-4-99
+description: >
+ Object.create - 'configurable' property of one property in
+ 'Properties' is true (8.10.5 step 4)
+---*/
+
+var newObj = Object.create({}, {
+ prop: {
+ configurable: true
+ }
+});
+
+var result1 = newObj.hasOwnProperty("prop");
+delete newObj.prop;
+var result2 = newObj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/browser.js b/js/src/tests/test262/built-ins/Object/create/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/create/name.js b/js/src/tests/test262/built-ins/Object/create/name.js
new file mode 100644
index 0000000000..63cfe5f126
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/name.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 19.1.2.2
+description: >
+ Object.create.name is "create".
+info: |
+ Object.create ( O [ , Properties ] )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.create.name, "create");
+
+verifyNotEnumerable(Object.create, "name");
+verifyNotWritable(Object.create, "name");
+verifyConfigurable(Object.create, "name");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/create/not-a-constructor.js
new file mode 100644
index 0000000000..00efa6dc33
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/not-a-constructor.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.create does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(isConstructor(Object.create), false, 'isConstructor(Object.create) must return false');
+
+assert.throws(TypeError, () => {
+ new Object.create(null);
+}, '`new Object.create(null)` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/properties-arg-to-object-bigint.js b/js/src/tests/test262/built-ins/Object/create/properties-arg-to-object-bigint.js
new file mode 100644
index 0000000000..6b47fca302
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/properties-arg-to-object-bigint.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.create
+description: >
+ The Properties argument is cast to an object if it's a BigInt value
+info: |
+ Object.create ( O, Properties )
+
+ 3. If Properties is not undefined, then
+ a. Return ? ObjectDefineProperties(obj, Properties).
+
+ Runtime Semantics: ObjectDefineProperties ( O, Properties )
+
+ 2. Let props be ? ToObject(Properties).
+ 3. Let keys be ? props.[[OwnPropertyKeys]]().
+ ...
+ // All enumerable keys are added to the created object.
+features: [BigInt]
+---*/
+
+var proto = {};
+
+var obj;
+obj = Object.create(proto, 1n);
+assert.sameValue(Object.getPrototypeOf(obj), proto, 'Properties is 1n: prototype is set');
+assert.sameValue(Object.getOwnPropertyNames(obj).length, 0, 'Properties is 1n: no keys set');
+assert.sameValue(Object.getOwnPropertySymbols(obj).length, 0, 'Properties is 1n: no symbol keys set');
+
+obj = undefined;
+obj = Object.create(proto, 0n);
+assert.sameValue(Object.getPrototypeOf(obj), proto, 'Properties is 0n: prototype is set');
+assert.sameValue(Object.getOwnPropertyNames(obj).length, 0, 'Properties is 0n: no keys set');
+assert.sameValue(Object.getOwnPropertySymbols(obj).length, 0, 'Properties is 0n: no symbol keys set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/properties-arg-to-object-non-empty-string.js b/js/src/tests/test262/built-ins/Object/create/properties-arg-to-object-non-empty-string.js
new file mode 100644
index 0000000000..d14c034557
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/properties-arg-to-object-non-empty-string.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.create
+description: >
+ Throws a TypeError if the Properties argument is a non-empty string
+info: |
+ Object.create ( O, Properties )
+
+ 3. If Properties is not undefined, then
+ a. Return ? ObjectDefineProperties(obj, Properties).
+
+ Runtime Semantics: ObjectDefineProperties ( O, Properties )
+
+ 2. Let props be ? ToObject(Properties).
+ 3. Let keys be ? props.[[OwnPropertyKeys]]().
+ 4. Let descriptors be a new empty List.
+ 5. For each element nextKey of keys in List order, do
+ a. Let propDesc be ? props.[[GetOwnProperty]](nextKey).
+ b. If propDesc is not undefined and propDesc.[[Enumerable]] is true, then
+ i. Let descObj be ? Get(props, nextKey).
+ ii. Let desc be ? ToPropertyDescriptor(descObj).
+
+ ToPropertyDescriptor ( Obj )
+
+ 1. If Type(Obj) is not Object, throw a TypeError exception.
+---*/
+
+// The first nextKey is 'h' and its OwnProperty in the String object is enumerable
+// Get(props, nextKey) is an equivalent of Object('hello')[nextKey]
+// The first descObj will be 'h', so it will throw in ToPropertyDescriptor
+assert.throws(TypeError, function() {
+ Object.create({}, 'hello');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/properties-arg-to-object-null.js b/js/src/tests/test262/built-ins/Object/create/properties-arg-to-object-null.js
new file mode 100644
index 0000000000..452230e7c8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/properties-arg-to-object-null.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.create
+description: >
+ Throws a TypeError if the Properties argument is null
+info: |
+ Object.create ( O, Properties )
+
+ 3. If Properties is not undefined, then
+ a. Return ? ObjectDefineProperties(obj, Properties).
+
+ Runtime Semantics: ObjectDefineProperties ( O, Properties )
+
+ 2. Let props be ? ToObject(Properties).
+---*/
+
+assert.throws(TypeError, function() {
+ Object.create({}, null);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/properties-arg-to-object.js b/js/src/tests/test262/built-ins/Object/create/properties-arg-to-object.js
new file mode 100644
index 0000000000..e8e93500f5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/properties-arg-to-object.js
@@ -0,0 +1,61 @@
+// Copyright (C) 2019 Leo Balter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.create
+description: >
+ The Properties argument is cast to an object if not undefined
+info: |
+ Object.create ( O, Properties )
+
+ 3. If Properties is not undefined, then
+ a. Return ? ObjectDefineProperties(obj, Properties).
+
+ Runtime Semantics: ObjectDefineProperties ( O, Properties )
+
+ 2. Let props be ? ToObject(Properties).
+ 3. Let keys be ? props.[[OwnPropertyKeys]]().
+ ...
+ // All enumerable keys are added to the created object.
+features: [Symbol]
+---*/
+
+var proto = {};
+
+var obj;
+obj = Object.create(proto, true);
+assert.sameValue(Object.getPrototypeOf(obj), proto, 'Properties is true: prototype is set');
+assert.sameValue(Object.getOwnPropertyNames(obj).length, 0, 'Properties is true: no keys set');
+assert.sameValue(Object.getOwnPropertySymbols(obj).length, 0, 'Properties is true: no symbol keys set');
+
+obj = undefined;
+obj = Object.create(proto, false);
+assert.sameValue(Object.getPrototypeOf(obj), proto, 'Properties is false: prototype is set');
+assert.sameValue(Object.getOwnPropertyNames(obj).length, 0, 'Properties is false: no keys set');
+assert.sameValue(Object.getOwnPropertySymbols(obj).length, 0, 'Properties is false: no symbol keys set');
+
+obj = undefined;
+obj = Object.create(proto, 1);
+assert.sameValue(Object.getPrototypeOf(obj), proto, 'Properties is 1: prototype is set');
+assert.sameValue(Object.getOwnPropertyNames(obj).length, 0, 'Properties is 1: no keys set');
+assert.sameValue(Object.getOwnPropertySymbols(obj).length, 0, 'Properties is 1: no symbol keys set');
+
+obj = undefined;
+obj = Object.create(proto, NaN);
+assert.sameValue(Object.getPrototypeOf(obj), proto, 'Properties is NaN: prototype is set');
+assert.sameValue(Object.getOwnPropertyNames(obj).length, 0, 'Properties is NaN: no keys set');
+assert.sameValue(Object.getOwnPropertySymbols(obj).length, 0, 'Properties is NaN: no symbol keys set');
+
+obj = undefined;
+obj = Object.create(proto, '');
+assert.sameValue(Object.getPrototypeOf(obj), proto, 'Properties is the empty string: prototype is set');
+assert.sameValue(Object.getOwnPropertyNames(obj).length, 0, 'Properties is the empty string: no keys set');
+assert.sameValue(Object.getOwnPropertySymbols(obj).length, 0, 'Properties is the empty string: no symbol keys set');
+
+obj = undefined;
+obj = Object.create(proto, Symbol('s'));
+assert.sameValue(Object.getPrototypeOf(obj), proto, 'Properties is symbol: prototype is set');
+assert.sameValue(Object.getOwnPropertyNames(obj).length, 0, 'Properties is symbol: no keys set');
+assert.sameValue(Object.getOwnPropertySymbols(obj).length, 0, 'Properties is symbol: no symbol keys set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/create/shell.js b/js/src/tests/test262/built-ins/Object/create/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/create/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-0-1.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-0-1.js
new file mode 100644
index 0000000000..595fd74e6c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-0-1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-0-1
+description: Object.defineProperties must exist as a function
+---*/
+
+var f = Object.defineProperties;
+
+assert.sameValue(typeof(f), "function", 'typeof(f)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-0-2.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-0-2.js
new file mode 100644
index 0000000000..9ead28aaa7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-0-2.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-0-2
+description: >
+ Object.defineProperties must exist as a function taking 2
+ parameters
+---*/
+
+assert.sameValue(Object.defineProperties.length, 2, 'Object.defineProperties.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-1-1.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-1-1.js
new file mode 100644
index 0000000000..b1cd857ba9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-1-1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-1-1
+description: Object.defineProperties throws TypeError if 'O' is undefined
+---*/
+
+assert.throws(TypeError, function() {
+ Object.defineProperties(undefined, {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-1-2.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-1-2.js
new file mode 100644
index 0000000000..480c0b3557
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-1-2.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-1-2
+description: Object.defineProperties throws TypeError if 'O' is null
+---*/
+
+assert.throws(TypeError, function() {
+ Object.defineProperties(null, {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-1-3.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-1-3.js
new file mode 100644
index 0000000000..f4a796deb3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-1-3.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-1-3
+description: Object.defineProperties throws TypeError if 'O' is a boolean
+---*/
+
+assert.throws(TypeError, function() {
+ Object.defineProperties(true, {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-1-4.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-1-4.js
new file mode 100644
index 0000000000..8bafdbc5a6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-1-4.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-1-4
+description: Object.defineProperties throws TypeError if 'O' is a string
+---*/
+
+assert.throws(TypeError, function() {
+ Object.defineProperties("abc", {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-1.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-1.js
new file mode 100644
index 0000000000..becbf6b9d5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-1.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-1
+description: >
+ Object.defineProperties throws TypeError if type of first param is
+ not Object
+---*/
+
+assert.throws(TypeError, function() {
+ Object.defineProperties(0, {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-1.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-1.js
new file mode 100644
index 0000000000..5be8aab224
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-2-1
+description: Object.defineProperties throws TypeError if 'Properties' is null
+---*/
+
+assert.throws(TypeError, function() {
+ Object.defineProperties({}, null);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-10.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-10.js
new file mode 100644
index 0000000000..1e1cc79de8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-10.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-2-10
+description: Object.defineProperties - argument 'Properties' is an Array object
+---*/
+
+var obj = {};
+var props = [];
+var result = false;
+
+Object.defineProperty(props, "prop", {
+ get: function() {
+ result = this instanceof Array;
+ return {};
+ },
+ enumerable: true
+});
+
+Object.defineProperties(obj, props);
+
+assert(result, 'result !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-11.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-11.js
new file mode 100644
index 0000000000..abb00e902a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-11.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-2-11
+description: Object.defineProperties - argument 'Properties' is the Math object
+---*/
+
+var obj = {};
+var result = false;
+
+Object.defineProperty(Math, "prop", {
+ get: function() {
+ result = (this === Math);
+ return {};
+ },
+ enumerable: true,
+ configurable: true
+});
+
+Object.defineProperties(obj, Math);
+
+assert(result, 'result !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-12.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-12.js
new file mode 100644
index 0000000000..21c2512753
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-12.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-2-12
+description: Object.defineProperties - argument 'Properties' is a Date object
+---*/
+
+var obj = {};
+var props = new Date();
+var result = false;
+
+Object.defineProperty(props, "prop", {
+ get: function() {
+ result = this instanceof Date;
+ return {};
+ },
+ enumerable: true
+});
+
+Object.defineProperties(obj, props);
+
+assert(result, 'result !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-13.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-13.js
new file mode 100644
index 0000000000..4bdc4bf6f9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-13.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-2-13
+description: Object.defineProperties - argument 'Properties' is a RegExp object
+---*/
+
+var obj = {};
+var props = new RegExp();
+var result = false;
+
+Object.defineProperty(props, "prop", {
+ get: function() {
+ result = this instanceof RegExp;
+ return {};
+ },
+ enumerable: true
+});
+
+Object.defineProperties(obj, props);
+
+assert(result, 'result !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-14.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-14.js
new file mode 100644
index 0000000000..6fc73324d9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-14.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-2-14
+description: Object.defineProperties - argument 'Properties' is the JSON object
+---*/
+
+var obj = {};
+var result = false;
+
+Object.defineProperty(JSON, "prop", {
+ get: function() {
+ result = (this === JSON);
+ return {};
+ },
+ enumerable: true,
+ configurable: true
+});
+
+Object.defineProperties(obj, JSON);
+
+assert(result, 'result !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-15.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-15.js
new file mode 100644
index 0000000000..4194e960dc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-15.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-2-15
+description: Object.defineProperties - argument 'Properties' is an Error object
+---*/
+
+var obj = {};
+var props = new Error("test");
+var obj1 = {
+ value: 11
+};
+props.description = obj1;
+props.message = obj1;
+props.name = obj1;
+
+var result = false;
+
+Object.defineProperty(props, "prop", {
+ get: function() {
+ result = this instanceof Error;
+ return {};
+ },
+ enumerable: true
+});
+
+Object.defineProperties(obj, props);
+
+assert(result, 'result !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-16.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-16.js
new file mode 100644
index 0000000000..30757abf77
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-16.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-2-16
+description: >
+ Object.defineProperties - argument 'Properties' is the Arguments
+ object
+---*/
+
+var obj = {};
+var result = false;
+
+var Fun = function() {
+ return arguments;
+};
+var props = new Fun();
+
+Object.defineProperty(props, "prop", {
+ get: function() {
+ result = ('[object Arguments]' === Object.prototype.toString.call(this));
+ return {};
+ },
+ enumerable: true
+});
+
+Object.defineProperties(obj, props);
+
+assert(result, 'result !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-18.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-18.js
new file mode 100644
index 0000000000..f8c164658e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-18.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-2-18
+description: >
+ Object.defineProperties - argument 'Properties' is the global
+ object
+---*/
+
+var global = this;
+var obj = {};
+var result = false;
+
+try {
+ Object.defineProperty(this, "prop", {
+ get: function() {
+ result = (this === global);
+ return {};
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Object.defineProperties(obj, this);
+} catch (e) {
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+ result = true;
+} finally {
+ delete this.prop;
+}
+
+assert(result, 'result !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-2.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-2.js
new file mode 100644
index 0000000000..9ae21dcdf8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-2.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-2-2
+description: >
+ Object.defineProperties throws TypeError if 'Properties' is
+ undefined
+---*/
+
+assert.throws(TypeError, function() {
+ Object.defineProperties({}, undefined);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-3.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-3.js
new file mode 100644
index 0000000000..22fa8571eb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-3.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-2-3
+description: >
+ Object.defineProperties - argument 'Properties' is a boolean whose
+ value is false
+---*/
+
+var obj = {};
+var obj1 = Object.defineProperties(obj, false);
+
+assert.sameValue(obj, obj1, 'obj');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-4.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-4.js
new file mode 100644
index 0000000000..52e89e0a3f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-4.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-2-4
+description: >
+ Object.defineProperties - argument 'Properties' is a Boolean
+ object whose primitive value is true
+---*/
+
+var obj = {};
+var props = new Boolean(true);
+var result = false;
+
+Object.defineProperty(props, "prop", {
+ get: function() {
+ result = this instanceof Boolean;
+ return {};
+ },
+ enumerable: true
+});
+
+Object.defineProperties(obj, props);
+
+assert(result, 'result !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-5.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-5.js
new file mode 100644
index 0000000000..366f029e78
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-5.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-2-5
+description: >
+ Object.defineProperties - argument 'Properties' is any interesting
+ number
+---*/
+
+var obj = {
+ "123": 100
+};
+var obj1 = Object.defineProperties(obj, -12);
+
+assert.sameValue(obj, obj1, 'obj');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-6.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-6.js
new file mode 100644
index 0000000000..3febcd0054
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-6.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-2-6
+description: >
+ Object.defineProperties - argument 'Properties' is a Number object
+ whose primitive value is any interesting number
+---*/
+
+var obj = {};
+var props = new Number(-12);
+var result = false;
+
+Object.defineProperty(props, "prop", {
+ get: function() {
+ result = this instanceof Number;
+ return {};
+ },
+ enumerable: true
+});
+
+Object.defineProperties(obj, props);
+
+assert(result, 'result !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-7.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-7.js
new file mode 100644
index 0000000000..6de1ce0196
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-7.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-2-7
+description: >
+ Object.defineProperties - argument 'Properties' is a string whose
+ value is any interesting string
+---*/
+
+var obj = {
+ "123": 100
+};
+var obj1 = Object.defineProperties(obj, "");
+
+assert.sameValue(obj, obj1, 'obj');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-8.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-8.js
new file mode 100644
index 0000000000..31b178f961
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-8.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-2-8
+description: >
+ Object.defineProperties - argument 'Properties' is a String object
+ whose primitive value is any interesting string
+---*/
+
+var obj = {};
+var props = new String();
+var result = false;
+
+Object.defineProperty(props, "prop", {
+ get: function() {
+ result = this instanceof String;
+ return {};
+ },
+ enumerable: true
+});
+
+Object.defineProperties(obj, props);
+
+assert(result, 'result !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-9.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-9.js
new file mode 100644
index 0000000000..400144e9f8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-2-9.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-2-9
+description: >
+ Object.defineProperties - argument 'Properties' is a Function
+ object
+---*/
+
+var obj = {};
+var props = function() {};
+var result = false;
+
+Object.defineProperty(props, "prop", {
+ get: function() {
+ result = this instanceof Function;
+ return {};
+ },
+ enumerable: true
+});
+
+Object.defineProperties(obj, props);
+
+assert(result, 'result !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-1.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-1.js
new file mode 100644
index 0000000000..8b723f4950
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-1.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-3-1
+description: >
+ Object.defineProperties - enumerable own data property of
+ 'Properties' is defined in 'O'
+---*/
+
+var obj = {};
+var props = {};
+Object.defineProperty(props, "prop", {
+ value: {},
+ enumerable: true
+});
+
+Object.defineProperties(obj, props);
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-2.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-2.js
new file mode 100644
index 0000000000..058262bed0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-2.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-3-2
+description: >
+ Object.defineProperties - own data property of 'Properties' which
+ is not enumerable is not defined in 'O'
+---*/
+
+var obj = {};
+var props = {};
+
+Object.defineProperty(props, "prop", {
+ value: {},
+ enumerable: false
+});
+
+Object.defineProperties(obj, props);
+
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-3.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-3.js
new file mode 100644
index 0000000000..b62f7b74e4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-3.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-3-3
+description: >
+ Object.defineProperties - enumerable inherited data property of
+ 'Properties' is not defined in 'O'
+---*/
+
+var obj = {};
+
+var proto = {};
+
+Object.defineProperty(proto, "prop", {
+ value: {},
+ enumerable: true
+});
+
+var Con = function() {};
+Con.prototype = proto;
+var child = new Con();
+
+Object.defineProperties(obj, child);
+
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-4.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-4.js
new file mode 100644
index 0000000000..8411c337bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-4.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-3-4
+description: >
+ Object.defineProperties - enumerable own accessor property of
+ 'Properties' is defined in 'O'
+---*/
+
+var obj = {};
+
+var props = {};
+
+Object.defineProperty(props, "prop", {
+ get: function() {
+ return {};
+ },
+ enumerable: true
+});
+
+Object.defineProperties(obj, props);
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-5.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-5.js
new file mode 100644
index 0000000000..bbe7365972
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-5.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-3-5
+description: >
+ Object.defineProperties - own accessor property of 'Properties'
+ which is not enumerable is not defined in 'O'
+---*/
+
+var obj = {};
+
+var props = {};
+
+Object.defineProperty(props, "prop", {
+ get: function() {
+ return {};
+ },
+ enumerable: false
+});
+
+Object.defineProperties(obj, props);
+
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-6.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-6.js
new file mode 100644
index 0000000000..a55436d67e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-6.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-3-6
+description: >
+ Object.defineProperties - enumerable inherited accessor property
+ of 'Properties' is not defined in 'O'
+---*/
+
+var obj = {};
+var proto = {};
+
+Object.defineProperty(proto, "prop", {
+ get: function() {
+ return {};
+ },
+ enumerable: true
+});
+
+var Con = function() {};
+Con.prototype = proto;
+var child = new Con();
+
+Object.defineProperties(obj, child);
+
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-7.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-7.js
new file mode 100644
index 0000000000..6ca1b56f97
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-7.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-3-7
+description: >
+ Object.defineProperties - no additional property is defined in 'O'
+ when 'Properties' doesn't contain enumerable own property
+---*/
+
+var obj = {};
+
+var props = {};
+
+Object.defineProperty(props, "prop1", {
+ value: {},
+ enumerable: false
+});
+
+Object.defineProperty(props, "prop2", {
+ get: function() {
+ return {};
+ },
+ enumerable: false
+});
+
+Object.defineProperties(obj, props);
+
+assert.sameValue(obj.hasOwnProperty("prop1"), false, 'obj.hasOwnProperty("prop1")');
+assert.sameValue(obj.hasOwnProperty("prop2"), false, 'obj.hasOwnProperty("prop2")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-8.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-8.js
new file mode 100644
index 0000000000..152ef72746
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-3-8.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-3-8
+description: >
+ Object.defineProperties - no additional property is defined in 'O'
+ when 'Properties' doesn't contain enumerable own property
+---*/
+
+var obj = {};
+
+var props = {};
+
+Object.defineProperty(props, "prop1", {
+ value: {},
+ enumerable: false
+});
+
+Object.defineProperty(props, "prop2", {
+ get: function() {
+ return {};
+ },
+ enumerable: true
+});
+
+Object.defineProperties(obj, props);
+
+assert.sameValue(obj.hasOwnProperty("prop1"), false, 'obj.hasOwnProperty("prop1")');
+assert(obj.hasOwnProperty("prop2"), 'obj.hasOwnProperty("prop2") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-1.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-1.js
new file mode 100644
index 0000000000..b24df11a88
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-1.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-a-1
+description: >
+ Object.defineProperties - 'P' is own data property that overrides
+ enumerable inherited data property of 'Properties' is defined in
+ 'O'
+---*/
+
+var obj = {};
+
+var proto = {};
+
+Object.defineProperty(proto, "prop", {
+ value: {
+ value: 9
+ },
+ enumerable: true
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var child = new Con();
+Object.defineProperty(child, "prop", {
+ value: {
+ value: 12
+ },
+ enumerable: true
+});
+
+Object.defineProperties(obj, child);
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(obj.prop, 12, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-10.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-10.js
new file mode 100644
index 0000000000..8dee81ecfe
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-10.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-a-10
+description: >
+ Object.defineProperties - 'Properties' is a Boolean object which
+ implements its own [[Get]] method to get enumerable own property
+---*/
+
+var obj = {};
+var props = new Boolean(false);
+
+Object.defineProperty(props, "prop", {
+ value: {
+ value: 10
+ },
+ enumerable: true
+});
+Object.defineProperties(obj, props);
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(obj.prop, 10, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-11.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-11.js
new file mode 100644
index 0000000000..7431267848
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-11.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-a-11
+description: >
+ Object.defineProperties - 'Properties' is a Number object which
+ implements its own [[Get]] method to get enumerable own property
+---*/
+
+var obj = {};
+var props = new Number(-9);
+
+Object.defineProperty(props, "prop", {
+ value: {
+ value: 12
+ },
+ enumerable: true
+});
+Object.defineProperties(obj, props);
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(obj.prop, 12, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-12.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-12.js
new file mode 100644
index 0000000000..71018a560c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-12.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-a-12
+description: >
+ Object.defineProperties - 'Properties' is the Math object which
+ implements its own [[Get]] method to get enumerable own property
+---*/
+
+var obj = {};
+
+Math.prop = {
+ value: 12
+};
+Object.defineProperties(obj, Math);
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(obj.prop, 12, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-13.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-13.js
new file mode 100644
index 0000000000..f68b5f2eba
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-13.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-a-13
+description: >
+ Object.defineProperties - 'Properties' is a Date object which
+ implements its own [[Get]] method to get enumerable own property
+---*/
+
+var obj = {};
+var props = new Date();
+
+Object.defineProperty(props, "prop", {
+ value: {
+ value: 13
+ },
+ enumerable: true
+});
+Object.defineProperties(obj, props);
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(obj.prop, 13, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-14.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-14.js
new file mode 100644
index 0000000000..6487ef92ee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-14.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-a-14
+description: >
+ Object.defineProperties - 'Properties' is a RegExp object which
+ implements its own [[Get]] method to get enumerable own property
+---*/
+
+var obj = {};
+var props = new RegExp();
+
+Object.defineProperty(props, "prop", {
+ value: {
+ value: 14
+ },
+ enumerable: true
+});
+Object.defineProperties(obj, props);
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(obj.prop, 14, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-15.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-15.js
new file mode 100644
index 0000000000..b50667065a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-15.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-a-15
+description: >
+ Object.defineProperties - 'Properties' is the JSON object which
+ implements its own [[Get]] method to get enumerable own property
+---*/
+
+var obj = {};
+
+JSON.prop = {
+ value: 15
+};
+Object.defineProperties(obj, JSON);
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(obj.prop, 15, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-16.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-16.js
new file mode 100644
index 0000000000..94ece91f0d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-16.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-a-16
+description: >
+ Object.defineProperties - 'Properties' is an Error object which
+ implements its own [[Get]] method to get enumerable own property
+---*/
+
+var obj = {};
+var props = new Error("test");
+var obj1 = {
+ value: 11
+};
+props.message = obj1;
+props.name = obj1;
+props.description = obj1;
+
+props.prop = {
+ value: 16
+};
+Object.defineProperties(obj, props);
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(obj.prop, 16, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-17.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-17.js
new file mode 100644
index 0000000000..e829c3973c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-17.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-a-17
+description: >
+ Object.defineProperties - 'Properties' is the Arguments object
+ which implements its own [[Get]] method to get enumerable own
+ property
+---*/
+
+var obj = {};
+var arg;
+
+(function fun() {
+ arg = arguments;
+}());
+
+Object.defineProperty(arg, "prop", {
+ value: {
+ value: 17
+ },
+ enumerable: true
+});
+
+Object.defineProperties(obj, arg);
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(obj.prop, 17, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-2.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-2.js
new file mode 100644
index 0000000000..1c1c5f0ae0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-2.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-a-2
+description: >
+ Object.defineProperties - 'P' is own data property that overrides
+ enumerable inherited accessor property of 'Properties' is defined
+ in 'O'
+---*/
+
+var obj = {};
+var proto = {};
+
+Object.defineProperty(proto, "prop", {
+ get: function() {
+ return {
+ value: 9
+ };
+ },
+ enumerable: true
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var child = new Con();
+Object.defineProperty(child, "prop", {
+ value: {
+ value: 12
+ },
+ enumerable: true
+});
+Object.defineProperties(obj, child);
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(obj.prop, 12, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-3.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-3.js
new file mode 100644
index 0000000000..60760a291d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-3.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-a-3
+description: >
+ Object.defineProperties - enumerable own accessor property of
+ 'Properties' that overrides enumerable inherited data property of
+ 'Properties' is defined in 'O'
+---*/
+
+var obj = {};
+
+var proto = {};
+
+Object.defineProperty(proto, "prop", {
+ value: {
+ value: 9
+ },
+ enumerable: true
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var child = new Con();
+Object.defineProperty(child, "prop", {
+ get: function() {
+ return {
+ value: 12
+ };
+ },
+ enumerable: true
+});
+Object.defineProperties(obj, child);
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(obj.prop, 12, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-4.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-4.js
new file mode 100644
index 0000000000..d7ab97d9d4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-4.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-a-4
+description: >
+ Object.defineProperties - enumerable own accessor property of
+ 'Properties' that overrides enumerable inherited accessor property
+ of 'Properties' is defined in 'O'
+---*/
+
+var obj = {};
+
+var proto = {};
+
+Object.defineProperty(proto, "prop", {
+ get: function() {
+ return {
+ value: 9
+ };
+ },
+ enumerable: false
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var child = new Con();
+Object.defineProperty(child, "prop", {
+ get: function() {
+ return {
+ value: 12
+ };
+ },
+ enumerable: true
+});
+Object.defineProperties(obj, child);
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(obj.prop, 12, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-5.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-5.js
new file mode 100644
index 0000000000..1e0fe892c6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-5.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-a-5
+description: >
+ Object.defineProperties - enumerable own accessor property of
+ 'Properties' without a get function is defined in 'O'
+---*/
+
+var obj = {};
+
+var props = {};
+Object.defineProperty(props, "prop", {
+ get: function() {
+ return {
+ set: function() {}
+ };
+ },
+ enumerable: true
+});
+
+Object.defineProperties(obj, props);
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(typeof obj.prop, "undefined", 'typeof obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-6.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-6.js
new file mode 100644
index 0000000000..059c12551d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-6.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-a-6
+description: >
+ Object.defineProperties - enumerable own accessor property of
+ 'Properties' without a get function that overrides enumerable
+ inherited accessor property of 'Properties' is defined in 'O'
+---*/
+
+var obj = {};
+
+var proto = {};
+
+Object.defineProperty(proto, "prop", {
+ get: function() {
+ return 12;
+ },
+ enumerable: true
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var child = new Con();
+Object.defineProperty(child, "prop", {
+ get: function() {
+ return {
+ set: function() {}
+ };
+ },
+ enumerable: true
+});
+Object.defineProperties(obj, child);
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(typeof obj.prop, "undefined", 'typeof obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-7.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-7.js
new file mode 100644
index 0000000000..4144378377
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-7.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-a-7
+description: >
+ Object.defineProperties - 'Properties' is a Function object which
+ implements its own [[Get]] method to get enumerable own property
+---*/
+
+var obj = {};
+var props = function() {};
+
+Object.defineProperty(props, "prop", {
+ value: {
+ value: 7
+ },
+ enumerable: true
+});
+
+Object.defineProperties(obj, props);
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(obj.prop, 7, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-8.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-8.js
new file mode 100644
index 0000000000..a471a82b71
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-8.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-a-8
+description: >
+ Object.defineProperties - 'Properties' is an Array object which
+ implements its own [[Get]] method to get enumerable own property
+---*/
+
+var obj = {};
+var props = [];
+var descObj = {
+ value: 8
+};
+
+Object.defineProperty(props, "prop", {
+ value: descObj,
+ enumerable: true
+});
+Object.defineProperties(obj, props);
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(obj.prop, 8, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-9.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-9.js
new file mode 100644
index 0000000000..e392935c71
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-a-9.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-a-9
+description: >
+ Object.defineProperties - 'Properties' is a String object which
+ implements its own [[Get]] method to get enumerable own property
+---*/
+
+var obj = {};
+var props = new String();
+
+Object.defineProperty(props, "prop", {
+ value: {
+ value: 9
+ },
+ enumerable: true
+});
+Object.defineProperties(obj, props);
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(obj.prop, 9, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-1.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-1.js
new file mode 100644
index 0000000000..7077d83271
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-1.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-1
+description: Object.defineProperties - 'descObj' is undefined (8.10.5 step 1)
+---*/
+
+var obj = {};
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ prop: undefined
+ });
+});
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-10.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-10.js
new file mode 100644
index 0000000000..ae1e61601b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-10.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-10
+description: >
+ Object.defineProperties - 'enumerable' property of 'descObj' is
+ own data property that overrides an inherited data property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+var proto = {
+ enumerable: true
+};
+
+var Con = function() {};
+Con.prototype = proto;
+var descObj = new Con();
+
+Object.defineProperty(descObj, "enumerable", {
+ value: false
+});
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-100.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-100.js
new file mode 100644
index 0000000000..7eaf8533f8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-100.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-100
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is Boolean object (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: new Boolean(true)
+ }
+});
+
+var preCheck = obj.hasOwnProperty("property");
+delete obj.property;
+
+assert(preCheck, 'preCheck !== true');
+assert.sameValue(obj.hasOwnProperty("property"), false, 'obj.hasOwnProperty("property")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-101.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-101.js
new file mode 100644
index 0000000000..aa3c92a5a4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-101.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-101
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is Number object (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: new Number(-123)
+ }
+});
+var preCheck = obj.hasOwnProperty("property");
+delete obj.property;
+
+assert(preCheck, 'preCheck !== true');
+assert.sameValue(obj.hasOwnProperty("property"), false, 'obj.hasOwnProperty("property")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-102.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-102.js
new file mode 100644
index 0000000000..531c90f8b7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-102.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-102
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is the Math object (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: Math
+ }
+});
+var preCheck = obj.hasOwnProperty("property");
+delete obj.property;
+
+assert(preCheck, 'preCheck !== true');
+assert.sameValue(obj.hasOwnProperty("property"), false, 'obj.hasOwnProperty("property")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-103.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-103.js
new file mode 100644
index 0000000000..886e4d0551
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-103.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-103
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is Date object (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: new Date()
+ }
+});
+var preCheck = obj.hasOwnProperty("property");
+delete obj.property;
+
+assert(preCheck, 'preCheck !== true');
+assert.sameValue(obj.hasOwnProperty("property"), false, 'obj.hasOwnProperty("property")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-104.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-104.js
new file mode 100644
index 0000000000..529b0f887b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-104.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-104
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is RegExp object (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: new RegExp()
+ }
+});
+var preCheck = obj.hasOwnProperty("property");
+delete obj.property;
+
+assert(preCheck, 'preCheck !== true');
+assert.sameValue(obj.hasOwnProperty("property"), false, 'obj.hasOwnProperty("property")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-105.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-105.js
new file mode 100644
index 0000000000..a8e9e5f083
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-105.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-105
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is the JSON object (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: JSON
+ }
+});
+var preCheck = obj.hasOwnProperty("property");
+delete obj.property;
+
+assert(preCheck, 'preCheck !== true');
+assert.sameValue(obj.hasOwnProperty("property"), false, 'obj.hasOwnProperty("property")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-106.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-106.js
new file mode 100644
index 0000000000..7df020decc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-106.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-106
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is Error object (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: new SyntaxError()
+ }
+});
+var preCheck = obj.hasOwnProperty("property");
+delete obj.property;
+
+assert(preCheck, 'preCheck !== true');
+assert.sameValue(obj.hasOwnProperty("property"), false, 'obj.hasOwnProperty("property")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-107.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-107.js
new file mode 100644
index 0000000000..62b7b65fc3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-107.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-107
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is the Argument object (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+var func = function(a, b, c) {
+ return arguments;
+};
+
+var args = func(1, true, "a");
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: args
+ }
+});
+var preCheck = obj.hasOwnProperty("property");
+delete obj.property;
+
+assert(preCheck, 'preCheck !== true');
+assert.sameValue(obj.hasOwnProperty("property"), false, 'obj.hasOwnProperty("property")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-109.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-109.js
new file mode 100644
index 0000000000..fcb4b1f703
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-109.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-109
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is the global object (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: this
+ }
+});
+var preCheck = obj.hasOwnProperty("property");
+delete obj.property;
+
+assert(preCheck, 'preCheck !== true');
+assert.sameValue(obj.hasOwnProperty("property"), false, 'obj.hasOwnProperty("property")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-11.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-11.js
new file mode 100644
index 0000000000..14fd972ccb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-11.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-11
+description: >
+ Object.defineProperties - 'enumerable' property of 'descObj' is
+ own data property that overrides an inherited accessor property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var proto = {};
+var accessed = false;
+
+Object.defineProperty(proto, "enumerable", {
+ get: function() {
+ return true;
+ }
+});
+
+var Con = function() {};
+Con.prototype = proto;
+var descObj = new Con();
+
+Object.defineProperty(descObj, "enumerable", {
+ value: false
+});
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-110.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-110.js
new file mode 100644
index 0000000000..9725984d18
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-110.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-110
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is a string (value is 'false') which is treated as true
+ value (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: "false"
+ }
+});
+var preCheck = obj.hasOwnProperty("property");
+delete obj.property;
+
+assert(preCheck, 'preCheck !== true');
+assert.sameValue(obj.hasOwnProperty("property"), false, 'obj.hasOwnProperty("property")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-111.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-111.js
new file mode 100644
index 0000000000..8ae8b98916
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-111.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-111
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is new Boolean(false) which is treated as true value
+ (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: new Boolean(false)
+ }
+});
+var preCheck = obj.hasOwnProperty("property");
+delete obj.property;
+
+assert(preCheck, 'preCheck !== true');
+assert.sameValue(obj.hasOwnProperty("property"), false, 'obj.hasOwnProperty("property")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-112.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-112.js
new file mode 100644
index 0000000000..da4194aec2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-112.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-112
+description: >
+ Object.defineProperties - 'value' property of 'descObj' is present
+ (8.10.5 step 5)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ value: 300
+ }
+});
+
+assert.sameValue(obj.property, 300, 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-113.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-113.js
new file mode 100644
index 0000000000..f0664ba959
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-113.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-113
+description: >
+ Object.defineProperties - 'value' property of 'descObj' is not
+ present (8.10.5 step 5)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: true
+ }
+});
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(typeof(obj.property), "undefined", 'typeof (obj.property)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-114.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-114.js
new file mode 100644
index 0000000000..1d7b790ee5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-114.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-114
+description: >
+ Object.defineProperties - 'value' property of 'descObj' is own
+ data property (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ value: "ownDataProperty"
+ }
+});
+
+assert.sameValue(obj.property, "ownDataProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-115.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-115.js
new file mode 100644
index 0000000000..d9c437ce75
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-115.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-115
+description: >
+ Object.defineProperties - 'value' property of 'descObj' is
+ inherited data property (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+var proto = {
+ value: "inheritedDataProperty"
+};
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(obj.property, "inheritedDataProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-116.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-116.js
new file mode 100644
index 0000000000..7e2c075c5e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-116.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-116
+description: >
+ Object.defineProperties - 'value' property of 'descObj' is own
+ data property that overrides an inherited data property (8.10.5
+ step 5.a)
+---*/
+
+var obj = {};
+
+var proto = {
+ value: "inheritedDataProperty"
+};
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+
+descObj.value = "ownDataProperty";
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(obj.property, "ownDataProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-117.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-117.js
new file mode 100644
index 0000000000..b58a976807
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-117.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-117
+description: >
+ Object.defineProperties - 'value' property of 'descObj' is own
+ data property that overrides an inherited accessor property
+ (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+var proto = {};
+
+Object.defineProperty(proto, "value", {
+ get: function() {
+ return "inheritedAccessorProperty";
+ }
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+
+Object.defineProperty(descObj, "value", {
+ value: "ownDataProperty"
+});
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(obj.property, "ownDataProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-118.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-118.js
new file mode 100644
index 0000000000..ee66064b52
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-118.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-118
+description: >
+ Object.defineProperties - 'value' property of 'descObj' is own
+ accessor property (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+var descObj = {};
+
+Object.defineProperty(descObj, "value", {
+ get: function() {
+ return "ownAccessorProperty";
+ }
+});
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(obj.property, "ownAccessorProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-119.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-119.js
new file mode 100644
index 0000000000..f5946fc393
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-119.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-119
+description: >
+ Object.defineProperties - 'value' property of 'descObj' is
+ inherited accessor property (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+var proto = {};
+
+Object.defineProperty(proto, "value", {
+ get: function() {
+ return "inheritedAccessorProperty";
+ }
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(obj.property, "inheritedAccessorProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-12.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-12.js
new file mode 100644
index 0000000000..f0b95e0855
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-12.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-12
+description: >
+ Object.defineProperties - 'enumerable' property of 'descObj' is
+ own accessor property (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+var descObj = {};
+
+Object.defineProperty(descObj, "enumerable", {
+ get: function() {
+ return true;
+ }
+});
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-120.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-120.js
new file mode 100644
index 0000000000..01189b991e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-120.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-120
+description: >
+ Object.defineProperties - 'value' property of 'descObj' is own
+ accessor property that overrides an inherited data property
+ (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+var proto = {
+ value: "inheritedDataProperty"
+};
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+
+Object.defineProperty(descObj, "value", {
+ get: function() {
+ return "ownAccessorProperty";
+ }
+});
+
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(obj.property, "ownAccessorProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-121.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-121.js
new file mode 100644
index 0000000000..5c0238b707
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-121.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-121
+description: >
+ Object.defineProperties - 'value' property of 'descObj' is own
+ accessor property that overrides an inherited accessor property
+ (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+var proto = {};
+
+Object.defineProperty(proto, "value", {
+ get: function() {
+ return "inheritedAccessorProperty";
+ }
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+
+Object.defineProperty(descObj, "value", {
+ get: function() {
+ return "ownAccessorProperty";
+ }
+});
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(obj.property, "ownAccessorProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-122.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-122.js
new file mode 100644
index 0000000000..1257d3438e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-122.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-122
+description: >
+ Object.defineProperties - 'value' property of 'descObj' is own
+ accessor property without a get function (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+var descObj = {};
+
+Object.defineProperty(descObj, "value", {
+ set: function() {}
+});
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(typeof(obj.property), "undefined", 'typeof (obj.property)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-123.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-123.js
new file mode 100644
index 0000000000..9f95a0b1be
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-123.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-123
+description: >
+ Object.defineProperties - 'value' property of 'descObj' is own
+ accessor property without a get function that overrides an
+ inherited accessor property (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+var proto = {};
+
+Object.defineProperty(proto, "value", {
+ get: function() {
+ return "inheritedAccessorProperty";
+ }
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+
+Object.defineProperty(descObj, "value", {
+ set: function() {}
+});
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(typeof(obj.property), "undefined", 'typeof (obj.property)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-124.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-124.js
new file mode 100644
index 0000000000..2c7bf4947b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-124.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-124
+description: >
+ Object.defineProperties - 'value' property of 'descObj' is
+ inherited accessor property without a get function (8.10.5 step
+ 5.a)
+---*/
+
+var obj = {};
+
+var proto = {};
+
+Object.defineProperty(proto, "value", {
+ set: function() {}
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(typeof(obj.property), "undefined", 'typeof (obj.property)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-125.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-125.js
new file mode 100644
index 0000000000..4253bcf633
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-125.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-125
+description: >
+ Object.defineProperties - 'descObj' is a Function object which
+ implements its own [[Get]] method to get 'value' property (8.10.5
+ step 5.a)
+---*/
+
+var obj = {};
+
+var func = function(a, b) {
+ return a + b;
+};
+
+func.value = "Function";
+
+Object.defineProperties(obj, {
+ property: func
+});
+
+assert.sameValue(obj.property, "Function", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-126.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-126.js
new file mode 100644
index 0000000000..a2836b72d1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-126.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-126
+description: >
+ Object.defineProperties - 'descObj' is an Array object which
+ implements its own [[Get]] method to get 'value' property (8.10.5
+ step 5.a)
+---*/
+
+var obj = {};
+
+var arr = [1, 2, 3];
+
+arr.value = "Array";
+
+Object.defineProperties(obj, {
+ property: arr
+});
+
+assert.sameValue(obj.property, "Array", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-127.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-127.js
new file mode 100644
index 0000000000..17b87d21ef
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-127.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-127
+description: >
+ Object.defineProperties - 'descObj' is a String object which
+ implements its own [[Get]] method to get 'value' property (8.10.5
+ step 5.a)
+---*/
+
+var obj = {};
+
+var str = new String("abc");
+
+str.value = "String";
+
+Object.defineProperties(obj, {
+ property: str
+});
+
+assert.sameValue(obj.property, "String", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-128.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-128.js
new file mode 100644
index 0000000000..831f88eabe
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-128.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-128
+description: >
+ Object.defineProperties - 'descObj' is a Boolean object which
+ implements its own [[Get]] method to get 'value' property (8.10.5
+ step 5.a)
+---*/
+
+var obj = {};
+
+var descObj = new Boolean(false);
+
+descObj.value = "Boolean";
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(obj.property, "Boolean", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-129.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-129.js
new file mode 100644
index 0000000000..dc8692e551
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-129.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-129
+description: >
+ Object.defineProperties - 'descObj' is a Number object which
+ implements its own [[Get]] method to get 'value' property (8.10.5
+ step 5.a)
+---*/
+
+var obj = {};
+
+var descObj = new Number(-9);
+
+descObj.value = "Number";
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(obj.property, "Number", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-13.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-13.js
new file mode 100644
index 0000000000..0de93ef110
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-13.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-13
+description: >
+ Object.defineProperties - 'enumerable' property of 'descObj' is
+ inherited accessor property (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var proto = {};
+var accessed = false;
+
+Object.defineProperty(proto, "enumerable", {
+ get: function() {
+ return true;
+ }
+});
+
+var Con = function() {};
+Con.prototype = proto;
+var descObj = new Con();
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-130.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-130.js
new file mode 100644
index 0000000000..42bc63e895
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-130.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-130
+description: >
+ Object.defineProperties - 'descObj' is the Math object which
+ implements its own [[Get]] method to get 'value' property (8.10.5
+ step 5.a)
+---*/
+
+var obj = {};
+
+Math.value = "Math";
+
+Object.defineProperties(obj, {
+ property: Math
+});
+
+assert.sameValue(obj.property, "Math", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-131.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-131.js
new file mode 100644
index 0000000000..fcf70c330b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-131.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-131
+description: >
+ Object.defineProperties - 'descObj' is a Date object which
+ implements its own [[Get]] method to get 'value' property (8.10.5
+ step 5.a)
+---*/
+
+var obj = {};
+
+var descObj = new Date();
+
+descObj.value = "Date";
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(obj.property, "Date", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-132.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-132.js
new file mode 100644
index 0000000000..adc4c774af
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-132.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-132
+description: >
+ Object.defineProperties - 'descObj' is a RegExp object which
+ implements its own [[Get]] method to get 'value' property (8.10.5
+ step 5.a)
+---*/
+
+var obj = {};
+
+var descObj = new RegExp();
+
+descObj.value = "RegExp";
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(obj.property, "RegExp", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-133.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-133.js
new file mode 100644
index 0000000000..8432683d13
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-133.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-133
+description: >
+ Object.defineProperties - 'descObj' is the JSON object which
+ implements its own [[Get]] method to get 'value' property (8.10.5
+ step 5.a)
+---*/
+
+var obj = {};
+
+JSON.value = "JSON";
+
+Object.defineProperties(obj, {
+ property: JSON
+});
+
+assert.sameValue(obj.property, "JSON", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-134.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-134.js
new file mode 100644
index 0000000000..f580540a92
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-134.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-134
+description: >
+ Object.defineProperties - 'descObj' is an Error object which
+ implements its own [[Get]] method to get 'value' property (8.10.5
+ step 5.a)
+---*/
+
+var obj = {};
+
+var descObj = new Error();
+
+descObj.value = "Error";
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(obj.property, "Error", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-135.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-135.js
new file mode 100644
index 0000000000..cc20f07502
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-135.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-135
+description: >
+ Object.defineProperties - 'descObj' is the Arguments object which
+ implements its own [[Get]] method to get 'value' property (8.10.5
+ step 5.a)
+---*/
+
+var obj = {};
+
+var func = function(a, b) {
+ arguments.value = "arguments";
+
+ Object.defineProperties(obj, {
+ property: arguments
+ });
+
+ return obj.property === "arguments";
+};
+
+assert(func(), 'func() !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-137.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-137.js
new file mode 100644
index 0000000000..f59becd3ce
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-137.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-137
+description: >
+ Object.defineProperties - 'descObj' is the global object which
+ implements its own [[Get]] method to get 'value' property (8.10.5
+ step 5.a)
+---*/
+
+var obj = {};
+
+this.value = "global";
+
+Object.defineProperties(obj, {
+ property: this
+});
+
+assert.sameValue(obj.property, "global", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-138.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-138.js
new file mode 100644
index 0000000000..1ca3793d7b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-138.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-138
+description: >
+ Object.defineProperties - 'writable' property of 'descObj' is
+ present (8.10.5 step 6)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: false
+ }
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-139.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-139.js
new file mode 100644
index 0000000000..f73e256111
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-139.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-139
+description: >
+ Object.defineProperties - 'writable' property of 'descObj' is not
+ present (8.10.5 step 6)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ value: "abc"
+ }
+});
+
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-14.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-14.js
new file mode 100644
index 0000000000..e259f7527b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-14.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-14
+description: >
+ Object.defineProperties - 'enumerable' property of 'descObj' is
+ own accessor property that overrides an inherited data property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+var proto = {
+ enumerable: true
+};
+
+var Con = function() {};
+Con.prototype = proto;
+var descObj = new Con();
+
+Object.defineProperty(descObj, "enumerable", {
+ get: function() {
+ return false;
+ }
+});
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-140.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-140.js
new file mode 100644
index 0000000000..5e059a4a76
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-140.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-140
+description: >
+ Object.defineProperties - 'writable' property of 'descObj' is own
+ data property (8.10.5 step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: false
+ }
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-141.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-141.js
new file mode 100644
index 0000000000..da71de2a5e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-141.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-141
+description: >
+ Object.defineProperties - 'writable' property of 'descObj' is
+ inherited data property (8.10.5 step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var proto = {
+ writable: false
+};
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-142.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-142.js
new file mode 100644
index 0000000000..226a32e614
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-142.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-142
+description: >
+ Object.defineProperties - 'writable' property of 'descObj' is own
+ data property that overrides an inherited data property (8.10.5
+ step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var proto = {
+ writable: true
+};
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+
+descObj.writable = false;
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-143.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-143.js
new file mode 100644
index 0000000000..0336ed473b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-143.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-143
+description: >
+ Object.defineProperties - 'writable' property of 'descObj' is own
+ data property that overrides an inherited accessor property
+ (8.10.5 step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var proto = {
+ value: 120
+};
+
+Object.defineProperty(proto, "writable", {
+ get: function() {
+ return true;
+ }
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+
+Object.defineProperty(descObj, "writable", {
+ value: false
+});
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-144.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-144.js
new file mode 100644
index 0000000000..1fc7a18431
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-144.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-144
+description: >
+ Object.defineProperties - 'writable' property of 'descObj' is own
+ accessor property (8.10.5 step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var descObj = {};
+
+Object.defineProperty(descObj, "writable", {
+ get: function() {
+ return false;
+ }
+});
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-145.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-145.js
new file mode 100644
index 0000000000..9d688d232c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-145.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-145
+description: >
+ Object.defineProperties - 'writable' property of 'descObj' is
+ inherited accessor property (8.10.5 step 6.a)
+---*/
+
+var obj = {};
+
+var proto = {};
+
+Object.defineProperty(proto, "writable", {
+ get: function() {
+ return true;
+ }
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+obj.property = "isWritable";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(obj.property, "isWritable", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-146.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-146.js
new file mode 100644
index 0000000000..4cd423d4aa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-146.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-146
+description: >
+ Object.defineProperties - 'writable' property of 'descObj' is own
+ accessor property that overrides an inherited data property
+ (8.10.5 step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var proto = {
+ writable: true
+};
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+
+Object.defineProperty(descObj, "writable", {
+ get: function() {
+ return false;
+ }
+});
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-147.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-147.js
new file mode 100644
index 0000000000..8d1b4a1b50
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-147.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-147
+description: >
+ Object.defineProperties - 'writable' property of 'descObj' is own
+ accessor property that overrides an inherited accessor property
+ (8.10.5 step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var proto = {};
+
+Object.defineProperty(proto, "writable", {
+ get: function() {
+ return true;
+ }
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+
+Object.defineProperty(descObj, "writable", {
+ get: function() {
+ return false;
+ }
+});
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-148.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-148.js
new file mode 100644
index 0000000000..63cb98e814
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-148.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-148
+description: >
+ Object.defineProperties - 'writable' property of 'descObj' is own
+ accessor property without a get function (8.10.5 step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var descObj = {};
+
+Object.defineProperty(descObj, "writable", {
+ set: function() {}
+});
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-149.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-149.js
new file mode 100644
index 0000000000..1c2556cbc8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-149.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-149
+description: >
+ Object.defineProperties - 'writable' property of 'descObj' is own
+ accessor property without a get function that overrides an
+ inherited accessor property (8.10.5 step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var proto = {};
+
+Object.defineProperty(proto, "writable", {
+ get: function() {
+ return true;
+ }
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+
+Object.defineProperty(descObj, "writable", {
+ set: function() {}
+});
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-15.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-15.js
new file mode 100644
index 0000000000..36a066918e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-15.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-15
+description: >
+ Object.defineProperties - 'enumerable' property of 'descObj' is
+ own accessor property that overrides an inherited accessor
+ property (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var proto = {};
+var accessed = false;
+Object.defineProperty(proto, "enumerable", {
+ get: function() {
+ return true;
+ }
+});
+
+var Con = function() {};
+Con.prototype = proto;
+var descObj = new Con();
+
+Object.defineProperty(descObj, "enumerable", {
+ get: function() {
+ return false;
+ }
+});
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-150.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-150.js
new file mode 100644
index 0000000000..4c4b1717dc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-150.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-150
+description: >
+ Object.defineProperties - 'writable' property of 'descObj' is
+ inherited accessor property without a get function (8.10.5 step
+ 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var proto = {};
+
+Object.defineProperty(proto, "writable", {
+ set: function() {}
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-151.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-151.js
new file mode 100644
index 0000000000..65c386d29e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-151.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-151
+description: >
+ Object.defineProperties - 'descObj' is a Function object which
+ implements its own [[Get]] method to get 'writable' property
+ (8.10.5 step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var func = function(a, b) {
+ return a + b;
+};
+
+func.writable = false;
+
+Object.defineProperties(obj, {
+ property: func
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-152.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-152.js
new file mode 100644
index 0000000000..8c48fb76e7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-152.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-152
+description: >
+ Object.defineProperties - 'descObj' is an Array object which
+ implements its own [[Get]] method to get 'writable' property
+ (8.10.5 step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var arr = [1, 2, 3];
+
+arr.writable = false;
+
+Object.defineProperties(obj, {
+ property: arr
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-153.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-153.js
new file mode 100644
index 0000000000..bb53c4479c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-153.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-153
+description: >
+ Object.defineProperties - 'descObj' is a String object which
+ implements its own [[Get]] method to get 'writable' property
+ (8.10.5 step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var str = new String("abc");
+
+str.writable = false;
+
+Object.defineProperties(obj, {
+ property: str
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-154.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-154.js
new file mode 100644
index 0000000000..9169fecaa5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-154.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-154
+description: >
+ Object.defineProperties - 'descObj' is a Boolean object which
+ implements its own [[Get]] method to get 'writable' property
+ (8.10.5 step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var descObj = new Boolean(false);
+
+descObj.writable = false;
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-155.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-155.js
new file mode 100644
index 0000000000..9e00beb444
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-155.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-155
+description: >
+ Object.defineProperties - 'descObj' is a Number object which
+ implements its own [[Get]] method to get 'writable' property
+ (8.10.5 step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var descObj = new Number(-9);
+
+descObj.writable = false;
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-156.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-156.js
new file mode 100644
index 0000000000..2ecb58c0ff
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-156.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-156
+description: >
+ Object.defineProperties - 'descObj' is the Math object which
+ implements its own [[Get]] method to get 'writable' property
+ (8.10.5 step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Math.writable = false;
+
+Object.defineProperties(obj, {
+ property: Math
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-157.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-157.js
new file mode 100644
index 0000000000..f59bf901cf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-157.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-157
+description: >
+ Object.defineProperties - 'descObj' is a Date object which
+ implements its own [[Get]] method to get 'writable' property
+ (8.10.5 step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var descObj = new Date();
+
+descObj.writable = false;
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-158.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-158.js
new file mode 100644
index 0000000000..3dfaede9c5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-158.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-158
+description: >
+ Object.defineProperties - 'descObj' is a RegExp object which
+ implements its own [[Get]] method to get 'writable' property
+ (8.10.5 step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var descObj = new RegExp();
+
+descObj.writable = false;
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-159.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-159.js
new file mode 100644
index 0000000000..8aa6779cc4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-159.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-159
+description: >
+ Object.defineProperties - 'descObj' is the JSON object which
+ implements its own [[Get]] method to get 'writable' property
+ (8.10.5 step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+JSON.writable = false;
+
+Object.defineProperties(obj, {
+ property: JSON
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-16.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-16.js
new file mode 100644
index 0000000000..de78e32694
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-16.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-16
+description: >
+ Object.defineProperties - 'enumerable' property of 'descObj' is
+ own accessor property without a get function (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+var descObj = {};
+
+Object.defineProperty(descObj, "enumerable", {
+ set: function() {}
+});
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-160.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-160.js
new file mode 100644
index 0000000000..5b32ddb731
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-160.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-160
+description: >
+ Object.defineProperties - 'descObj' is an Error object which
+ implements its own [[Get]] method to get 'writable' property
+ (8.10.5 step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var descObj = new Error();
+
+descObj.writable = false;
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-161.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-161.js
new file mode 100644
index 0000000000..1b952cf469
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-161.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-161
+description: >
+ Object.defineProperties - 'descObj' is the Arguments object which
+ implements its own [[Get]] method to get 'writable' property
+ (8.10.5 step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var func = function(a, b) {
+ arguments.writable = false;
+
+ Object.defineProperties(obj, {
+ property: arguments
+ });
+
+ assert(obj.hasOwnProperty("property"));
+ verifyNotWritable(obj, "property");
+};
+
+func();
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-163.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-163.js
new file mode 100644
index 0000000000..16940fe042
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-163.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-163
+description: >
+ Object.defineProperties - 'descObj' is the global object which
+ implements its own [[Get]] method to get 'writable' property
+ (8.10.5 step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+this.writable = false;
+
+Object.defineProperties(obj, {
+ property: this
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-164.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-164.js
new file mode 100644
index 0000000000..46ee75a0b4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-164.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-164
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is undefined (8.10.5 step 6.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: undefined
+ }
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-165.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-165.js
new file mode 100644
index 0000000000..4c84d6a35f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-165.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-165
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is null (8.10.5 step 6.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: null
+ }
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-166.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-166.js
new file mode 100644
index 0000000000..d1c7d672d4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-166.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-166
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is true (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: true
+ }
+});
+
+obj.property = "isWritable";
+
+assert.sameValue(obj.property, "isWritable", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-167.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-167.js
new file mode 100644
index 0000000000..93001e24f6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-167.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-167
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is false (8.10.5 step 6.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: false
+ }
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-168.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-168.js
new file mode 100644
index 0000000000..59e2d01fe4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-168.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-168
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is 0 (8.10.5 step 6.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: 0
+ }
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-169.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-169.js
new file mode 100644
index 0000000000..1482e22d29
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-169.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-169
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is +0 (8.10.5 step 6.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: +0
+ }
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-17.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-17.js
new file mode 100644
index 0000000000..52600bb9b5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-17.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-17
+description: >
+ Object.defineProperties - 'enumerable' property of 'descObj' is
+ own accessor property without a get function that overrides an
+ inherited accessor property (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var proto = {};
+var accessed = false;
+Object.defineProperty(proto, "enumerable", {
+ get: function() {
+ return false;
+ }
+});
+
+var Con = function() {};
+Con.prototype = proto;
+var descObj = new Con();
+
+Object.defineProperty(descObj, "enumerable", {
+ set: function() {}
+});
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-170.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-170.js
new file mode 100644
index 0000000000..44fcd2d56f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-170.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-170
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is -0 (8.10.5 step 6.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: -0
+ }
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-171.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-171.js
new file mode 100644
index 0000000000..5a4d2a2dda
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-171.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-171
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is NaN (8.10.5 step 6.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: NaN
+ }
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-172.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-172.js
new file mode 100644
index 0000000000..d0d034cd00
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-172.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-172
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is positive number (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: 123
+ }
+});
+
+obj.property = "isWritable";
+
+assert.sameValue(obj.property, "isWritable", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-173.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-173.js
new file mode 100644
index 0000000000..fc091a0eb5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-173.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-173
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is negative number (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: -123
+ }
+});
+
+obj.property = "isWritable";
+
+assert.sameValue(obj.property, "isWritable", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-174.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-174.js
new file mode 100644
index 0000000000..d018248861
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-174.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-174
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is empty string (8.10.5 step 6.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: ""
+ }
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-175.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-175.js
new file mode 100644
index 0000000000..61d33767cc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-175.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-175
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is non-empty string (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: "abc"
+ }
+});
+
+obj.property = "isWritable";
+
+assert.sameValue(obj.property, "isWritable", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-176.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-176.js
new file mode 100644
index 0000000000..9a022d7ae2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-176.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-176
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is Function object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: function() {}
+ }
+});
+
+obj.property = "isWritable";
+
+assert.sameValue(obj.property, "isWritable", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-177.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-177.js
new file mode 100644
index 0000000000..76d32801ee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-177.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-177
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is Array object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: []
+ }
+});
+
+obj.property = "isWritable";
+
+assert.sameValue(obj.property, "isWritable", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-178.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-178.js
new file mode 100644
index 0000000000..456bd594cc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-178.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-178
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is String object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: new String("abc")
+ }
+});
+
+obj.property = "isWritable";
+
+assert.sameValue(obj.property, "isWritable", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-179.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-179.js
new file mode 100644
index 0000000000..902dae0048
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-179.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-179
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is Boolean object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: new Boolean(true)
+ }
+});
+
+obj.property = "isWritable";
+
+assert.sameValue(obj.property, "isWritable", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-18.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-18.js
new file mode 100644
index 0000000000..115d59f7c7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-18.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-18
+description: >
+ Object.defineProperties - 'enumerable' property of 'descObj' is
+ inherited accessor property without a get function (8.10.5 step
+ 3.a)
+---*/
+
+var obj = {};
+var proto = {};
+var accessed = false;
+
+Object.defineProperty(proto, "enumerable", {
+ set: function() {}
+});
+
+var Con = function() {};
+Con.prototype = proto;
+var descObj = new Con();
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-180.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-180.js
new file mode 100644
index 0000000000..d4b8293b6d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-180.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-180
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is Number object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: new Number(123)
+ }
+});
+
+obj.property = "isWritable";
+
+assert.sameValue(obj.property, "isWritable", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-181.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-181.js
new file mode 100644
index 0000000000..58cdff2505
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-181.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-181
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is the Math object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: Math
+ }
+});
+
+obj.property = "isWritable";
+
+assert.sameValue(obj.property, "isWritable", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-182.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-182.js
new file mode 100644
index 0000000000..3dc3662583
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-182.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-182
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is Date object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: new Date()
+ }
+});
+
+obj.property = "isWritable";
+
+assert.sameValue(obj.property, "isWritable", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-183.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-183.js
new file mode 100644
index 0000000000..7c70cd4a50
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-183.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-183
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is RegExp object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: new RegExp()
+ }
+});
+
+obj.property = "isWritable";
+
+assert.sameValue(obj.property, "isWritable", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-184.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-184.js
new file mode 100644
index 0000000000..63848ba168
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-184.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-184
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is the JSON object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: JSON
+ }
+});
+
+obj.property = "isWritable";
+
+assert.sameValue(obj.property, "isWritable", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-185.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-185.js
new file mode 100644
index 0000000000..487554fccb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-185.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-185
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is Error object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: new SyntaxError()
+ }
+});
+
+obj.property = "isWritable";
+
+assert.sameValue(obj.property, "isWritable", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-186.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-186.js
new file mode 100644
index 0000000000..eafc90c61e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-186.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-186
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is the Argument object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+var func = function(a, b, c) {
+ return arguments;
+};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: func(1, true, "a")
+ }
+});
+
+obj.property = "isWritable";
+
+assert.sameValue(obj.property, "isWritable", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-188.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-188.js
new file mode 100644
index 0000000000..fa1781ff2e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-188.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-188
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is the global object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: this
+ }
+});
+
+obj.property = "isWritable";
+
+assert.sameValue(obj.property, "isWritable", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-189.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-189.js
new file mode 100644
index 0000000000..b0c12c9ce0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-189.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-189
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is a string (value is 'false') which is treated as true
+ value (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: "false"
+ }
+});
+
+obj.property = "isWritable";
+
+assert.sameValue(obj.property, "isWritable", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-19.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-19.js
new file mode 100644
index 0000000000..ca695c17fc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-19.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-19
+description: >
+ Object.defineProperties - 'descObj' is a Function object which
+ implements its own [[Get]] method to get 'enumerable' property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var descObj = function() {};
+var accessed = false;
+
+descObj.enumerable = true;
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-190.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-190.js
new file mode 100644
index 0000000000..845386a41a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-190.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-190
+description: >
+ Object.defineProperties - value of 'writable' property of
+ 'descObj' is new Boolean(false) which is treated as true value
+ (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ writable: new Boolean(false)
+ }
+});
+
+obj.property = "isWritable";
+
+assert.sameValue(obj.property, "isWritable", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-191.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-191.js
new file mode 100644
index 0000000000..5cb05680e8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-191.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-191
+description: >
+ Object.defineProperties - 'get' property of 'descObj' is present
+ (8.10.5 step 7)
+---*/
+
+var obj = {};
+
+var getter = function() {
+ return "present";
+};
+
+Object.defineProperties(obj, {
+ property: {
+ get: getter
+ }
+});
+
+assert.sameValue(obj.property, "present", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-192.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-192.js
new file mode 100644
index 0000000000..419ca5a692
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-192.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-192
+description: >
+ Object.defineProperties - 'get' property of 'descObj' is not
+ present (8.10.5 step 7)
+---*/
+
+var obj = {};
+
+var setter = function() {};
+
+Object.defineProperties(obj, {
+ property: {
+ set: setter
+ }
+});
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(typeof(obj.property), "undefined", 'typeof (obj.property)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-193.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-193.js
new file mode 100644
index 0000000000..34d38293aa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-193.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-193
+description: >
+ Object.defineProperties - 'get' property of 'descObj' is own data
+ property (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+
+var getter = function() {
+ return "ownDataProperty";
+};
+
+Object.defineProperties(obj, {
+ property: {
+ get: getter
+ }
+});
+
+assert.sameValue(obj.property, "ownDataProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-194.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-194.js
new file mode 100644
index 0000000000..476c6c3001
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-194.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-194
+description: >
+ Object.defineProperties - 'get' property of 'descObj' is inherited
+ data property (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+
+var getter = function() {
+ return "inheritedDataProperty";
+};
+
+var proto = {
+ get: getter
+};
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(obj.property, "inheritedDataProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-195.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-195.js
new file mode 100644
index 0000000000..ba7f87bf24
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-195.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-195
+description: >
+ Object.defineProperties - 'get' property of 'descObj' is own data
+ property that overrides an inherited data property (8.10.5 step
+ 7.a)
+---*/
+
+var obj = {};
+
+var getter = function() {
+ return "inheritedDataProperty";
+};
+
+var proto = {
+ get: getter
+};
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+
+descObj.get = function() {
+ return "ownDataProperty";
+};
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(obj.property, "ownDataProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-196.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-196.js
new file mode 100644
index 0000000000..16800c518b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-196.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-196
+description: >
+ Object.defineProperties - 'get' property of 'descObj' is own data
+ property that overrides an inherited accessor property (8.10.5
+ step 7.a)
+---*/
+
+var obj = {};
+
+var proto = {};
+
+Object.defineProperty(proto, "get", {
+ get: function() {
+ return function() {
+ return "inheritedAccessorProperty";
+ };
+ }
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+
+Object.defineProperty(descObj, "get", {
+ value: function() {
+ return "ownDataProperty";
+ }
+});
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(obj.property, "ownDataProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-197.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-197.js
new file mode 100644
index 0000000000..1181aa6841
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-197.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-197
+description: >
+ Object.defineProperties - 'get' property of 'descObj' is own
+ accessor property (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+
+var descObj = {};
+
+Object.defineProperty(descObj, "get", {
+ get: function() {
+ return function() {
+ return "ownAccessorProperty";
+ };
+ }
+});
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(obj.property, "ownAccessorProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-198.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-198.js
new file mode 100644
index 0000000000..ab64b330bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-198.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-198
+description: >
+ Object.defineProperties - 'get' property of 'descObj' is inherited
+ accessor property (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+
+var proto = {};
+
+Object.defineProperty(proto, "get", {
+ get: function() {
+ return function() {
+ return "inheritedAccessorProperty";
+ };
+ }
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(obj.property, "inheritedAccessorProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-199.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-199.js
new file mode 100644
index 0000000000..691dba1f9d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-199.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-199
+description: >
+ Object.defineProperties - 'get' property of 'descObj' is own
+ accessor property that overrides an inherited data property
+ (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+
+var proto = {
+ get: function() {
+ return "inheritedDataProperty";
+ }
+};
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+
+Object.defineProperty(descObj, "get", {
+ get: function() {
+ return function() {
+ return "ownAccessorProperty";
+ };
+ }
+});
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(obj.property, "ownAccessorProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-2.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-2.js
new file mode 100644
index 0000000000..a342f5215d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-2.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-2
+description: Object.defineProperties - 'descObj' is null (8.10.5 step 1)
+---*/
+
+var obj = {};
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ prop: null
+ });
+});
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-20.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-20.js
new file mode 100644
index 0000000000..5c20de6c89
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-20.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-20
+description: >
+ Object.defineProperties - 'descObj' is an Array object which
+ implements its own [[Get]] method to get 'enumerable' property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+var descObj = [];
+
+descObj.enumerable = true;
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-200.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-200.js
new file mode 100644
index 0000000000..8c502804c8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-200.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-200
+description: >
+ Object.defineProperties - 'get' property of 'descObj' is own
+ accessor property that overrides an inherited accessor property
+ (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+
+var proto = {};
+
+Object.defineProperty(proto, "get", {
+ get: function() {
+ return function() {
+ return "inheritedAccessorProperty";
+ };
+ }
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+
+Object.defineProperty(descObj, "get", {
+ get: function() {
+ return function() {
+ return "ownAccessorProperty";
+ };
+ }
+});
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(obj.property, "ownAccessorProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-201.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-201.js
new file mode 100644
index 0000000000..8ad2bd8560
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-201.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-201
+description: >
+ Object.defineProperties - 'get' property of 'descObj' is own
+ accessor property without a get function (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+
+var descObj = {};
+
+Object.defineProperty(descObj, "get", {
+ set: function() {}
+});
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(typeof(obj.property), "undefined", 'typeof (obj.property)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-202.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-202.js
new file mode 100644
index 0000000000..14521ab9fd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-202.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-202
+description: >
+ Object.defineProperties - 'get' property of 'descObj' is own
+ accessor property without a get function that overrides an
+ inherited accessor property (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+
+var proto = {};
+
+Object.defineProperty(proto, "get", {
+ get: function() {
+ return function() {
+ return "inheritedAccessorProperty";
+ };
+ }
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+
+Object.defineProperty(descObj, "get", {
+ set: function() {}
+});
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(typeof(obj.property), "undefined", 'typeof (obj.property)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-203.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-203.js
new file mode 100644
index 0000000000..dd24e3a1f2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-203.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-203
+description: >
+ Object.defineProperties - 'get' property of 'descObj' is inherited
+ accessor property without a get function (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+
+var proto = {};
+
+Object.defineProperty(proto, "get", {
+ set: function() {}
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(typeof(obj.property), "undefined", 'typeof (obj.property)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-204.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-204.js
new file mode 100644
index 0000000000..1ea7b5dc75
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-204.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-204
+description: >
+ Object.defineProperties - 'descObj' is a Function object which
+ implements its own [[Get]] method to get 'get' property (8.10.5
+ step 7.a)
+---*/
+
+var obj = {};
+
+var func = function(a, b) {
+ return a + b;
+};
+
+func.get = function() {
+ return "Function";
+};
+
+Object.defineProperties(obj, {
+ property: func
+});
+
+assert.sameValue(obj.property, "Function", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-205.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-205.js
new file mode 100644
index 0000000000..4db155a5ed
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-205.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-205
+description: >
+ Object.defineProperties - 'descObj' is an Array object which
+ implements its own [[Get]] method to get 'get' property (8.10.5
+ step 7.a)
+---*/
+
+var obj = {};
+
+var arr = [];
+
+arr.get = function() {
+ return "Array";
+};
+
+Object.defineProperties(obj, {
+ property: arr
+});
+
+assert.sameValue(obj.property, "Array", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-206.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-206.js
new file mode 100644
index 0000000000..1a3c06e5af
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-206.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-206
+description: >
+ Object.defineProperties - 'descObj' is a String object which
+ implements its own [[Get]] method to get 'get' property (8.10.5
+ step 7.a)
+---*/
+
+var obj = {};
+
+var str = new String("abc");
+
+str.get = function() {
+ return "string Object";
+};
+
+Object.defineProperties(obj, {
+ property: str
+});
+
+assert.sameValue(obj.property, "string Object", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-207.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-207.js
new file mode 100644
index 0000000000..dbc20ddf1a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-207.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-207
+description: >
+ Object.defineProperties - 'descObj' is a Boolean object which
+ implements its own [[Get]] method to get 'get' property (8.10.5
+ step 7.a)
+---*/
+
+var obj = {};
+
+var descObj = new Boolean(false);
+
+descObj.get = function() {
+ return "Boolean";
+};
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(obj.property, "Boolean", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-208.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-208.js
new file mode 100644
index 0000000000..0a7f2536c1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-208.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-208
+description: >
+ Object.defineProperties - 'descObj' is a Number object which
+ implements its own [[Get]] method to get 'get' property (8.10.5
+ step 7.a)
+---*/
+
+var obj = {};
+
+var descObj = new Number(-9);
+
+descObj.get = function() {
+ return "Number";
+};
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(obj.property, "Number", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-209.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-209.js
new file mode 100644
index 0000000000..b23b1b3584
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-209.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-209
+description: >
+ Object.defineProperties - 'descObj' is the Math object which
+ implements its own [[Get]] method to get 'get' property (8.10.5
+ step 7.a)
+---*/
+
+var obj = {};
+
+Math.get = function() {
+ return "Math";
+};
+
+Object.defineProperties(obj, {
+ property: Math
+});
+
+assert.sameValue(obj.property, "Math", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-21.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-21.js
new file mode 100644
index 0000000000..189ad3d1d3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-21.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-21
+description: >
+ Object.defineProperties - 'descObj' is a String object which
+ implements its own [[Get]] method to get 'enumerable' property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var descObj = new String();
+var accessed = false;
+descObj.enumerable = true;
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-210.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-210.js
new file mode 100644
index 0000000000..be235f6122
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-210.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-210
+description: >
+ Object.defineProperties - 'descObj' is a Date object which
+ implements its own [[Get]] method to get 'get' property (8.10.5
+ step 7.a)
+---*/
+
+var obj = {};
+
+var descObj = new Date();
+
+descObj.get = function() {
+ return "Date";
+};
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(obj.property, "Date", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-211.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-211.js
new file mode 100644
index 0000000000..be2df2f77b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-211.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-211
+description: >
+ Object.defineProperties - 'descObj' is a RegExp object which
+ implements its own [[Get]] method to get 'get' property (8.10.5
+ step 7.a)
+---*/
+
+var obj = {};
+
+var descObj = new RegExp();
+
+descObj.get = function() {
+ return "RegExp";
+};
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(obj.property, "RegExp", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-212.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-212.js
new file mode 100644
index 0000000000..8f78bf4501
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-212.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-212
+description: >
+ Object.defineProperties - 'descObj' is the JSON object which
+ implements its own [[Get]] method to get 'get' property (8.10.5
+ step 7.a)
+---*/
+
+var obj = {};
+
+JSON.get = function() {
+ return "JSON";
+};
+
+Object.defineProperties(obj, {
+ property: JSON
+});
+
+assert.sameValue(obj.property, "JSON", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-213.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-213.js
new file mode 100644
index 0000000000..2588a68615
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-213.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-213
+description: >
+ Object.defineProperties - 'descObj' is an Error object which
+ implements its own [[Get]] method to get 'get' property (8.10.5
+ step 7.a)
+---*/
+
+var obj = {};
+
+var descObj = new Error();
+
+descObj.get = function() {
+ return "Error";
+};
+
+Object.defineProperties(obj, {
+ property: descObj
+});
+
+assert.sameValue(obj.property, "Error", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-214.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-214.js
new file mode 100644
index 0000000000..f09ced4e40
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-214.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-214
+description: >
+ Object.defineProperties - 'descObj' is the Arguments object which
+ implements its own [[Get]] method to get 'get' property (8.10.5
+ step 7.a)
+---*/
+
+var obj = {};
+
+var func = function(a, b) {
+ arguments.get = function() {
+ return "arguments";
+ };
+
+ Object.defineProperties(obj, {
+ property: arguments
+ });
+
+ return obj.property === "arguments";
+};
+
+assert(func(), 'func() !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-216.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-216.js
new file mode 100644
index 0000000000..7cea255115
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-216.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-216
+description: >
+ Object.defineProperties - 'descObj' is the global object which
+ implements its own [[Get]] method to get 'get' property (8.10.5
+ step 7.a)
+---*/
+
+var obj = {};
+
+this.get = function() {
+ return "global";
+};
+
+Object.defineProperties(obj, {
+ property: this
+});
+
+assert.sameValue(obj.property, "global", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-217.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-217.js
new file mode 100644
index 0000000000..8457359cce
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-217.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-217
+description: >
+ Object.defineProperties - value of 'get' property of 'descObj' is
+ undefined (8.10.5 step 7.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ get: undefined
+ }
+});
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(typeof obj.property, "undefined", 'typeof obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-218.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-218.js
new file mode 100644
index 0000000000..c261269a99
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-218.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-218
+description: >
+ Object.defineProperties - value of 'get' property of 'descObj' is
+ primitive values( value is null) (8.10.5 step 7.b)
+---*/
+
+var obj = {};
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ property: {
+ get: null
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-219.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-219.js
new file mode 100644
index 0000000000..3a4af2efaf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-219.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-219
+description: >
+ Object.defineProperties - value of 'get' property of 'descObj' is
+ primitive values( value is boolean) (8.10.5 step 7.b)
+---*/
+
+var obj = {};
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ property: {
+ get: false
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-22.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-22.js
new file mode 100644
index 0000000000..3dd47387ef
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-22.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-22
+description: >
+ Object.defineProperties - 'descObj' is a Boolean object which
+ implements its own [[Get]] method to get 'enumerable' property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var descObj = new Boolean(false);
+var accessed = false;
+
+descObj.enumerable = true;
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-220.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-220.js
new file mode 100644
index 0000000000..b4c90b2ba2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-220.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-220
+description: >
+ Object.defineProperties - value of 'get' property of 'descObj' is
+ primitive values( value is number) (8.10.5 step 7.b)
+---*/
+
+var obj = {};
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ property: {
+ get: 123
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-221.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-221.js
new file mode 100644
index 0000000000..2db92b11ca
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-221.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-221
+description: >
+ Object.defineProperties - value of 'get' property of 'descObj' is
+ primitive values( value is string) (8.10.5 step 7.b)
+---*/
+
+var obj = {};
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ property: {
+ get: "string"
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-222.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-222.js
new file mode 100644
index 0000000000..6025954049
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-222.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-222
+description: >
+ Object.defineProperties - value of 'get' property of 'descObj' is
+ applied to Array object (8.10.5 step 7.b)
+---*/
+
+var obj = {};
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ property: {
+ get: []
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-223.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-223.js
new file mode 100644
index 0000000000..79b3aa2aac
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-223.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-223
+description: >
+ Object.defineProperties - value of 'get' property of 'descObj' is
+ a function (8.10.5 step 7.b)
+---*/
+
+var obj = {};
+
+var getter = function() {
+ return 100;
+};
+
+Object.defineProperties(obj, {
+ property: {
+ get: getter
+ }
+});
+
+assert.sameValue(obj.property, 100, 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-226.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-226.js
new file mode 100644
index 0000000000..b4511e2ed8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-226.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-226
+description: >
+ Object.defineProperties - 'set' property of 'descObj' is present
+ (8.10.5 step 8)
+---*/
+
+var data = "data";
+var obj = {};
+
+Object.defineProperties(obj, {
+ "prop": {
+ set: function(value) {
+ data = value;
+ }
+ }
+});
+
+obj.prop = "overrideData";
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-227.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-227.js
new file mode 100644
index 0000000000..eddbbdac73
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-227.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-227
+description: >
+ Object.defineProperties - 'set' property of 'descObj' is not
+ present (8.10.5 step 8)
+includes: [propertyHelper.js]
+---*/
+
+var data = "data";
+var obj = {};
+
+Object.defineProperties(obj, {
+ descObj: {
+ get: function() {
+ return data;
+ }
+ }
+});
+
+
+assert(obj.hasOwnProperty("descObj"));
+verifyNotWritable(obj, "descObj");
+
+var desc = Object.getOwnPropertyDescriptor(obj, "descObj");
+assert.sameValue(typeof(desc.set), "undefined")
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-228.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-228.js
new file mode 100644
index 0000000000..4111e74b87
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-228.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-228
+description: >
+ Object.defineProperties - 'set' property of 'descObj' is own data
+ property (8.10.5 step 8.a)
+---*/
+
+var data = "data";
+var obj = {};
+
+Object.defineProperties(obj, {
+ descObj: {
+ set: function(value) {
+ data = value;
+ }
+ }
+});
+
+obj.descObj = "overrideData";
+
+assert(obj.hasOwnProperty("descObj"), 'obj.hasOwnProperty("descObj") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-229.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-229.js
new file mode 100644
index 0000000000..8c7c40e2b8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-229.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-229
+description: >
+ Object.defineProperties - 'set' property of 'descObj' is inherited
+ data property (8.10.5 step 8.a)
+---*/
+
+var data = "data";
+var proto = {
+ set: function(value) {
+ data = value;
+ }
+};
+
+var Con = function() {};
+Con.prototype = proto;
+
+var child = new Con();
+var obj = {};
+
+Object.defineProperties(obj, {
+ prop: child
+});
+
+obj.prop = "overrideData";
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-23.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-23.js
new file mode 100644
index 0000000000..656d907e1e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-23.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-23
+description: >
+ Object.defineProperties - 'descObj' is a Number object which
+ implements its own [[Get]] method to get 'enumerable' property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var descObj = new Number(-9);
+var accessed = false;
+
+descObj.enumerable = true;
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-230.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-230.js
new file mode 100644
index 0000000000..6ca2f7259f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-230.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-230
+description: >
+ Object.defineProperties - 'set' property of 'descObj' is own data
+ property that overrides an inherited data property (8.10.5 step
+ 8.a)
+---*/
+
+var data1 = "data";
+var data2 = "data";
+var proto = {
+ set: function(value) {
+ data2 = value;
+ }
+};
+
+var Con = function() {};
+Con.prototype = proto;
+
+var child = new Con();
+child.set = function(value) {
+ data1 = value;
+};
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ prop: child
+});
+
+obj.prop = "overrideData";
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(data1, "overrideData", 'data1');
+assert.sameValue(data2, "data", 'data2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-231.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-231.js
new file mode 100644
index 0000000000..06ddc808a3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-231.js
@@ -0,0 +1,47 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-231
+description: >
+ Object.defineProperties - 'set' property of 'descObj' is own data
+ property that overrides an inherited accessor property (8.10.5
+ step 8.a)
+---*/
+
+var data1 = "data";
+var data2 = "data";
+var fun = function(value) {
+ data2 = value;
+};
+var proto = {};
+Object.defineProperty(proto, "set", {
+ get: function() {
+ return fun;
+ },
+ set: function(value) {
+ fun = value;
+ }
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var child = new Con();
+child.set = function(value) {
+ data1 = value;
+};
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ prop: child
+});
+
+obj.prop = "overrideData";
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(data1, "overrideData", 'data1');
+assert.sameValue(data2, "data", 'data2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-232.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-232.js
new file mode 100644
index 0000000000..8afd0edd25
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-232.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-232
+description: >
+ Object.defineProperties - 'set' property of 'descObj' is own
+ accessor property (8.10.5 step 8.a)
+---*/
+
+var data = "data";
+var setFun = function(value) {
+ data = value;
+};
+var descObj = {};
+Object.defineProperty(descObj, "set", {
+ get: function() {
+ return setFun;
+ }
+});
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+
+obj.prop = "overrideData";
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-233.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-233.js
new file mode 100644
index 0000000000..b115be1937
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-233.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-233
+description: >
+ Object.defineProperties - 'set' property of 'descObj' is inherited
+ accessor property (8.10.5 step 8.a)
+---*/
+
+var data = "data";
+var setFun = function(value) {
+ data = value;
+};
+var proto = {};
+Object.defineProperty(proto, "set", {
+ get: function() {
+ return setFun;
+ }
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var child = new Con();
+var obj = {};
+
+Object.defineProperties(obj, {
+ prop: child
+});
+obj.prop = "overrideData";
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-234.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-234.js
new file mode 100644
index 0000000000..7f73c1207a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-234.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-234
+description: >
+ Object.defineProperties - 'set' property of 'descObj' is own
+ accessor property that overrides an inherited data property
+ (8.10.5 step 8.a)
+---*/
+
+var data1 = "data";
+var data2 = "data";
+
+var proto = {};
+proto.set = function(value) {
+ data1 = value;
+};
+
+var Con = function() {};
+Con.prototype = proto;
+
+var child = new Con();
+Object.defineProperty(child, "set", {
+ get: function() {
+ return function(value) {
+ data2 = value;
+ };
+ }
+});
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ prop: child
+});
+obj.prop = "overrideData";
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(data2, "overrideData", 'data2');
+assert.sameValue(data1, "data", 'data1');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-235.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-235.js
new file mode 100644
index 0000000000..d7d8568ea3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-235.js
@@ -0,0 +1,48 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-235
+description: >
+ Object.defineProperties - 'set' property of 'descObj' is own
+ accessor property that overrides an inherited accessor property
+ (8.10.5 step 8.a)
+---*/
+
+var data1 = "data";
+var data2 = "data";
+
+var proto = {};
+Object.defineProperty(proto, "set", {
+ get: function() {
+ return function(value) {
+ data1 = value;
+ };
+ }
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var child = new Con();
+Object.defineProperty(child, "set", {
+ get: function() {
+ return function(value) {
+ data2 = value;
+ };
+ }
+});
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ prop: child
+});
+
+obj.prop = "overrideData";
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(data2, "overrideData", 'data2');
+assert.sameValue(data1, "data", 'data1');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-236.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-236.js
new file mode 100644
index 0000000000..4c6a3b500e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-236.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-236
+description: >
+ Object.defineProperties - 'set' property of 'descObj' is own
+ accessor property without a get function (8.10.5 step 8.a)
+---*/
+
+var fun = function() {
+ return 10;
+};
+var descObj = {
+ get: fun
+};
+Object.defineProperty(descObj, "set", {
+ set: function() {}
+});
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(typeof desc.set, "undefined", 'typeof desc.set');
+assert.sameValue(obj.prop, 10, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-237.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-237.js
new file mode 100644
index 0000000000..febc572439
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-237.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-237
+description: >
+ Object.defineProperties - 'set' property of 'descObj' is own
+ accessor property without a get function that overrides an
+ inherited accessor property (8.10.5 step 8.a)
+---*/
+
+var fun = function() {
+ return 10;
+};
+var proto = {};
+Object.defineProperty(proto, "set", {
+ get: function() {
+ return function() {
+ return arguments;
+ };
+ }
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+Object.defineProperty(descObj, "set", {
+ set: function() {}
+});
+
+descObj.get = fun;
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(typeof(desc.set), "undefined", 'typeof (desc.set)');
+assert.sameValue(obj.prop, 10, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-238.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-238.js
new file mode 100644
index 0000000000..11b9b18294
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-238.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-238
+description: >
+ Object.defineProperties - 'set' property of 'descObj' is inherited
+ accessor property without a get function (8.10.5 step 8.a)
+---*/
+
+var fun = function() {
+ return 10;
+};
+var proto = {};
+Object.defineProperty(proto, "set", {
+ set: function() {}
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var descObj = new Con();
+descObj.get = fun;
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(typeof(desc.set), "undefined", 'typeof (desc.set)');
+assert.sameValue(obj.prop, 10, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-239.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-239.js
new file mode 100644
index 0000000000..8742d41c6c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-239.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-239
+description: >
+ Object.defineProperties - 'descObj' is a Function object which
+ implements its own [[Get]] method to get 'set' property (8.10.5
+ step 8.a)
+---*/
+
+var data = "data";
+var descFun = function() {};
+var setFun = function(value) {
+ data = value;
+};
+
+descFun.prop = {
+ set: setFun
+};
+
+var obj = {};
+Object.defineProperties(obj, descFun);
+obj.prop = "funData";
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(data, "funData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-24.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-24.js
new file mode 100644
index 0000000000..4b0ecb83ee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-24.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-24
+description: >
+ Object.defineProperties - 'descObj' is the Math object which
+ implements its own [[Get]] method to get 'enumerable' property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Math.enumerable = true;
+
+Object.defineProperties(obj, {
+ prop: Math
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-240.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-240.js
new file mode 100644
index 0000000000..9fa71cecb1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-240.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-240
+description: >
+ Object.defineProperties - 'descObj' is an Array object which
+ implements its own [[Get]] method to get 'set' property (8.10.5
+ step 8.a)
+---*/
+
+var data = "data";
+var arr = [];
+var setFun = function(value) {
+ data = value;
+};
+arr.prop = {
+ set: setFun
+};
+
+var obj = {};
+Object.defineProperties(obj, arr);
+obj.prop = "arrData";
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(data, "arrData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-241.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-241.js
new file mode 100644
index 0000000000..1dc5a1e31c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-241.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-241
+description: >
+ Object.defineProperties - 'descObj' is a String object which
+ implements its own [[Get]] method to get 'set' property (8.10.5
+ step 8.a)
+---*/
+
+var data = "data";
+var descStr = new String();
+var setFun = function(value) {
+ data = value;
+};
+
+descStr.prop = {
+ set: setFun
+};
+
+var obj = {};
+Object.defineProperties(obj, descStr);
+obj.prop = "strData";
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(data, "strData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-242.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-242.js
new file mode 100644
index 0000000000..f00bcf0f80
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-242.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-242
+description: >
+ Object.defineProperties - 'descObj' is a Boolean object which
+ implements its own [[Get]] method to get 'set' property (8.10.5
+ step 8.a)
+---*/
+
+var data = "data";
+var descObj = new Boolean(false);
+var setFun = function(value) {
+ data = value;
+};
+descObj.prop = {
+ set: setFun
+};
+
+var obj = {};
+Object.defineProperties(obj, descObj);
+obj.prop = "booleanData";
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(data, "booleanData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-243.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-243.js
new file mode 100644
index 0000000000..fcf220983a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-243.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-243
+description: >
+ Object.defineProperties - 'descObj' is a Number object which
+ implements its own [[Get]] method to get 'set' property (8.10.5
+ step 8.a)
+---*/
+
+var data = "data";
+var descObj = new Number(-9);
+var setFun = function(value) {
+ data = value;
+};
+descObj.prop = {
+ set: setFun
+};
+
+var obj = {};
+Object.defineProperties(obj, descObj);
+obj.prop = "numberData";
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(data, "numberData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-244.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-244.js
new file mode 100644
index 0000000000..327e9d8ee2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-244.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-244
+description: >
+ Object.defineProperties - 'descObj' is the Math object which
+ implements its own [[Get]] method to get 'set' property (8.10.5
+ step 8.a)
+---*/
+
+var data = "data";
+var setFun = function(value) {
+ data = value;
+};
+
+Math.prop = {
+ set: setFun
+};
+
+var obj = {};
+Object.defineProperties(obj, Math);
+obj.prop = "mathData";
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(data, "mathData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-245.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-245.js
new file mode 100644
index 0000000000..1c4d2476c7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-245.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-245
+description: >
+ Object.defineProperties - 'descObj' is a Date object which
+ implements its own [[Get]] method to get 'set' property (8.10.5
+ step 8.a)
+---*/
+
+var data = "data";
+var descObj = new Date();
+var setFun = function(value) {
+ data = value;
+};
+descObj.prop = {
+ set: setFun
+};
+
+var obj = {};
+Object.defineProperties(obj, descObj);
+obj.prop = "dateData";
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(data, "dateData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-246.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-246.js
new file mode 100644
index 0000000000..89d1caff61
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-246.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-246
+description: >
+ Object.defineProperties - 'descObj' is a RegExp object which
+ implements its own [[Get]] method to get 'set' property (8.10.5
+ step 8.a)
+---*/
+
+var data = "data";
+var descObj = new RegExp();
+var setFun = function(value) {
+ data = value;
+};
+descObj.prop = {
+ set: setFun
+};
+
+var obj = {};
+Object.defineProperties(obj, descObj);
+obj.prop = "regExpData";
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(data, "regExpData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-247.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-247.js
new file mode 100644
index 0000000000..e905ba4555
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-247.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-247
+description: >
+ Object.defineProperties - 'descObj' is the JSON object which
+ implements its own [[Get]] method to get 'set' property (8.10.5
+ step 8.a)
+---*/
+
+var data = "data";
+var setFun = function(value) {
+ data = value;
+};
+
+JSON.prop = {
+ set: setFun
+};
+
+var obj = {};
+Object.defineProperties(obj, JSON);
+obj.prop = "JSONData";
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(data, "JSONData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-248.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-248.js
new file mode 100644
index 0000000000..f148f8bf0d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-248.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-248
+description: >
+ Object.defineProperties - 'descObj' is an Error object which
+ implements its own [[Get]] method to get 'set' property (8.10.5
+ step 8.a)
+---*/
+
+var data = "data";
+var descObj = new Error("test");
+descObj.description = {
+ value: 11
+};
+descObj.message = {
+ value: 11
+};
+descObj.name = {
+ value: 11
+};
+
+var setFun = function(value) {
+ data = value;
+};
+descObj.prop = {
+ set: setFun
+};
+
+var obj = {};
+Object.defineProperties(obj, descObj);
+obj.prop = "errorData";
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(data, "errorData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-249.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-249.js
new file mode 100644
index 0000000000..a538202cb8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-249.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-249
+description: >
+ Object.defineProperties - 'descObj' is the Arguments object which
+ implements its own [[Get]] method to get 'set' property (8.10.5
+ step 8.a)
+---*/
+
+var data = "data";
+var fun = function() {
+ return arguments;
+};
+var arg = fun();
+var setFun = function(value) {
+ data = value;
+};
+
+arg.prop = {
+ set: setFun
+};
+
+var obj = {};
+Object.defineProperties(obj, arg);
+obj.prop = "argData";
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(data, "argData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-25.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-25.js
new file mode 100644
index 0000000000..69bbbabb6c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-25.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-25
+description: >
+ Object.defineProperties - 'descObj' is a Date object which
+ implements its own [[Get]] method to get 'enumerable' property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var descObj = new Date();
+var accessed = false;
+
+descObj.enumerable = true;
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-252.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-252.js
new file mode 100644
index 0000000000..e3c6ac6bb7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-252.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-252
+description: >
+ Object.defineProperties - value of 'set' property of 'descObj' is
+ undefined (8.10.5 step 8.b)
+---*/
+
+var getFun = function() {
+ return 11;
+};
+
+var obj = {};
+Object.defineProperties(obj, {
+ prop: {
+ get: getFun,
+ set: undefined
+ }
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(typeof(desc.set), "undefined", 'typeof (desc.set)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-253.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-253.js
new file mode 100644
index 0000000000..1afccd2bdf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-253.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-253
+description: >
+ Object.defineProperties - value of 'set' property of 'descObj' is
+ primitive values null (8.10.5 step 8.b)
+---*/
+
+var obj = {};
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ prop: {
+ set: null
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-254.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-254.js
new file mode 100644
index 0000000000..01a10d02d3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-254.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-254
+description: >
+ Object.defineProperties - value of 'set' property of 'descObj' is
+ primitive values boolean (8.10.5 step 8.b)
+---*/
+
+var obj = {};
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ prop: {
+ set: true
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-255.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-255.js
new file mode 100644
index 0000000000..2463fbfb16
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-255.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-255
+description: >
+ Object.defineProperties - value of 'set' property of 'descObj' is
+ primitive values number (8.10.5 step 8.b)
+---*/
+
+var obj = {};
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ prop: {
+ set: 100
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-256.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-256.js
new file mode 100644
index 0000000000..efbcd429aa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-256.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-256
+description: >
+ Object.defineProperties - value of 'set' property of 'descObj' is
+ primitive values string (8.10.5 step 8.b)
+---*/
+
+var obj = {};
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ prop: {
+ set: "abcdef"
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-257.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-257.js
new file mode 100644
index 0000000000..dc97184e33
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-257.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-257
+description: >
+ Object.defineProperties - value of 'set' property of 'descObj' is
+ an interesting object other than a function (8.10.5 step 8.b)
+---*/
+
+var obj = {};
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ prop: {
+ set: []
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-258.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-258.js
new file mode 100644
index 0000000000..75b3ce485e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-258.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-258
+description: >
+ Object.defineProperties - value of 'set' property of 'descObj' is
+ a function (8.10.5 step 8.b)
+---*/
+
+var data = "data";
+var setFun = function(value) {
+ data = value;
+};
+var obj = {};
+
+
+Object.defineProperties(obj, {
+ prop: {
+ set: setFun
+ }
+});
+obj.prop = "funData";
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(data, "funData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-26.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-26.js
new file mode 100644
index 0000000000..d249bc60bc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-26.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-26
+description: >
+ Object.defineProperties - 'descObj' is a RegExp object which
+ implements its own [[Get]] method to get 'enumerable' property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var descObj = new RegExp();
+var accessed = false;
+
+descObj.enumerable = true;
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-261.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-261.js
new file mode 100644
index 0000000000..e01bb48eaa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-261.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-261
+description: >
+ Object.defineProperties - TypeError is thrown if both 'set'
+ property and 'value' property of 'descObj' are present (8.10.5
+ step 9.a)
+---*/
+
+var setFun = function() {};
+var obj = {};
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ prop: {
+ value: 12,
+ set: setFun
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-262.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-262.js
new file mode 100644
index 0000000000..267c132f13
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-262.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-262
+description: >
+ Object.defineProperties - TypeError is thrown if both 'set'
+ property and 'writable' property of 'descObj' are present (8.10.5
+ step 9.a)
+---*/
+
+var setFun = function() {};
+var obj = {};
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ prop: {
+ writable: true,
+ set: setFun
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-263.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-263.js
new file mode 100644
index 0000000000..e360ad47e6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-263.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-263
+description: >
+ Object.defineProperties - TypeError is thrown if both 'get'
+ property and 'value' property of 'descObj' are present (8.10.5
+ step 9.a)
+---*/
+
+var getFun = function() {};
+var obj = {};
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ prop: {
+ value: 12,
+ get: getFun
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-264.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-264.js
new file mode 100644
index 0000000000..0e6b5a5331
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-264.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-264
+description: >
+ Object.defineProperties - TypeError is thrown if both 'get'
+ property and 'writable' property of 'descObj' are present (8.10.5
+ step 9.a)
+---*/
+
+var getFun = function() {};
+
+var obj = {};
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ "prop": {
+ writable: true,
+ get: getFun
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-27.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-27.js
new file mode 100644
index 0000000000..f24832449d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-27.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-27
+description: >
+ Object.defineProperties - 'descObj' is the JSON object which
+ implements its own [[Get]] method to get 'enumerable' property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+JSON.enumerable = true;
+
+Object.defineProperties(obj, {
+ prop: JSON
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-28.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-28.js
new file mode 100644
index 0000000000..d80e71072f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-28.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-28
+description: >
+ Object.defineProperties - 'descObj' is an Error object which
+ implements its own [[Get]] method to get 'enumerable' property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var descObj = new Error();
+var accessed = false;
+
+descObj.enumerable = true;
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-29.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-29.js
new file mode 100644
index 0000000000..6f924b9a93
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-29.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-29
+description: >
+ Object.defineProperties - 'descObj' is the Arguments object which
+ implements its own [[Get]] method to get 'enumerable' property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var arg;
+var accessed = false;
+
+(function fun() {
+ arg = arguments;
+}());
+
+arg.enumerable = true;
+
+Object.defineProperties(obj, {
+ prop: arg
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-3.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-3.js
new file mode 100644
index 0000000000..25fb51a627
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-3.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-3
+description: Object.defineProperties - 'descObj' is a boolean (8.10.5 step 1)
+---*/
+
+var obj = {};
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ prop: true
+ });
+});
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-31.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-31.js
new file mode 100644
index 0000000000..68711adb0f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-31.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-31
+description: >
+ Object.defineProperties - 'descObj' is the global object which
+ implements its own [[Get]] method to get 'enumerable' property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+this.enumerable = true;
+
+Object.defineProperties(obj, {
+ prop: this
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-32.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-32.js
new file mode 100644
index 0000000000..c9f0da8d20
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-32.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-32
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is undefined (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: undefined
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-33.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-33.js
new file mode 100644
index 0000000000..27a920d0d7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-33.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-33
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is null (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: null
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-34.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-34.js
new file mode 100644
index 0000000000..16d02558c9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-34.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-34
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is true (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: true
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-35.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-35.js
new file mode 100644
index 0000000000..e8b2fa34a5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-35.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-35
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is false (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: false
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-36.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-36.js
new file mode 100644
index 0000000000..64aa8c9808
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-36.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-36
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is 0 (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: 0
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-37.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-37.js
new file mode 100644
index 0000000000..c811b1295b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-37.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-37
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is +0 (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: +0
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-38.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-38.js
new file mode 100644
index 0000000000..c89c80ba9c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-38.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-38
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is -0 (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: -0
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-39.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-39.js
new file mode 100644
index 0000000000..019ec74945
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-39.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-39
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is NaN (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: NaN
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-4.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-4.js
new file mode 100644
index 0000000000..daeb655b3f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-4.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-4
+description: Object.defineProperties - 'descObj' is a number (8.10.5 step 1)
+---*/
+
+var obj = {};
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ prop: 12
+ });
+});
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-40.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-40.js
new file mode 100644
index 0000000000..f40b207bf0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-40.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-40
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is positive number (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: 12
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-41.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-41.js
new file mode 100644
index 0000000000..e8bfd08048
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-41.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-41
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is negative number (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: -9
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-42.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-42.js
new file mode 100644
index 0000000000..4f4af207ad
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-42.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-42
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is empty string (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: ""
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-43.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-43.js
new file mode 100644
index 0000000000..0582790863
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-43.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-43
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is non-empty string (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: "AB\n\\cd"
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-44.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-44.js
new file mode 100644
index 0000000000..b10a661da9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-44.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-44
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is a Function object (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: function() {}
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-45.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-45.js
new file mode 100644
index 0000000000..ef624a3279
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-45.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-45
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is an Array object (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: []
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-46.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-46.js
new file mode 100644
index 0000000000..348320e76c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-46.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-46
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is a String object (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: new String()
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-47.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-47.js
new file mode 100644
index 0000000000..908edfd5f0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-47.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-47
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is a Boolean object (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: new Boolean(true)
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-48.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-48.js
new file mode 100644
index 0000000000..8290255db1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-48.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-48
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is a Number object (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: new Number(-9)
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-49.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-49.js
new file mode 100644
index 0000000000..b04858770f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-49.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-49
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is the Math object (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: Math
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-5.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-5.js
new file mode 100644
index 0000000000..942f2a9885
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-5.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-5
+description: Object.defineProperties - 'descObj' is a string (8.10.5 step 1)
+---*/
+
+var obj = {};
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ prop: "abc"
+ });
+});
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-50.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-50.js
new file mode 100644
index 0000000000..bc61dbff2e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-50.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-50
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is a Date object (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: new Date()
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-51.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-51.js
new file mode 100644
index 0000000000..338177931a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-51.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-51
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is a RegExp object (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: new RegExp()
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-52.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-52.js
new file mode 100644
index 0000000000..5c24c79140
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-52.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-52
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is the JSON object (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: JSON
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-53.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-53.js
new file mode 100644
index 0000000000..a2693a5f30
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-53.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-53
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is an Error object (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: new Error()
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-54.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-54.js
new file mode 100644
index 0000000000..5d006430c5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-54.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-54
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is the Arguments object (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+var arg;
+
+(function fun() {
+ arg = arguments;
+}(1, 2, 3));
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: arg
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-56.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-56.js
new file mode 100644
index 0000000000..765bc19c94
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-56.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-56
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is the global object (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: this
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-57.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-57.js
new file mode 100644
index 0000000000..4dbae75feb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-57.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-57
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is a string (value is 'false') which is treated as true
+ value (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: "false"
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-58.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-58.js
new file mode 100644
index 0000000000..585f6d8278
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-58.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-58
+description: >
+ Object.defineProperties - value of 'enumerable' property of
+ 'descObj' is new Boolean(false) which is treated as true value
+ (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: new Boolean(false)
+ }
+});
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-59.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-59.js
new file mode 100644
index 0000000000..0d85551f9d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-59.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-59
+description: >
+ Object.defineProperties - 'configurable' property of 'descObj' is
+ present (8.10.5 step 4)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ prop: {
+ configurable: true
+ }
+});
+
+var result1 = obj.hasOwnProperty("prop");
+delete obj.prop;
+var result2 = obj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-6.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-6.js
new file mode 100644
index 0000000000..acebbef9d5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-6.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-6
+description: >
+ Object.defineProperties - 'enumerable' property of 'descObj' is
+ present (8.10.5 step 3)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {
+ enumerable: true
+ }
+});
+
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-60.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-60.js
new file mode 100644
index 0000000000..a213b737e8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-60.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-60
+description: >
+ Object.defineProperties - 'configurable' property of 'descObj' is
+ not present (8.10.5 step 4)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ prop: {}
+});
+
+assert(obj.hasOwnProperty("prop"));
+verifyNotConfigurable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-61.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-61.js
new file mode 100644
index 0000000000..52f0a23515
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-61.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-61
+description: >
+ Object.defineProperties - 'configurable' property of 'descObj' is
+ own data property (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ prop: {
+ configurable: true
+ }
+});
+
+var result1 = obj.hasOwnProperty("prop");
+delete obj.prop;
+var result2 = obj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-62.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-62.js
new file mode 100644
index 0000000000..c056e9f0cb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-62.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-62
+description: >
+ Object.defineProperties - 'configurable' property of 'descObj' is
+ inherited data property (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+var proto = {
+ configurable: true
+};
+var Con = function() {};
+Con.prototype = proto;
+var descObj = new Con();
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+
+var result1 = obj.hasOwnProperty("prop");
+delete obj.prop;
+var result2 = obj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-63.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-63.js
new file mode 100644
index 0000000000..3564a3c259
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-63.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-63
+description: >
+ Object.defineProperties - 'configurable' property of 'descObj' is
+ own data property that overrides an inherited data property
+ (8.10.5 step 4.a)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+var proto = {
+ configurable: true
+};
+
+var Con = function() {};
+Con.prototype = proto;
+var descObj = new Con();
+
+Object.defineProperty(descObj, "configurable", {
+ value: false
+});
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+
+assert(obj.hasOwnProperty("prop"));
+verifyNotConfigurable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-64.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-64.js
new file mode 100644
index 0000000000..895a3897ef
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-64.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-64
+description: >
+ Object.defineProperties - 'configurable' property of 'descObj' is
+ own data property that overrides an inherited accessor property
+ (8.10.5 step 4.a)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+var proto = {};
+Object.defineProperty(proto, "configurable", {
+ get: function() {
+ return true;
+ }
+});
+
+var Con = function() {};
+Con.prototype = proto;
+var descObj = new Con();
+
+Object.defineProperty(descObj, "configurable", {
+ value: false
+});
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+
+assert(obj.hasOwnProperty("prop"));
+verifyNotConfigurable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-65.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-65.js
new file mode 100644
index 0000000000..1d011d9b67
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-65.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-65
+description: >
+ Object.defineProperties - 'configurable' property of 'descObj' is
+ own accessor property (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+var descObj = {};
+Object.defineProperty(descObj, "configurable", {
+ get: function() {
+ return true;
+ }
+});
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+var result1 = obj.hasOwnProperty("prop");
+delete obj.prop;
+var result2 = obj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-66.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-66.js
new file mode 100644
index 0000000000..ebbb6972d9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-66.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-66
+description: >
+ Object.defineProperties - 'configurable' property of 'descObj' is
+ inherited accessor property (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+var proto = {};
+
+Object.defineProperty(proto, "configurable", {
+ get: function() {
+ return true;
+ }
+});
+
+var Con = function() {};
+Con.prototype = proto;
+var descObj = new Con();
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+
+var result1 = obj.hasOwnProperty("prop");
+delete obj.prop;
+var result2 = obj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-67.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-67.js
new file mode 100644
index 0000000000..b9abacb080
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-67.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-67
+description: >
+ Object.defineProperties - 'configurable' property of 'descObj' is
+ own accessor property that overrides an inherited data property
+ (8.10.5 step 4.a)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+var proto = {
+ configurable: true
+};
+
+var Con = function() {};
+Con.prototype = proto;
+var descObj = new Con();
+
+Object.defineProperty(descObj, "configurable", {
+ get: function() {
+ return false;
+ }
+});
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+
+assert(obj.hasOwnProperty("prop"));
+verifyNotConfigurable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-68.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-68.js
new file mode 100644
index 0000000000..bc74560e09
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-68.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-68
+description: >
+ Object.defineProperties - 'configurable' property of 'descObj' is
+ own accessor property that overrides an inherited accessor
+ property (8.10.5 step 4.a)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+var proto = {};
+Object.defineProperty(proto, "configurable", {
+ get: function() {
+ return true;
+ }
+});
+
+var Con = function() {};
+Con.prototype = proto;
+var descObj = new Con();
+
+Object.defineProperty(descObj, "configurable", {
+ get: function() {
+ return false;
+ }
+});
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+
+assert(obj.hasOwnProperty("prop"));
+verifyNotConfigurable(obj, "prop");
+assert(obj.hasOwnProperty("prop"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-69.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-69.js
new file mode 100644
index 0000000000..baa2e16a9c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-69.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-69
+description: >
+ Object.defineProperties - 'configurable' property of 'descObj' is
+ own accessor property without a get function (8.10.5 step 4.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var descObj = {};
+Object.defineProperty(descObj, "configurable", {
+ set: function() {}
+});
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+
+assert(obj.hasOwnProperty("prop"));
+verifyNotConfigurable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-7.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-7.js
new file mode 100644
index 0000000000..ee78a793f7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-7.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-7
+description: >
+ Object.defineProperties - 'enumerable' property of 'descObj' is
+ not present (8.10.5 step 3)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperties(obj, {
+ prop: {}
+});
+
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-70.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-70.js
new file mode 100644
index 0000000000..ef2e2468f2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-70.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-70
+description: >
+ Object.defineProperties - 'configurable' property of 'descObj' is
+ own accessor property without a get function that overrides an
+ inherited accessor property (8.10.5 step 4.a)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+var proto = {};
+Object.defineProperty(proto, "configurable", {
+ get: function() {
+ return true;
+ }
+});
+
+var Con = function() {};
+Con.prototype = proto;
+var descObj = new Con();
+
+Object.defineProperty(descObj, "configurable", {
+ set: function() {}
+});
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+
+assert(obj.hasOwnProperty("prop"));
+verifyNotConfigurable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-71.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-71.js
new file mode 100644
index 0000000000..b0915952d0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-71.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-71
+description: >
+ Object.defineProperties - 'configurable' property of 'descObj' is
+ inherited accessor property without a get function (8.10.5 step
+ 4.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+var proto = {};
+
+Object.defineProperty(proto, "configurable", {
+ set: function() {}
+});
+
+var Con = function() {};
+Con.prototype = proto;
+var descObj = new Con();
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+
+assert(obj.hasOwnProperty("prop"));
+verifyNotConfigurable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-72.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-72.js
new file mode 100644
index 0000000000..709823b001
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-72.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-72
+description: >
+ Object.defineProperties - 'descObj' is a Function object which
+ implements its own [[Get]] method to get 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+var descObj = function() {};
+descObj.configurable = true;
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+
+var result1 = obj.hasOwnProperty("prop");
+delete obj.prop;
+var result2 = obj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-73.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-73.js
new file mode 100644
index 0000000000..bb49f1c868
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-73.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-73
+description: >
+ Object.defineProperties - 'descObj' is an Array object which
+ implements its own [[Get]] method to get 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+var descObj = [];
+descObj.configurable = true;
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+
+var result1 = obj.hasOwnProperty("prop");
+delete obj.prop;
+var result2 = obj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-74.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-74.js
new file mode 100644
index 0000000000..aae2ffd3ec
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-74.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-74
+description: >
+ Object.defineProperties - 'descObj' is a String object which
+ implements its own [[Get]] method to get 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+var descObj = new String();
+descObj.configurable = true;
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+var result1 = obj.hasOwnProperty("prop");
+delete obj.prop;
+var result2 = obj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-75.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-75.js
new file mode 100644
index 0000000000..c4a53060be
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-75.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-75
+description: >
+ Object.defineProperties - 'descObj' is a Boolean object which
+ implements its own [[Get]] method to get 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+var descObj = new Boolean(false);
+descObj.configurable = true;
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+
+var result1 = obj.hasOwnProperty("prop");
+delete obj.prop;
+var result2 = obj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-76.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-76.js
new file mode 100644
index 0000000000..20bffbec8b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-76.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-76
+description: >
+ Object.defineProperties - 'descObj' is a Number object which
+ implements its own [[Get]] method to get 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+var descObj = new Number(-9);
+descObj.configurable = true;
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+
+var result1 = obj.hasOwnProperty("prop");
+delete obj.prop;
+var result2 = obj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-77.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-77.js
new file mode 100644
index 0000000000..179177cdee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-77.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-77
+description: >
+ Object.defineProperties - 'descObj' is the Math object which
+ implements its own [[Get]] method to get 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+Math.configurable = true;
+
+Object.defineProperties(obj, {
+ prop: Math
+});
+
+var result1 = obj.hasOwnProperty("prop");
+delete obj.prop;
+var result2 = obj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-78.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-78.js
new file mode 100644
index 0000000000..827311cd55
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-78.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-78
+description: >
+ Object.defineProperties - 'descObj' is a Date object which
+ implements its own [[Get]] method to get 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+var descObj = new Date();
+descObj.configurable = true;
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+
+var result1 = obj.hasOwnProperty("prop");
+delete obj.prop;
+var result2 = obj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-79.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-79.js
new file mode 100644
index 0000000000..30c6140460
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-79.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-79
+description: >
+ Object.defineProperties - 'descObj' is a RegExp object which
+ implements its own [[Get]] method to get 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+var descObj = new RegExp();
+descObj.configurable = true;
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+
+var result1 = obj.hasOwnProperty("prop");
+delete obj.prop;
+var result2 = obj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-8.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-8.js
new file mode 100644
index 0000000000..10550729fe
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-8.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-8
+description: >
+ Object.defineProperties - 'enumerable' property of 'descObj' is
+ own data property (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+var descObj = {
+ enumerable: true
+};
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-80.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-80.js
new file mode 100644
index 0000000000..8b34049813
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-80.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-80
+description: >
+ Object.defineProperties - 'descObj' is the JSON object which
+ implements its own [[Get]] method to get 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+JSON.configurable = true;
+
+Object.defineProperties(obj, {
+ prop: JSON
+});
+
+var result1 = obj.hasOwnProperty("prop");
+delete obj.prop;
+var result2 = obj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-81.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-81.js
new file mode 100644
index 0000000000..602d86f4cc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-81.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-81
+description: >
+ Object.defineProperties - 'descObj' is an Error object which
+ implements its own [[Get]] method to get 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+var descObj = new Error();
+descObj.configurable = true;
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+
+var result1 = obj.hasOwnProperty("prop");
+delete obj.prop;
+var result2 = obj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-82.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-82.js
new file mode 100644
index 0000000000..564569c783
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-82.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-82
+description: >
+ Object.defineProperties - 'descObj' is the Arguments object which
+ implements its own [[Get]] method to get 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+var arg;
+(function fun() {
+ arg = arguments;
+}());
+
+arg.configurable = true;
+
+Object.defineProperties(obj, {
+ prop: arg
+});
+
+var result1 = obj.hasOwnProperty("prop");
+delete obj.prop;
+var result2 = obj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-84.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-84.js
new file mode 100644
index 0000000000..eb476275d8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-84.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-84
+description: >
+ Object.defineProperties - 'descObj' is the global object which
+ implements its own [[Get]] method to get 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+this.configurable = true;
+
+Object.defineProperties(obj, {
+ prop: this
+});
+
+var result1 = obj.hasOwnProperty("prop");
+delete obj.prop;
+var result2 = obj.hasOwnProperty("prop");
+
+assert.sameValue(result1, true, 'result1');
+assert.sameValue(result2, false, 'result2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-85.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-85.js
new file mode 100644
index 0000000000..4417c630c6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-85.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-85
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is undefined (8.10.5 step 4.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: undefined
+ }
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-86.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-86.js
new file mode 100644
index 0000000000..2745ab8dc5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-86.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-86
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is null (8.10.5 step 4.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: null
+ }
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-87.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-87.js
new file mode 100644
index 0000000000..54da422270
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-87.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-87
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is true (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: true
+ }
+});
+
+var hadOwnProperty = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+assert.sameValue(obj.hasOwnProperty("property"), false, 'obj.hasOwnProperty("property")');
+assert(hadOwnProperty, 'hadOwnProperty !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-88.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-88.js
new file mode 100644
index 0000000000..461bc8e7eb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-88.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-88
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is false (8.10.5 step 4.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: false
+ }
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-89.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-89.js
new file mode 100644
index 0000000000..79c808f491
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-89.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-89
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is 0 (8.10.5 step 4.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: 0
+ }
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-9.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-9.js
new file mode 100644
index 0000000000..f8816c00d3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-9.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-9
+description: >
+ Object.defineProperties - 'enumerable' property of 'descObj' is
+ inherited data property (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+var proto = {
+ enumerable: true
+};
+var Con = function() {};
+Con.prototype = proto;
+var descObj = new Con();
+
+Object.defineProperties(obj, {
+ prop: descObj
+});
+
+for (var property in obj) {
+ if (property === "prop") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-90.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-90.js
new file mode 100644
index 0000000000..198d61ea03
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-90.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-90
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is +0 (8.10.5 step 4.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: +0
+ }
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-91.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-91.js
new file mode 100644
index 0000000000..701fe1df53
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-91.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-91
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is -0 (8.10.5 step 4.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: -0
+ }
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-92.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-92.js
new file mode 100644
index 0000000000..b7997b1714
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-92.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-92
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is NaN (8.10.5 step 4.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: NaN
+ }
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-93.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-93.js
new file mode 100644
index 0000000000..c122aa7b15
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-93.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-93
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is positive number (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: 123
+ }
+});
+
+var hadOwnProperty = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+assert.sameValue(obj.hasOwnProperty("property"), false, 'obj.hasOwnProperty("property")');
+assert(hadOwnProperty, 'hadOwnProperty !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-94.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-94.js
new file mode 100644
index 0000000000..35f5914822
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-94.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-94
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is negative number (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: -123
+ }
+});
+
+var hadOwnProperty = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+assert.sameValue(obj.hasOwnProperty("property"), false, 'obj.hasOwnProperty("property")');
+assert(hadOwnProperty, 'hadOwnProperty !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-95.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-95.js
new file mode 100644
index 0000000000..db02d8a4c9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-95.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-95
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is empty string (8.10.5 step 4.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: ""
+ }
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-96.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-96.js
new file mode 100644
index 0000000000..d300ffa35b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-96.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-96
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is non-empty string (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: "abc"
+ }
+});
+
+var hadOwnProperty = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+assert.sameValue(obj.hasOwnProperty("property"), false, 'obj.hasOwnProperty("property")');
+assert(hadOwnProperty, 'hadOwnProperty !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-97.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-97.js
new file mode 100644
index 0000000000..233d735ae0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-97.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-97
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is Function object (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: function() {}
+ }
+});
+
+var hadOwnProperty = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+assert.sameValue(obj.hasOwnProperty("property"), false, 'obj.hasOwnProperty("property")');
+assert(hadOwnProperty, 'hadOwnProperty !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-98.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-98.js
new file mode 100644
index 0000000000..a17f84b8e8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-98.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-98
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is Array object (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: [1, 2, 3]
+ }
+});
+
+var hadOwnProperty = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+assert.sameValue(obj.hasOwnProperty("property"), false, 'obj.hasOwnProperty("property")');
+assert(hadOwnProperty, 'hadOwnProperty !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-99.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-99.js
new file mode 100644
index 0000000000..d09169fe10
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-5-b-99.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-5-b-99
+description: >
+ Object.defineProperties - value of 'configurable' property of
+ 'descObj' is String object (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ property: {
+ configurable: new String("abc")
+ }
+});
+
+var hadOwnProperty = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+assert.sameValue(obj.hasOwnProperty("property"), false, 'obj.hasOwnProperty("property")');
+assert(hadOwnProperty, 'hadOwnProperty !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-1.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-1.js
new file mode 100644
index 0000000000..91f2f1111f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-1.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-1
+description: >
+ Object.defineProperties - 'P' is own existing data property
+ (8.12.9 step 1 )
+---*/
+
+var obj = {};
+Object.defineProperty(obj, "prop", {
+ value: 11,
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ prop: {
+ value: 12,
+ configurable: true
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-10.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-10.js
new file mode 100644
index 0000000000..b85868e08e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-10.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-10
+description: >
+ Object.defineProperties - 'P' is own accessor property without a
+ get function that overrides an inherited accessor property (8.12.9
+ step 1 )
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "prop", {
+ get: function() {
+ return 11;
+ },
+ set: function() {},
+ configurable: true
+});
+var Con = function() {};
+Con.prototype = proto;
+
+var obj = new Con();
+Object.defineProperty(obj, "prop", {
+ set: function() {},
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ prop: {
+ value: 12,
+ configurable: true
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-100.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-100.js
new file mode 100644
index 0000000000..47bc46e287
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-100.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 100,
+ writable: true,
+ configurable: true
+});
+
+Object.defineProperties(obj, {
+ foo: {
+ value: 200,
+ writable: false,
+ configurable: false
+ }
+});
+verifyEqualTo(obj, "foo", 200);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-101.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-101.js
new file mode 100644
index 0000000000..462fb436d4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-101.js
@@ -0,0 +1,48 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-101
+description: >
+ Object.defineProperties - 'P' is accessor property, both
+ properties.[[Get]] and P.[[Get]] are two different values (8.12.9
+ step 12)
+includes: [propertyHelper.js]
+---*/
+
+
+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
+ }
+});
+verifyEqualTo(obj, "foo", get_func2());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-102.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-102.js
new file mode 100644
index 0000000000..a52e3b7580
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-102.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+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
+ }
+});
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-103.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-103.js
new file mode 100644
index 0000000000..69239b2647
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-103.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function set_func(value) {
+ obj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(obj, "foo", {
+ get: undefined,
+ set: set_func,
+ enumerable: true,
+ configurable: true
+});
+
+function get_func() {
+ return 10;
+}
+
+Object.defineProperties(obj, {
+ foo: {
+ get: get_func
+ }
+});
+verifyEqualTo(obj, "foo", get_func());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-104.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-104.js
new file mode 100644
index 0000000000..9723898ac6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-104.js
@@ -0,0 +1,48 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-104
+description: >
+ Object.defineProperties - 'P' is accessor property, both
+ properties.[[Set]] and P.[[Set]] are two different values (8.12.9
+ step 12)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function get_func() {
+ return 10;
+}
+
+function set_func() {
+ return 10;
+}
+
+Object.defineProperty(obj, "foo", {
+ get: get_func,
+ set: set_func,
+ enumerable: true,
+ configurable: true
+});
+
+function set_func2(value) {
+ obj.setVerifyHelpProp = value;
+}
+
+Object.defineProperties(obj, {
+ foo: {
+ set: set_func2
+ }
+});
+verifyEqualTo(obj, "foo", get_func());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-105.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-105.js
new file mode 100644
index 0000000000..e8557c7375
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-105.js
@@ -0,0 +1,59 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-105
+description: >
+ Object.defineProperties - 'P' is accessor property, P.[[Set]] is
+ present and properties.[[Set]] is undefined (8.12.9 step 12)
+---*/
+
+var obj = {};
+
+function get_func() {
+ return 10;
+}
+
+function set_func() {
+ return 10;
+}
+
+Object.defineProperty(obj, "property", {
+ get: get_func,
+ set: set_func,
+ enumerable: true,
+ configurable: true
+});
+
+Object.defineProperties(obj, {
+ property: {
+ set: undefined
+ }
+});
+
+var hasProperty = obj.hasOwnProperty("property");
+var verifyGet = false;
+verifyGet = (obj.property === 10);
+
+var verifySet = false;
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+verifySet = (typeof desc.set === 'undefined');
+
+var verifyEnumerable = false;
+for (var p in obj) {
+ if (p === "property") {
+ verifyEnumerable = true;
+ }
+}
+
+var verifyConfigurable = false;
+delete obj.property;
+verifyConfigurable = obj.hasOwnProperty("property");
+
+assert(hasProperty, 'hasProperty !== true');
+assert(verifyGet, 'verifyGet !== true');
+assert(verifySet, 'verifySet !== true');
+assert(verifyEnumerable, 'verifyEnumerable !== true');
+assert.sameValue(verifyConfigurable, false, 'verifyConfigurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-106.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-106.js
new file mode 100644
index 0000000000..67cf09ee28
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-106.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function get_func() {
+ return 10;
+}
+
+Object.defineProperty(obj, "foo", {
+ get: get_func,
+ set: undefined,
+ enumerable: true,
+ configurable: true
+});
+
+function set_func(value) {
+ obj.setVerifyHelpProp = value;
+}
+
+Object.defineProperties(obj, {
+ foo: {
+ set: set_func
+ }
+});
+verifyEqualTo(obj, "foo", get_func());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-107.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-107.js
new file mode 100644
index 0000000000..87f7990aaa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-107.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+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
+ }
+});
+verifyEqualTo(obj, "foo", get_func());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-108.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-108.js
new file mode 100644
index 0000000000..cf434bfbd8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-108.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+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
+ }
+});
+verifyEqualTo(obj, "foo", get_func());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-109.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-109.js
new file mode 100644
index 0000000000..021bf58825
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-109.js
@@ -0,0 +1,51 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-109
+description: >
+ Object.defineProperties - 'P' is accessor property, several
+ attributes values of P and properties are different (8.12.9 step
+ 12)
+includes: [propertyHelper.js]
+---*/
+
+
+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
+ }
+});
+verifyEqualTo(obj, "foo", get_func2());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-11.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-11.js
new file mode 100644
index 0000000000..d3613ffdd8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-11.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-11
+description: >
+ Object.defineProperties - 'P' is inherited accessor property
+ without a get function (8.12.9 step 1 )
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "prop", {
+ set: function() {},
+ configurable: false
+});
+var Con = function() {};
+Con.prototype = proto;
+
+var obj = new Con();
+
+Object.defineProperties(obj, {
+ prop: {
+ get: function() {
+ return 12;
+ },
+ configurable: true
+ }
+});
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(obj.prop, 12, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-110.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-110.js
new file mode 100644
index 0000000000..1dca6bcb2f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-110.js
@@ -0,0 +1,54 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-110
+description: >
+ Object.defineProperties - all own properties (data property and
+ accessor property)
+includes: [propertyHelper.js]
+---*/
+
+
+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);
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-111.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-111.js
new file mode 100644
index 0000000000..7e50a96c3c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-111.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-111
+description: Object.defineProperties - each properties are in list order
+---*/
+
+var obj = {};
+
+function get_func() {
+ return 20;
+}
+
+function set_func() {}
+
+var properties = {
+ a: {
+ value: 100,
+ enumerable: true,
+ writable: true,
+ configurable: true
+ },
+ b: {
+ get: get_func,
+ set: set_func,
+ enumerable: true,
+ configurable: true
+ },
+ c: {
+ value: 200,
+ enumerable: true,
+ writable: true,
+ configurable: true
+ }
+};
+
+Object.defineProperties(obj, properties);
+
+assert.sameValue(obj["a"], 100, 'obj["a"]');
+assert.sameValue(obj["b"], 20, 'obj["b"]');
+assert.sameValue(obj["c"], 200, 'obj["c"]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-112.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-112.js
new file mode 100644
index 0000000000..c33ed8dab5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-112.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-112
+description: >
+ Object.defineProperties - 'O' is an Array, test the length
+ property of 'O' is own data property (15.4.5.1 step 1)
+---*/
+
+var arr = [0, 1];
+Object.defineProperty(arr, "1", {
+ value: 1,
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperties(arr, {
+ length: {
+ value: 1
+ }
+ });
+});
+var desc = Object.getOwnPropertyDescriptor(arr, "length");
+
+assert.sameValue(desc.value, 2, 'desc.value');
+assert(desc.writable, 'desc.writable !== true');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-113.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-113.js
new file mode 100644
index 0000000000..dae7882a21
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-113.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-113
+description: >
+ Object.defineProperties - 'O' is an Array, test the length
+ property of 'O' is own data property that overrides an inherited
+ data property (15.4.5.1 step 1)
+---*/
+
+var arrProtoLen;
+var arr = [0, 1, 2];
+
+assert.throws(TypeError, function() {
+ arrProtoLen = Array.prototype.length;
+ Array.prototype.length = 0;
+
+ Object.defineProperty(arr, "2", {
+ configurable: false
+ });
+
+ Object.defineProperties(arr, {
+ length: {
+ value: 1
+ }
+ });
+});
+
+var desc = Object.getOwnPropertyDescriptor(arr, "length");
+assert.sameValue(desc.value, 3, 'desc.value');
+assert(desc.writable, 'desc.writable !== true');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-114-b.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-114-b.js
new file mode 100644
index 0000000000..dd6222e964
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-114-b.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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) {
+ throw new Test262Error("Expected arr.length to be 0, actually " + arr.length);
+}
+
+verifyEqualTo(arr, "length", 0);
+
+verifyWritable(arr, "length", "length", 1);
+
+verifyNotEnumerable(arr, "length");
+
+verifyNotConfigurable(arr, "length");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-114.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-114.js
new file mode 100644
index 0000000000..2afb374774
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-114.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-114
+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) {
+ throw new Test262Error("Expected arr.length to be 0, actually " + arr.length);
+}
+
+arr.length = 2;
+
+verifyEqualTo(arr, "length", 2);
+
+verifyWritable(arr, "length", "length", 5);
+
+verifyNotEnumerable(arr, "length");
+
+verifyNotConfigurable(arr, "length");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-115.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-115.js
new file mode 100644
index 0000000000..239ba3bb3e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-115.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-115
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' is absent, test
+ every field in 'desc' is same with corresponding attribute value
+ of the length property in 'O' (15.4.5.1 step 3.a.i)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperties(arr, {
+ length: {
+ writable: true,
+ enumerable: false,
+ configurable: false
+ }
+});
+
+assert.sameValue(arr.length, 0);
+
+arr.length = 2;
+assert.sameValue(arr.length, 2);
+
+verifyNotEnumerable(arr, "length");
+
+verifyNotConfigurable(arr, "length");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-116.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-116.js
new file mode 100644
index 0000000000..29788037c2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-116.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-116
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' is absent, test
+ TypeError is thrown when updating the [[Configurable]] attribute
+ of the length property from false to true (15.4.5.1 step 3.a.i)
+---*/
+
+var arr = [];
+assert.throws(TypeError, function() {
+ Object.defineProperties(arr, {
+ length: {
+ configurable: true
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-117.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-117.js
new file mode 100644
index 0000000000..ca94613c14
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-117.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-117
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' is absent, test
+ TypeError is thrown when updating the [[Enumerable]] attribute of
+ the length property from false to true (15.4.5.1 step 3.a.i)
+---*/
+
+var arr = [];
+assert.throws(TypeError, function() {
+ Object.defineProperties(arr, {
+ length: {
+ enumerable: true
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-118.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-118.js
new file mode 100644
index 0000000000..f8e2d125c1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-118.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-118
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' is absent, test
+ TypeError is thrown when 'desc' is accessor descriptor (15.4.5.1
+ step 3.a.i)
+---*/
+
+var arr = [];
+assert.throws(TypeError, function() {
+ Object.defineProperties(arr, {
+ length: {
+ get: function() {
+ return 2;
+ }
+ }
+ });
+});
+assert.sameValue(arr.length, 0, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-119.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-119.js
new file mode 100644
index 0000000000..b65c1ffe81
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-119.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-119
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' is absent, test
+ TypeError is thrown when updating the [[Writable]] attribute of
+ the length property from false to true (15.4.5.1 step 3.a.i)
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "length", {
+ writable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperties(arr, {
+ length: {
+ writable: true
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-12.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-12.js
new file mode 100644
index 0000000000..0c195e5e0d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-12.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-12
+description: >
+ Object.defineProperties - 'O' is a Function object which
+ implements its own [[GetOwnProperty]] method to get 'P' (8.12.9
+ step 1 )
+includes: [propertyHelper.js]
+---*/
+
+var fun = function() {};
+
+Object.defineProperty(fun, "prop", {
+ value: 11,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(fun, {
+ prop: {
+ value: 12,
+ configurable: true
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(fun, "prop", 11);
+
+ verifyNotWritable(fun, "prop");
+
+ verifyNotEnumerable(fun, "prop");
+
+ verifyNotConfigurable(fun, "prop");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-120.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-120.js
new file mode 100644
index 0000000000..4704109b46
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-120.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-120
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' is absent, test
+ updating the [[Writable]] attribute of the length property from
+ true to false (15.4.5.1 step 3.a.i)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperties(arr, {
+ length: {
+ writable: false
+ }
+});
+
+verifyEqualTo(arr, "length", 0);
+
+verifyNotWritable(arr, "length");
+
+verifyNotEnumerable(arr, "length");
+
+verifyNotConfigurable(arr, "length");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-121.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-121.js
new file mode 100644
index 0000000000..e2a62925b5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-121.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-121
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', test RangeError is thrown when setting the
+ [[Value]] field of 'desc' to undefined (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+assert.throws(RangeError, function() {
+ Object.defineProperties(arr, {
+ length: {
+ value: undefined
+ }
+ });
+});
+assert.sameValue(arr.length, 0, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-122.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-122.js
new file mode 100644
index 0000000000..04d38a7546
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-122.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-122
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', test setting the [[Value]] field of 'desc' to
+ null actuall is set to 0 (15.4.5.1 step 3.c)
+---*/
+
+var arr = [0, 1];
+
+Object.defineProperties(arr, {
+ length: {
+ value: null
+ }
+});
+
+assert.sameValue(arr.length, 0, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-123.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-123.js
new file mode 100644
index 0000000000..c2aacf23ba
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-123.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-123
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is a boolean
+ with value false (15.4.5.1 step 3.c)
+---*/
+
+var arr = [0, 1];
+
+Object.defineProperties(arr, {
+ length: {
+ value: false
+ }
+});
+
+assert.sameValue(arr.length, 0, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-124.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-124.js
new file mode 100644
index 0000000000..c5d5ab9d99
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-124.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-124
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is a boolean
+ with value true (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+
+Object.defineProperties(arr, {
+ length: {
+ value: true
+ }
+});
+
+assert.sameValue(arr.length, 1, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-125.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-125.js
new file mode 100644
index 0000000000..45941af224
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-125.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-125
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is 0 (15.4.5.1
+ step 3.c)
+---*/
+
+var arr = [0, 1];
+
+Object.defineProperties(arr, {
+ length: {
+ value: 0
+ }
+});
+
+assert.sameValue(arr.length, 0, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-126.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-126.js
new file mode 100644
index 0000000000..76d099f8c2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-126.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-126
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is +0
+ (15.4.5.1 step 3.c)
+---*/
+
+var arr = [0, 1];
+
+Object.defineProperties(arr, {
+ length: {
+ value: +0
+ }
+});
+
+assert.sameValue(arr.length, 0, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-127.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-127.js
new file mode 100644
index 0000000000..e7fb1e20b2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-127.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-127
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is -0
+ (15.4.5.1 step 3.c)
+---*/
+
+var arr = [0, 1];
+
+Object.defineProperties(arr, {
+ length: {
+ value: -0
+ }
+});
+
+assert.sameValue(arr.length, 0, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-128.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-128.js
new file mode 100644
index 0000000000..c87e70626f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-128.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-128
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is positive
+ number (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+
+Object.defineProperties(arr, {
+ length: {
+ value: 12
+ }
+});
+
+assert.sameValue(arr.length, 12, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-129.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-129.js
new file mode 100644
index 0000000000..1a4aeead29
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-129.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-129
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is negative
+ number (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+assert.throws(RangeError, function() {
+ Object.defineProperties(arr, {
+ length: {
+ value: -9
+ }
+ });
+});
+assert.sameValue(arr.length, 0, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-13.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-13.js
new file mode 100644
index 0000000000..be22cb8d81
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-13.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "prop", {
+ value: 11,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(arr, {
+ prop: {
+ value: 12,
+ configurable: true
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arr, "prop", 11);
+
+ verifyNotWritable(arr, "prop");
+
+ verifyNotEnumerable(arr, "prop");
+
+ verifyNotConfigurable(arr, "prop");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-130.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-130.js
new file mode 100644
index 0000000000..74c83edc72
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-130.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-130
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is +Infinity
+ (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+assert.throws(RangeError, function() {
+ Object.defineProperties(arr, {
+ length: {
+ value: +Infinity
+ }
+ });
+});
+assert.sameValue(arr.length, 0, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-131.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-131.js
new file mode 100644
index 0000000000..f926330579
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-131.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-131
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is -Infinity
+ (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+assert.throws(RangeError, function() {
+ Object.defineProperties(arr, {
+ length: {
+ value: -Infinity
+ }
+ });
+});
+assert.sameValue(arr.length, 0, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-132.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-132.js
new file mode 100644
index 0000000000..df5beab3ce
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-132.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-132
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is NaN
+ (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+assert.throws(RangeError, function() {
+ Object.defineProperties(arr, {
+ length: {
+ value: NaN
+ }
+ });
+});
+assert.sameValue(arr.length, 0, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-133.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-133.js
new file mode 100644
index 0000000000..51846f930d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-133.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-133
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is a string
+ containing a positive number (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+
+Object.defineProperties(arr, {
+ length: {
+ value: "2"
+ }
+});
+
+assert.sameValue(arr.length, 2, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-134.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-134.js
new file mode 100644
index 0000000000..bb4c3fea69
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-134.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-134
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is a string
+ containing a negative number (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+assert.throws(RangeError, function() {
+ Object.defineProperties(arr, {
+ length: {
+ value: "-42"
+ }
+ });
+});
+assert.sameValue(arr.length, 0, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-135.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-135.js
new file mode 100644
index 0000000000..9b191cf36c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-135.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-135
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is a string
+ containing a decimal number (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+assert.throws(RangeError, function() {
+ Object.defineProperties(arr, {
+ length: {
+ value: "200.59"
+ }
+ });
+});
+assert.sameValue(arr.length, 0, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-136.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-136.js
new file mode 100644
index 0000000000..e941c99a5c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-136.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-136
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is a string
+ containing +Infinity (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+assert.throws(RangeError, function() {
+ Object.defineProperties(arr, {
+ length: {
+ value: "+Infinity"
+ }
+ });
+});
+assert.sameValue(arr.length, 0, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-137.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-137.js
new file mode 100644
index 0000000000..8f22ff6d12
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-137.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-137
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is a string
+ containing -Infinity (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+assert.throws(RangeError, function() {
+ Object.defineProperties(arr, {
+ length: {
+ value: "-Infinity"
+ }
+ });
+});
+assert.sameValue(arr.length, 0, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-138.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-138.js
new file mode 100644
index 0000000000..f5f4ca97c7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-138.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-138
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is a string
+ containing an exponential number (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+
+Object.defineProperties(arr, {
+ length: {
+ value: "2E3"
+ }
+});
+
+assert.sameValue(arr.length, 2E3, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-139.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-139.js
new file mode 100644
index 0000000000..779dc80530
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-139.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-139
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is a string
+ containing an hex number (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+
+Object.defineProperties(arr, {
+ length: {
+ value: "0x00B"
+ }
+});
+
+assert.sameValue(arr.length, 0x00B, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-14.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-14.js
new file mode 100644
index 0000000000..3ecd73ab51
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-14.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+var str = new String();
+
+Object.defineProperty(str, "prop", {
+ value: 11,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(str, {
+ prop: {
+ value: 12,
+ configurable: true
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(str, "prop", 11);
+
+ verifyNotWritable(str, "prop");
+
+ verifyNotEnumerable(str, "prop");
+
+ verifyNotConfigurable(str, "prop");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-140.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-140.js
new file mode 100644
index 0000000000..0cf0195afd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-140.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-140
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is a string
+ containing an leading zero number (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+
+Object.defineProperties(arr, {
+ length: {
+ value: "0002.0"
+ }
+});
+
+assert.sameValue(arr.length, 2, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-141.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-141.js
new file mode 100644
index 0000000000..b2f64a82fc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-141.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-141
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', test the [[Value]] field of 'desc' is a string
+ which doesn't convert to a number (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+assert.throws(RangeError, function() {
+ Object.defineProperties(arr, {
+ length: {
+ value: "two"
+ }
+ });
+});
+assert.sameValue(arr.length, 0, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-142.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-142.js
new file mode 100644
index 0000000000..0a01558be8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-142.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-142
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', test the [[Value]] field of 'desc' is an Object
+ which has an own toString method (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+
+Object.defineProperties(arr, {
+ length: {
+ value: {
+ toString: function() {
+ return '2';
+ }
+ }
+ }
+});
+
+assert.sameValue(arr.length, 2, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-143.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-143.js
new file mode 100644
index 0000000000..6eb1eef701
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-143.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-143
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is an Object
+ which has an own valueOf method (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+
+Object.defineProperties(arr, {
+ length: {
+ value: {
+ valueOf: function() {
+ return 2;
+ }
+ }
+ }
+});
+
+assert.sameValue(arr.length, 2, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-144.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-144.js
new file mode 100644
index 0000000000..eb8e70e562
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-144.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-144
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is an Object
+ which has an own valueOf method that returns an object and
+ toString method that returns a string (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+var toStringAccessed = false;
+var valueOfAccessed = false;
+
+Object.defineProperties(arr, {
+ length: {
+ value: {
+ toString: function() {
+ toStringAccessed = true;
+ return '2';
+ },
+
+ valueOf: function() {
+ valueOfAccessed = true;
+ return {};
+ }
+ }
+ }
+});
+
+assert.sameValue(arr.length, 2, 'arr.length');
+assert(toStringAccessed, 'toStringAccessed !== true');
+assert(valueOfAccessed, 'valueOfAccessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-145.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-145.js
new file mode 100644
index 0000000000..8106192eb6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-145.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-145
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is an Object
+ which has an own toString and valueOf method (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+var toStringAccessed = false;
+var valueOfAccessed = false;
+
+Object.defineProperties(arr, {
+ length: {
+ value: {
+ toString: function() {
+ toStringAccessed = true;
+ return '2';
+ },
+
+ valueOf: function() {
+ valueOfAccessed = true;
+ return 3;
+ }
+ }
+ }
+});
+
+assert.sameValue(arr.length, 3, 'arr.length');
+assert.sameValue(toStringAccessed, false, 'toStringAccessed');
+assert(valueOfAccessed, 'valueOfAccessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-146.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-146.js
new file mode 100644
index 0000000000..5ad11449cb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-146.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-146
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test TypeError is thrown when the [[Value]] field
+ of 'desc' is an Object that both toString and valueOf wouldn't
+ return primitive value (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+var toStringAccessed = false;
+var valueOfAccessed = false;
+assert.throws(TypeError, function() {
+ Object.defineProperties(arr, {
+ length: {
+ value: {
+ toString: function() {
+ toStringAccessed = true;
+ return {};
+ },
+
+ valueOf: function() {
+ valueOfAccessed = true;
+ return {};
+ }
+ }
+ }
+ });
+});
+assert(toStringAccessed, 'toStringAccessed !== true');
+assert(valueOfAccessed, 'valueOfAccessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-147.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-147.js
new file mode 100644
index 0000000000..ad2a99a518
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-147.js
@@ -0,0 +1,47 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-147
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test using inherited valueOf method when the
+ [[Value]] field of 'desc' is an Objec with an own toString and
+ inherited valueOf methods (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+var toStringAccessed = false;
+var valueOfAccessed = false;
+
+var proto = {
+ value: {
+ valueOf: function() {
+ valueOfAccessed = true;
+ return 2;
+ }
+ }
+};
+
+var Con = function() {};
+Con.prototype = proto;
+
+var child = new Con();
+Object.defineProperty(child, "value", {
+ value: {
+ toString: function() {
+ toStringAccessed = true;
+ return 3;
+ }
+ }
+});
+
+Object.defineProperties(arr, {
+ length: child
+});
+
+assert.sameValue(arr.length, 3, 'arr.length');
+assert(toStringAccessed, 'toStringAccessed !== true');
+assert.sameValue(valueOfAccessed, false, 'valueOfAccessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-148.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-148.js
new file mode 100644
index 0000000000..8bf9f0d7b2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-148.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-148
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test RangeError is thrown when the [[Value]]
+ field of 'desc' is positive non-integer values (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+assert.throws(RangeError, function() {
+ Object.defineProperties(arr, {
+ length: {
+ value: 123.5
+ }
+ });
+});
+assert.sameValue(arr.length, 0, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-149.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-149.js
new file mode 100644
index 0000000000..ee25283c2d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-149.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-149
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test RangeError is thrown when the [[Value]]
+ field of 'desc' is negative non-integer values (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+assert.throws(RangeError, function() {
+ Object.defineProperties(arr, {
+ length: {
+ value: -4294967294.5
+ }
+ });
+});
+assert.sameValue(arr.length, 0, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-15.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-15.js
new file mode 100644
index 0000000000..a86aaa2ec5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-15.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = new Boolean(false);
+
+Object.defineProperty(obj, "prop", {
+ value: 11,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(obj, {
+ prop: {
+ value: 12,
+ configurable: true
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "prop", 11);
+
+ verifyNotWritable(obj, "prop");
+
+ verifyNotEnumerable(obj, "prop");
+
+ verifyNotConfigurable(obj, "prop");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-150.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-150.js
new file mode 100644
index 0000000000..fa670c41a2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-150.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-150
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is boundary
+ value 2^32 - 2 (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+
+Object.defineProperties(arr, {
+ length: {
+ value: 4294967294
+ }
+});
+
+assert.sameValue(arr.length, 4294967294, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-151.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-151.js
new file mode 100644
index 0000000000..874276ed8c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-151.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-151
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is boundary
+ value 2^32 - 1 (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+
+Object.defineProperties(arr, {
+ length: {
+ value: 4294967295
+ }
+});
+
+assert.sameValue(arr.length, 4294967295, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-152.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-152.js
new file mode 100644
index 0000000000..0e5e9f0e0b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-152.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-152
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test RangeError is thrown when the [[Value]]
+ field of 'desc' is boundary value 2^32 (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+assert.throws(RangeError, function() {
+ Object.defineProperties(arr, {
+ length: {
+ value: 4294967296
+ }
+ });
+});
+assert.sameValue(arr.length, 0, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-153.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-153.js
new file mode 100644
index 0000000000..31bed6610c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-153.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-153
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is the length
+ property of 'O', test RangeError is thrown when the [[Value]]
+ field of 'desc' is boundary value 2^32 + 1 (15.4.5.1 step 3.c)
+---*/
+
+var arr = [];
+assert.throws(RangeError, function() {
+ Object.defineProperties(arr, {
+ length: {
+ value: 4294967297
+ }
+ });
+});
+assert.sameValue(arr.length, 0, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-155.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-155.js
new file mode 100644
index 0000000000..d83b7c6c20
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-155.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-155
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', test the [[Value]] field of 'desc' which is
+ greater than value of the length property is defined into 'O'
+ without deleting any property with large index named (15.4.5.1
+ step 3.f)
+---*/
+
+var arr = [0, , 2];
+
+Object.defineProperties(arr, {
+ length: {
+ value: 5
+ }
+});
+
+assert.sameValue(arr.length, 5, 'arr.length');
+assert.sameValue(arr[0], 0, 'arr[0]');
+assert.sameValue(arr.hasOwnProperty("1"), false, 'arr.hasOwnProperty("1")');
+assert.sameValue(arr[2], 2, 'arr[2]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-156.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-156.js
new file mode 100644
index 0000000000..84987aa27f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-156.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-156
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', test the [[Value]] field of 'desc' which equals
+ to value of the length property is defined into 'O' without
+ deleting any property with large index named (15.4.5.1 step 3.f)
+---*/
+
+var arr = [0, , 2];
+
+Object.defineProperties(arr, {
+ length: {
+ value: 3
+ }
+});
+
+assert.sameValue(arr.length, 3, 'arr.length');
+assert.sameValue(arr[0], 0, 'arr[0]');
+assert.sameValue(arr.hasOwnProperty("1"), false, 'arr.hasOwnProperty("1")');
+assert.sameValue(arr[2], 2, 'arr[2]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-157.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-157.js
new file mode 100644
index 0000000000..d840a1338b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-157.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-157
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', test the [[Value]] field of 'desc' which is less
+ than value of the length property is defined into 'O' with
+ deleting properties with large index named (15.4.5.1 step 3.f)
+---*/
+
+var arr = [0, 1];
+
+Object.defineProperties(arr, {
+ length: {
+ value: 1
+ }
+});
+
+assert.sameValue(arr.length, 1, 'arr.length');
+assert.sameValue(arr.hasOwnProperty("1"), false, 'arr.hasOwnProperty("1")');
+assert.sameValue(arr[0], 0, 'arr[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-158.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-158.js
new file mode 100644
index 0000000000..018905fbe8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-158.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-158
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' is greater than
+ value of the length property, test TypeError is thrown when the
+ length property is not writable (15.4.5.1 step 3.f.i)
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "length", {
+ writable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperties(arr, {
+ length: {
+ value: 12
+ }
+ });
+});
+assert.sameValue(arr.length, 0, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-159.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-159.js
new file mode 100644
index 0000000000..df9393aefd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-159.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-159
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' equals to value of
+ the length property, test TypeError wouldn't be thrown when the
+ length property is not writable (15.4.5.1 step 3.f.i)
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "length", {
+ writable: false
+});
+
+Object.defineProperties(arr, {
+ length: {
+ value: 0
+ }
+});
+
+assert.sameValue(arr.length, 0, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-16.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-16.js
new file mode 100644
index 0000000000..e78dcaa3e2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-16.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = new Number(-9);
+
+Object.defineProperty(obj, "prop", {
+ value: 11,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(obj, {
+ prop: {
+ value: 12,
+ configurable: true
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "prop", 11);
+
+ verifyNotWritable(obj, "prop");
+
+ verifyNotEnumerable(obj, "prop");
+
+ verifyNotConfigurable(obj, "prop");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-160.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-160.js
new file mode 100644
index 0000000000..6ad259a4cc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-160.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-160
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test TypeError is thrown when the
+ [[Writable]] attribute of the length property is false (15.4.5.1
+ step 3.g)
+---*/
+
+var arr = [0, 1];
+
+Object.defineProperty(arr, "length", {
+ writable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperties(arr, {
+ length: {
+ value: 0
+ }
+ });
+});
+assert.sameValue(arr.length, 2, 'arr.length');
+assert.sameValue(arr[0], 0, 'arr[0]');
+assert.sameValue(arr[1], 1, 'arr[1]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-161.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-161.js
new file mode 100644
index 0000000000..8e61857063
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-161.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-161
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the [[Writable]] attribute of the
+ length property is set to true at last after deleting properties
+ with large index named if the [[Writable]] field of 'desc' is
+ absent (15.4.5.1 step 3.h)
+---*/
+
+var arr = [0, 1];
+
+Object.defineProperties(arr, {
+ length: {
+ value: 1
+ }
+});
+
+arr.length = 10; //try to overwrite length value of arr
+
+assert.sameValue(arr.hasOwnProperty("1"), false, 'arr.hasOwnProperty("1")');
+assert.sameValue(arr.length, 10, 'arr.length');
+assert.sameValue(arr[0], 0, 'arr[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-162.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-162.js
new file mode 100644
index 0000000000..a4b8af0beb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-162.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-162
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the [[Writable]] attribute of the
+ length property is set to true at last after deleting properties
+ with large index named if the [[Writable]] field of 'desc' is true
+ (15.4.5.1 step 3.h)
+---*/
+
+var arr = [0, 1];
+
+Object.defineProperties(arr, {
+ length: {
+ value: 1,
+ writable: true
+ }
+});
+
+arr.length = 10; //try to overwrite length value of arr
+
+assert.sameValue(arr.hasOwnProperty("1"), false, 'arr.hasOwnProperty("1")');
+assert.sameValue(arr.length, 10, 'arr.length');
+assert.sameValue(arr[0], 0, 'arr[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-163.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-163.js
new file mode 100644
index 0000000000..cbe3a65ff3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-163.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-163
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the [[Writable]] attribute of the
+ length property is set to false at last after deleting properties
+ with large index named if the [[Writable]] field of 'desc' is
+ false (15.4.5.1 step 3.i.ii)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [0, 1];
+
+Object.defineProperties(arr, {
+ length: {
+ value: 1,
+ writable: false
+ }
+});
+
+//try to overwrite length value of arr
+verifyNotWritable(arr, "length")
+
+assert(!arr.hasOwnProperty("1"));
+assert.sameValue(arr.length, 1);
+assert.sameValue(arr[0], 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-164.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-164.js
new file mode 100644
index 0000000000..f699551ca6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-164.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-164
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the [[Writable]] attribute of the
+ length property in 'O' is set as true before deleting properties
+ with large index named (15.4.5.1 step 3.i.iii)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [0, 1, 2];
+var result = 0;
+
+try {
+ Object.defineProperty(arr, "1", {
+ configurable: false
+ });
+
+ Object.defineProperties(arr, {
+ length: {
+ value: 0,
+ writable: false
+ }
+ });
+
+ throw new Test262Error("expected to throw TypeError")
+} catch (e) {
+ assert(e instanceof TypeError);
+ assert.sameValue(arr.length, 2);
+ verifyNotWritable(arr, "length");
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-165.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-165.js
new file mode 100644
index 0000000000..ed253052a5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-165.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-165
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the length property is decreased by
+ 1 (15.4.5.1 step 3.l.i)
+---*/
+
+var arr = [0, 1, 2];
+
+Object.defineProperty(arr, "1", {
+ configurable: false
+});
+
+Object.defineProperty(arr, "2", {
+ configurable: true
+});
+assert.throws(TypeError, function() {
+ Object.defineProperties(arr, {
+ length: {
+ value: 1
+ }
+ });
+});
+assert.sameValue(arr.length, 2, 'arr.length');
+assert.sameValue(arr.hasOwnProperty("2"), false, 'arr.hasOwnProperty("2")');
+assert.sameValue(arr[0], 0, 'arr[0]');
+assert.sameValue(arr[1], 1, 'arr[1]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-166.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-166.js
new file mode 100644
index 0000000000..ff19c657b1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-166.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-166
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the [[Configurable]] attribute of
+ own data property with large index named in 'O' can stop deleting
+ index named properties (15.4.5.1 step 3.l.ii)
+---*/
+
+var arr = [0, 1];
+assert.throws(TypeError, function() {
+ Object.defineProperty(arr, "1", {
+ configurable: false
+ });
+
+ Object.defineProperties(arr, {
+ length: {
+ value: 1
+ }
+ });
+});
+assert.sameValue(arr.length, 2, 'arr.length');
+assert(arr.hasOwnProperty("1"), 'arr.hasOwnProperty("1") !== true');
+assert.sameValue(arr[0], 0, 'arr[0]');
+assert.sameValue(arr[1], 1, 'arr[1]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-167.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-167.js
new file mode 100644
index 0000000000..f623d1f37d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-167.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-167
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the [[Configurable]] attribute of
+ inherited data property with large index named in 'O' can't stop
+ deleting index named properties (15.4.5.1 step 3.l.ii)
+---*/
+
+var arr = [0, 1];
+
+Array.prototype[1] = 2; //we are not allowed to set the [[Configurable]] attribute of property "1" to false here, since Array.prototype is a global object, and non-configurbale property can't revert to configurable
+
+Object.defineProperties(arr, {
+ length: {
+ value: 1
+ }
+});
+
+assert.sameValue(arr.length, 1, 'arr.length');
+assert.sameValue(arr.hasOwnProperty("1"), false, 'arr.hasOwnProperty("1")');
+assert.sameValue(arr[0], 0, 'arr[0]');
+assert.sameValue(Array.prototype[1], 2, 'Array.prototype[1]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-168.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-168.js
new file mode 100644
index 0000000000..5454f79f69
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-168.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-168
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the [[Configurable]] attribute of
+ own data property with large index named in 'O' that overrides
+ inherited data property can stop deleting index named properties
+ (15.4.5.1 step 3.l.ii)
+---*/
+
+var arr = [0, 1];
+
+assert.throws(TypeError, function() {
+ Object.defineProperty(arr, "1", {
+ configurable: false
+ });
+
+ Array.prototype[1] = 2;
+
+ Object.defineProperties(arr, {
+ length: {
+ value: 1
+ }
+ });
+});
+assert.sameValue(arr.length, 2, 'arr.length');
+assert(arr.hasOwnProperty("1"), 'arr.hasOwnProperty("1") !== true');
+assert.sameValue(arr[0], 0, 'arr[0]');
+assert.sameValue(arr[1], 1, 'arr[1]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-169.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-169.js
new file mode 100644
index 0000000000..16ef751878
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-169.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-169
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the [[Configurable]] attribute of
+ own data property with large index named in 'O' that overrides
+ inherited accessor property can stop deleting index named
+ properties (15.4.5.1 step 3.l.ii)
+---*/
+
+var arr = [0, 1];
+
+assert.throws(TypeError, function() {
+ Object.defineProperty(arr, "1", {
+ configurable: false
+ });
+
+ Object.defineProperty(Array.prototype, "1", {
+ get: function() {
+ return 2;
+ },
+ configurable: true
+ });
+
+ Object.defineProperties(arr, {
+ length: {
+ value: 1
+ }
+ });
+});
+assert.sameValue(arr.length, 2, 'arr.length');
+assert(arr.hasOwnProperty("1"), 'arr.hasOwnProperty("1") !== true');
+assert.sameValue(arr[0], 0, 'arr[0]');
+assert.sameValue(arr[1], 1, 'arr[1]');
+assert.sameValue(Array.prototype[1], 2, 'Array.prototype[1]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-17.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-17.js
new file mode 100644
index 0000000000..89ca2bb911
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-17.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-17
+description: >
+ Object.defineProperties - 'O' is the Math object which implements
+ its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 )
+---*/
+
+Object.defineProperty(Math, "prop", {
+ value: 11,
+ writable: true,
+ configurable: true
+});
+var hasProperty = Math.hasOwnProperty("prop") && Math.prop === 11;
+
+Object.defineProperties(Math, {
+ prop: {
+ value: 12
+ }
+});
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(Math.prop, 12, 'Math.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-170.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-170.js
new file mode 100644
index 0000000000..f6380a5e77
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-170.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-170
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the [[Configurable]] attribute of
+ own accessor property with large index named in 'O' can stop
+ deleting index named properties (15.4.5.1 step 3.l.ii)
+---*/
+
+var arr = [0, 1];
+assert.throws(TypeError, function() {
+ Object.defineProperty(arr, "1", {
+ get: function() {
+ return 1;
+ },
+ configurable: false
+ });
+
+ Object.defineProperties(arr, {
+ length: {
+ value: 1
+ }
+ });
+});
+assert.sameValue(arr.length, 2, 'arr.length');
+assert(arr.hasOwnProperty("1"), 'arr.hasOwnProperty("1") !== true');
+assert.sameValue(arr[0], 0, 'arr[0]');
+assert.sameValue(arr[1], 1, 'arr[1]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-171.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-171.js
new file mode 100644
index 0000000000..0d9fea2de9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-171.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-171
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the [[Configurable]] attribute of
+ inherited accessor property with large index named in 'O' can't
+ stop deleting index named properties (15.4.5.1 step 3.l.ii)
+---*/
+
+var arr = [0, 1];
+
+Object.defineProperty(Array.prototype, "1", {
+ get: function() {
+ return 1;
+ },
+ configurable: true //we are not allowed to set the [[Configurable]] attribute of property "1" to false here, since Array.prototype is a global object, and non-configurbale property can't revert to configurable
+});
+
+Object.defineProperties(arr, {
+ length: {
+ value: 1
+ }
+});
+
+assert.sameValue(arr.length, 1, 'arr.length');
+assert.sameValue(arr.hasOwnProperty("1"), false, 'arr.hasOwnProperty("1")');
+assert.sameValue(arr[0], 0, 'arr[0]');
+assert.sameValue(Array.prototype[1], 1, 'Array.prototype[1]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-172.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-172.js
new file mode 100644
index 0000000000..0f6313a2c7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-172.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-172
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the [[Configurable]] attribute of
+ own accessor property with large index named in 'O' that overrides
+ inherited data property can stop deleting index named properties
+ (15.4.5.1 step 3.l.ii)
+---*/
+
+var arr = [0, 1];
+
+assert.throws(TypeError, function() {
+ Object.defineProperty(arr, "1", {
+ get: function() {
+ return 2;
+ },
+ configurable: false
+ });
+
+ Array.prototype[1] = 3;
+
+ Object.defineProperties(arr, {
+ length: {
+ value: 1
+ }
+ });
+});
+assert.sameValue(arr.length, 2, 'arr.length');
+assert(arr.hasOwnProperty("1"), 'arr.hasOwnProperty("1") !== true');
+assert.sameValue(arr[0], 0, 'arr[0]');
+assert.sameValue(arr[1], 2, 'arr[1]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-173.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-173.js
new file mode 100644
index 0000000000..e6be693280
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-173.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-173
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the [[Configurable]] attribute of
+ own accessor property with large index named in 'O' that overrides
+ inherited accessor property can stop deleting index named
+ properties (15.4.5.1 step 3.l.ii)
+---*/
+
+var arr = [0, 1];
+
+assert.throws(TypeError, function() {
+ Object.defineProperty(arr, "1", {
+ get: function() {
+ return 1;
+ },
+ configurable: false
+ });
+
+ Object.defineProperty(Array.prototype, "1", {
+ get: function() {
+ return 2;
+ },
+ configurable: true
+ });
+
+ Object.defineProperties(arr, {
+ length: {
+ value: 1
+ }
+ });
+});
+assert.sameValue(arr.length, 2, 'arr.length');
+assert(arr.hasOwnProperty("1"), 'arr.hasOwnProperty("1") !== true');
+assert.sameValue(arr[0], 0, 'arr[0]');
+assert.sameValue(arr[1], 1, 'arr[1]');
+assert.sameValue(Array.prototype[1], 2, 'Array.prototype[1]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-174.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-174.js
new file mode 100644
index 0000000000..6391a508db
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-174.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-174
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the configurable large index named
+ property of 'O' can be deleted (15.4.5.1 step 3.l.ii)
+---*/
+
+var arr = [0, 1];
+
+Object.defineProperties(arr, {
+ length: {
+ value: 1
+ }
+});
+
+assert.sameValue(arr.hasOwnProperty("1"), false, 'arr.hasOwnProperty("1")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-175.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-175.js
new file mode 100644
index 0000000000..aec08e4e04
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-175.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-175
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test value of the length property is set
+ to the last non-configurable index named property of 'O' plus 1
+ (15.4.5.1 step 3.l.iii.1)
+---*/
+
+var arr = [0, 1, 2, 3];
+
+Object.defineProperty(arr, "1", {
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperties(arr, {
+ length: {
+ value: 1
+ }
+ });
+});
+assert.sameValue(arr.length, 2, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-176.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-176.js
new file mode 100644
index 0000000000..7117baebef
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-176.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-176
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the [[Writable]] attribute of the
+ length property is set to false at last when the [[Writable]]
+ field of 'desc' is false and 'O' contains non-configurable large
+ index named property (15.4.5.1 step 3.l.iii.2)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [0, 1];
+
+try {
+ Object.defineProperty(arr, "1", {
+ configurable: false
+ });
+
+ Object.defineProperties(arr, {
+ length: {
+ value: 1,
+ writable: false
+ }
+ });
+
+ throw new Test262Error("Expected to throw TypeError");
+} catch (e) {
+ assert(e instanceof TypeError);
+ assert(arr.hasOwnProperty("1"));
+ verifyNotWritable(arr, "length");
+ assert.sameValue(arr[0], 0);
+ assert.sameValue(arr[1], 1);
+ assert.sameValue(arr.length, 2)
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-177.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-177.js
new file mode 100644
index 0000000000..1ebd1320be
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-177.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-177
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the [[Writable]] attribute of the
+ length property is set to false at last when the [[Writable]]
+ field of 'desc' is false and 'O' doesn't contain non-configurable
+ large index named property (15.4.5.1 step 3.m)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [0, 1];
+
+Object.defineProperties(arr, {
+ length: {
+ value: 0,
+ writable: false
+ }
+});
+
+assert(!arr.hasOwnProperty("1"));
+assert.sameValue(arr.length, 0);
+assert(!arr.hasOwnProperty("0"));
+verifyNotWritable(arr, "length");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-178.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-178.js
new file mode 100644
index 0000000000..517426c669
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-178.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-178
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, 'P' is available String values that convert to
+ numbers (15.4.5.1 step 4.a)
+---*/
+
+var arr = [0];
+
+Object.defineProperties(arr, {
+ "0": {
+ value: 12
+ }
+});
+
+assert.sameValue(arr[0], 12, 'arr[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-179.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-179.js
new file mode 100644
index 0000000000..935cec1042
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-179.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-179
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, 'P' is boundary value 2^32 - 2 (15.4.5.1 step 4.a)
+---*/
+
+var arr = [];
+
+Object.defineProperties(arr, {
+ "4294967294": {
+ value: 100
+ }
+});
+
+assert(arr.hasOwnProperty("4294967294"), 'arr.hasOwnProperty("4294967294") !== true');
+assert.sameValue(arr.length, 4294967295, 'arr.length');
+assert.sameValue(arr[4294967294], 100, 'arr[4294967294]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-18.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-18.js
new file mode 100644
index 0000000000..fcd1e5d0d7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-18.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = new Date();
+
+Object.defineProperty(obj, "prop", {
+ value: 11,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(obj, {
+ prop: {
+ value: 12,
+ configurable: true
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "prop", 11);
+
+ verifyNotWritable(obj, "prop");
+
+ verifyNotEnumerable(obj, "prop");
+
+ verifyNotConfigurable(obj, "prop");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-180.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-180.js
new file mode 100644
index 0000000000..ab90e9b38a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-180.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-180
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, 'P' is boundary value 2^32 - 1 (15.4.5.1 step 4.a)
+---*/
+
+var arr = [];
+
+Object.defineProperties(arr, {
+ "4294967295": {
+ value: 100
+ }
+});
+
+assert(arr.hasOwnProperty("4294967295"), 'arr.hasOwnProperty("4294967295") !== true');
+assert.sameValue(arr.length, 0, 'arr.length');
+assert.sameValue(arr[4294967295], 100, 'arr[4294967295]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-181.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-181.js
new file mode 100644
index 0000000000..2aecacf063
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-181.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-181
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, 'P' is boundary value 2^32 (15.4.5.1 step 4.a)
+---*/
+
+var arr = [];
+
+Object.defineProperties(arr, {
+ "4294967296": {
+ value: 100
+ }
+});
+
+assert(arr.hasOwnProperty("4294967296"), 'arr.hasOwnProperty("4294967296") !== true');
+assert.sameValue(arr.length, 0, 'arr.length');
+assert.sameValue(arr[4294967296], 100, 'arr[4294967296]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-182.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-182.js
new file mode 100644
index 0000000000..899b84191f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-182.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-182
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, 'P' is boundary value 2^32 + 1 (15.4.5.1 step 4.a)
+---*/
+
+var arr = [];
+
+Object.defineProperties(arr, {
+ "4294967297": {
+ value: 100
+ }
+});
+
+assert(arr.hasOwnProperty("4294967297"), 'arr.hasOwnProperty("4294967297") !== true');
+assert.sameValue(arr.length, 0, 'arr.length');
+assert.sameValue(arr[4294967297], 100, 'arr[4294967297]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-183.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-183.js
new file mode 100644
index 0000000000..9bb21f289b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-183.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-183
+description: >
+ Object.defineProperties - TypeError is not thrown if 'O' is an
+ Array, 'P' is an array index named property, [[Writable]]
+ attribute of the length property in 'O' is false, value of 'P' is
+ less than value of the length property in'O' (15.4.5.1 step 4.b)
+---*/
+
+var arr = [1, 2, 3];
+
+Object.defineProperty(arr, "length", {
+ writable: false
+});
+
+Object.defineProperties(arr, {
+ "1": {
+ value: "abc"
+ }
+});
+
+assert.sameValue(arr[0], 1, 'arr[0]');
+assert.sameValue(arr[1], "abc", 'arr[1]');
+assert.sameValue(arr[2], 3, 'arr[2]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-184.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-184.js
new file mode 100644
index 0000000000..5ac557f243
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-184.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-184
+description: >
+ Object.defineProperties - TypeError is thrown if 'O' is an Array,
+ 'P' is an array index named property,[[Writable]] attribute of the
+ length property in 'O' is false, value of 'P' is equal to value of
+ the length property in 'O' (15.4.5.1 step 4.b)
+---*/
+
+var arr = [1, 2, 3];
+
+Object.defineProperty(arr, "length", {
+ writable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperties(arr, {
+ "3": {
+ value: "abc"
+ }
+ });
+});
+assert.sameValue(arr[0], 1, 'arr[0]');
+assert.sameValue(arr[1], 2, 'arr[1]');
+assert.sameValue(arr[2], 3, 'arr[2]');
+assert.sameValue(arr.hasOwnProperty("3"), false, 'arr.hasOwnProperty("3")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-185.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-185.js
new file mode 100644
index 0000000000..1ab2e2d467
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-185.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-185
+description: >
+ Object.defineProperties - TypeError is thrown if 'O' is an Array,
+ 'P' is an array index named property,[[Writable]] attribute of the
+ length property in 'O' is false, value of 'P' is bigger than value
+ of the length property in 'O' (15.4.5.1 step 4.b)
+---*/
+
+var arr = [1, 2, 3];
+
+Object.defineProperty(arr, "length", {
+ writable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperties(arr, {
+ "4": {
+ value: "abc"
+ }
+ });
+});
+assert.sameValue(arr[0], 1, 'arr[0]');
+assert.sameValue(arr[1], 2, 'arr[1]');
+assert.sameValue(arr[2], 3, 'arr[2]');
+assert.sameValue(arr.hasOwnProperty("3"), false, 'arr.hasOwnProperty("3")');
+assert.sameValue(arr.hasOwnProperty("4"), false, 'arr.hasOwnProperty("4")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-186.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-186.js
new file mode 100644
index 0000000000..1c708db7df
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-186.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-186
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, 'P' is own data property (15.4.5.1 step 4.c)
+---*/
+
+var arr = [];
+Object.defineProperty(arr, 0, {
+ value: "ownDataProperty",
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperties(arr, {
+ "0": {
+ value: "abc",
+ configurable: true
+ }
+ });
+});
+assert.sameValue(arr[0], "ownDataProperty", 'arr[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-187.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-187.js
new file mode 100644
index 0000000000..4a36ae53c5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-187.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-187
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, 'P' is inherited data property (15.4.5.1 step 4.c)
+---*/
+
+Object.defineProperty(Array.prototype, "0", {
+ value: 11,
+ configurable: true
+});
+
+var arr = [];
+
+Object.defineProperties(arr, {
+ "0": {
+ configurable: false
+ }
+});
+
+assert(arr.hasOwnProperty("0"), 'arr.hasOwnProperty("0") !== true');
+assert.sameValue(typeof arr[0], "undefined", 'typeof arr[0]');
+assert.sameValue(Array.prototype[0], 11, 'Array.prototype[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-188.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-188.js
new file mode 100644
index 0000000000..91f70d0b74
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-188.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-188
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, 'P' is own data property that overrides an
+ inherited data property (15.4.5.1 step 4.c)
+---*/
+
+var arr = [];
+
+assert.throws(TypeError, function() {
+ Object.defineProperty(Array.prototype, "0", {
+ value: 11,
+ configurable: true
+ });
+
+ Object.defineProperty(arr, "0", {
+ value: 12,
+ configurable: false
+ });
+
+ Object.defineProperties(arr, {
+ "0": {
+ configurable: true
+ }
+ });
+});
+assert.sameValue(arr[0], 12, 'arr[0]');
+assert.sameValue(Array.prototype[0], 11, 'Array.prototype[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-189.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-189.js
new file mode 100644
index 0000000000..93b1c0cba9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-189.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-189
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, 'P' is own data property that overrides an
+ inherited accessor property (15.4.5.1 step 4.c)
+---*/
+
+var arr = [];
+
+assert.throws(TypeError, function() {
+ Object.defineProperty(Array.prototype, "0", {
+ get: function() {
+ return 11;
+ },
+ configurable: true
+ });
+
+ Object.defineProperty(arr, "0", {
+ value: 12,
+ configurable: false
+ });
+
+ Object.defineProperties(arr, {
+ "0": {
+ configurable: true
+ }
+ });
+});
+assert.sameValue(arr[0], 12, 'arr[0]');
+assert.sameValue(Array.prototype[0], 11, 'Array.prototype[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-19.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-19.js
new file mode 100644
index 0000000000..9d5111dd19
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-19.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = new RegExp();
+
+Object.defineProperty(obj, "prop", {
+ value: 11,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(obj, {
+ prop: {
+ value: 12,
+ configurable: true
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "prop", 11);
+
+ verifyNotWritable(obj, "prop");
+
+ verifyNotEnumerable(obj, "prop");
+
+ verifyNotConfigurable(obj, "prop");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-190.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-190.js
new file mode 100644
index 0000000000..f633cf6a21
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-190.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-190
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, 'P' is own accessor property (15.4.5.1 step 4.c)
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+ get: function() {
+ return 11;
+ },
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperties(arr, {
+ "0": {
+ get: function() {
+ return 12;
+ },
+ configurable: true
+ }
+ });
+});
+assert.sameValue(arr[0], 11, 'arr[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-191.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-191.js
new file mode 100644
index 0000000000..46eef4c953
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-191.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-191
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ property, 'P' is inherited accessor property (15.4.5.1 step 4.c)
+---*/
+
+Object.defineProperty(Array.prototype, "0", {
+ get: function() {
+ return 11;
+ },
+ configurable: true
+});
+
+var arr = [];
+
+Object.defineProperties(arr, {
+ "0": {
+ get: function() {
+ return 12;
+ },
+ configurable: false
+ }
+});
+
+assert(arr.hasOwnProperty("0"), 'arr.hasOwnProperty("0") !== true');
+assert.sameValue(arr[0], 12, 'arr[0]');
+assert.sameValue(Array.prototype[0], 11, 'Array.prototype[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-192.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-192.js
new file mode 100644
index 0000000000..ef1277d220
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-192.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-192
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, 'P' is own accessor property that overrides an
+ inherited data property (15.4.5.1 step 4.c)
+---*/
+
+var arr = [];
+
+assert.throws(TypeError, function() {
+ Object.defineProperty(Array.prototype, "0", {
+ value: 11,
+ configurable: true
+ });
+
+ Object.defineProperty(arr, "0", {
+ get: function() {
+ return 12;
+ },
+ configurable: false
+ });
+
+ Object.defineProperties(arr, {
+ "0": {
+ configurable: true
+ }
+ });
+});
+assert.sameValue(arr[0], 12, 'arr[0]');
+assert.sameValue(Array.prototype[0], 11, 'Array.prototype[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-193.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-193.js
new file mode 100644
index 0000000000..e825e022a7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-193.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-193
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, 'P' is own accessor property that overrides an
+ inherited accessor property (15.4.5.1 step 4.c)
+---*/
+
+var arr = [];
+
+assert.throws(TypeError, function() {
+ Object.defineProperty(Array.prototype, "0", {
+ get: function() {
+ return 11;
+ },
+ configurable: true
+ });
+
+ Object.defineProperty(arr, "0", {
+ get: function() {
+ return 12;
+ },
+ configurable: false
+ });
+
+ Object.defineProperties(arr, {
+ "0": {
+ configurable: true
+ }
+ });
+});
+assert.sameValue(arr[0], 12, 'arr[0]');
+assert.sameValue(Array.prototype[0], 11, 'Array.prototype[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-194.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-194.js
new file mode 100644
index 0000000000..d375160c7b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-194.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-194
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, 'P' property doesn't exist in 'O', test TypeError
+ is thrown when 'O' is not extensible (15.4.5.1 step 4.c)
+---*/
+
+var arr = [];
+Object.preventExtensions(arr);
+assert.throws(TypeError, function() {
+ Object.defineProperties(arr, {
+ "0": {
+ value: 1
+ }
+ });
+});
+assert.sameValue(arr.hasOwnProperty("0"), false, 'arr.hasOwnProperty("0")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-195.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-195.js
new file mode 100644
index 0000000000..46e202818f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-195.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-195
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, 'P' property doesn't exist in 'O', test 'P' is
+ defined as data property when 'desc' is generic descriptor
+ (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperties(arr, {
+ "0": {
+ enumerable: true
+ }
+});
+
+verifyEqualTo(arr, "0", undefined);
+
+verifyNotWritable(arr, "0");
+
+verifyEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-196.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-196.js
new file mode 100644
index 0000000000..9fc08f1389
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-196.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-196
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, 'P' property doesn't exist in 'O', test [[Value]]
+ of 'P' property in 'Attributes' is set as undefined value if
+ [[Value]] is absent in data descriptor 'desc' (15.4.5.1 step 4.c)
+---*/
+
+var arr = [];
+
+Object.defineProperties(arr, {
+ "0": {
+ writable: true,
+ enumerable: true,
+ configurable: false
+ }
+});
+
+assert(arr.hasOwnProperty("0"), 'arr.hasOwnProperty("0") !== true');
+assert.sameValue(typeof(arr[0]), "undefined", 'typeof (arr[0])');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-197.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-197.js
new file mode 100644
index 0000000000..c95e92a883
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-197.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-197
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, 'P' property doesn't exist in 'O', test
+ [[Writable]] of 'P' property in 'Attributes' is set as false value
+ if [[Writable]] is absent in data descriptor 'desc' (15.4.5.1
+ step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+var isOwnProperty = false;
+var canWritable = false;
+
+Object.defineProperties(arr, {
+ "0": {
+ value: 1001,
+ enumerable: true,
+ configurable: false
+ }
+});
+
+assert(arr.hasOwnProperty("0"));
+verifyNotWritable(arr, "0");
+assert.sameValue(arr[0], 1001);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-198.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-198.js
new file mode 100644
index 0000000000..46d4871278
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-198.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-198
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, 'P' property doesn't exist in 'O', test
+ [[Enumerable]] of 'P' property in 'Attributes' is set as false
+ value if [[Enumerable]] is absent in data descriptor 'desc'
+ (15.4.5.1 step 4.c)
+---*/
+
+var arr = [];
+var isOwnProperty = false;
+var canEnumerable = false;
+
+Object.defineProperties(arr, {
+ "0": {
+ value: 1001,
+ writable: true,
+ configurable: true
+ }
+});
+
+isOwnProperty = arr.hasOwnProperty("0");
+for (var i in arr) {
+ if (i === "0") {
+ canEnumerable = true;
+ }
+}
+
+assert(isOwnProperty, 'isOwnProperty !== true');
+assert.sameValue(canEnumerable, false, 'canEnumerable');
+assert.sameValue(arr[0], 1001, 'arr[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-199.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-199.js
new file mode 100644
index 0000000000..5d24369753
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-199.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-199
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, 'P' property doesn't exist in 'O', test
+ [[Configurable]] of 'P' property in 'Attributes' is set as false
+ value if [[Configurable]] is absent in data descriptor 'desc'
+ (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+var beforeDeleted = false;
+var afterDeleted = false;
+
+Object.defineProperties(arr, {
+ "0": {
+ value: 1001,
+ writable: true,
+ enumerable: true
+ }
+});
+
+assert(arr.hasOwnProperty("0"));
+verifyNotConfigurable(arr, "0");
+assert(arr.hasOwnProperty("0"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-2.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-2.js
new file mode 100644
index 0000000000..19de43a79c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-2.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-2
+description: >
+ Object.defineProperties - 'P' is inherited data property (8.12.9
+ step 1 )
+includes: [propertyHelper.js]
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "prop", {
+ value: 11,
+ configurable: false
+});
+var Con = function() {};
+Con.prototype = proto;
+
+var obj = new Con();
+
+Object.defineProperties(obj, {
+ prop: {
+ value: 12,
+ configurable: true
+ }
+});
+
+verifyEqualTo(obj, "prop", 12);
+
+verifyNotWritable(obj, "prop");
+
+verifyNotEnumerable(obj, "prop");
+
+verifyConfigurable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-20.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-20.js
new file mode 100644
index 0000000000..b9a5e51c45
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-20.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-20
+description: >
+ Object.defineProperties - 'O' is a JSON object which implements
+ its own [[GetOwnProperty]] method to get 'P' (8.12.9 step 1 )
+---*/
+
+Object.defineProperty(JSON, "prop", {
+ value: 11,
+ writable: true,
+ configurable: true
+});
+var hasProperty = JSON.hasOwnProperty("prop") && JSON.prop === 11;
+Object.defineProperties(JSON, {
+ prop: {
+ value: 12
+ }
+});
+
+assert(hasProperty, 'hasProperty !== true');
+assert.sameValue(JSON.prop, 12, 'JSON.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-200.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-200.js
new file mode 100644
index 0000000000..b382c908c7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-200.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-200
+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: [propertyHelper.js]
+---*/
+
+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
+ }
+});
+
+verifyEqualTo(arr, "0", 1001);
+
+verifyNotWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-201.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-201.js
new file mode 100644
index 0000000000..7ea8911b62
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-201.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-201
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, 'P' property doesn't exist in 'O', test [[Get]] of
+ 'P' property in 'Attributes' is set as undefined value if [[Get]]
+ is absent in accessor descriptor 'desc' (15.4.5.1 step 4.c)
+---*/
+
+var arr = [];
+
+Object.defineProperties(arr, {
+ "0": {
+ set: function() {},
+ enumerable: true,
+ configurable: true
+ }
+});
+
+assert(arr.hasOwnProperty("0"), 'arr.hasOwnProperty("0") !== true');
+assert.sameValue(typeof(arr[0]), "undefined", 'typeof (arr[0])');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-202.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-202.js
new file mode 100644
index 0000000000..6997fab614
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-202.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-202
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, 'P' property doesn't exist in 'O', test [[Set]] of
+ 'P' property in 'Attributes' is set as undefined value if [[Set]]
+ is absent in accessor descriptor 'desc' (15.4.5.1 step 4.c)
+---*/
+
+var arr = [];
+var getFunc = function() {
+ return 11;
+};
+
+Object.defineProperties(arr, {
+ "0": {
+ get: getFunc,
+ enumerable: true,
+ configurable: true
+ }
+});
+
+var verifyEnumerable = false;
+for (var i in arr) {
+ if (i === "0" && arr.hasOwnProperty("0")) {
+ verifyEnumerable = true;
+ }
+}
+
+var desc = Object.getOwnPropertyDescriptor(arr, "0");
+var propertyDefineCorrect = arr.hasOwnProperty("0");
+
+var verifyConfigurable = false;
+delete arr[0];
+verifyConfigurable = arr.hasOwnProperty("0");
+
+assert.sameValue(typeof desc.set, "undefined", 'typeof desc.set');
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.get, getFunc, 'desc.get');
+assert.sameValue(verifyConfigurable, false, 'verifyConfigurable');
+assert(verifyEnumerable, 'verifyEnumerable !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-203.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-203.js
new file mode 100644
index 0000000000..a237d335dd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-203.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-203
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, 'P' property doesn't exist in 'O', test
+ [[Enumerable]] of 'P' property in 'Attributes' is set as false
+ value if [[Enumerable]] is absent in accessor descriptor 'desc'
+ (15.4.5.1 step 4.c)
+---*/
+
+var arr = [];
+
+Object.defineProperties(arr, {
+ "0": {
+ set: function() {},
+ get: function() {},
+ configurable: true
+ }
+});
+
+for (var i in arr) {
+ assert.sameValue(i === "0" && arr.hasOwnProperty("0"), false, 'i === "0" && arr.hasOwnProperty("0")');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-204.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-204.js
new file mode 100644
index 0000000000..ef679dcc11
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-204.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-204
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, 'P' property doesn't exist in 'O', test
+ [[Configurable]] of 'P' property in 'Attributes' is set as false
+ value if [[Configurable]] is absent in accessor descriptor 'desc'
+ (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+arr.verifySetter = 100;
+
+Object.defineProperties(arr, {
+ "0": {
+ set: function(value) {
+ arr.verifySetter = value;
+ },
+ get: function() {
+ return arr.verifySetter;
+ },
+ enumerable: true
+ }
+});
+
+if (!Object.prototype.hasOwnProperty.call(arr, "0")) {
+ throw new Test262Error("Expected hasOwnProperty to return true.");
+}
+
+arr[0] = 101;
+
+verifyEqualTo(arr, 0, 101);
+
+if (arr.verifySetter !== 101) {
+ throw new Test262Error('Expected arr.verifySetter === 101, actually ' + arr.verifySetter);
+}
+
+verifyNotConfigurable(arr, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-205.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-205.js
new file mode 100644
index 0000000000..46d98ea0a0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-205.js
@@ -0,0 +1,49 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-205
+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: [propertyHelper.js]
+---*/
+
+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
+ }
+});
+
+verifyEqualTo(arr, "0", getFun());
+
+verifyWritable(arr, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-206.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-206.js
new file mode 100644
index 0000000000..a322992ba4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-206.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-206
+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: [propertyHelper.js]
+---*/
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-207.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-207.js
new file mode 100644
index 0000000000..46d88c42e1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-207.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-207
+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: [propertyHelper.js]
+---*/
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-208.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-208.js
new file mode 100644
index 0000000000..7d7f6ae685
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-208.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-208
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, 'P' makes no change if the value of every field in
+ 'desc' is the same value as the corresponding field in 'P'(desc is
+ data property) (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+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
+ }
+});
+
+verifyEqualTo(arr, "0", 100);
+
+verifyWritable(arr, "0");
+
+verifyEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-209.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-209.js
new file mode 100644
index 0000000000..48d71fdc94
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-209.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-209
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, 'P' makes no change if the value of every field in
+ 'desc' is the same value as the corresponding field in 'P'(desc is
+ accessor property) (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-21.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-21.js
new file mode 100644
index 0000000000..174de35bac
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-21.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = new Error();
+
+Object.defineProperty(obj, "prop", {
+ value: 11,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(obj, {
+ prop: {
+ value: 12,
+ configurable: true
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "prop", 11);
+
+ verifyNotWritable(obj, "prop");
+
+ verifyNotEnumerable(obj, "prop");
+
+ verifyNotConfigurable(obj, "prop");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-210.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-210.js
new file mode 100644
index 0000000000..5d74f4dfd0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-210.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-210
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is an array
+ index property, both the [[Value]] field of 'desc' and the
+ [[Value]] attribute value of 'name' are undefined (15.4.5.1 step
+ 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+ value: undefined
+});
+
+Object.defineProperties(arr, {
+ "0": {
+ value: undefined
+ }
+});
+verifyEqualTo(arr, "0", undefined);
+
+verifyNotWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-211.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-211.js
new file mode 100644
index 0000000000..163eb6c69f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-211.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-211
+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: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+ value: null
+});
+
+Object.defineProperties(arr, {
+ "0": {
+ value: null
+ }
+});
+verifyEqualTo(arr, "0", null);
+
+verifyNotWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-212.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-212.js
new file mode 100644
index 0000000000..d6aa9bdf5b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-212.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-212
+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: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+ value: NaN
+});
+
+Object.defineProperties(arr, {
+ "0": {
+ value: NaN
+ }
+});
+
+verifyEqualTo(arr, "0", NaN);
+
+verifyNotWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-213.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-213.js
new file mode 100644
index 0000000000..b9bff48f9d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-213.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-213
+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: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+ value: -0
+});
+
+try {
+ Object.defineProperties(arr, {
+ "0": {
+ value: +0
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arr, "0", -0);
+
+ verifyNotWritable(arr, "0");
+
+ verifyNotEnumerable(arr, "0");
+
+ verifyNotConfigurable(arr, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-214.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-214.js
new file mode 100644
index 0000000000..356f64d1bd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-214.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-214
+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: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+ value: +0
+});
+
+try {
+ Object.defineProperties(arr, {
+ "0": {
+ value: -0
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arr, "0", +0);
+
+ verifyNotWritable(arr, "0");
+
+ verifyNotEnumerable(arr, "0");
+
+ verifyNotConfigurable(arr, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-215.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-215.js
new file mode 100644
index 0000000000..ea5c1a2d3f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-215.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-215
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is an array
+ index property, the [[Value]] field of 'desc' and the [[Value]]
+ attribute value of 'name' are two numbers with same vaule
+ (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+ value: 101
+});
+
+Object.defineProperties(arr, {
+ "0": {
+ value: 101
+ }
+});
+verifyEqualTo(arr, "0", 101);
+
+verifyNotWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-216.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-216.js
new file mode 100644
index 0000000000..b658b05038
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-216.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-216
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is an array
+ index property, the [[Value]] field of 'desc' and the [[Value]]
+ attribute value of 'name' are two strings which have same length
+ and same characters in corresponding positions (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+ value: "abcd"
+});
+
+Object.defineProperties(arr, {
+ "0": {
+ value: "abcd"
+ }
+});
+verifyEqualTo(arr, "0", "abcd");
+
+verifyNotWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-217.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-217.js
new file mode 100644
index 0000000000..94e975a2cb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-217.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-217
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is an array
+ index property, the [[Value]] field of 'desc' and the [[Value]]
+ attribute value of 'name' are two booleans with same value
+ (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+ value: true
+});
+
+Object.defineProperties(arr, {
+ "0": {
+ value: true
+ }
+});
+verifyEqualTo(arr, "0", true);
+
+verifyNotWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-218.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-218.js
new file mode 100644
index 0000000000..9fefdec9a6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-218.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-218
+description: >
+ Object.defineProperties - 'O' is an Array, 'name' is an array
+ index property, the [[Value]] field of 'desc' and the [[Value]]
+ attribute value of 'name' are two objects which refer to the same
+ object (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+var obj1 = {
+ length: 10
+};
+Object.defineProperty(arr, "0", {
+ value: obj1
+});
+
+var properties = {
+ "0": {
+ value: obj1
+ }
+};
+
+Object.defineProperties(arr, properties);
+verifyEqualTo(arr, "0", obj1);
+
+verifyNotWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-219.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-219.js
new file mode 100644
index 0000000000..50afb5f2b0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-219.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-219
+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: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+ writable: true
+});
+
+Object.defineProperties(arr, {
+ "0": {
+ writable: true
+ }
+});
+verifyEqualTo(arr, "0", undefined);
+
+verifyWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-22.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-22.js
new file mode 100644
index 0000000000..f7d7ee32ac
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-22.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-22
+description: >
+ Object.defineProperties - 'O' is the Arguments object which
+ implements its own [[GetOwnProperty]] method to get 'P' (8.12.9
+ step 1 )
+---*/
+
+var arg = function() {
+ return arguments;
+}();
+
+Object.defineProperty(arg, "prop", {
+ value: 11,
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperties(arg, {
+ prop: {
+ value: 12,
+ configurable: true
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-220.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-220.js
new file mode 100644
index 0000000000..e655774ae2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-220.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-220
+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: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+ writable: true,
+ configurable: true
+});
+
+Object.defineProperties(arr, {
+ "0": {
+ writable: false
+ }
+});
+verifyEqualTo(arr, "0", undefined);
+
+verifyNotWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-221.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-221.js
new file mode 100644
index 0000000000..f3d107084e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-221.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-221
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ property, the [[Get]] field of 'desc' and the [[Get]] attribute
+ value of 'P' are two objects which refer to the same object
+ (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+function get_func() {
+ return 10;
+}
+
+Object.defineProperty(arr, "0", {
+ get: get_func
+});
+
+Object.defineProperties(arr, {
+ "0": {
+ get: get_func
+ }
+});
+verifyEqualTo(arr, "0", get_func());
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-222.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-222.js
new file mode 100644
index 0000000000..b9f60bdb8f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-222.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-222
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ property, the [[Set]] field of 'desc' and the [[Set]] attribute
+ value of 'P' are two objects which refer to the same object
+ (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+function set_func(value) {
+ arr.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(arr, "0", {
+ set: set_func
+});
+
+Object.defineProperties(arr, {
+ "0": {
+ set: set_func
+ }
+});
+verifyWritable(arr, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-223.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-223.js
new file mode 100644
index 0000000000..25c4ab4089
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-223.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-223
+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: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+ enumerable: true
+});
+
+Object.defineProperties(arr, {
+ "0": {
+ enumerable: true
+ }
+});
+verifyEqualTo(arr, "0", undefined);
+
+verifyNotWritable(arr, "0");
+
+verifyEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-224.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-224.js
new file mode 100644
index 0000000000..127f8f89dd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-224.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-224
+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: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+ enumerable: true,
+ configurable: true
+});
+
+Object.defineProperties(arr, {
+ "0": {
+ enumerable: false
+ }
+});
+verifyEqualTo(arr, "0", undefined);
+
+verifyNotWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-225.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-225.js
new file mode 100644
index 0000000000..9db9a3514d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-225.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-225
+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: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+ configurable: true
+});
+
+Object.defineProperties(arr, {
+ "0": {
+ configurable: true
+ }
+});
+verifyEqualTo(arr, "0", undefined);
+
+verifyNotWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-226.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-226.js
new file mode 100644
index 0000000000..0b839c70e3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-226.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-226
+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: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+ configurable: true
+});
+
+Object.defineProperties(arr, {
+ "0": {
+ configurable: false
+ }
+});
+verifyEqualTo(arr, "0", undefined);
+
+verifyNotWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-227.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-227.js
new file mode 100644
index 0000000000..7e0a0eb3b8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-227.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-227
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ property, TypeError is thrown if the [[Configurable]] attribute
+ value of 'P' is false and the [[Configurable]] field of 'desc' is
+ true (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+
+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)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-228.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-228.js
new file mode 100644
index 0000000000..ae93f23bb1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-228.js
@@ -0,0 +1,48 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-228
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ property, TypeError is thrown if the [[Configurable]] attribute
+ value of 'P' is false, and [[Enumerable]] of 'desc' is present and
+ its value is different from the [[Enumerable]] attribute value of
+ 'P' (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [];
+
+Object.defineProperty(arr, "1", {
+ value: 3,
+ configurable: false,
+ enumerable: false
+
+});
+
+try {
+ Object.defineProperties(arr, {
+ "1": {
+ value: 13,
+ enumerable: true
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arr, "1", 3);
+
+ verifyNotWritable(arr, "1");
+
+ verifyNotEnumerable(arr, "1");
+
+ verifyNotConfigurable(arr, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-229.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-229.js
new file mode 100644
index 0000000000..52eeb0b5ef
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-229.js
@@ -0,0 +1,48 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-229
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ property, TypeError is thrown if 'P' is accessor property, and
+ 'desc' is data descriptor, and the [[Configurable]] attribute
+ value of 'P' is false (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [];
+
+function set_fun(value) {
+ arr.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(arr, "1", {
+ set: set_fun,
+ configurable: false
+
+});
+
+try {
+ Object.defineProperties(arr, {
+ "1": {
+ value: 13
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+
+} catch (e) {
+ verifyWritable(arr, "1", "setVerifyHelpProp");
+
+ verifyNotEnumerable(arr, "1");
+
+ verifyNotConfigurable(arr, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-230.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-230.js
new file mode 100644
index 0000000000..70c1ebbcab
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-230.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-230
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ property, TypeError is thrown if 'P' is data property, and'desc'
+ is accessor descriptor, and the [[Configurable]] attribute value
+ of 'P' is false (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [];
+
+Object.defineProperty(arr, "1", {
+ value: 3,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(arr, {
+ "1": {
+ set: function() {}
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arr, "1", 3);
+
+ verifyNotWritable(arr, "1");
+
+ verifyNotEnumerable(arr, "1");
+
+ verifyNotConfigurable(arr, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-231.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-231.js
new file mode 100644
index 0000000000..77e43c731c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-231.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-231
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ property, 'P' is data property and 'desc' is accessor descriptor,
+ and the [[Configurable]] attribute value of 'P' is true, test 'P'
+ is converted from data property to accessor property (15.4.5.1
+ step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+arr[1] = 3; // default value of attributes: writable: true, configurable: true, enumerable: true
+
+function set_fun(value) {
+ arr.setVerifyHelpProp = value;
+}
+
+Object.defineProperties(arr, {
+ "1": {
+ set: set_fun
+ }
+});
+
+verifyWritable(arr, "1", "setVerifyHelpProp");
+
+verifyEnumerable(arr, "1");
+
+verifyConfigurable(arr, "1");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-232.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-232.js
new file mode 100644
index 0000000000..a8f2187f8c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-232.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-232
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ property, 'P' is accessor property and 'desc' is data descriptor,
+ and the [[Configurable]] attribute value of 'P' is true, test 'P'
+ is converted from accessor property to data property (15.4.5.1
+ step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "1", {
+ get: function() {
+ return 3;
+ },
+ configurable: true
+
+});
+
+Object.defineProperties(arr, {
+ "1": {
+ value: 12
+ }
+});
+
+verifyEqualTo(arr, "1", 12);
+
+verifyNotWritable(arr, "1");
+
+verifyNotEnumerable(arr, "1");
+
+verifyConfigurable(arr, "1");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-233.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-233.js
new file mode 100644
index 0000000000..cc3247a9c7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-233.js
@@ -0,0 +1,47 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-233
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ property, 'P' is data property and 'desc' is data descriptor, and
+ the [[Configurable]] attribute value of 'P' is false, test
+ TypeError is thrown if the [[Writable]] attribute value of 'P' is
+ false and the [[Writable]] field of 'desc' is true. (15.4.5.1
+ step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [];
+
+Object.defineProperty(arr, "1", {
+ configurable: false,
+ writable: false
+
+});
+
+try {
+ Object.defineProperties(arr, {
+ "1": {
+ writable: true
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arr, "1", undefined);
+
+ verifyNotWritable(arr, "1");
+
+ verifyNotEnumerable(arr, "1");
+
+ verifyNotConfigurable(arr, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-234.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-234.js
new file mode 100644
index 0000000000..668e02eb0f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-234.js
@@ -0,0 +1,49 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-234
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ property, 'P' is data property and 'desc' is data descriptor, and
+ the [[Configurable]] attribute value of 'P' is false, test
+ TypeError is thrown if the [[Writable]] attribute value of 'P' is
+ false, and the type of the [[Value]] field of 'desc' is different
+ from the type of the [[Value]] attribute value of 'P' (15.4.5.1
+ step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [];
+
+Object.defineProperty(arr, "1", {
+ value: 3,
+ configurable: false,
+ writable: false
+});
+
+try {
+
+ Object.defineProperties(arr, {
+ "1": {
+ value: "abc"
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arr, "1", 3);
+
+ verifyNotWritable(arr, "1");
+
+ verifyNotEnumerable(arr, "1");
+
+ verifyNotConfigurable(arr, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-235.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-235.js
new file mode 100644
index 0000000000..a4becc4796
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-235.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-235
+description: >
+ Object.defineProperties - TypeError is thrown if 'O' is an Array,
+ 'P' is an array index named property that already exists on 'O' is
+ data property with [[Configurable]], [[Writable]] false, 'desc'
+ is data descriptor, [[Value]] field of 'desc' is +0, and the
+ [[Value]] attribute value of 'P' is -0 (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "1", {
+ value: +0
+});
+
+try {
+ Object.defineProperties(arr, {
+ "1": {
+ value: -0
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arr, "1", +0);
+
+ verifyNotWritable(arr, "1");
+
+ verifyNotEnumerable(arr, "1");
+
+ verifyNotConfigurable(arr, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-236.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-236.js
new file mode 100644
index 0000000000..7a76261002
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-236.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-236
+description: >
+ Object.defineProperties - TypeError is thrown if 'O' is an Array,
+ 'P' is an array index named property that already exists on 'O' is
+ data property with [[Configurable]], [[Writable]] false, 'desc'
+ is data descriptor, [[Value]] field of 'desc' is -0, and the
+ [[Value]] attribute value of 'P' is +0 (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "1", {
+ value: -0
+});
+
+try {
+ Object.defineProperties(arr, {
+ "1": {
+ value: +0
+ }
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arr, "1", -0);
+
+ verifyNotWritable(arr, "1");
+
+ verifyNotEnumerable(arr, "1");
+
+ verifyNotConfigurable(arr, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-237.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-237.js
new file mode 100644
index 0000000000..9914b27c44
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-237.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-237
+description: >
+ Object.defineProperties - TypeError is thrown if 'O' is an Array,
+ 'P' is an array index named property that already exists on 'O' is
+ data property with [[Configurable]], [[Writable]] false, 'desc'
+ is data descriptor, [[Value]] field of 'desc' and the [[Value]]
+ attribute value of 'P' are two numbers with different vaule
+ (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [];
+
+Object.defineProperty(arr, "1", {
+ value: 12
+});
+
+try {
+ Object.defineProperties(arr, {
+ "1": {
+ value: 36
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arr, "1", 12);
+
+ verifyNotWritable(arr, "1");
+
+ verifyNotEnumerable(arr, "1");
+
+ verifyNotConfigurable(arr, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-238.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-238.js
new file mode 100644
index 0000000000..5928b5b299
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-238.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-238
+description: >
+ Object.defineProperties - TypeError is thrown if 'O' is an Array,
+ 'P' is an array index named property that already exists on 'O' is
+ data property with [[Configurable]], [[Writable]] false, 'desc'
+ is data descriptor, [[Value]] field of 'desc' and the [[Value]]
+ attribute value of 'P' are two strings with different values
+ (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "1", {
+ value: "abcd"
+});
+
+try {
+ Object.defineProperties(arr, {
+ "1": {
+ value: "efgh"
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arr, "1", "abcd");
+
+ verifyNotWritable(arr, "1");
+
+ verifyNotEnumerable(arr, "1");
+
+ verifyNotConfigurable(arr, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-239.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-239.js
new file mode 100644
index 0000000000..e27cf66f6e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-239.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-239
+description: >
+ Object.defineProperties - TypeError is thrown if 'O' is an Array,
+ 'P' is an array index named property that already exists on 'O' is
+ data property with [[Configurable]], [[Writable]] false, 'desc'
+ is data descriptor, [[Value]] field of 'desc' and the [[Value]]
+ attribute value of 'P' are two booleans with different values
+ (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "1", {
+ value: true
+});
+
+try {
+ Object.defineProperties(arr, {
+ "1": {
+ value: false
+ }
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arr, "1", true);
+
+ verifyNotWritable(arr, "1");
+
+ verifyNotEnumerable(arr, "1");
+
+ verifyNotConfigurable(arr, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-24.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-24.js
new file mode 100644
index 0000000000..f57eb5d1db
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-24.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-24
+description: >
+ Object.defineProperties - 'O' is the global object which
+ implements its own [[GetOwnProperty]] method to get 'P' (8.12.9
+ step 1 )
+includes: [propertyHelper.js]
+---*/
+
+
+Object.defineProperty(this, "prop", {
+ value: 11,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+
+Object.defineProperties(this, {
+ prop: {
+ value: 12
+ }
+});
+
+verifyEqualTo(this, "prop", 12);
+
+verifyWritable(this, "prop");
+
+verifyEnumerable(this, "prop");
+
+verifyConfigurable(this, "prop");
+
+delete this.prop;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-240.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-240.js
new file mode 100644
index 0000000000..3e22e8bf14
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-240.js
@@ -0,0 +1,51 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-240
+description: >
+ Object.defineProperties - TypeError is thrown if 'O' is an Array,
+ 'P' is an array index named property that already exists on 'O' is
+ data property with [[Configurable]], [[Writable]] false, 'desc'
+ is data descriptor, [[Value]] field of 'desc' and the [[Value]]
+ attribute value of 'P' are two objects which refer to the
+ different objects (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+var obj1 = {
+ value: 12
+};
+var obj2 = {
+ value: 36
+};
+
+Object.defineProperty(arr, "1", {
+ value: obj1
+});
+
+try {
+ Object.defineProperties(arr, {
+ "1": {
+ value: obj2
+ }
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arr, "1", obj1);
+
+ verifyNotWritable(arr, "1");
+
+ verifyNotEnumerable(arr, "1");
+
+ verifyNotConfigurable(arr, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-241.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-241.js
new file mode 100644
index 0000000000..6167a6ee64
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-241.js
@@ -0,0 +1,47 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-241
+description: >
+ Object.defineProperties - TypeError is thrown if 'O' is an Array,
+ 'P' is an array index named property that already exists on 'O' is
+ accessor property with [[Configurable]] false, 'desc' is accessor
+ descriptor, the [[Set]] field of 'desc' is present, and the
+ [[Set]] field of 'desc' and the [[Set]] attribute value of 'P' are
+ two objects which refer to the different objects (15.4.5.1 step
+ 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+function set_fun(value) {
+ arr.setVerifyHelpProp = value;
+}
+Object.defineProperty(arr, "1", {
+ set: set_fun
+});
+
+try {
+ Object.defineProperties(arr, {
+ "1": {
+ set: function() {}
+ }
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyWritable(arr, "1", "setVerifyHelpProp");
+
+ verifyNotEnumerable(arr, "1");
+
+ verifyNotConfigurable(arr, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-242.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-242.js
new file mode 100644
index 0000000000..a794b04f0d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-242.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-242
+description: >
+ Object.defineProperties - TypeError is thrown if 'O' is an Array,
+ 'P' is an array index named property that already exists on 'O' is
+ accessor property with [[Configurable]] false, 'desc' is accessor
+ descriptor, the [[Set]] field of 'desc' is present, and the
+ [[Set]] field of 'desc' is an object and the [[Set]] attribute
+ value of 'P' is undefined (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+function set_fun(value) {
+ arr.setVerifyHelpProp = value;
+}
+Object.defineProperty(arr, "1", {
+ set: set_fun
+});
+
+try {
+ Object.defineProperties(arr, {
+ "1": {
+ set: undefined
+ }
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyWritable(arr, "1", "setVerifyHelpProp");
+
+ verifyNotEnumerable(arr, "1");
+
+ verifyNotConfigurable(arr, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-243.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-243.js
new file mode 100644
index 0000000000..4f8ba301c4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-243.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-243
+description: >
+ Object.defineProperties - TypeError is not thrown if 'O' is an
+ Array, 'P' is an array index named property that already exists on
+ 'O' is accessor property with [[Configurable]] false, 'desc' is
+ accessor descriptor, the [[Set]] field of 'desc' is present, and
+ the [[Set]] field of 'desc' and the [[Set]] attribute value of 'P'
+ are undefined (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "1", {
+ set: undefined
+});
+
+Object.defineProperties(arr, {
+ "1": {
+ set: undefined
+ }
+});
+
+verifyNotEnumerable(arr, "1");
+
+verifyNotConfigurable(arr, "1");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-244.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-244.js
new file mode 100644
index 0000000000..12d578b86f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-244.js
@@ -0,0 +1,49 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-244
+description: >
+ Object.defineProperties - TypeError is thrown if 'O' is an Array,
+ 'P' is an array index named property that already exists on 'O' is
+ accessor property with [[Configurable]] false, 'desc' is accessor
+ descriptor, the [[Get]] field of 'desc' is present, and the
+ [[Get]] field of 'desc' and the [[Get]] attribute value of 'P' are
+ two objects which refer to the different objects (15.4.5.1 step
+ 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+function get_fun() {
+ return 36;
+}
+Object.defineProperty(arr, "1", {
+ get: get_fun
+});
+
+try {
+ Object.defineProperties(arr, {
+ "1": {
+ get: function() {
+ return 12;
+ }
+ }
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arr, "1", get_fun());
+
+ verifyNotEnumerable(arr, "1");
+
+ verifyNotConfigurable(arr, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-245.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-245.js
new file mode 100644
index 0000000000..046fc367f8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-245.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-245
+description: >
+ Object.defineProperties - TypeError is thrown if 'O' is an Array,
+ 'P' is an array index named property that already exists on 'O' is
+ accessor property with [[Configurable]] false, 'desc' is accessor
+ descriptor, the [[Get]] field of 'desc' is present, and the
+ [[Get]] field of 'desc' is an object and the [[Get]] attribute
+ value of 'P' is undefined (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+function get_fun() {
+ return 36;
+}
+Object.defineProperty(arr, "1", {
+ get: get_fun
+});
+
+try {
+ Object.defineProperties(arr, {
+ "1": {
+ get: undefined
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arr, "1", get_fun());
+
+ verifyNotEnumerable(arr, "1");
+
+ verifyNotConfigurable(arr, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-246.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-246.js
new file mode 100644
index 0000000000..f7bd329a1e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-246.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-246
+description: >
+ Object.defineProperties - TypeError is not thrown if ''O' is an
+ Array, 'P' is an array index named property that already exists on
+ 'O' is accessor property with [[Configurable]] false, 'desc' is
+ accessor descriptor, test TypeError is not thrown if the [[Get]]
+ field of 'desc' is present, and the [[Get]] field of 'desc' and
+ the [[Get]] attribute value of 'P' are undefined (15.4.5.1 step
+ 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arr = [];
+
+Object.defineProperty(arr, "1", {
+ get: undefined
+});
+
+Object.defineProperties(arr, {
+ "1": {
+ get: undefined
+ }
+});
+
+verifyNotEnumerable(arr, "1");
+
+verifyNotConfigurable(arr, "1");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-247.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-247.js
new file mode 100644
index 0000000000..f597aaf1af
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-247.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-247
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property that already exists on 'O' is data property and
+ 'desc' is data descriptor, test updating the [[Value]] attribute
+ value of 'P' (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [12];
+
+Object.defineProperties(arr, {
+ "0": {
+ value: 36
+ }
+});
+verifyEqualTo(arr, "0", 36);
+
+verifyWritable(arr, "0");
+
+verifyEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-248.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-248.js
new file mode 100644
index 0000000000..547713544d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-248.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-248
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property that already exists on 'O' is data property and
+ 'desc' is data descriptor, test setting the [[Value]] attribute
+ value of 'P' as undefined (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [12];
+
+Object.defineProperties(arr, {
+ "0": {
+ value: undefined
+ }
+});
+verifyEqualTo(arr, "0", undefined);
+
+verifyWritable(arr, "0");
+
+verifyEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-249.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-249.js
new file mode 100644
index 0000000000..36907737c5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-249.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-249
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property that already exists on 'O' is data property and
+ 'desc' is data descriptor, test setting the [[Value]] attribute
+ value of 'P' from undefined to normal value (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [undefined];
+
+Object.defineProperties(arr, {
+ "0": {
+ value: 12
+ }
+});
+verifyEqualTo(arr, "0", 12);
+
+verifyWritable(arr, "0");
+
+verifyEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-25.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-25.js
new file mode 100644
index 0000000000..b64b7ed7e6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-25.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-25
+description: >
+ Object.defineProperties - 'P' doesn't exist in 'O', test TypeError
+ is thrown when 'O' is not extensible (8.12.9 step 3)
+---*/
+
+var obj = {};
+Object.preventExtensions(obj);
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ prop: {
+ value: 12,
+ configurable: true
+ }
+ });
+});
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-250.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-250.js
new file mode 100644
index 0000000000..f247cfd64b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-250.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-250
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property that already exists on 'O' is data property and
+ 'desc' is data descriptor, test updating the [[Writable]]
+ attribute value of 'P' (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [100];
+
+Object.defineProperties(arr, {
+ "0": {
+ writable: false
+ }
+});
+verifyEqualTo(arr, "0", 100);
+
+verifyNotWritable(arr, "0");
+
+verifyEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-251.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-251.js
new file mode 100644
index 0000000000..d8e2e29bf4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-251.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-251
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property that already exists on 'O' is data property and
+ 'desc' is data descriptor, test updating the [[Enumerable]]
+ attribute value of 'P' (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [12];
+
+Object.defineProperties(arr, {
+ "0": {
+ enumerable: false
+ }
+});
+verifyEqualTo(arr, "0", 12);
+
+verifyWritable(arr, "0");
+
+verifyNotEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-252.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-252.js
new file mode 100644
index 0000000000..c74dba3fb4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-252.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-252
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property that already exists on 'O' is data property and
+ 'desc' is data descriptor, test updating the [[Configurable]]
+ attribute value of 'P' (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [12];
+
+Object.defineProperties(arr, {
+ "0": {
+ configurable: false
+ }
+});
+verifyEqualTo(arr, "0", 12);
+
+verifyWritable(arr, "0");
+
+verifyEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-253.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-253.js
new file mode 100644
index 0000000000..bec2effb09
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-253.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-253
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property that already exists on 'O' is data property and
+ 'desc' is data descriptor, test updating multiple attribute values
+ of 'P' (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [12];
+
+Object.defineProperties(arr, {
+ "0": {
+ value: 36,
+ writable: false,
+ configurable: false
+ }
+});
+verifyEqualTo(arr, "0", 36);
+
+verifyNotWritable(arr, "0");
+
+verifyEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-254.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-254.js
new file mode 100644
index 0000000000..5ff7603393
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-254.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-254
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property that already exists on 'O' is accessor property and
+ 'desc' is accessor descriptor, test updating the [[Get]] attribute
+ value of 'P' with different getter function (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [];
+
+function get_fun() {
+ return 36;
+}
+
+Object.defineProperty(arr, "0", {
+ get: function() {
+ return 12;
+ },
+ configurable: true
+});
+
+Object.defineProperties(arr, {
+ "0": {
+ get: get_fun
+ }
+});
+verifyEqualTo(arr, "0", get_fun());
+
+verifyNotEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-255.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-255.js
new file mode 100644
index 0000000000..ca5c0bb33f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-255.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-255
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property that already exists on 'O' is accessor property and
+ 'desc' is accessor descriptor, test setting the [[Get]] attribute
+ value of 'P' as undefined (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+ get: function() {
+ return 12;
+ },
+ configurable: true
+});
+
+Object.defineProperties(arr, {
+ "0": {
+ get: undefined
+ }
+});
+verifyNotEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-256.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-256.js
new file mode 100644
index 0000000000..5f2eec519b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-256.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-256
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property that already exists on 'O' is accessor property and
+ 'desc' is accessor descriptor, test updating the [[Get]] attribute
+ value of 'P' from undefined to function (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [];
+
+function get_fun() {
+ return 36;
+}
+
+Object.defineProperty(arr, "0", {
+ get: undefined,
+ configurable: true
+});
+
+Object.defineProperties(arr, {
+ "0": {
+ get: get_fun
+ }
+});
+verifyEqualTo(arr, "0", get_fun());
+
+verifyNotEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-257.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-257.js
new file mode 100644
index 0000000000..24ebf36025
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-257.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-257
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property that already exists on 'O' is accessor property and
+ 'desc' is accessor descriptor, test updating the [[Set]] attribute
+ value of 'P' with different getter function (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [];
+
+function set_fun(value) {
+ arr.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(arr, "0", {
+ set: function() {},
+ configurable: true
+});
+
+Object.defineProperties(arr, {
+ "0": {
+ set: set_fun
+ }
+});
+verifyWritable(arr, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-258.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-258.js
new file mode 100644
index 0000000000..0cb48c5eb7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-258.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-258
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property that already exists on 'O' is accessor property and
+ 'desc' is accessor descriptor, test setting the [[Set]] attribute
+ value of 'P' as undefined (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [];
+
+Object.defineProperty(arr, "0", {
+ set: function() {},
+ configurable: true
+});
+
+Object.defineProperties(arr, {
+ "0": {
+ set: undefined
+ }
+});
+verifyNotEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-259.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-259.js
new file mode 100644
index 0000000000..0e846489aa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-259.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-259
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property that already exists on 'O' is accessor property and
+ 'desc' is accessor descriptor, test updating the [[Set]] attribute
+ value of 'P' from undefined to function (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [];
+
+function set_fun(value) {
+ arr.setVerifyHelpProp = value;
+}
+Object.defineProperty(arr, "0", {
+ set: undefined,
+ configurable: true
+});
+
+Object.defineProperties(arr, {
+ "0": {
+ set: set_fun
+ }
+});
+verifyWritable(arr, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-26.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-26.js
new file mode 100644
index 0000000000..230a2ceb7a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-26.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-26
+description: >
+ Object.defineProperties - 'P' doesn't exist in 'O', test 'P' is
+ defined as data property when 'desc' is generic descriptor (8.12.9
+ step 4.a)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ prop: {
+ configurable: true,
+ enumerable: true
+ }
+});
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(desc.hasOwnProperty("value"), 'desc.hasOwnProperty("value") !== true');
+assert.sameValue(typeof desc.value, "undefined", 'typeof desc.value');
+assert(desc.hasOwnProperty("writable"), 'desc.hasOwnProperty("writable") !== true');
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert(desc.hasOwnProperty("configurable"), 'desc.hasOwnProperty("configurable") !== true');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+assert(desc.hasOwnProperty("enumerable"), 'desc.hasOwnProperty("enumerable") !== true');
+assert.sameValue(desc.enumerable, true, 'desc.enumerable');
+assert.sameValue(desc.hasOwnProperty("get"), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty("set"), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-260.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-260.js
new file mode 100644
index 0000000000..62e09ab0f2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-260.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-260
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property that already exists on 'O' is accessor property and
+ 'desc' is accessor descriptor, test updating the [[Enumerable]]
+ attribute value of 'P' (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [];
+
+function set_fun(value) {
+ arr.setVerifyHelpProp = value;
+}
+Object.defineProperty(arr, "0", {
+ set: set_fun,
+ enumerable: true,
+ configurable: true
+});
+
+Object.defineProperties(arr, {
+ "0": {
+ enumerable: false
+ }
+});
+verifyWritable(arr, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arr, "0");
+
+verifyConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-261.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-261.js
new file mode 100644
index 0000000000..3a4aeaac10
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-261.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-261
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property that already exists on 'O' is accessor property and
+ 'desc' is accessor descriptor, test updating the [[Configurable]]
+ attribute value of 'P' (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [];
+
+function set_fun(value) {
+ arr.setVerifyHelpProp = value;
+}
+Object.defineProperty(arr, "0", {
+ set: set_fun,
+ configurable: true
+});
+
+Object.defineProperties(arr, {
+ "0": {
+ configurable: false
+ }
+});
+verifyWritable(arr, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-262.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-262.js
new file mode 100644
index 0000000000..ee319f6ff2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-262.js
@@ -0,0 +1,48 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-262
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property that already exists on 'O' is accessor property and
+ 'desc' is accessor descriptor, test updating multiple attribute
+ values of 'P' (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+
+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
+ }
+});
+verifyEqualTo(arr, "0", get_fun());
+
+verifyWritable(arr, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arr, "0");
+
+verifyNotConfigurable(arr, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-263.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-263.js
new file mode 100644
index 0000000000..c11a3fede0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-263.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-263
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, test the length property of 'O' is not changed if
+ ToUint32('P') is less than value of the length property in 'O'
+ (15.4.5.1 step 4.e)
+---*/
+
+var arr = [];
+
+arr.length = 3; // default value of length: writable: true, configurable: false, enumerable: false
+
+Object.defineProperties(arr, {
+ "1": {
+ value: 26
+ }
+});
+
+assert.sameValue(arr.length, 3, 'arr.length');
+assert.sameValue(arr[1], 26, 'arr[1]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-264.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-264.js
new file mode 100644
index 0000000000..5486a526f4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-264.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-264
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, test the length property of 'O' is set as
+ ToUint32('P') + 1 if ToUint32('P') equals to value of the length
+ property in 'O' (15.4.5.1 step 4.e.ii)
+---*/
+
+var arr = [];
+
+arr.length = 3; // default value of length: writable: true, configurable: false, enumerable: false
+
+Object.defineProperties(arr, {
+ "3": {
+ value: 26
+ }
+});
+
+assert.sameValue(arr.length, 4, 'arr.length');
+assert.sameValue(arr[3], 26, 'arr[3]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-265.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-265.js
new file mode 100644
index 0000000000..7d7eb62132
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-265.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-265
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is an array index
+ named property, test the length property of 'O' is set as
+ ToUint32('P') + 1 if ToUint32('P') is greater than value of the
+ length property in 'O' (15.4.5.1 step 4.e.ii)
+---*/
+
+var arr = [];
+
+Object.defineProperties(arr, {
+ "5": {
+ value: 26
+ }
+});
+
+assert.sameValue(arr.length, 6, 'arr.length');
+assert.sameValue(arr[5], 26, 'arr[5]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-266.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-266.js
new file mode 100644
index 0000000000..689bec9b21
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-266.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-266
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is generic property
+ that won't exist on 'O', and 'desc' is data descriptor, test 'P'
+ is defined in 'O' with all correct attribute values (15.4.5.1 step
+ 5)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [];
+
+Object.defineProperties(arr, {
+ "property": {
+ value: 12,
+ writable: true,
+ enumerable: true,
+ configurable: true
+ }
+});
+verifyEqualTo(arr, "property", 12);
+
+verifyWritable(arr, "property");
+
+verifyEnumerable(arr, "property");
+
+verifyConfigurable(arr, "property");
+
+if (arr.length !== 0) {
+ throw new Test262Error('Expected arr.length === 0, actually ' + arr.length);
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-267.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-267.js
new file mode 100644
index 0000000000..c81aad2b3f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-267.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-267
+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: [propertyHelper.js]
+---*/
+
+
+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
+ }
+});
+verifyEqualTo(arr, "property", get_fun());
+
+verifyWritable(arr, "property", "setVerifyHelpProp");
+
+verifyEnumerable(arr, "property");
+
+verifyConfigurable(arr, "property");
+
+if (arr.length !== 0) {
+ throw new Test262Error('Expected arr.length === 0, actually ' + arr.length);
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-268.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-268.js
new file mode 100644
index 0000000000..3f27c8552a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-268.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-268
+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: [propertyHelper.js]
+---*/
+
+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
+ }
+});
+verifyEqualTo(arr, "property", get_fun());
+
+verifyWritable(arr, "property", "verifySetFun");
+
+verifyNotEnumerable(arr, "property");
+
+verifyConfigurable(arr, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-269.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-269.js
new file mode 100644
index 0000000000..217cd5b052
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-269.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-269
+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: [propertyHelper.js]
+---*/
+
+
+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
+ }
+});
+verifyEqualTo(arr, "property", 12);
+
+verifyNotWritable(arr, "property");
+
+verifyNotEnumerable(arr, "property");
+
+verifyNotConfigurable(arr, "property");
+
+if (arr.length !== 0) {
+ throw new Test262Error('Expected arr.length === 0, actually ' + arr.length);
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-27.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-27.js
new file mode 100644
index 0000000000..a1d78a42e0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-27.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-27
+description: >
+ Object.defineProperties - 'P' doesn't exist in 'O', test [[Value]]
+ of 'P' is set as undefined value if absent in data descriptor
+ 'desc' (8.12.9 step 4.a.i)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ prop: {
+ writable: true
+ }
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(desc.hasOwnProperty("value"), 'desc.hasOwnProperty("value") !== true');
+assert.sameValue(typeof desc.value, "undefined", 'typeof desc.value');
+assert(desc.hasOwnProperty("writable"), 'desc.hasOwnProperty("writable") !== true');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert(desc.hasOwnProperty("configurable"), 'desc.hasOwnProperty("configurable") !== true');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert(desc.hasOwnProperty("enumerable"), 'desc.hasOwnProperty("enumerable") !== true');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-270.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-270.js
new file mode 100644
index 0000000000..1fb83b1df8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-270.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-270
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is generic own data
+ property of 'O', test TypeError is thrown when updating the
+ [[Value]] attribute value of 'P' which is defined as unwritable
+ and non-configurable (15.4.5.1 step 5)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [];
+
+Object.defineProperty(arr, "property", {
+ value: 12
+});
+
+try {
+ Object.defineProperties(arr, {
+ "property": {
+ value: 36
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arr, "property", 12);
+
+ verifyNotWritable(arr, "property");
+
+ verifyNotEnumerable(arr, "property");
+
+ verifyNotConfigurable(arr, "property");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-271.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-271.js
new file mode 100644
index 0000000000..01af4ede13
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-271.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-271
+description: >
+ Object.defineProperties -'O' is an Array, 'P' is generic own data
+ property of 'O', test TypeError is thrown when updating the
+ [[Writable]] attribute value of 'P' which is defined as
+ non-configurable (15.4.5.1 step 5)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [];
+
+Object.defineProperty(arr, "property", {
+ writable: false
+});
+
+try {
+ Object.defineProperties(arr, {
+ "property": {
+ writable: true
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arr, "property", undefined);
+
+ verifyNotWritable(arr, "property");
+
+ verifyNotEnumerable(arr, "property");
+
+ verifyNotConfigurable(arr, "property");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-272.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-272.js
new file mode 100644
index 0000000000..1235a3604d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-272.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-272
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is generic own data
+ property of 'O', test TypeError is thrown when updating the
+ [[Enumerable]] attribute value of 'P' which is defined as
+ non-configurable (15.4.5.1 step 5)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [];
+
+Object.defineProperty(arr, "property", {
+ value: 12,
+ enumerable: false
+});
+
+try {
+ Object.defineProperties(arr, {
+ "property": {
+ enumerable: true
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arr, "property", 12);
+
+ verifyNotWritable(arr, "property");
+
+ verifyNotEnumerable(arr, "property");
+
+ verifyNotConfigurable(arr, "property");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-273.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-273.js
new file mode 100644
index 0000000000..9d8807a77f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-273.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-273
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is generic own data
+ property of 'O', test TypeError is thrown when updating the
+ [[Configurable]] attribute value of 'P' which is defined as
+ non-configurable (15.4.5.1 step 5)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [];
+
+Object.defineProperty(arr, "property", {
+ value: 12
+});
+
+try {
+ Object.defineProperties(arr, {
+ "property": {
+ configurable: true
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arr, "property", 12);
+
+ verifyNotWritable(arr, "property");
+
+ verifyNotEnumerable(arr, "property");
+
+ verifyNotConfigurable(arr, "property");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-274.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-274.js
new file mode 100644
index 0000000000..87b8c4cb9a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-274.js
@@ -0,0 +1,52 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-274
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is generic own
+ accessor property of 'O', test TypeError is thrown when updating
+ the [[Get]] attribute value of 'P' which is defined as
+ non-configurable (15.4.5.1 step 5)
+includes: [propertyHelper.js]
+---*/
+
+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;
+ }
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arr, "property", get_fun());
+
+ verifyWritable(arr, "property", "verifySetFun");
+
+ verifyNotEnumerable(arr, "property");
+
+ verifyNotConfigurable(arr, "property");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-275.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-275.js
new file mode 100644
index 0000000000..73a3eb6ff6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-275.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-275
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is generic own
+ accessor property of 'O', test TypeError is thrown when updating
+ the [[Set]] attribute value of 'P' which is defined as
+ non-configurable (15.4.5.1 step 5)
+includes: [propertyHelper.js]
+---*/
+
+
+var arr = [];
+
+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)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-276.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-276.js
new file mode 100644
index 0000000000..4f44eedb27
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-276.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-276
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is generic own
+ accessor property of 'O', test TypeError is thrown when updating
+ the [[Enumerable]] attribute value of 'P' which is defined as
+ non-configurable (15.4.5.1 step 5)
+includes: [propertyHelper.js]
+---*/
+
+
+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
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyWritable(arr, "property", "setVerifyHelpProp");
+
+ verifyNotEnumerable(arr, "property");
+
+ verifyNotConfigurable(arr, "property");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-277.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-277.js
new file mode 100644
index 0000000000..6015feab01
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-277.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-277
+description: >
+ Object.defineProperties - 'O' is an Array, 'P' is generic own
+ accessor property of 'O', test TypeError is thrown when updating
+ the [[Configurable]] attribute value of 'P' which is defined as
+ non-configurable (15.4.5.1 step 5)
+includes: [propertyHelper.js]
+---*/
+
+
+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
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyWritable(arr, "property", "setVerifyHelpProp");
+
+ verifyNotEnumerable(arr, "property");
+
+ verifyNotConfigurable(arr, "property");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-278.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-278.js
new file mode 100644
index 0000000000..ee646acae0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-278.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-278
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is own
+ property which is ever defined in both [[ParameterMap]] of 'O' and
+ 'O', and is deleted afterwards, and 'desc' is data descriptor,
+ test 'P' is redefined in 'O' with all correct attribute values
+ (10.6 [[DefineOwnProperty]] step 3)
+includes: [propertyHelper.js]
+---*/
+
+
+var arg;
+
+(function fun(a, b, c) {
+ arg = arguments;
+}(0, 1, 2));
+
+delete arg[0];
+
+Object.defineProperties(arg, {
+ "0": {
+ value: 10,
+ writable: true,
+ enumerable: true,
+ configurable: true
+ }
+});
+
+verifyEqualTo(arg, "0", 10);
+
+verifyWritable(arg, "0");
+
+verifyEnumerable(arg, "0");
+
+verifyConfigurable(arg, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-279.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-279.js
new file mode 100644
index 0000000000..69aff91049
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-279.js
@@ -0,0 +1,49 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-279
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is own
+ property which is ever defined in both [[ParameterMap]] of 'O' and
+ 'O', and is deleted afterwards, and 'desc' is accessor descriptor,
+ test 'P' is redefined in 'O' with all correct attribute values
+ (10.6 [[DefineOwnProperty]] step 3)
+includes: [propertyHelper.js]
+---*/
+
+
+var arg;
+
+(function fun(a, b, c) {
+ arg = arguments;
+}(0, 1, 2));
+
+delete arg[0];
+
+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
+ }
+});
+
+verifyEqualTo(arg, "0", get_func());
+
+verifyWritable(arg, "0", "setVerifyHelpProp");
+
+verifyEnumerable(arg, "0");
+
+verifyConfigurable(arg, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-28.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-28.js
new file mode 100644
index 0000000000..1b1b00f14b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-28.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-28
+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: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ prop: {
+ value: 1001
+ }
+});
+
+verifyNotWritable(obj, "prop");
+
+if (!obj.hasOwnProperty("prop")) {
+ throw new Test262Error('Expected obj.hasOwnProperty("prop") to be true, actually ' + obj.hasOwnProperty("prop"));
+}
+
+if (obj.prop !== 1001) {
+ throw new Test262Error('Expected obj.prop === 1001, actually ' + obj.prop);
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-280.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-280.js
new file mode 100644
index 0000000000..48e4384fab
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-280.js
@@ -0,0 +1,48 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-280
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is own
+ accessor property of 'O' which is also defined in [[ParameterMap]]
+ of 'O', and 'desc' is accessor descriptor, test updating multiple
+ attribute values of 'P' (10.6 [[DefineOwnProperty]] step 3)
+---*/
+
+var arg;
+
+(function fun(a, b, c) {
+ arg = arguments;
+}(0, 1, 2));
+
+function get_func1() {
+ return 10;
+}
+
+Object.defineProperty(arg, "0", {
+ get: get_func1,
+ enumerable: true,
+ configurable: true
+});
+
+function get_func2() {
+ return 20;
+}
+
+Object.defineProperties(arg, {
+ "0": {
+ get: get_func2,
+ enumerable: false,
+ configurable: false
+ }
+});
+
+var desc = Object.getOwnPropertyDescriptor(arg, "0");
+
+assert.sameValue(desc.get, get_func2, 'desc.get');
+assert.sameValue(typeof desc.set, "undefined", 'typeof desc.set');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-281.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-281.js
new file mode 100644
index 0000000000..4df7240d9c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-281.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-281
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is own
+ data property of 'O' which is also defined in [[ParameterMap]] of
+ 'O', and 'desc' is data descriptor, test updating multiple
+ attribute values of 'P' (10.6 [[DefineOwnProperty]] step 3)
+includes: [propertyHelper.js]
+---*/
+
+
+var arg;
+
+(function fun(a, b, c) {
+ arg = arguments;
+}(0, 1, 2));
+
+Object.defineProperties(arg, {
+ "0": {
+ value: 20,
+ writable: false,
+ enumerable: false,
+ configurable: false
+ }
+});
+
+verifyEqualTo(arg, "0", 20);
+
+verifyNotWritable(arg, "0");
+
+verifyNotEnumerable(arg, "0");
+
+verifyNotConfigurable(arg, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-282.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-282.js
new file mode 100644
index 0000000000..11d6e36781
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-282.js
@@ -0,0 +1,51 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-282
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is own
+ data property of 'O' which is also defined in [[ParameterMap]] of
+ 'O', test TypeError is thrown when updating the [[Value]]
+ attribute value of 'P' whose writable and configurable attributes
+ are false (10.6 [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+
+var arg;
+
+(function fun(a, b, c) {
+ arg = arguments;
+}(0, 1, 2));
+
+Object.defineProperty(arg, "0", {
+ value: 0,
+ writable: false,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(arg, {
+ "0": {
+ value: 10
+ }
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arg, "0", 0);
+
+ verifyNotWritable(arg, "0");
+
+ verifyEnumerable(arg, "0");
+
+ verifyNotConfigurable(arg, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-283.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-283.js
new file mode 100644
index 0000000000..8ac9b4f704
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-283.js
@@ -0,0 +1,52 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-283
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is own
+ data property of 'O' which is also defined in [[ParameterMap]] of
+ 'O', test TypeError is thrown when updating the [[Writable]]
+ attribute value of 'P' which is defined as non-configurable (10.6
+ [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+
+var arg;
+
+(function fun(a, b, c) {
+ arg = arguments;
+}(0, 1, 2));
+
+Object.defineProperty(arg, "0", {
+ value: 0,
+ writable: false,
+ enumerable: false,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(arg, {
+ "0": {
+ writable: true
+ }
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arg, "0", 0);
+
+ verifyNotWritable(arg, "0");
+
+ verifyNotEnumerable(arg, "0");
+
+ verifyNotConfigurable(arg, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-284.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-284.js
new file mode 100644
index 0000000000..9fed19833a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-284.js
@@ -0,0 +1,52 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-284
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is own
+ data property of 'O' which is also defined in [[ParameterMap]] of
+ 'O', test TypeError is thrown when updating the [[Enumerable]]
+ attribute value of 'P' which is defined as non-configurable (10.6
+ [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+
+var arg;
+
+(function fun(a, b, c) {
+ arg = arguments;
+}(0, 1, 2));
+
+Object.defineProperty(arg, "0", {
+ value: 0,
+ writable: false,
+ enumerable: true,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(arg, {
+ "0": {
+ enumerable: false
+ }
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arg, "0", 0);
+
+ verifyNotWritable(arg, "0");
+
+ verifyEnumerable(arg, "0");
+
+ verifyNotConfigurable(arg, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-285.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-285.js
new file mode 100644
index 0000000000..a22f1a59ba
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-285.js
@@ -0,0 +1,52 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-285
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is own
+ data property of 'O' which is also defined in [[ParameterMap]] of
+ 'O', test TypeError is thrown when updating the [[Configurable]]
+ attribute value of 'P' which is defined as non-configurable (10.6
+ [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+
+var arg;
+
+(function fun(a, b, c) {
+ arg = arguments;
+}(0, 1, 2));
+
+Object.defineProperty(arg, "0", {
+ value: 0,
+ writable: false,
+ enumerable: false,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(arg, {
+ "0": {
+ configurable: true
+ }
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arg, "0", 0);
+
+ verifyNotWritable(arg, "0");
+
+ verifyNotEnumerable(arg, "0");
+
+ verifyNotConfigurable(arg, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-286.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-286.js
new file mode 100644
index 0000000000..ea68464df0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-286.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-286
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is own
+ accessor property of 'O' which is also defined in [[ParameterMap]]
+ of 'O', test TypeError is thrown when updating the [[Get]]
+ attribute value of 'P' which is defined as non-configurable (10.6
+ [[DefineOwnProperty]] step 4)
+---*/
+
+var arg;
+
+(function fun(a, b, c) {
+ arg = arguments;
+}(0, 1, 2));
+
+function get_func1() {
+ return 0;
+}
+
+Object.defineProperty(arg, "0", {
+ get: get_func1,
+ enumerable: false,
+ configurable: false
+});
+
+function get_func2() {
+ return 10;
+}
+assert.throws(TypeError, function() {
+ Object.defineProperties(arg, {
+ "0": {
+ get: get_func2
+ }
+ });
+});
+var desc = Object.getOwnPropertyDescriptor(arg, "0");
+assert.sameValue(desc.get, get_func1, 'desc.get');
+assert.sameValue(typeof desc.set, "undefined", 'typeof desc.set');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-287.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-287.js
new file mode 100644
index 0000000000..110f8e9417
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-287.js
@@ -0,0 +1,47 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-287
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is own
+ accessor property of 'O' which is also defined in [[ParameterMap]]
+ of 'O', test TypeError is thrown when updating the [[Set]]
+ attribute value of 'P' which is defined as non-configurable (10.6
+ [[DefineOwnProperty]] step 4)
+---*/
+
+var arg;
+
+(function fun(a, b, c) {
+ arg = arguments;
+}(0, 1, 2));
+
+function get_func() {
+ return 0;
+}
+
+Object.defineProperty(arg, "0", {
+ get: get_func,
+ set: undefined,
+ enumerable: false,
+ configurable: false
+});
+
+function set_func(value) {
+ arg.setVerifyHelpProp = value;
+}
+assert.throws(TypeError, function() {
+ Object.defineProperties(arg, {
+ "0": {
+ set: set_func
+ }
+ });
+});
+var desc = Object.getOwnPropertyDescriptor(arg, "0");
+assert.sameValue(desc.get, get_func, 'desc.get');
+assert.sameValue(typeof desc.set, "undefined", 'typeof desc.set');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-288.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-288.js
new file mode 100644
index 0000000000..a5a2feeecd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-288.js
@@ -0,0 +1,53 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-288
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is own
+ accessor property of 'O' which is also defined in [[ParameterMap]]
+ of 'O', test TypeError is thrown when updating the [[Enumerable]]
+ attribute value of 'P' which is defined as non-configurable (10.6
+ [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+
+var arg;
+
+(function fun(a, b, c) {
+ arg = arguments;
+}(0, 1, 2));
+
+function get_func() {
+ return 0;
+}
+
+Object.defineProperty(arg, "0", {
+ get: get_func,
+ enumerable: true,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(arg, {
+ "0": {
+ enumerable: false
+ }
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arg, "0", get_func());
+
+ verifyEnumerable(arg, "0");
+
+ verifyNotConfigurable(arg, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-289.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-289.js
new file mode 100644
index 0000000000..58daa19af6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-289.js
@@ -0,0 +1,53 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-289
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is own
+ accessor property of 'O' which is also defined in [[ParameterMap]]
+ of 'O', test TypeError is thrown when updating the
+ [[Configurable]] attribute value of 'P' which is defined as
+ non-configurable (10.6 [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+
+var arg;
+
+(function fun(a, b, c) {
+ arg = arguments;
+}(0, 1, 2));
+
+function get_func() {
+ return 0;
+}
+
+Object.defineProperty(arg, "0", {
+ get: get_func,
+ enumerable: true,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(arg, {
+ "0": {
+ configurable: true
+ }
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arg, "0", get_func());
+
+ verifyEnumerable(arg, "0");
+
+ verifyNotConfigurable(arg, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-29.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-29.js
new file mode 100644
index 0000000000..93d238775d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-29.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-29
+description: >
+ Object.defineProperties - 'P' doesn't exist in 'O', test
+ [[Enumerable]] of 'P' is set as false value if absent in data
+ descriptor 'desc' (8.12.9 step 4.a.i)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ prop: {
+ value: 1001
+ }
+});
+
+for (var prop in obj) {
+ if (obj.hasOwnProperty(prop)) {
+ assert.notSameValue(prop, "prop", 'prop');
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-290.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-290.js
new file mode 100644
index 0000000000..f03e73674a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-290.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-290
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is an
+ array index named property of 'O' but not defined in
+ [[ParameterMap]] of 'O', and 'desc' is data descriptor, test 'P'
+ is defined in 'O' with all correct attribute values (10.6
+ [[DefineOwnProperty]] step 3)
+includes: [propertyHelper.js]
+---*/
+
+
+var arg;
+
+(function fun() {
+ arg = arguments;
+}(0, 1, 2));
+
+delete arg[0];
+
+Object.defineProperties(arg, {
+ "0": {
+ value: 10,
+ writable: false,
+ enumerable: false,
+ configurable: false
+ }
+});
+
+verifyEqualTo(arg, "0", 10);
+
+verifyNotWritable(arg, "0");
+
+verifyNotEnumerable(arg, "0");
+
+verifyNotConfigurable(arg, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-291.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-291.js
new file mode 100644
index 0000000000..1319ec70c2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-291.js
@@ -0,0 +1,49 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-291
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is an
+ array index named property of 'O' but not defined in
+ [[ParameterMap]] of 'O', and 'desc' is accessor descriptor, test
+ 'P' is defined in 'O' with all correct attribute values (10.6
+ [[DefineOwnProperty]] step 3)
+includes: [propertyHelper.js]
+---*/
+
+
+var arg;
+
+(function fun() {
+ arg = arguments;
+}(0, 1, 2));
+
+delete arg[0];
+
+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
+ }
+});
+
+verifyEqualTo(arg, "0", get_func());
+
+verifyWritable(arg, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arg, "0");
+
+verifyNotConfigurable(arg, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-292.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-292.js
new file mode 100644
index 0000000000..a03cfd2060
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-292.js
@@ -0,0 +1,50 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-292
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is an
+ array index named accessor property of 'O' but not defined in
+ [[ParameterMap]] of 'O', and 'desc' is accessor descriptor, test
+ updating multiple attribute values of 'P' (10.6
+ [[DefineOwnProperty]] step 3)
+includes: [propertyHelper.js]
+---*/
+
+
+var arg;
+
+(function fun() {
+ arg = arguments;
+}(0, 1, 2));
+
+function get_func1() {
+ return 10;
+}
+
+Object.defineProperty(arg, "0", {
+ get: get_func1,
+ enumerable: true,
+ configurable: true
+});
+
+function get_func2() {
+ return 20;
+}
+
+Object.defineProperties(arg, {
+ "0": {
+ get: get_func2,
+ enumerable: false,
+ configurable: false
+ }
+});
+
+verifyEqualTo(arg, "0", get_func2());
+
+verifyNotEnumerable(arg, "0");
+
+verifyNotConfigurable(arg, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-293.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-293.js
new file mode 100644
index 0000000000..5d9589888b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-293.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-293
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is an
+ array index named data property of 'O' but not defined in
+ [[ParameterMap]] of 'O', and 'desc' is data descriptor, test
+ updating multiple attribute values of 'P' (10.6
+ [[DefineOwnProperty]] step 3)
+includes: [propertyHelper.js]
+---*/
+
+
+var arg;
+
+(function fun() {
+ arg = arguments;
+}(0, 1, 2));
+
+Object.defineProperties(arg, {
+ "0": {
+ value: 20,
+ writable: false,
+ enumerable: false,
+ configurable: false
+ }
+});
+
+verifyEqualTo(arg, "0", 20);
+
+verifyNotWritable(arg, "0");
+
+verifyNotEnumerable(arg, "0");
+
+verifyNotConfigurable(arg, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-294.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-294.js
new file mode 100644
index 0000000000..e1af163e2b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-294.js
@@ -0,0 +1,51 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-294
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is an
+ array index named data property of 'O' but not defined in
+ [[ParameterMap]] of 'O', test TypeError is thrown when updating
+ the [[Value]] attribute value of 'P' which is not writable and not
+ configurable (10.6 [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+
+var arg;
+
+(function fun() {
+ arg = arguments;
+}());
+
+Object.defineProperty(arg, "0", {
+ value: 0,
+ writable: false,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(arg, {
+ "0": {
+ value: 10
+ }
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arg, "0", 0);
+
+ verifyNotWritable(arg, "0");
+
+ verifyNotEnumerable(arg, "0");
+
+ verifyNotConfigurable(arg, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-295.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-295.js
new file mode 100644
index 0000000000..995e695b60
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-295.js
@@ -0,0 +1,52 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-295
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is an
+ array index named data property of 'O' but not defined in
+ [[ParameterMap]] of 'O', test TypeError is thrown when updating
+ the [[Writable]] attribute value of 'P' which is not configurable
+ (10.6 [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+
+var arg;
+
+(function fun() {
+ arg = arguments;
+}());
+
+Object.defineProperty(arg, "0", {
+ value: 0,
+ writable: false,
+ enumerable: false,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(arg, {
+ "0": {
+ writable: true
+ }
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arg, "0", 0);
+
+ verifyNotWritable(arg, "0");
+
+ verifyNotEnumerable(arg, "0");
+
+ verifyNotConfigurable(arg, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-296.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-296.js
new file mode 100644
index 0000000000..d63b6abd7c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-296.js
@@ -0,0 +1,52 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-296
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is an
+ array index named data property of 'O' but not defined in
+ [[ParameterMap]] of 'O', test TypeError is thrown when updating
+ the [[Enumerable]] attribute value of 'P' which is not
+ configurable (10.6 [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+
+var arg;
+
+(function fun() {
+ arg = arguments;
+}());
+
+Object.defineProperty(arg, "0", {
+ value: 0,
+ writable: false,
+ enumerable: true,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(arg, {
+ "0": {
+ enumerable: false
+ }
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arg, "0", 0);
+
+ verifyNotWritable(arg, "0");
+
+ verifyEnumerable(arg, "0");
+
+ verifyNotConfigurable(arg, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-297.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-297.js
new file mode 100644
index 0000000000..85a07ad038
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-297.js
@@ -0,0 +1,52 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-297
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is an
+ array index named data property of 'O' but not defined in
+ [[ParameterMap]] of 'O', test TypeError is thrown when updating
+ the [[Configurable]] attribute value of 'P' which is not
+ configurable (10.6 [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+
+var arg;
+
+(function fun() {
+ arg = arguments;
+}());
+
+Object.defineProperty(arg, "0", {
+ value: 0,
+ writable: false,
+ enumerable: false,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(arg, {
+ "0": {
+ configurable: true
+ }
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arg, "0", 0);
+
+ verifyNotWritable(arg, "0");
+
+ verifyNotEnumerable(arg, "0");
+
+ verifyNotConfigurable(arg, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-298.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-298.js
new file mode 100644
index 0000000000..2bb794f123
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-298.js
@@ -0,0 +1,55 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-298
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is an
+ array index named accessor property of 'O' but not defined in
+ [[ParameterMap]] of 'O', test TypeError is thrown when updating
+ the [[Get]] attribute value of 'P' which is not configurable (10.6
+ [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+
+var arg;
+
+(function fun() {
+ arg = arguments;
+}());
+
+function get_func1() {
+ return 0;
+}
+
+Object.defineProperty(arg, "0", {
+ get: get_func1,
+ enumerable: false,
+ configurable: false
+});
+
+function get_func2() {
+ return 10;
+}
+try {
+ Object.defineProperties(arg, {
+ "0": {
+ get: get_func2
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arg, "0", get_func1());
+
+ verifyNotEnumerable(arg, "0");
+
+ verifyNotConfigurable(arg, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-299.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-299.js
new file mode 100644
index 0000000000..2e59611209
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-299.js
@@ -0,0 +1,56 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-299
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is an
+ array index named accessor property of 'O' but not defined in
+ [[ParameterMap]] of 'O', test TypeError is thrown when updating
+ the [[Set]] attribute value of 'P' which is not configurable (10.6
+ [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+
+var arg;
+
+(function fun() {
+ arg = arguments;
+}());
+
+function get_func() {
+ return 0;
+}
+
+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
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arg, "0", get_func());
+
+ verifyNotEnumerable(arg, "0");
+
+ verifyNotConfigurable(arg, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-3.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-3.js
new file mode 100644
index 0000000000..685c2a5422
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-3.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-3
+description: >
+ Object.defineProperties - 'P' is own data property that overrides
+ an inherited data property (8.12.9 step 1 )
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "prop", {
+ value: 11,
+ configurable: true
+});
+var Con = function() {};
+Con.prototype = proto;
+
+var obj = new Con();
+Object.defineProperty(obj, "prop", {
+ value: 12,
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ prop: {
+ value: 13,
+ configurable: true
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-30.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-30.js
new file mode 100644
index 0000000000..bba5d89ff4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-30.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-30
+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: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+
+Object.defineProperties(obj, {
+ prop: {
+ value: 1001
+ }
+});
+
+verifyNotConfigurable(obj, "prop");
+
+if (!obj.hasOwnProperty("prop")) {
+ throw new Test262Error('Expected obj.hasOwnProperty("prop") to be true, actually ' + obj.hasOwnProperty("prop"));
+}
+
+if (obj.prop !== 1001) {
+ throw new Test262Error('Expected obj.prop === 1001, actually ' + obj.prop);
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-300.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-300.js
new file mode 100644
index 0000000000..7c10d4efa7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-300.js
@@ -0,0 +1,52 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-300
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is an
+ array index named accessor property of 'O' but not defined in
+ [[ParameterMap]] of 'O', test TypeError is thrown when updating
+ the [[Enumerable]] attribute value of 'P' which is not
+ configurable (10.6 [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+
+var arg;
+
+(function fun() {
+ arg = arguments;
+}());
+
+function get_func() {
+ return 0;
+}
+
+Object.defineProperty(arg, "0", {
+ get: get_func,
+ enumerable: true,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(arg, {
+ "0": {
+ enumerable: false
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arg, "0", get_func());
+
+ verifyEnumerable(arg, "0");
+
+ verifyNotConfigurable(arg, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-301.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-301.js
new file mode 100644
index 0000000000..607a3a746d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-301.js
@@ -0,0 +1,52 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-301
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is an
+ array index named accessor property of 'O' but not defined in
+ [[ParameterMap]] of 'O', test TypeError is thrown when updating
+ the [[Configurable]] attribute value of 'P' which is not
+ configurable (10.6 [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+
+var arg;
+
+(function fun() {
+ arg = arguments;
+}());
+
+function get_func() {
+ return 0;
+}
+
+Object.defineProperty(arg, "0", {
+ get: get_func,
+ enumerable: true,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(arg, {
+ "0": {
+ configurable: true
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arg, "0", get_func());
+
+ verifyEnumerable(arg, "0");
+
+ verifyNotConfigurable(arg, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-302.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-302.js
new file mode 100644
index 0000000000..16f710cd40
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-302.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-302
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is
+ generic property, and 'desc' is data descriptor, test 'P' is
+ defined in 'O' with all correct attribute values (10.6
+ [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+var arg = (function() {
+ return arguments;
+}(1, 2, 3));
+
+Object.defineProperties(arg, {
+ "genericProperty": {
+ value: 1001,
+ writable: true,
+ enumerable: true,
+ configurable: true
+ }
+});
+
+verifyEqualTo(arg, "genericProperty", 1001);
+
+verifyWritable(arg, "genericProperty");
+
+verifyEnumerable(arg, "genericProperty");
+
+verifyConfigurable(arg, "genericProperty");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-303.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-303.js
new file mode 100644
index 0000000000..f3f32aab1c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-303.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-303
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is
+ generic property, and 'desc' is accessor descriptor, test 'P' is
+ defined in 'O' with all correct attribute values (10.6
+ [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+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
+ }
+});
+
+verifyEqualTo(arg, "genericProperty", getFun());
+
+verifyWritable(arg, "genericProperty", "testGetFunction");
+
+verifyEnumerable(arg, "genericProperty");
+
+verifyConfigurable(arg, "genericProperty");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-304.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-304.js
new file mode 100644
index 0000000000..e5168c7d84
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-304.js
@@ -0,0 +1,53 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-304
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is
+ generic own accessor property of 'O', and 'desc' is accessor
+ descriptor, test updating multiple attribute values of 'P' (10.6
+ [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+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
+ }
+});
+
+verifyEqualTo(arg, "genericProperty", getFun());
+
+verifyWritable(arg, "genericProperty", "testGetFunction");
+
+verifyNotEnumerable(arg, "genericProperty");
+
+verifyNotConfigurable(arg, "genericProperty");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-305.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-305.js
new file mode 100644
index 0000000000..4863298678
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-305.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-305
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is
+ generic own data property of 'O', and 'desc' is data descriptor,
+ test updating multiple attribute values of 'P' (10.6
+ [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+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
+ }
+});
+
+verifyEqualTo(arg, "genericProperty", 1002);
+
+verifyWritable(arg, "genericProperty");
+
+verifyNotEnumerable(arg, "genericProperty");
+
+verifyNotConfigurable(arg, "genericProperty");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-306.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-306.js
new file mode 100644
index 0000000000..5674c28b7d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-306.js
@@ -0,0 +1,47 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-306
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is
+ generic own data property of 'O', test TypeError is thrown when
+ updating the [[Value]] attribute value of 'P' which is not
+ writable and not configurable (10.6 [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+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
+ }
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arg, "genericProperty", 1001);
+
+ verifyNotWritable(arg, "genericProperty");
+
+ verifyNotEnumerable(arg, "genericProperty");
+
+ verifyNotConfigurable(arg, "genericProperty");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-307.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-307.js
new file mode 100644
index 0000000000..f1294cc7e8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-307.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-307
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is
+ generic own data property of 'O', test TypeError is thrown when
+ updating the [[Writable]] attribute value of 'P' which is not
+ configurable (10.6 [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+var arg = (function() {
+ return arguments;
+}(1, 2, 3));
+
+Object.defineProperty(arg, "genericProperty", {
+ writable: false,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(arg, {
+ "genericProperty": {
+ writable: true
+ }
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arg, "genericProperty", undefined);
+
+ verifyNotWritable(arg, "genericProperty");
+
+ verifyNotEnumerable(arg, "genericProperty");
+
+ verifyNotConfigurable(arg, "genericProperty");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-308.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-308.js
new file mode 100644
index 0000000000..f905ee306c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-308.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-308
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is
+ generic own data property of 'O', test TypeError is thrown when
+ updating the [[Enumerable]] attribute value of 'P' which is not
+ configurable (10.6 [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+var arg = (function() {
+ return arguments;
+}(1, 2, 3));
+
+Object.defineProperty(arg, "genericProperty", {
+ enumerable: true,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(arg, {
+ "genericProperty": {
+ enumerable: false
+ }
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arg, "genericProperty", undefined);
+
+ verifyNotWritable(arg, "genericProperty");
+
+ verifyEnumerable(arg, "genericProperty");
+
+ verifyNotConfigurable(arg, "genericProperty");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-309.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-309.js
new file mode 100644
index 0000000000..fc7e123d7a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-309.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-309
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is
+ generic own data property of 'O', test TypeError is thrown when
+ updating the [[Configurable]] attribute value of 'P' which is not
+ configurable (10.6 [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+var arg = (function() {
+ return arguments;
+}(1, 2, 3));
+
+Object.defineProperty(arg, "genericProperty", {
+ configurable: false
+});
+
+try {
+ Object.defineProperties(arg, {
+ "genericProperty": {
+ configurable: true
+ }
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arg, "genericProperty", undefined);
+
+ verifyNotWritable(arg, "genericProperty");
+
+ verifyNotEnumerable(arg, "genericProperty");
+
+ verifyNotConfigurable(arg, "genericProperty");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-31.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-31.js
new file mode 100644
index 0000000000..3e0d7399be
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-31.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ prop: {
+ value: 1002,
+ writable: false,
+ enumerable: false,
+ configurable: false
+ }
+});
+verifyEqualTo(obj, "prop", 1002);
+
+verifyNotWritable(obj, "prop");
+
+verifyNotEnumerable(obj, "prop");
+
+verifyNotConfigurable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-310.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-310.js
new file mode 100644
index 0000000000..a62ee445a7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-310.js
@@ -0,0 +1,56 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-310
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is
+ generic own accessor property of 'O', test TypeError is thrown
+ when updating the [[Get]] attribute value of 'P' which is not
+ configurable (10.6 [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+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";
+ }
+ }
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arg, "genericProperty", getFun());
+
+ verifyWritable(arg, "genericProperty", "verifySetFun");
+
+ verifyNotEnumerable(arg, "genericProperty");
+
+ verifyNotConfigurable(arg, "genericProperty");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-311.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-311.js
new file mode 100644
index 0000000000..b5fd0b53f7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-311.js
@@ -0,0 +1,49 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-311
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is
+ generic own accessor property of 'O', test TypeError is thrown
+ when updating the [[Set]] attribute value of 'P' which is not
+ configurable (10.6 [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+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;
+ }
+ }
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyWritable(arg, "genericProperty", "genericPropertyString");
+
+ verifyNotEnumerable(arg, "genericProperty");
+
+ verifyNotConfigurable(arg, "genericProperty");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-312.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-312.js
new file mode 100644
index 0000000000..a890c971e3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-312.js
@@ -0,0 +1,48 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-312
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is
+ generic own accessor property of 'O', test TypeError is thrown
+ when updating the [[Enumerable]] attribute value of 'P' which is
+ not configurable (10.6 [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+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
+ }
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyWritable(arg, "genericProperty", "genericPropertyString");
+
+ verifyEnumerable(arg, "genericProperty");
+
+ verifyNotConfigurable(arg, "genericProperty");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-313.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-313.js
new file mode 100644
index 0000000000..8a0992330e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-313.js
@@ -0,0 +1,47 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-313
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'P' is
+ generic own accessor property of 'O', test TypeError is thrown
+ when updating the [[Configurable]] attribute value of 'P' which is
+ not configurable (10.6 [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+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
+ }
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyWritable(arg, "genericProperty", "genericPropertyString");
+
+ verifyNotEnumerable(arg, "genericProperty");
+
+ verifyNotConfigurable(arg, "genericProperty");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-314.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-314.js
new file mode 100644
index 0000000000..4c383c5b80
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-314.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-314
+description: >
+ Object.defineProperties - 'O' is an Arguments object, 'name' is
+ own property of [[ParameterMap]] of 'O', test 'name' is deleted if
+ 'name' is configurable and 'desc' is accessor descriptor (10.6
+ [[DefineOwnProperty]] step 5.a.i)
+---*/
+
+var arg = (function() {
+ return arguments;
+}(1, 2, 3));
+var accessed = false;
+
+Object.defineProperties(arg, {
+ "0": {
+ get: function() {
+ accessed = true;
+ return 12;
+ }
+ }
+});
+
+assert.sameValue(arg[0], 12, 'arg[0]');
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-32.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-32.js
new file mode 100644
index 0000000000..f87162d8b9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-32.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-32
+description: >
+ Object.defineProperties - 'desc' is generic descriptor without any
+ attribute, test 'P' is defined in 'obj' with all default attribute
+ values (8.12.9 step 4.a.i)
+---*/
+
+var obj = {};
+
+Object.defineProperties(obj, {
+ prop: {}
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(desc.hasOwnProperty("value"), 'desc.hasOwnProperty("value") !== true');
+assert.sameValue(typeof desc.value, "undefined", 'typeof desc.value');
+assert(desc.hasOwnProperty("writable"), 'desc.hasOwnProperty("writable") !== true');
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert(desc.hasOwnProperty("configurable"), 'desc.hasOwnProperty("configurable") !== true');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert(desc.hasOwnProperty("enumerable"), 'desc.hasOwnProperty("enumerable") !== true');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.hasOwnProperty("get"), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty("set"), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-33.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-33.js
new file mode 100644
index 0000000000..c1c992a90d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-33.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-33
+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: [propertyHelper.js]
+---*/
+
+var obj = {};
+var setFun = function(value) {
+ obj.setVerifyHelpProp = value;
+};
+
+Object.defineProperties(obj, {
+ prop: {
+ set: setFun,
+ enumerable: true,
+ configurable: true
+ }
+});
+verifyWritable(obj, "prop", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "prop");
+
+verifyConfigurable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-34.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-34.js
new file mode 100644
index 0000000000..1ff7ac58bd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-34.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-34
+description: >
+ Object.defineProperties - 'P' doesn't exist in 'O', test [[Set]]
+ of 'P' is set as undefined value if absent in accessor descriptor
+ 'desc' (8.12.9 step 4.b.i)
+---*/
+
+var obj = {};
+var getFunc = function() {
+ return 10;
+};
+
+Object.defineProperties(obj, {
+ prop: {
+ get: getFunc,
+ enumerable: true,
+ configurable: true
+ }
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(typeof(desc.set), "undefined", 'typeof (desc.set)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-35.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-35.js
new file mode 100644
index 0000000000..5ec06c05ef
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-35.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-35
+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: [propertyHelper.js]
+---*/
+
+var obj = {};
+var getFun = function() {
+ return 10;
+};
+var setFun = function(value) {
+ obj.setVerifyHelpProp = value;
+};
+
+Object.defineProperties(obj, {
+ prop: {
+ set: setFun,
+ get: getFun,
+ configurable: true
+ }
+});
+verifyEqualTo(obj, "prop", getFun());
+
+verifyWritable(obj, "prop", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "prop");
+
+verifyConfigurable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-36.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-36.js
new file mode 100644
index 0000000000..cd1476eaea
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-36.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-36
+description: >
+ Object.defineProperties - 'P' doesn't exist in 'O', test
+ [[Configurable]] of 'P' is set as false value if absent in
+ accessor descriptor 'desc' (8.12.9 step 4.b.i)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+var getFun = function() {
+ return 10;
+};
+var setFun = function(value) {
+ obj.setVerifyHelpProp = value;
+};
+
+Object.defineProperties(obj, {
+ prop: {
+ set: setFun,
+ get: getFun,
+ enumerable: true
+ }
+});
+
+verifyEqualTo(obj, "prop", 10);
+
+verifyWritable(obj, "prop", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "prop");
+
+verifyNotConfigurable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-37.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-37.js
new file mode 100644
index 0000000000..afdb5a5709
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-37.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+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
+ }
+});
+verifyEqualTo(obj, "prop", getFun());
+
+verifyWritable(obj, "prop", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "prop");
+
+verifyNotConfigurable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-38-1.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-38-1.js
new file mode 100644
index 0000000000..97d92d286c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-38-1.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-38-1
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+var getFunc = function() {
+ return 12;
+};
+Object.defineProperties(obj, {
+ foo: {
+ get: getFunc,
+ enumerable: true,
+ configurable: true
+ }
+});
+
+Object.defineProperties(obj, {
+ foo: {}
+});
+
+verifyEqualTo(obj, "foo", getFunc());
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-38.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-38.js
new file mode 100644
index 0000000000..d687d6345e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-38.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-38
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+obj.foo = 100; // default value of attributes: writable: true, configurable: true, enumerable: true
+
+Object.defineProperties(obj, {
+ foo: {}
+});
+verifyEqualTo(obj, "foo", 100);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-39.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-39.js
new file mode 100644
index 0000000000..54c402d74f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-39.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+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
+ }
+});
+verifyEqualTo(obj, "foo", 101);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-4.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-4.js
new file mode 100644
index 0000000000..988c1c7057
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-4.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-4
+description: >
+ Object.defineProperties - 'P' is own data property that overrides
+ an inherited accessor property (8.12.9 step 1 )
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "prop", {
+ get: function() {
+ return 11;
+ },
+ configurable: true
+});
+var Con = function() {};
+Con.prototype = proto;
+
+var obj = new Con();
+Object.defineProperty(obj, "prop", {
+ value: 12,
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ prop: {
+ value: 13,
+ configurable: true
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-40.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-40.js
new file mode 100644
index 0000000000..6c0d2f2c8a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-40.js
@@ -0,0 +1,47 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+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
+ }
+});
+verifyEqualTo(obj, "foo", get_func());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-41.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-41.js
new file mode 100644
index 0000000000..f7d9be5dc4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-41.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+obj.foo = 101; // default value of attributes: writable: true, configurable: true, enumerable: true
+
+Object.defineProperties(obj, {
+ foo: {
+ value: "102"
+ }
+});
+verifyEqualTo(obj, "foo", "102");
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-42.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-42.js
new file mode 100644
index 0000000000..26da7ca748
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-42.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+var desc = {
+ value: undefined
+};
+Object.defineProperty(obj, "foo", desc);
+
+Object.defineProperties(obj, {
+ foo: {
+ value: undefined
+ }
+});
+verifyEqualTo(obj, "foo", undefined);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-43.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-43.js
new file mode 100644
index 0000000000..f31e75dbed
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-43.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+var desc = {
+ value: null
+};
+Object.defineProperty(obj, "foo", desc);
+
+Object.defineProperties(obj, {
+ foo: {
+ value: null
+ }
+});
+verifyEqualTo(obj, "foo", null);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-44.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-44.js
new file mode 100644
index 0000000000..ce699a71b2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-44.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-44
+description: >
+ Object.defineProperties - both desc.value and P.value are NaN
+ (8.12.9 step 6)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+var desc = {
+ value: NaN
+};
+Object.defineProperty(obj, "foo", desc);
+
+Object.defineProperties(obj, {
+ foo: {
+ value: NaN
+ }
+});
+
+verifyNotEnumerable(obj, "foo");
+verifyNotWritable(obj, "foo");
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-45.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-45.js
new file mode 100644
index 0000000000..5738385a85
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-45.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+var desc = {
+ value: -0
+};
+Object.defineProperty(obj, "foo", desc);
+
+try {
+ Object.defineProperties(obj, {
+ foo: {
+ value: +0
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "foo", -0);
+
+ verifyNotWritable(obj, "foo");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-46.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-46.js
new file mode 100644
index 0000000000..5b7397c87e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-46.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+var desc = {
+ value: +0
+};
+Object.defineProperty(obj, "foo", desc);
+
+try {
+ Object.defineProperties(obj, {
+ foo: {
+ value: -0
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "foo", +0);
+
+ verifyNotWritable(obj, "foo");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-47.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-47.js
new file mode 100644
index 0000000000..3cbc638a8b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-47.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+var desc = {
+ value: 101
+};
+Object.defineProperty(obj, "foo", desc);
+
+Object.defineProperties(obj, {
+ foo: {
+ value: 101
+ }
+});
+verifyEqualTo(obj, "foo", 101);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-48.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-48.js
new file mode 100644
index 0000000000..b3de13ed9d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-48.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+obj.foo = 101; // default value of attributes: writable: true, configurable: true, enumerable: true
+
+Object.defineProperties(obj, {
+ foo: {
+ value: 102
+ }
+});
+verifyEqualTo(obj, "foo", 102);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-49.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-49.js
new file mode 100644
index 0000000000..5cb4ac2df9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-49.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-49
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+var desc = {
+ value: "abcd"
+};
+Object.defineProperty(obj, "foo", desc);
+
+Object.defineProperties(obj, {
+ foo: {
+ value: "abcd"
+ }
+});
+verifyEqualTo(obj, "foo", "abcd");
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-5.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-5.js
new file mode 100644
index 0000000000..5893ad38d2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-5.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-5
+description: >
+ Object.defineProperties - 'P' is own accessor property (8.12.9
+ step 1 )
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+function getFunc() {
+ return 11;
+}
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(obj, {
+ prop: {
+ value: 12,
+ configurable: true
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "prop", getFunc());
+
+ verifyNotEnumerable(obj, "prop");
+
+ verifyNotConfigurable(obj, "prop");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-50.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-50.js
new file mode 100644
index 0000000000..c4459a802e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-50.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+obj.foo = "abcd"; // default value of attributes: writable: true, configurable: true, enumerable: true
+
+Object.defineProperties(obj, {
+ foo: {
+ value: "fghj"
+ }
+});
+verifyEqualTo(obj, "foo", "fghj");
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-51.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-51.js
new file mode 100644
index 0000000000..eaeb92e3c7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-51.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+var desc = {
+ value: true
+};
+Object.defineProperty(obj, "foo", desc);
+
+Object.defineProperties(obj, {
+ foo: {
+ value: true
+ }
+});
+verifyEqualTo(obj, "foo", true);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-52.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-52.js
new file mode 100644
index 0000000000..294565851e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-52.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+obj.foo = true; // default value of attributes: writable: true, configurable: true, enumerable: true
+
+Object.defineProperties(obj, {
+ foo: {
+ value: false
+ }
+});
+verifyEqualTo(obj, "foo", false);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-53.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-53.js
new file mode 100644
index 0000000000..47a8e4d761
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-53.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+var obj1 = {
+ length: 10
+};
+var desc = {
+ value: obj1
+};
+Object.defineProperty(obj, "foo", desc);
+
+Object.defineProperties(obj, {
+ foo: {
+ value: obj1
+ }
+});
+verifyEqualTo(obj, "foo", obj1);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-54.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-54.js
new file mode 100644
index 0000000000..0c154f563f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-54.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+var obj1 = {
+ length: 10
+};
+obj.foo = obj1; // default value of attributes: writable: true, configurable: true, enumerable: true
+
+var obj2 = {
+ length: 20
+};
+
+Object.defineProperties(obj, {
+ foo: {
+ value: obj2
+ }
+});
+verifyEqualTo(obj, "foo", obj2);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-55.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-55.js
new file mode 100644
index 0000000000..3db7ea5160
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-55.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+var desc = {
+ writable: false
+};
+Object.defineProperty(obj, "foo", desc);
+
+Object.defineProperties(obj, {
+ foo: {
+ writable: false
+ }
+});
+verifyEqualTo(obj, "foo", undefined);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-56.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-56.js
new file mode 100644
index 0000000000..c5e8d07b24
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-56.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+var desc = {
+ writable: false,
+ configurable: true
+};
+Object.defineProperty(obj, "foo", desc);
+
+Object.defineProperties(obj, {
+ foo: {
+ writable: true,
+ configurable: true
+ }
+});
+verifyEqualTo(obj, "foo", undefined);
+
+verifyWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-57.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-57.js
new file mode 100644
index 0000000000..07a9774921
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-57.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-57
+description: >
+ Object.defineProperties - both desc.[[Get]] and P.[[Get]] are two
+ objects which refer to the same object (8.12.9 step 6)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function get_Func() {
+ return 10;
+}
+
+Object.defineProperty(obj, "foo", {
+ get: get_Func
+});
+
+Object.defineProperties(obj, {
+ foo: {
+ get: get_Func
+ }
+});
+
+verifyNotEnumerable(obj, "foo");
+assert.sameValue(obj.foo, 10);
+
+verifyNotConfigurable(obj, "foo")
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-58.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-58.js
new file mode 100644
index 0000000000..c774825fb6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-58.js
@@ -0,0 +1,54 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-58
+description: >
+ Object.defineProperties - desc.[[Get]] and P.[[Get]] are two
+ objects which refer to the different objects (8.12.9 step 6)
+---*/
+
+var obj = {};
+
+function get_Func1() {
+ return 10;
+}
+
+Object.defineProperty(obj, "foo", {
+ get: get_Func1,
+ configurable: true
+});
+
+function get_Func2() {
+ return 20;
+}
+
+Object.defineProperties(obj, {
+ foo: {
+ get: get_Func2
+ }
+});
+
+var verifyEnumerable = false;
+for (var p in obj) {
+ if (p === "foo") {
+ verifyEnumerable = true;
+ }
+}
+
+var verifyValue = false;
+verifyValue = (obj.foo === 20);
+
+var desc = Object.getOwnPropertyDescriptor(obj, "foo");
+
+var verifyConfigurable = false;
+delete obj.foo;
+verifyConfigurable = obj.hasOwnProperty("foo");
+
+assert.sameValue(verifyConfigurable, false, 'verifyConfigurable');
+assert.sameValue(verifyEnumerable, false, 'verifyEnumerable');
+assert(verifyValue, 'verifyValue !== true');
+assert.sameValue(typeof(desc.set), "undefined", 'typeof (desc.set)');
+assert.sameValue(desc.get, get_Func2, 'desc.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-59.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-59.js
new file mode 100644
index 0000000000..55f0b6e98b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-59.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function set_func(value) {
+ obj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(obj, "foo", {
+ set: set_func
+});
+
+Object.defineProperties(obj, {
+ foo: {
+ set: set_func
+ }
+});
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-6.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-6.js
new file mode 100644
index 0000000000..d876cc955d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-6.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-6
+description: >
+ Object.defineProperties - 'P' is inherited accessor property
+ (8.12.9 step 1 )
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "prop", {
+ get: function() {
+ return 11;
+ },
+ configurable: false
+});
+var Con = function() {};
+Con.prototype = proto;
+
+var obj = new Con();
+
+Object.defineProperties(obj, {
+ prop: {
+ get: function() {
+ return 12;
+ },
+ configurable: true
+ }
+});
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(obj.prop, 12, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-60.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-60.js
new file mode 100644
index 0000000000..18b3b08eff
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-60.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function set_func1() {}
+
+Object.defineProperty(obj, "foo", {
+ set: set_func1,
+ configurable: true
+});
+
+function set_func2(value) {
+ obj.setVerifyHelpProp = value;
+}
+
+Object.defineProperties(obj, {
+ foo: {
+ set: set_func2
+ }
+});
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-61.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-61.js
new file mode 100644
index 0000000000..d6b97792f2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-61.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 10,
+ enumerable: false
+});
+
+Object.defineProperties(obj, {
+ foo: {
+ enumerable: false
+ }
+});
+verifyEqualTo(obj, "foo", 10);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-62.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-62.js
new file mode 100644
index 0000000000..66707f734d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-62.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 10,
+ enumerable: false,
+ configurable: true
+});
+
+Object.defineProperties(obj, {
+ foo: {
+ enumerable: true
+ }
+});
+verifyEqualTo(obj, "foo", 10);
+
+verifyNotWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-63.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-63.js
new file mode 100644
index 0000000000..d6bfa302ff
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-63.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-63
+description: >
+ Object.defineProperties - both desc.configurable and
+ P.configurable are boolean values with the same value (8.12.9 step
+ 6)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 10,
+ configurable: false
+});
+
+Object.defineProperties(obj, {
+ foo: {
+ configurable: false
+ }
+});
+verifyEqualTo(obj, "foo", 10);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-64.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-64.js
new file mode 100644
index 0000000000..fe97b64dd8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-64.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 10,
+ configurable: true
+});
+
+Object.defineProperties(obj, {
+ foo: {
+ configurable: false
+ }
+});
+verifyEqualTo(obj, "foo", 10);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-65.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-65.js
new file mode 100644
index 0000000000..c6678316fc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-65.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 10,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(obj, {
+ foo: {
+ configurable: true
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "foo", 10);
+
+ verifyNotWritable(obj, "foo");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-66-1.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-66-1.js
new file mode 100644
index 0000000000..dd97034520
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-66-1.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-66-1
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 10,
+ enumerable: false,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(obj, {
+ foo: {
+ enumerable: true
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "foo", 10);
+
+ verifyNotWritable(obj, "foo");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-66.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-66.js
new file mode 100644
index 0000000000..6c1a70521e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-66.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-66
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 10,
+ enumerable: true,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(obj, {
+ foo: {
+ enumerable: false
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "foo", 10);
+
+ verifyNotWritable(obj, "foo");
+
+ verifyEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-67.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-67.js
new file mode 100644
index 0000000000..3980343982
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-67.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-67
+description: >
+ Object.defineProperties throws TypeError when P is accessor
+ property and P.configurable is false, desc is data property
+ (8.12.9 step 9.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+function get_Func() {
+ return 10;
+}
+
+Object.defineProperty(obj, "foo", {
+ get: get_Func,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(obj, {
+ foo: {
+ value: 11
+ }
+ });
+
+ throw new Test262Error("Expected TypeError");
+} catch (e) {
+ assert(e instanceof TypeError);
+ verifyNotEnumerable(obj, "foo");
+
+ assert.sameValue(obj.foo, 10);
+
+ verifyNotConfigurable(obj, "foo");
+
+ var desc = Object.getOwnPropertyDescriptor(obj, "foo");
+
+ assert.sameValue(typeof(desc.set), "undefined");
+ assert.sameValue(desc.get, get_Func);
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-68.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-68.js
new file mode 100644
index 0000000000..c2581e46bf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-68.js
@@ -0,0 +1,47 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-68
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 10,
+ configurable: false
+});
+
+function get_func() {
+ return 11;
+}
+
+try {
+ Object.defineProperties(obj, {
+ foo: {
+ get: get_func
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "foo", 10);
+
+ verifyNotWritable(obj, "foo");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-69.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-69.js
new file mode 100644
index 0000000000..16f5527999
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-69.js
@@ -0,0 +1,50 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-69
+description: >
+ Object.defineProperties - 'P' is data property and P.configurable
+ is true, desc is accessor property (8.12.9 step 9.b.i)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 10,
+ configurable: true
+});
+
+function get_Func() {
+ return 20;
+}
+
+Object.defineProperties(obj, {
+ foo: {
+ get: get_Func
+ }
+});
+
+var verifyEnumerable = false;
+for (var p in obj) {
+ if (p === "foo") {
+ verifyEnumerable = true;
+ }
+}
+
+var verifyValue = false;
+verifyValue = (obj.foo === 20);
+
+var desc = Object.getOwnPropertyDescriptor(obj, "foo");
+
+var verifyConfigurable = true;
+delete obj.foo;
+verifyConfigurable = obj.hasOwnProperty("foo");
+
+assert.sameValue(verifyConfigurable, false, 'verifyConfigurable');
+assert.sameValue(verifyEnumerable, false, 'verifyEnumerable');
+assert(verifyValue, 'verifyValue !== true');
+assert.sameValue(typeof desc.set, "undefined", 'typeof desc.set');
+assert.sameValue(desc.get, get_Func, 'desc.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-7.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-7.js
new file mode 100644
index 0000000000..168b38a2d8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-7.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-7
+description: >
+ Object.defineProperties - 'P' is own accessor property that
+ overrides an inherited data property (8.12.9 step 1 )
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "prop", {
+ value: 11,
+ configurable: true
+});
+var Con = function() {};
+Con.prototype = proto;
+
+var obj = new Con();
+Object.defineProperty(obj, "prop", {
+ get: function() {
+ return 12;
+ },
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ prop: {
+ value: 13,
+ configurable: true
+ }
+ });
+});
+assert.sameValue(obj.prop, 12, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-70.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-70.js
new file mode 100644
index 0000000000..2c19545d04
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-70.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-70
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function get_func() {
+ return 10;
+}
+
+Object.defineProperty(obj, "foo", {
+ get: get_func,
+ configurable: true
+});
+
+Object.defineProperties(obj, {
+ foo: {
+ value: 12
+ }
+});
+verifyEqualTo(obj, "foo", 12);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-71.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-71.js
new file mode 100644
index 0000000000..6be29229ee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-71.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-71
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 10,
+ writable: false,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(obj, {
+ foo: {
+ writable: true
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "foo", 10);
+
+ verifyNotWritable(obj, "foo");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-72.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-72.js
new file mode 100644
index 0000000000..3807bf9155
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-72.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-72
+description: >
+ Object.defineProperties throws TypeError when P is data property
+ and P.configurable is false, P.writable is false, desc is data
+ property and desc.value is not equal to P.value (8.12.9 step
+ 10.a.ii.1)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 10,
+ writable: false,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(obj, {
+ foo: {
+ value: 20
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "foo", 10);
+
+ verifyNotWritable(obj, "foo");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-73.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-73.js
new file mode 100644
index 0000000000..ec98b17976
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-73.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-73
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: undefined,
+ writable: false,
+ configurable: false
+});
+
+Object.defineProperties(obj, {
+ foo: {
+ value: undefined
+ }
+});
+verifyEqualTo(obj, "foo", undefined);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-74.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-74.js
new file mode 100644
index 0000000000..7efeaf287a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-74.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-74
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: null,
+ writable: false,
+ configurable: false
+});
+
+Object.defineProperties(obj, {
+ foo: {
+ value: null
+ }
+});
+verifyEqualTo(obj, "foo", null);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-75.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-75.js
new file mode 100644
index 0000000000..a1fe2653ec
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-75.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-75
+description: >
+ Object.defineProperties will not throw TypeError if P.configurable
+ is false, P.writalbe is false, P.value is NaN and properties.value
+ is NaN (8.12.9 step 10.a.ii.1)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "foo", {
+ value: NaN,
+ writable: false,
+ configurable: false
+});
+
+Object.defineProperties(obj, {
+ foo: {
+ value: NaN
+ }
+});
+
+verifyNotEnumerable(obj, "foo");
+verifyNotWritable(obj, "foo");
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-76.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-76.js
new file mode 100644
index 0000000000..1a1c1e02c0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-76.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-76
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: -0,
+ writable: false,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(obj, {
+ foo: {
+ value: +0
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "foo", -0);
+
+ verifyNotWritable(obj, "foo");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-77.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-77.js
new file mode 100644
index 0000000000..4be63a9fc3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-77.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-77
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: +0,
+ writable: false,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(obj, {
+ foo: {
+ value: -0
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "foo", +0);
+
+ verifyNotWritable(obj, "foo");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-78.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-78.js
new file mode 100644
index 0000000000..2752971e2e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-78.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-78
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 100,
+ writable: false,
+ configurable: false
+});
+
+Object.defineProperties(obj, {
+ foo: {
+ value: 100
+ }
+});
+verifyEqualTo(obj, "foo", 100);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-79.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-79.js
new file mode 100644
index 0000000000..a6533a918c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-79.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-79
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 10,
+ writable: false,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(obj, {
+ foo: {
+ value: 20
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "foo", 10);
+
+ verifyNotWritable(obj, "foo");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-8.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-8.js
new file mode 100644
index 0000000000..d026b8b16a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-8.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-8
+description: >
+ Object.defineProperties - 'P' is own accessor property that
+ overrides an inherited accessor property (8.12.9 step 1 )
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "prop", {
+ get: function() {
+ return 11;
+ },
+ configurable: true
+});
+var Con = function() {};
+Con.prototype = proto;
+
+var obj = new Con();
+Object.defineProperty(obj, "prop", {
+ get: function() {
+ return 12;
+ },
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ prop: {
+ value: 13,
+ configurable: true
+ }
+ });
+});
+assert.sameValue(obj.prop, 12, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-80.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-80.js
new file mode 100644
index 0000000000..a7b91fa17b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-80.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-80
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: "abcd",
+ writable: false,
+ configurable: false
+});
+
+Object.defineProperties(obj, {
+ foo: {
+ value: "abcd"
+ }
+});
+verifyEqualTo(obj, "foo", "abcd");
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-81.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-81.js
new file mode 100644
index 0000000000..a8b094a8e0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-81.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-81
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: "abcd",
+ writable: false,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(obj, {
+ foo: {
+ value: "defg"
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "foo", "abcd");
+
+ verifyNotWritable(obj, "foo");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-82.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-82.js
new file mode 100644
index 0000000000..e5d26c4acd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-82.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-82
+description: >
+ Object.defineProperties will not throw TypeError when
+ P.configurable is false, P.writalbe is false, properties.value and
+ P.value are two booleans with the same value (8.12.9 step
+ 10.a.ii.1)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: false,
+ writable: false,
+ configurable: false
+});
+
+Object.defineProperties(obj, {
+ foo: {
+ value: false
+ }
+});
+verifyEqualTo(obj, "foo", false);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-83.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-83.js
new file mode 100644
index 0000000000..7e69ae863b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-83.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-83
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: false,
+ writable: false,
+ configurable: false
+});
+
+try {
+ Object.defineProperties(obj, {
+ foo: {
+ value: true
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "foo", false);
+
+ verifyNotWritable(obj, "foo");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-84-1.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-84-1.js
new file mode 100644
index 0000000000..19c54b3883
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-84-1.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-84-1
+description: >
+ Object.defineProperties will not throw TypeError when
+ P.configurable is false, P.writalbe is false, properties.value and
+ P.value are two Objects refer to the same object which has been
+ updated before use it to update the object (8.12.9 step 10.a.ii.1)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+var obj1 = {
+ length: 10
+};
+
+Object.defineProperty(obj, "foo", {
+ value: obj1,
+ writable: false,
+ configurable: false
+});
+
+var obj2 = obj1;
+obj2.y = "hello";
+
+Object.defineProperties(obj, {
+ foo: {
+ value: obj2
+ }
+});
+verifyEqualTo(obj, "foo", obj1);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-84.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-84.js
new file mode 100644
index 0000000000..0edfc761a9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-84.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-84
+description: >
+ Object.defineProperties will not throw TypeError when
+ P.configurable is false, P.writalbe is false, properties.value and
+ P.value are two Objects refer to the same object (8.12.9 step
+ 10.a.ii.1)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+var obj1 = {
+ length: 10
+};
+
+Object.defineProperty(obj, "foo", {
+ value: obj1,
+ writable: false,
+ configurable: false
+});
+
+Object.defineProperties(obj, {
+ foo: {
+ value: obj1
+ }
+});
+verifyEqualTo(obj, "foo", obj1);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-85.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-85.js
new file mode 100644
index 0000000000..f9b41a56a4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-85.js
@@ -0,0 +1,52 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-85
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+var obj1 = {
+ length: 10
+};
+
+Object.defineProperty(obj, "foo", {
+ value: obj1,
+ writable: false,
+ configurable: false
+});
+
+var obj2 = {
+ length: 20
+};
+
+try {
+ Object.defineProperties(obj, {
+ foo: {
+ value: obj2
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "foo", obj1);
+
+ verifyNotWritable(obj, "foo");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-86-1.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-86-1.js
new file mode 100644
index 0000000000..500986c18d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-86-1.js
@@ -0,0 +1,49 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-86-1
+description: >
+ Object.defineProperties will not throw TypeError when
+ P.configurable is false, both properties.[[Set]] and P.[[Set]] are
+ two objects which refer to the same object and the object has been
+ updated after defined(8.12.9 step 11.a.i)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+var set_func = function(value) {
+ obj.setVerifyHelpProp = value;
+};
+
+Object.defineProperty(obj, "foo", {
+ set: set_func,
+ configurable: false
+});
+
+set_func = function(value) {
+ obj.setVerifyHelpProp1 = value;
+};
+
+try {
+ Object.defineProperties(obj, {
+ foo: {
+ set: set_func
+ }
+ });
+} catch (e) {
+ verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-86.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-86.js
new file mode 100644
index 0000000000..a6f109dabd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-86.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-86
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function set_func(value) {
+ obj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(obj, "foo", {
+ set: set_func,
+ configurable: false
+});
+
+Object.defineProperties(obj, {
+ foo: {
+ set: set_func
+ }
+});
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-87.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-87.js
new file mode 100644
index 0000000000..f1cee12ac7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-87.js
@@ -0,0 +1,47 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-87
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function set_func1(value) {
+ obj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(obj, "foo", {
+ set: set_func1,
+ configurable: false
+});
+
+function set_func2() {}
+
+try {
+ Object.defineProperties(obj, {
+ foo: {
+ set: set_func2
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-88.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-88.js
new file mode 100644
index 0000000000..12de5bbe14
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-88.js
@@ -0,0 +1,53 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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
+ object (8.12.9 step 11.a.i)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function get_Func() {
+ return 0;
+}
+
+Object.defineProperty(obj, "foo", {
+ set: undefined,
+ get: get_Func,
+ enumerable: false,
+ configurable: false
+});
+
+function set_Func() {}
+
+try {
+ Object.defineProperties(obj, {
+ foo: {
+ set: set_Func
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+ var desc = Object.getOwnPropertyDescriptor(obj, "foo");
+
+ if (typeof(desc.set) !== "undefined") {
+ throw new Test262Error('Expected typeof (desc.set) === "undefined", actually ' + typeof(desc.set));
+ }
+
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-89.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-89.js
new file mode 100644
index 0000000000..ae7c1d6aa4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-89.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-89
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function get_Func() {
+ return 0;
+}
+
+Object.defineProperty(obj, "foo", {
+ get: get_Func,
+ set: undefined,
+ enumerable: false,
+ configurable: false
+});
+
+Object.defineProperties(obj, {
+ foo: {
+ set: undefined
+ }
+});
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+var desc = Object.getOwnPropertyDescriptor(obj, "foo");
+
+if (typeof(desc.set) !== "undefined") {
+ throw new Test262Error('Expected typeof (desc.set) === "undefined", actually ' + typeof(desc.set));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-9.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-9.js
new file mode 100644
index 0000000000..30c089dbc0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-9.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-9
+description: >
+ Object.defineProperties - 'P' is own accessor property without a
+ get function (8.12.9 step 1 )
+---*/
+
+var obj = {};
+Object.defineProperty(obj, "prop", {
+ set: function() {},
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperties(obj, {
+ prop: {
+ get: function() {},
+ configurable: true
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-90.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-90.js
new file mode 100644
index 0000000000..4a7b37c5b0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-90.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-90
+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: [propertyHelper.js]
+---*/
+
+
+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
+ }
+});
+verifyEqualTo(obj, "foo", get_func());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-91.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-91.js
new file mode 100644
index 0000000000..77f1b0a61c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-91.js
@@ -0,0 +1,57 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-91
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+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
+});
+
+function get_func2() {
+ return 20;
+}
+
+try {
+ Object.defineProperties(obj, {
+ foo: {
+ get: get_func2
+ }
+ });
+ throw new Test262Error("Expected an exception");
+} catch (e) {
+ verifyEqualTo(obj, "foo", get_func1());
+
+ verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-92.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-92.js
new file mode 100644
index 0000000000..8a79bf19b1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-92.js
@@ -0,0 +1,51 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-92
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function set_func(value) {
+ obj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(obj, "foo", {
+ get: undefined,
+ set: set_func,
+ enumerable: false,
+ configurable: false
+});
+
+function get_func() {
+ return 0;
+}
+
+try {
+ Object.defineProperties(obj, {
+ foo: {
+ get: get_func
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-93-1.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-93-1.js
new file mode 100644
index 0000000000..14f8f294c5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-93-1.js
@@ -0,0 +1,62 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-93-1
+description: >
+ Object.defineProperties will update [[Value]] attribute of named
+ data property 'P' successfully when [[Configurable]] attribute is
+ true and [[Writable]] attribute is false but not when both are
+ false (8.12.9 - step Note & 10.a.ii.1)
+includes: [propertyHelper.js]
+---*/
+
+
+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
+ }
+ });
+
+ throw new Test262Error("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)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-93-2.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-93-2.js
new file mode 100644
index 0000000000..3426413f72
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-93-2.js
@@ -0,0 +1,62 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-93-2
+description: >
+ Object.defineProperties will update [[Value]] attribute of indexed
+ data property 'P' successfully when [[Configurable]] attribute is
+ true and [[Writable]] attribute is false but not when both are
+ false (8.12.9 - step Note & 10.a.ii.1)
+includes: [propertyHelper.js]
+---*/
+
+
+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
+ }
+ });
+
+ throw new Test262Error("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)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-93-3.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-93-3.js
new file mode 100644
index 0000000000..927d25a004
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-93-3.js
@@ -0,0 +1,62 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-93-3
+description: >
+ Object.defineProperties will fail to update [[Value]] attribute of
+ named data property 'P' when [[Configurable]] attribute of first
+ updating property is false (8.12.9 - step Note & 10.a.ii.1)
+includes: [propertyHelper.js]
+---*/
+
+
+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
+ }
+ });
+
+ throw new Test262Error("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)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-93-4.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-93-4.js
new file mode 100644
index 0000000000..7d6548ea1d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-93-4.js
@@ -0,0 +1,61 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-93-4
+description: >
+ Object.defineProperties will fail to update [[Value]] attribute of
+ indexed data property 'P' when [[Configurable]] attribute of first
+ updating property are false (8.12.9 - step Note & 10.a.ii.1)
+includes: [propertyHelper.js]
+---*/
+
+
+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
+ }
+ });
+
+ throw new Test262Error("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)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-93.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-93.js
new file mode 100644
index 0000000000..cbfc06a190
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-93.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.7-6-a-93
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function set_func(value) {
+ obj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(obj, "foo", {
+ get: undefined,
+ set: set_func,
+ enumerable: false,
+ configurable: false
+});
+
+Object.defineProperties(obj, {
+ foo: {
+ get: undefined
+ }
+});
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-94.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-94.js
new file mode 100644
index 0000000000..8f97c40e12
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-94.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+obj.foo = 100; // default value of attributes: writable: true, configurable: true, enumerable: true
+
+Object.defineProperties(obj, {
+ foo: {
+ value: 200
+ }
+});
+verifyEqualTo(obj, "foo", 200);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-95.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-95.js
new file mode 100644
index 0000000000..b89ec12636
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-95.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 200,
+ enumerable: true,
+ writable: true,
+ configurable: true
+});
+
+Object.defineProperties(obj, {
+ foo: {
+ value: undefined
+ }
+});
+verifyEqualTo(obj, "foo", undefined);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-96.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-96.js
new file mode 100644
index 0000000000..cecec30eb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-96.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: undefined,
+ enumerable: true,
+ writable: true,
+ configurable: true
+});
+
+Object.defineProperties(obj, {
+ foo: {
+ value: 200
+ }
+});
+verifyEqualTo(obj, "foo", 200);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-97.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-97.js
new file mode 100644
index 0000000000..830402f265
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-97.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 100,
+ enumerable: true,
+ writable: false,
+ configurable: true
+});
+
+Object.defineProperties(obj, {
+ foo: {
+ writable: true
+ }
+});
+verifyEqualTo(obj, "foo", 100);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-98.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-98.js
new file mode 100644
index 0000000000..c45c0b3582
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-98.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 200,
+ enumerable: false,
+ writable: true,
+ configurable: true
+});
+
+Object.defineProperties(obj, {
+ foo: {
+ enumerable: true
+ }
+});
+verifyEqualTo(obj, "foo", 200);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-99.js b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-99.js
new file mode 100644
index 0000000000..8dee2771e6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/15.2.3.7-6-a-99.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 200,
+ enumerable: true,
+ writable: true,
+ configurable: true
+});
+
+Object.defineProperties(obj, {
+ foo: {
+ configurable: false
+ }
+});
+verifyEqualTo(obj, "foo", 200);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/browser.js b/js/src/tests/test262/built-ins/Object/defineProperties/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/name.js b/js/src/tests/test262/built-ins/Object/defineProperties/name.js
new file mode 100644
index 0000000000..64e4c0c4c2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/name.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 19.1.2.3
+description: >
+ Object.defineProperties.name is "defineProperties".
+info: |
+ Object.defineProperties ( O, Properties )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.defineProperties.name, "defineProperties");
+
+verifyNotEnumerable(Object.defineProperties, "name");
+verifyNotWritable(Object.defineProperties, "name");
+verifyConfigurable(Object.defineProperties, "name");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/defineProperties/not-a-constructor.js
new file mode 100644
index 0000000000..7987b575ff
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.defineProperties does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(Object.defineProperties),
+ false,
+ 'isConstructor(Object.defineProperties) must return false'
+);
+
+assert.throws(TypeError, () => {
+ new Object.defineProperties({}, {});
+}, '`new Object.defineProperties({}, {})` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-bigint.js b/js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-bigint.js
new file mode 100644
index 0000000000..57b3bf595b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-bigint.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-objectdefineproperties
+description: >
+ Property description must be an object (bigint)
+info: |
+ ObjectDefineProperties ( O, Properties )
+
+ ...
+ For each element nextKey of keys, do
+ Let propDesc be ? props.[[GetOwnProperty]](nextKey).
+ If propDesc is not undefined and propDesc.[[Enumerable]] is true, then
+ Let descObj be ? Get(props, nextKey).
+ Let desc be ? ToPropertyDescriptor(descObj).
+ ...
+
+ ToPropertyDescriptor ( Obj )
+
+ If Type(Obj) is not Object, throw a TypeError exception.
+ ...
+features: [BigInt]
+---*/
+
+assert.throws(TypeError, () => {
+ Object.defineProperties({}, {
+ a: 0n
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-false.js b/js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-false.js
new file mode 100644
index 0000000000..630359e751
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-false.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-objectdefineproperties
+description: >
+ Property description must be an object (false)
+info: |
+ ObjectDefineProperties ( O, Properties )
+
+ ...
+ For each element nextKey of keys, do
+ Let propDesc be ? props.[[GetOwnProperty]](nextKey).
+ If propDesc is not undefined and propDesc.[[Enumerable]] is true, then
+ Let descObj be ? Get(props, nextKey).
+ Let desc be ? ToPropertyDescriptor(descObj).
+ ...
+
+ ToPropertyDescriptor ( Obj )
+
+ If Type(Obj) is not Object, throw a TypeError exception.
+ ...
+---*/
+
+assert.throws(TypeError, () => {
+ Object.defineProperties({}, {
+ a: false
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-null.js b/js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-null.js
new file mode 100644
index 0000000000..bf5bd3180f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-null.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-objectdefineproperties
+description: >
+ Property description must be an object (null)
+info: |
+ ObjectDefineProperties ( O, Properties )
+
+ ...
+ For each element nextKey of keys, do
+ Let propDesc be ? props.[[GetOwnProperty]](nextKey).
+ If propDesc is not undefined and propDesc.[[Enumerable]] is true, then
+ Let descObj be ? Get(props, nextKey).
+ Let desc be ? ToPropertyDescriptor(descObj).
+ ...
+
+ ToPropertyDescriptor ( Obj )
+
+ If Type(Obj) is not Object, throw a TypeError exception.
+ ...
+---*/
+
+assert.throws(TypeError, () => {
+ Object.defineProperties({}, {
+ a: null
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-number.js b/js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-number.js
new file mode 100644
index 0000000000..ee70c0b83f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-number.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-objectdefineproperties
+description: >
+ Property description must be an object (number)
+info: |
+ ObjectDefineProperties ( O, Properties )
+
+ ...
+ For each element nextKey of keys, do
+ Let propDesc be ? props.[[GetOwnProperty]](nextKey).
+ If propDesc is not undefined and propDesc.[[Enumerable]] is true, then
+ Let descObj be ? Get(props, nextKey).
+ Let desc be ? ToPropertyDescriptor(descObj).
+ ...
+
+ ToPropertyDescriptor ( Obj )
+
+ If Type(Obj) is not Object, throw a TypeError exception.
+ ...
+---*/
+
+assert.throws(TypeError, () => {
+ Object.defineProperties({}, {
+ a: 1
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-string.js b/js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-string.js
new file mode 100644
index 0000000000..f8a1fe1b03
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-string.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-objectdefineproperties
+description: >
+ Property description must be an object (string)
+info: |
+ ObjectDefineProperties ( O, Properties )
+
+ ...
+ For each element nextKey of keys, do
+ Let propDesc be ? props.[[GetOwnProperty]](nextKey).
+ If propDesc is not undefined and propDesc.[[Enumerable]] is true, then
+ Let descObj be ? Get(props, nextKey).
+ Let desc be ? ToPropertyDescriptor(descObj).
+ ...
+
+ ToPropertyDescriptor ( Obj )
+
+ If Type(Obj) is not Object, throw a TypeError exception.
+ ...
+---*/
+
+assert.throws(TypeError, () => {
+ Object.defineProperties({}, {
+ a: ''
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-symbol.js b/js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-symbol.js
new file mode 100644
index 0000000000..99d2ffb0e9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-symbol.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-objectdefineproperties
+description: >
+ Property description must be an object (symbol)
+info: |
+ ObjectDefineProperties ( O, Properties )
+
+ ...
+ For each element nextKey of keys, do
+ Let propDesc be ? props.[[GetOwnProperty]](nextKey).
+ If propDesc is not undefined and propDesc.[[Enumerable]] is true, then
+ Let descObj be ? Get(props, nextKey).
+ Let desc be ? ToPropertyDescriptor(descObj).
+ ...
+
+ ToPropertyDescriptor ( Obj )
+
+ If Type(Obj) is not Object, throw a TypeError exception.
+ ...
+features: [Symbol]
+---*/
+
+assert.throws(TypeError, () => {
+ Object.defineProperties({}, {
+ a: Symbol()
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-true.js b/js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-true.js
new file mode 100644
index 0000000000..b21778e8aa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-true.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-objectdefineproperties
+description: >
+ Property description must be an object (true)
+info: |
+ ObjectDefineProperties ( O, Properties )
+
+ ...
+ For each element nextKey of keys, do
+ Let propDesc be ? props.[[GetOwnProperty]](nextKey).
+ If propDesc is not undefined and propDesc.[[Enumerable]] is true, then
+ Let descObj be ? Get(props, nextKey).
+ Let desc be ? ToPropertyDescriptor(descObj).
+ ...
+
+ ToPropertyDescriptor ( Obj )
+
+ If Type(Obj) is not Object, throw a TypeError exception.
+ ...
+---*/
+
+assert.throws(TypeError, () => {
+ Object.defineProperties({}, {
+ a: true
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-undefined.js b/js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-undefined.js
new file mode 100644
index 0000000000..cb47a9d3d4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/property-description-must-be-an-object-not-undefined.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-objectdefineproperties
+description: >
+ Property description must be an object (undefined)
+info: |
+ ObjectDefineProperties ( O, Properties )
+
+ ...
+ For each element nextKey of keys, do
+ Let propDesc be ? props.[[GetOwnProperty]](nextKey).
+ If propDesc is not undefined and propDesc.[[Enumerable]] is true, then
+ Let descObj be ? Get(props, nextKey).
+ Let desc be ? ToPropertyDescriptor(descObj).
+ ...
+
+ ToPropertyDescriptor ( Obj )
+
+ If Type(Obj) is not Object, throw a TypeError exception.
+ ...
+---*/
+
+assert.throws(TypeError, () => {
+ Object.defineProperties({}, {
+ a: undefined
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/proxy-no-ownkeys-returned-keys-order.js b/js/src/tests/test262/built-ins/Object/defineProperties/proxy-no-ownkeys-returned-keys-order.js
new file mode 100644
index 0000000000..086b764551
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/proxy-no-ownkeys-returned-keys-order.js
@@ -0,0 +1,53 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.getownpropertydescriptors
+description: >
+ If Proxy "ownKeys" trap is missing, keys are sorted by type in ascending
+ chronological order.
+info: |
+ ObjectDefineProperties ( O, Properties )
+
+ [...]
+ 3. Let keys be ? props.[[OwnPropertyKeys]]().
+ [...]
+ 4. For each element nextKey of keys in List order, do
+ a. Let propDesc be ? props.[[GetOwnProperty]](nextKey).
+
+ [[OwnPropertyKeys]] ( )
+
+ [...]
+ 6. If trap is undefined, then
+ a. Return ? target.[[OwnPropertyKeys]]().
+
+ OrdinaryOwnPropertyKeys ( O )
+
+ [...]
+ 3. For each own property key P of O such that Type(P) is String and P is
+ not an array index, in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 4. For each own property key P of O such that Type(P) is Symbol,
+ in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 5. Return keys.
+features: [Proxy, Symbol]
+includes: [compareArray.js]
+---*/
+
+var target = {};
+var sym = Symbol();
+target[sym] = 1;
+target.foo = 2;
+target[0] = 3;
+
+var getOwnKeys = [];
+var proxy = new Proxy(target, {
+ getOwnPropertyDescriptor: function(_target, key) {
+ getOwnKeys.push(key);
+ },
+});
+
+Object.defineProperties({}, proxy);
+assert.compareArray(getOwnKeys, ["0", "foo", sym]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperties/shell.js b/js/src/tests/test262/built-ins/Object/defineProperties/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperties/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-0-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-0-1.js
new file mode 100644
index 0000000000..3856ae8cd9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-0-1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-0-1
+description: Object.defineProperty must exist as a function
+---*/
+
+var f = Object.defineProperty;
+
+assert.sameValue(typeof(f), "function", 'typeof(f)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-0-2.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-0-2.js
new file mode 100644
index 0000000000..0e8cfad057
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-0-2.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-0-2
+description: Object.defineProperty must exist as a function taking 3 parameters
+---*/
+
+assert.sameValue(Object.defineProperty.length, 3, 'Object.defineProperty.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-1-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-1-1.js
new file mode 100644
index 0000000000..a700f0931e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-1-1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-1-1
+description: Object.defineProperty applied to undefined throws a TypeError
+---*/
+
+assert.throws(TypeError, function() {
+ Object.defineProperty(undefined, "foo", {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-1-2.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-1-2.js
new file mode 100644
index 0000000000..5fbd82ad18
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-1-2.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-1-2
+description: Object.defineProperty applied to null throws a TypeError
+---*/
+
+assert.throws(TypeError, function() {
+ Object.defineProperty(null, "foo", {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-1-3.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-1-3.js
new file mode 100644
index 0000000000..074f517829
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-1-3.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-1-3
+description: >
+ Object.defineProperty applied to number primitive throws a
+ TypeError
+---*/
+
+assert.throws(TypeError, function() {
+ Object.defineProperty(5, "foo", {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-1-4.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-1-4.js
new file mode 100644
index 0000000000..ecdc174158
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-1-4.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-1-4
+description: >
+ Object.defineProperty applied to string primitive throws a
+ TypeError
+---*/
+
+assert.throws(TypeError, function() {
+ Object.defineProperty("hello\nworld\\!", "foo", {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-1.js
new file mode 100644
index 0000000000..f0d7bd674a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-1.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-1
+description: >
+ Object.defineProperty throws TypeError if type of first param is
+ not Object
+---*/
+
+assert.throws(TypeError, function() {
+ Object.defineProperty(true, "foo", {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-1.js
new file mode 100644
index 0000000000..870cf114db
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-1.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-1
+description: >
+ Object.defineProperty - argument 'P' is undefined that converts to
+ string 'undefined'
+---*/
+
+var obj = {};
+Object.defineProperty(obj, undefined, {});
+
+assert(obj.hasOwnProperty("undefined"), 'obj.hasOwnProperty("undefined") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-10.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-10.js
new file mode 100644
index 0000000000..e7336435e7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-10.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-10
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ a string (value is a negative number)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, -20, {});
+
+assert(obj.hasOwnProperty("-20"), 'obj.hasOwnProperty("-20") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-11.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-11.js
new file mode 100644
index 0000000000..f981ebca50
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-11.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-11
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ a string (value is Infinity)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, Infinity, {});
+
+assert(obj.hasOwnProperty("Infinity"), 'obj.hasOwnProperty("Infinity") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-12.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-12.js
new file mode 100644
index 0000000000..6429958577
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-12.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-12
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ a string (value is +Infinity)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, +Infinity, {});
+
+assert(obj.hasOwnProperty("Infinity"), 'obj.hasOwnProperty("Infinity") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-13.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-13.js
new file mode 100644
index 0000000000..d2ce79aa00
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-13.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-13
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ a string (value is -Infinity)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, -Infinity, {});
+
+assert(obj.hasOwnProperty("-Infinity"), 'obj.hasOwnProperty("-Infinity") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-14.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-14.js
new file mode 100644
index 0000000000..29ff89bd5f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-14.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-14
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ a string (value is 1(following 20 zeros))
+---*/
+
+var obj = {};
+Object.defineProperty(obj, 100000000000000000000, {});
+
+assert(obj.hasOwnProperty("100000000000000000000"), 'obj.hasOwnProperty("100000000000000000000") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-15.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-15.js
new file mode 100644
index 0000000000..95186e1b5a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-15.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-15
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ a string (value is 1(following 21 zeros))
+---*/
+
+var obj = {};
+Object.defineProperty(obj, 1000000000000000000000, {});
+
+assert(obj.hasOwnProperty("1e+21"), 'obj.hasOwnProperty("1e+21") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-16.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-16.js
new file mode 100644
index 0000000000..7b567bcaee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-16.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-16
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ a string (value is 1(following 22 zeros))
+---*/
+
+var obj = {};
+Object.defineProperty(obj, 10000000000000000000000, {});
+
+assert(obj.hasOwnProperty("1e+22"), 'obj.hasOwnProperty("1e+22") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-17-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-17-1.js
new file mode 100644
index 0000000000..72b4a87427
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-17-1.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-17-1
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ a string (value is 1)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, 1, {});
+
+assert(obj.hasOwnProperty("1"), 'obj.hasOwnProperty("1") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-17.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-17.js
new file mode 100644
index 0000000000..d52fe6c430
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-17.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-17
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ a string (value is 1e+20)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, 1e+20, {});
+
+assert(obj.hasOwnProperty("100000000000000000000"), 'obj.hasOwnProperty("100000000000000000000") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-18.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-18.js
new file mode 100644
index 0000000000..99d389c919
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-18.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-18
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ string (value is 1e+21)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, 1e+21, {});
+
+assert(obj.hasOwnProperty("1e+21"), 'obj.hasOwnProperty("1e+21") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-19.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-19.js
new file mode 100644
index 0000000000..61b2777fe9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-19.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-19
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ string (value is 1e+22)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, 1e+22, {});
+
+assert(obj.hasOwnProperty("1e+22"), 'obj.hasOwnProperty("1e+22") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-2.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-2.js
new file mode 100644
index 0000000000..aead4fda4b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-2.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-2
+description: >
+ Object.defineProperty - argument 'P' is null that converts to
+ string 'null'
+---*/
+
+var obj = {};
+Object.defineProperty(obj, null, {});
+
+assert(obj.hasOwnProperty("null"), 'obj.hasOwnProperty("null") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-20.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-20.js
new file mode 100644
index 0000000000..adf5a5a54d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-20.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-20
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ a string (value is 0.000001)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, 0.000001, {});
+
+assert(obj.hasOwnProperty("0.000001"), 'obj.hasOwnProperty("0.000001") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-21.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-21.js
new file mode 100644
index 0000000000..63087964d1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-21.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-21
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ a string (value is 0.0000001)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, 0.0000001, {});
+
+assert(obj.hasOwnProperty("1e-7"), 'obj.hasOwnProperty("1e-7") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-22.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-22.js
new file mode 100644
index 0000000000..52691ced6f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-22.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-22
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ a string (value is 0.00000001)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, 0.00000001, {});
+
+assert(obj.hasOwnProperty("1e-8"), 'obj.hasOwnProperty("1e-8") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-23.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-23.js
new file mode 100644
index 0000000000..5587c2a1d6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-23.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-23
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ a string (value is 1e-7)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, 1e-7, {});
+
+assert(obj.hasOwnProperty("1e-7"), 'obj.hasOwnProperty("1e-7") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-24.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-24.js
new file mode 100644
index 0000000000..3f23263180
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-24.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-24
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ a string (value is 1e-6)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, 1e-6, {});
+
+assert(obj.hasOwnProperty("0.000001"), 'obj.hasOwnProperty("0.000001") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-25.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-25.js
new file mode 100644
index 0000000000..831a8141f4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-25.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-25
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ a string (value is 1e-5)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, 1e-5, {});
+
+assert(obj.hasOwnProperty("0.00001"), 'obj.hasOwnProperty("0.00001") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-26.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-26.js
new file mode 100644
index 0000000000..27b5f1c9ae
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-26.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-26
+description: >
+ Object.defineProperty - argument 'P' is an integer that converts
+ to a string (value is 123)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, 123, {});
+
+assert(obj.hasOwnProperty("123"), 'obj.hasOwnProperty("123") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-27.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-27.js
new file mode 100644
index 0000000000..5fd691c8f2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-27.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-27
+description: >
+ Object.defineProperty - argument 'P' is a decimal that converts to
+ a string (value is 123.456)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, 123.456, {});
+
+assert(obj.hasOwnProperty("123.456"), 'obj.hasOwnProperty("123.456") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-28.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-28.js
new file mode 100644
index 0000000000..34dbcd6729
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-28.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-28
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ a string (value is 1(following 19 zeros).1)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, 10000000000000000000.1, {});
+
+assert(obj.hasOwnProperty("10000000000000000000"), 'obj.hasOwnProperty("10000000000000000000") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-29.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-29.js
new file mode 100644
index 0000000000..3a9bbbdbad
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-29.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-29
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ a string (value is 1(following 20 zeros).1)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, 100000000000000000000.1, {});
+
+assert(obj.hasOwnProperty("100000000000000000000"), 'obj.hasOwnProperty("100000000000000000000") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-3.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-3.js
new file mode 100644
index 0000000000..7795fbed0a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-3.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-3
+description: >
+ Object.defineProperty - argument 'P' is a boolean whose value is
+ false
+---*/
+
+var obj = {};
+Object.defineProperty(obj, false, {});
+
+assert(obj.hasOwnProperty("false"), 'obj.hasOwnProperty("false") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-30.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-30.js
new file mode 100644
index 0000000000..d4c2aef75c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-30.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-30
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ a string (value is 1(following 21 zeros).1)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, 1000000000000000000000.1, {});
+
+assert(obj.hasOwnProperty("1e+21"), 'obj.hasOwnProperty("1e+21") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-31.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-31.js
new file mode 100644
index 0000000000..8bb17e8749
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-31.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-31
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ a string (value is 1(following 22 zeros).1)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, 10000000000000000000000.1, {});
+
+assert(obj.hasOwnProperty("1e+22"), 'obj.hasOwnProperty("1e+22") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-32.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-32.js
new file mode 100644
index 0000000000..07693a2673
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-32.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-32
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ a string (value is 123.1234567)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, 123.1234567, {});
+
+assert(obj.hasOwnProperty("123.1234567"), 'obj.hasOwnProperty("123.1234567") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-33.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-33.js
new file mode 100644
index 0000000000..f7b0ea7f23
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-33.js
@@ -0,0 +1,14 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-33
+description: Object.defineProperty - argument 'P' is applied to an empty string
+---*/
+
+var obj = {};
+Object.defineProperty(obj, "", {});
+
+assert(obj.hasOwnProperty(""), 'obj.hasOwnProperty("") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-34.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-34.js
new file mode 100644
index 0000000000..8be5d677bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-34.js
@@ -0,0 +1,14 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-34
+description: Object.defineProperty - argument 'P' is applied to string 'AB \cd'
+---*/
+
+var obj = {};
+Object.defineProperty(obj, "AB\n\\cd", {});
+
+assert(obj.hasOwnProperty("AB\n\\cd"), 'obj.hasOwnProperty("AB\n\\cd") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-35.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-35.js
new file mode 100644
index 0000000000..f8d9ded21b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-35.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-35
+description: >
+ Object.defineProperty - argument 'P' is applied to string
+ 'undefined'
+---*/
+
+var obj = {};
+Object.defineProperty(obj, "undefined", {});
+
+assert(obj.hasOwnProperty("undefined"), 'obj.hasOwnProperty("undefined") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-36.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-36.js
new file mode 100644
index 0000000000..465db16a17
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-36.js
@@ -0,0 +1,14 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-36
+description: Object.defineProperty - argument 'P' is applied to string 'null'
+---*/
+
+var obj = {};
+Object.defineProperty(obj, "null", {});
+
+assert(obj.hasOwnProperty("null"), 'obj.hasOwnProperty("null") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-37.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-37.js
new file mode 100644
index 0000000000..abaa54913b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-37.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-37
+description: >
+ Object.defineProperty - argument 'P' is applied to string
+ '123αβπcd'
+---*/
+
+var obj = {};
+Object.defineProperty(obj, "123αβπcd", {});
+
+assert(obj.hasOwnProperty("123αβπcd"), 'obj.hasOwnProperty("123αβπcd") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-38.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-38.js
new file mode 100644
index 0000000000..9df02e80c1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-38.js
@@ -0,0 +1,14 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-38
+description: Object.defineProperty - argument 'P' is applied to string '1'
+---*/
+
+var obj = {};
+Object.defineProperty(obj, "1", {});
+
+assert(obj.hasOwnProperty("1"), 'obj.hasOwnProperty("1") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-39.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-39.js
new file mode 100644
index 0000000000..76ac86fbe5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-39.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-39
+description: >
+ Object.defineProperty - argument 'P' is an array that converts to
+ a string
+---*/
+
+var obj = {};
+Object.defineProperty(obj, [1, 2], {});
+
+assert(obj.hasOwnProperty("1,2"), 'obj.hasOwnProperty("1,2") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-4.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-4.js
new file mode 100644
index 0000000000..eb87be87d8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-4.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-4
+description: >
+ Object.defineProperty - argument 'P' is a boolean whose value is
+ true
+---*/
+
+var obj = {};
+Object.defineProperty(obj, true, {});
+
+assert(obj.hasOwnProperty("true"), 'obj.hasOwnProperty("true") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-40.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-40.js
new file mode 100644
index 0000000000..a447e8eb7a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-40.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-40
+description: >
+ Object.defineProperty - argument 'P' is a String Object that
+ converts to a string
+---*/
+
+var obj = {};
+Object.defineProperty(obj, new String("Hello"), {});
+
+assert(obj.hasOwnProperty("Hello"), 'obj.hasOwnProperty("Hello") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-41.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-41.js
new file mode 100644
index 0000000000..4472709e24
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-41.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-41
+description: >
+ Object.defineProperty - argument 'P' is a Boolean Object that
+ converts to a string
+---*/
+
+var obj = {};
+Object.defineProperty(obj, new Boolean(false), {});
+
+assert(obj.hasOwnProperty("false"), 'obj.hasOwnProperty("false") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-42.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-42.js
new file mode 100644
index 0000000000..6f45293a7a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-42.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-42
+description: >
+ Object.defineProperty - argument 'P' is a Number Object that
+ converts to a string
+---*/
+
+var obj = {};
+Object.defineProperty(obj, new Number(123), {});
+
+assert(obj.hasOwnProperty("123"), 'obj.hasOwnProperty("123") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-43.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-43.js
new file mode 100644
index 0000000000..7a80d5f8e4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-43.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-43
+description: >
+ Object.defineProperty - argument 'P' is an object that has an own
+ toString method
+---*/
+
+var obj = {};
+
+var ownProp = {
+ toString: function() {
+ return "abc";
+ }
+};
+
+Object.defineProperty(obj, ownProp, {});
+
+assert(obj.hasOwnProperty("abc"), 'obj.hasOwnProperty("abc") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-44.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-44.js
new file mode 100644
index 0000000000..a6d7429de0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-44.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-44
+description: >
+ Object.defineProperty - argument 'P' is an object that has an own
+ valueOf method
+---*/
+
+var obj = {};
+
+var ownProp = {
+ valueOf: function() {
+ return "abc";
+ },
+ toString: undefined
+};
+
+Object.defineProperty(obj, ownProp, {});
+
+assert(obj.hasOwnProperty("abc"), 'obj.hasOwnProperty("abc") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-45.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-45.js
new file mode 100644
index 0000000000..2156a69401
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-45.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-45
+description: >
+ Object.defineProperty - argument 'P' is an object whose toString
+ method returns an object and whose valueOf method returns a
+ primitive value
+---*/
+
+var obj = {};
+var toStringAccessed = false;
+var valueOfAccessed = false;
+
+var ownProp = {
+ toString: function() {
+ toStringAccessed = true;
+ return {};
+ },
+ valueOf: function() {
+ valueOfAccessed = true;
+ return "abc";
+ }
+};
+
+Object.defineProperty(obj, ownProp, {});
+
+assert(obj.hasOwnProperty("abc"), 'obj.hasOwnProperty("abc") !== true');
+assert(valueOfAccessed, 'valueOfAccessed !== true');
+assert(toStringAccessed, 'toStringAccessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-46.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-46.js
new file mode 100644
index 0000000000..bf15ec924f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-46.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-46
+description: >
+ Object.defineProperty - argument 'P' is an object that has an own
+ toString and valueOf method
+---*/
+
+var obj = {};
+var toStringAccessed = false;
+var valueOfAccessed = false;
+
+var ownProp = {
+ toString: function() {
+ toStringAccessed = true;
+ return "abc";
+ },
+ valueOf: function() {
+ valueOfAccessed = true;
+ return "prop";
+ }
+};
+Object.defineProperty(obj, ownProp, {});
+
+assert(obj.hasOwnProperty("abc"), 'obj.hasOwnProperty("abc") !== true');
+assert.sameValue(valueOfAccessed, false, 'valueOfAccessed');
+assert(toStringAccessed, 'toStringAccessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-47.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-47.js
new file mode 100644
index 0000000000..71303c6e21
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-47.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-47
+description: >
+ Object.defineProperty - TypeError exception is thrown when 'P' is
+ an object that neither toString nor valueOf returns a primitive
+ value
+---*/
+
+var obj = {};
+var toStringAccessed = false;
+var valueOfAccessed = false;
+
+var ownProp = {
+ toString: function() {
+ toStringAccessed = true;
+ return {};
+ },
+ valueOf: function() {
+ valueOfAccessed = true;
+ return {};
+ }
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, ownProp, {});
+});
+assert(valueOfAccessed, 'valueOfAccessed !== true');
+assert(toStringAccessed, 'toStringAccessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-48.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-48.js
new file mode 100644
index 0000000000..3b997eed54
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-48.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-48
+description: >
+ Object.defineProperty - an inherited toString method is invoked
+ when 'P' is an object with an own valueOf and an inherited
+ toString methods
+---*/
+
+var obj = {};
+var toStringAccessed = false;
+var valueOfAccessed = false;
+
+var proto = {
+ toString: function() {
+ toStringAccessed = true;
+ return "test";
+ }
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+child.valueOf = function() {
+ valueOfAccessed = true;
+ return "10";
+};
+
+Object.defineProperty(obj, child, {});
+
+assert(obj.hasOwnProperty("test"), 'obj.hasOwnProperty("test") !== true');
+assert.sameValue(valueOfAccessed, false, 'valueOfAccessed');
+assert(toStringAccessed, 'toStringAccessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-5.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-5.js
new file mode 100644
index 0000000000..0ea5959bc9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-5.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-5
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ a string (value is NaN)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, NaN, {});
+
+assert(obj.hasOwnProperty("NaN"), 'obj.hasOwnProperty("NaN") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-6.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-6.js
new file mode 100644
index 0000000000..8e8a548982
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-6.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-6
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ a string (value is 0)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, 0, {});
+
+assert(obj.hasOwnProperty("0"), 'obj.hasOwnProperty("0") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-7.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-7.js
new file mode 100644
index 0000000000..7725312dc3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-7.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-7
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ a string (value is +0)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, +0, {});
+
+assert(obj.hasOwnProperty("0"), 'obj.hasOwnProperty("0") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-8.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-8.js
new file mode 100644
index 0000000000..fc9b767e59
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-8.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-8
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ a string (value is -0)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, -0, {});
+
+assert(obj.hasOwnProperty("0"), 'obj.hasOwnProperty("0") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-9.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-9.js
new file mode 100644
index 0000000000..24b648cb01
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-2-9.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-2-9
+description: >
+ Object.defineProperty - argument 'P' is a number that converts to
+ a string (value is a positive number)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, 30, {});
+
+assert(obj.hasOwnProperty("30"), 'obj.hasOwnProperty("30") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-1.js
new file mode 100644
index 0000000000..f5bb1b783b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-1.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The abtract operation ToPropertyDescriptor is used to package the
+ into a property desc. Step 10 of ToPropertyDescriptor throws a TypeError
+ if the property desc ends up having a mix of accessor and data property elements.
+es5id: 15.2.3.6-3-1
+description: >
+ Object.defineProperty throws TypeError if desc has 'get' and
+ 'value' present(8.10.5 step 9.a)
+---*/
+
+var o = {};
+
+// dummy getter
+var getter = function() {
+ return 1;
+}
+var desc = {
+ get: getter,
+ value: 101
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(o, "foo", desc);
+});
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-10.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-10.js
new file mode 100644
index 0000000000..7ea5acea6a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-10.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The abtract operation ToPropertyDescriptor is used to package the
+ into a property desc. Step 10 of ToPropertyDescriptor throws a TypeError
+ if the property desc ends up having a mix of accessor and data property elements.
+es5id: 15.2.3.6-3-10
+description: >
+ Object.defineProperty throws TypeError if setter is not callable
+ but not undefined (Number)(8.10.5 step 8.b)
+---*/
+
+var o = {};
+
+// dummy setter
+var setter = 42;
+var desc = {
+ set: setter
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(o, "foo", desc);
+});
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-100.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-100.js
new file mode 100644
index 0000000000..de37bdae68
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-100.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-100
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ null (8.10.5 step 4.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ configurable: null
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-101.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-101.js
new file mode 100644
index 0000000000..5593c40eac
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-101.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-101
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ true (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ configurable: true
+});
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-102.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-102.js
new file mode 100644
index 0000000000..a0abf592c3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-102.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-102
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ false (8.10.5 step 4.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ configurable: false
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-103.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-103.js
new file mode 100644
index 0000000000..c9b59463af
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-103.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-103
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ 0 (8.10.5 step 4.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ configurable: 0
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-104.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-104.js
new file mode 100644
index 0000000000..9ae7f58e48
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-104.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-104
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ +0 (8.10.5 step 4.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ configurable: +0
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-105.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-105.js
new file mode 100644
index 0000000000..3055a6ff9f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-105.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-105
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ -0 (8.10.5 step 4.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ configurable: -0
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-106.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-106.js
new file mode 100644
index 0000000000..c6a037f9a6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-106.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-106
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ NaN (8.10.5 step 4.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ configurable: NaN
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-107.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-107.js
new file mode 100644
index 0000000000..7c154ae5ca
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-107.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-107
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ a positive number (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ configurable: 12345
+});
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-108.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-108.js
new file mode 100644
index 0000000000..4aad8d160b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-108.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-108
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ a negative number (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ configurable: -12345
+});
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-109.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-109.js
new file mode 100644
index 0000000000..575c4c9459
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-109.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-109
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ an empty string (8.10.5 step 4.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ configurable: ""
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-11.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-11.js
new file mode 100644
index 0000000000..4b9db99ad5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-11.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The abtract operation ToPropertyDescriptor is used to package the
+ into a property desc. Step 10 of ToPropertyDescriptor throws a TypeError
+ if the property desc ends up having a mix of accessor and data property elements.
+es5id: 15.2.3.6-3-11
+description: >
+ Object.defineProperty throws TypeError if setter is not callable
+ but not undefined (Boolean)(8.10.5 step 8.b)
+---*/
+
+var o = {};
+
+// dummy setter
+var setter = true;
+var desc = {
+ set: setter
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(o, "foo", desc);
+});
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-110.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-110.js
new file mode 100644
index 0000000000..91d47c027a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-110.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-110
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ a non-empty string (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ configurable: " "
+});
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-111.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-111.js
new file mode 100644
index 0000000000..3a85f1b1c0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-111.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-111
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ a Function object (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ configurable: function() {}
+});
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-112.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-112.js
new file mode 100644
index 0000000000..82fc78a52e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-112.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-112
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ an Array object (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ configurable: [1, 2, 3]
+});
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-113.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-113.js
new file mode 100644
index 0000000000..a60d3b36db
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-113.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-113
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ a String object (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ configurable: new String("bbq")
+});
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-114.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-114.js
new file mode 100644
index 0000000000..f826c3cd04
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-114.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-114
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ a Boolean object (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ configurable: new Boolean(true)
+});
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-115.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-115.js
new file mode 100644
index 0000000000..50baf89ad8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-115.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-115
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ a Number object (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ configurable: new Number(0)
+});
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-116.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-116.js
new file mode 100644
index 0000000000..136912c9c4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-116.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-116
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ the Math object (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ configurable: Math
+});
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-117.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-117.js
new file mode 100644
index 0000000000..5b8ab322a9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-117.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-117
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ a Date object (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ configurable: new Date()
+});
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-118.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-118.js
new file mode 100644
index 0000000000..b344727eb1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-118.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-118
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ a RegExp object (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+var attr = {
+ configurable: new RegExp()
+};
+
+Object.defineProperty(obj, "property", attr);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-119.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-119.js
new file mode 100644
index 0000000000..7aa8d47d3f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-119.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-119
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ the JSON object (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+var attr = {
+ configurable: JSON
+};
+
+Object.defineProperty(obj, "property", attr);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-12.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-12.js
new file mode 100644
index 0000000000..709fc0f123
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-12.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The abtract operation ToPropertyDescriptor is used to package the
+ into a property desc. Step 10 of ToPropertyDescriptor throws a TypeError
+ if the property desc ends up having a mix of accessor and data property elements.
+es5id: 15.2.3.6-3-12
+description: >
+ Object.defineProperty throws TypeError if setter is not callable
+ but not undefined (String)(8.10.5 step 8.b)
+---*/
+
+var o = {};
+
+// dummy setter
+var setter = "abc";
+var desc = {
+ set: setter
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(o, "foo", desc);
+});
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-120.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-120.js
new file mode 100644
index 0000000000..73dcff62fe
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-120.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-120
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ a Error object (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+var attr = {
+ configurable: new SyntaxError()
+};
+
+Object.defineProperty(obj, "property", attr);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-121.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-121.js
new file mode 100644
index 0000000000..7f50d0f580
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-121.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-121
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ the Argument object (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+var argObj = (function() {
+ return arguments;
+})(1, true, "a");
+
+var attr = {
+ configurable: argObj
+};
+
+Object.defineProperty(obj, "property", attr);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-123.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-123.js
new file mode 100644
index 0000000000..52338365b7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-123.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-123
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ the global object (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+var attr = {
+ configurable: this
+};
+
+Object.defineProperty(obj, "property", attr);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-124.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-124.js
new file mode 100644
index 0000000000..a4122cb888
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-124.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-124
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ treated as true when it is a string (value is 'false') (8.10.5
+ step 4.b)
+---*/
+
+var obj = {};
+
+var attr = {
+ configurable: "false"
+};
+
+Object.defineProperty(obj, "property", attr);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-125.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-125.js
new file mode 100644
index 0000000000..1c8e4c8e52
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-125.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-125
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ treated as true when it is new Boolean(false) (8.10.5 step 4.b)
+---*/
+
+var obj = {};
+
+var attr = {
+ configurable: new Boolean(false)
+};
+
+Object.defineProperty(obj, "property", attr);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-126.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-126.js
new file mode 100644
index 0000000000..dbebc69ca8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-126.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-126
+description: >
+ Object.defineProperty - 'value' property in 'Attributes' is
+ present (8.10.5 step 5)
+---*/
+
+var obj = {};
+
+var attr = {
+ value: 100
+};
+
+Object.defineProperty(obj, "property", attr);
+
+assert.sameValue(obj.property, 100, 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-127.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-127.js
new file mode 100644
index 0000000000..0ca5fc444a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-127.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-127
+description: >
+ Object.defineProperty - 'value' property in 'Attributes' is not
+ present (8.10.5 step 5)
+---*/
+
+var obj = {};
+
+var attr = {
+ writable: true
+};
+
+Object.defineProperty(obj, "property", attr);
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(typeof(obj.property), "undefined", 'typeof (obj.property)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-129.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-129.js
new file mode 100644
index 0000000000..205e077f24
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-129.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-129
+description: >
+ Object.defineProperty - 'value' property in 'Attributes' is an
+ inherited data property (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+var proto = {
+ value: "inheritedDataProperty"
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+
+Object.defineProperty(obj, "property", child);
+
+assert.sameValue(obj.property, "inheritedDataProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-13.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-13.js
new file mode 100644
index 0000000000..b70fcee363
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-13.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The abtract operation ToPropertyDescriptor is used to package the
+ into a property desc. Step 10 of ToPropertyDescriptor throws a TypeError
+ if the property desc ends up having a mix of accessor and data property elements.
+es5id: 15.2.3.6-3-13
+description: >
+ Object.defineProperty throws TypeError if the setter in desc is
+ not callable (Null)(8.10.5 step 8.b)
+---*/
+
+var o = {};
+
+// dummy setter
+var setter = null;
+var desc = {
+ set: setter
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(o, "foo", desc);
+});
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-130.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-130.js
new file mode 100644
index 0000000000..84be9fed20
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-130.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-130
+description: >
+ Object.defineProperty - 'value' property in 'Attributes' is own
+ data property that overrides an inherited data property (8.10.5
+ step 5.a)
+---*/
+
+var obj = {};
+
+var proto = {
+ value: "inheritedDataProperty"
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+
+child.value = "ownDataProperty";
+
+Object.defineProperty(obj, "property", child);
+
+assert.sameValue(obj.property, "ownDataProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-131.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-131.js
new file mode 100644
index 0000000000..97807b1632
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-131.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-131
+description: >
+ Object.defineProperty - 'value' property in 'Attributes' is own
+ data property that overrides an inherited accessor property
+ (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+var proto = {};
+
+Object.defineProperty(proto, "value", {
+ get: function() {
+ return "inheritedAccessorProperty";
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "value", {
+ value: "ownDataProperty"
+});
+
+Object.defineProperty(obj, "property", child);
+
+assert.sameValue(obj.property, "ownDataProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-132.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-132.js
new file mode 100644
index 0000000000..b4ed5928eb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-132.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-132
+description: >
+ Object.defineProperty - 'value' property in 'Attributes' is own
+ accessor property (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+var attr = {};
+Object.defineProperty(attr, "value", {
+ get: function() {
+ return "ownAccessorProperty";
+ }
+});
+
+Object.defineProperty(obj, "property", attr);
+
+assert.sameValue(obj.property, "ownAccessorProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-133.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-133.js
new file mode 100644
index 0000000000..88dc6a0f73
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-133.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-133
+description: >
+ Object.defineProperty - 'value' property in 'Attributes' is an
+ inherited accessor property (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+var proto = {};
+Object.defineProperty(proto, "value", {
+ get: function() {
+ return "inheritedAccessorProperty";
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+
+Object.defineProperty(obj, "property", child);
+
+assert.sameValue(obj.property, "inheritedAccessorProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-134.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-134.js
new file mode 100644
index 0000000000..3a25f765fc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-134.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-134
+description: >
+ Object.defineProperty - 'value' property in 'Attributes' is own
+ accessor property that overrides an inherited data property
+ (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+var proto = {
+ value: "inheritedDataProperty"
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "value", {
+ get: function() {
+ return "ownAccessorProperty";
+ }
+});
+
+Object.defineProperty(obj, "property", child);
+
+assert.sameValue(obj.property, "ownAccessorProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-135.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-135.js
new file mode 100644
index 0000000000..50198c5ae7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-135.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-135
+description: >
+ Object.defineProperty - 'value' property in 'Attributes' is own
+ accessor property that overrides an inherited accessor property
+ (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+var proto = {};
+Object.defineProperty(proto, "value", {
+ get: function() {
+ return "inheritedAccessorProperty";
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "value", {
+ get: function() {
+ return "ownAccessorProperty";
+ }
+});
+
+Object.defineProperty(obj, "property", child);
+
+assert.sameValue(obj.property, "ownAccessorProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-136.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-136.js
new file mode 100644
index 0000000000..9be927b53b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-136.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-136
+description: >
+ Object.defineProperty - 'value' property in 'Attributes' is own
+ accessor property without a get function (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+var attr = {};
+Object.defineProperty(attr, "value", {
+ set: function() {}
+});
+
+Object.defineProperty(obj, "property", attr);
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(typeof(obj.property), "undefined", 'typeof (obj.property)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-137.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-137.js
new file mode 100644
index 0000000000..1f44e0f8a7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-137.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-137
+description: >
+ Object.defineProperty - 'value' property in 'Attributes' is own
+ accessor property(without a get function) that overrides an
+ inherited accessor property (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+var proto = {};
+Object.defineProperty(proto, "value", {
+ get: function() {
+ return "inheritedAccessorProperty";
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "value", {
+ set: function() {}
+});
+
+Object.defineProperty(obj, "property", child);
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(typeof(obj.property), "undefined", 'typeof (obj.property)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-138.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-138.js
new file mode 100644
index 0000000000..a9d91855d5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-138.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-138
+description: >
+ Object.defineProperty - 'value' property in 'Attributes' is an
+ inherited accessor property without a get function (8.10.5 step
+ 5.a)
+---*/
+
+var obj = {
+ property: 120
+};
+
+var proto = {};
+Object.defineProperty(proto, "value", {
+ set: function() {}
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+
+Object.defineProperty(obj, "property", child);
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(typeof(obj.property), "undefined", 'typeof (obj.property)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-139-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-139-1.js
new file mode 100644
index 0000000000..444ee5bac7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-139-1.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-139-1
+description: >
+ Object.defineProperty - 'Attributes' is a Function object which
+ implements its own [[Get]] method to access the 'value' property
+ of prototype object (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+Function.prototype.value = "Function";
+var funObj = function(a, b) {
+ return a + b;
+};
+
+Object.defineProperty(obj, "property", funObj);
+
+assert.sameValue(obj.property, "Function", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-139.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-139.js
new file mode 100644
index 0000000000..4f6f504d65
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-139.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-139
+description: >
+ Object.defineProperty - 'Attributes' is a Function object which
+ implements its own [[Get]] method to access the 'value' property
+ (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+var funObj = function(a, b) {
+ return a + b;
+};
+
+funObj.value = "Function";
+
+Object.defineProperty(obj, "property", funObj);
+
+assert.sameValue(obj.property, "Function", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-14.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-14.js
new file mode 100644
index 0000000000..4cb226bb24
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-14.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The abtract operation ToPropertyDescriptor is used to package the
+ into a property desc. Step 10 of ToPropertyDescriptor throws a TypeError
+ if the property desc ends up having a mix of accessor and data property elements.
+es5id: 15.2.3.6-3-14
+description: >
+ Object.defineProperty throws TypeError if setter is not callable
+ but not undefined (Object)(8.10.5 step 8.b)
+---*/
+
+var o = {};
+
+// dummy getter
+var setter = {
+ a: 1
+};
+var desc = {
+ set: setter
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(o, "foo", desc);
+});
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-140-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-140-1.js
new file mode 100644
index 0000000000..4ca9143203
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-140-1.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-140-1
+description: >
+ Object.defineProperty - 'Attributes' is an Array object that uses
+ Object's [[Get]] method to access the 'value' property of
+ prototype object (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+Array.prototype.value = "Array";
+var arrObj = [1, 2, 3];
+
+Object.defineProperty(obj, "property", arrObj);
+
+assert.sameValue(obj.property, "Array", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-140.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-140.js
new file mode 100644
index 0000000000..6751452791
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-140.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-140
+description: >
+ Object.defineProperty - 'Attributes' is an Array object that uses
+ Object's [[Get]] method to access the 'value' property (8.10.5
+ step 5.a)
+---*/
+
+var obj = {};
+
+var arrObj = [1, 2, 3];
+
+arrObj.value = "Array";
+
+Object.defineProperty(obj, "property", arrObj);
+
+assert.sameValue(obj.property, "Array", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-141-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-141-1.js
new file mode 100644
index 0000000000..0dbe8517ea
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-141-1.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-141-1
+description: >
+ Object.defineProperty - 'Attributes' is a String object that uses
+ Object's [[Get]] method to access the 'value' property of
+ prototype object (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+String.prototype.value = "String";
+var strObj = new String("abc");
+
+Object.defineProperty(obj, "property", strObj);
+
+assert.sameValue(obj.property, "String", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-141.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-141.js
new file mode 100644
index 0000000000..25318a61b9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-141.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-141
+description: >
+ Object.defineProperty - 'Attributes' is a String object that uses
+ Object's [[Get]] method to access the 'value' property (8.10.5
+ step 5.a)
+---*/
+
+var obj = {};
+
+var strObj = new String("abc");
+
+strObj.value = "String";
+
+Object.defineProperty(obj, "property", strObj);
+
+assert.sameValue(obj.property, "String", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-142-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-142-1.js
new file mode 100644
index 0000000000..afbc09f3c7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-142-1.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-142-1
+description: >
+ Object.defineProperty - 'Attributes' is a Boolean object that uses
+ Object's [[Get]] method to access the 'value' property of
+ prototype object (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+Boolean.prototype.value = "Boolean";
+var boolObj = new Boolean(true);
+
+Object.defineProperty(obj, "property", boolObj);
+
+assert.sameValue(obj.property, "Boolean", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-142.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-142.js
new file mode 100644
index 0000000000..e74f960115
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-142.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-142
+description: >
+ Object.defineProperty - 'Attributes' is a Boolean object that uses
+ Object's [[Get]] method to access the 'value' property (8.10.5
+ step 5.a)
+---*/
+
+var obj = {};
+
+var boolObj = new Boolean(true);
+
+boolObj.value = "Boolean";
+
+Object.defineProperty(obj, "property", boolObj);
+
+assert.sameValue(obj.property, "Boolean", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-143-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-143-1.js
new file mode 100644
index 0000000000..056d1095e1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-143-1.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-143-1
+description: >
+ Object.defineProperty - 'Attributes' is a Number object that uses
+ Object's [[Get]] method to access the 'value' property of
+ prototype object (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+Number.prototype.value = "Number";
+var numObj = new Number(-2);
+
+Object.defineProperty(obj, "property", numObj);
+
+assert.sameValue(obj.property, "Number", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-143.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-143.js
new file mode 100644
index 0000000000..5b6908dcba
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-143.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-143
+description: >
+ Object.defineProperty - 'Attributes' is a Number object that uses
+ Object's [[Get]] method to access the 'value' property (8.10.5
+ step 5.a)
+---*/
+
+var obj = {};
+
+var numObj = new Number(-2);
+
+numObj.value = "Number";
+
+Object.defineProperty(obj, "property", numObj);
+
+assert.sameValue(obj.property, "Number", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-144-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-144-1.js
new file mode 100644
index 0000000000..76dca84b34
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-144-1.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-144-1
+description: >
+ Object.defineProperty - 'Attributes' is the Math object that uses
+ Object's [[Get]] method to access the 'value' property of
+ prototype object (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+Object.prototype.value = "Math";
+
+Object.defineProperty(obj, "property", Math);
+
+assert.sameValue(obj.property, "Math", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-144.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-144.js
new file mode 100644
index 0000000000..8c5e882947
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-144.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-144
+description: >
+ Object.defineProperty - 'Attributes' is the Math object that uses
+ Object's [[Get]] method to access the 'value' property (8.10.5
+ step 5.a)
+---*/
+
+var obj = {};
+
+Math.value = "Math";
+
+Object.defineProperty(obj, "property", Math);
+
+assert.sameValue(obj.property, "Math", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-145-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-145-1.js
new file mode 100644
index 0000000000..facae33e0b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-145-1.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-145-1
+description: >
+ Object.defineProperty - 'Attributes' is a Date object that uses
+ Object's [[Get]] method to access the 'value' property of
+ prototype object (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+Date.prototype.value = "Date";
+var dateObj = new Date();
+
+Object.defineProperty(obj, "property", dateObj);
+
+assert.sameValue(obj.property, "Date", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-145.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-145.js
new file mode 100644
index 0000000000..ea29c759b5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-145.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-145
+description: >
+ Object.defineProperty - 'Attributes' is a Date object that uses
+ Object's [[Get]] method to access the 'value' property (8.10.5
+ step 5.a)
+---*/
+
+var obj = {};
+
+var dateObj = new Date();
+
+dateObj.value = "Date";
+
+Object.defineProperty(obj, "property", dateObj);
+
+assert.sameValue(obj.property, "Date", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-146-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-146-1.js
new file mode 100644
index 0000000000..f6a8b72fd0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-146-1.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-146-1
+description: >
+ Object.defineProperty - 'Attributes' is a RegExp object that uses
+ Object's [[Get]] method to access the 'value' property of
+ prototype object (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+RegExp.prototype.value = "RegExp";
+var regObj = new RegExp();
+
+Object.defineProperty(obj, "property", regObj);
+
+assert.sameValue(obj.property, "RegExp", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-146.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-146.js
new file mode 100644
index 0000000000..dde77d28c9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-146.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-146
+description: >
+ Object.defineProperty - 'Attributes' is a RegExp object that uses
+ Object's [[Get]] method to access the 'value' property (8.10.5
+ step 5.a)
+---*/
+
+var obj = {};
+
+var regObj = new RegExp();
+
+regObj.value = "RegExp";
+
+Object.defineProperty(obj, "property", regObj);
+
+assert.sameValue(obj.property, "RegExp", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-147-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-147-1.js
new file mode 100644
index 0000000000..3d8d1d19fa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-147-1.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-147-1
+description: >
+ Object.defineProperty - 'Attributes' is the JSON object that uses
+ Object's [[Get]] method to access the 'value' property of
+ prototype object (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+Object.prototype.value = "JSON";
+
+Object.defineProperty(obj, "property", JSON);
+
+assert.sameValue(obj.property, "JSON", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-147.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-147.js
new file mode 100644
index 0000000000..c9d65ab79c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-147.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-147
+description: >
+ Object.defineProperty - 'Attributes' is the JSON object that uses
+ Object's [[Get]] method to access the 'value' property (8.10.5
+ step 5.a)
+---*/
+
+var obj = {};
+
+JSON.value = "JSON";
+
+Object.defineProperty(obj, "property", JSON);
+
+assert.sameValue(obj.property, "JSON", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-148-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-148-1.js
new file mode 100644
index 0000000000..ca65bd3788
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-148-1.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-148-1
+description: >
+ Object.defineProperty - 'Attributes' is an Error object that uses
+ Object's [[Get]] method to access the 'value' property of
+ prototype object (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+Error.prototype.value = "Error";
+var errObj = new Error();
+
+Object.defineProperty(obj, "property", errObj);
+
+assert.sameValue(obj.property, "Error", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-148.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-148.js
new file mode 100644
index 0000000000..9b5367a1f6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-148.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-148
+description: >
+ Object.defineProperty - 'Attributes' is an Error object that uses
+ Object's [[Get]] method to access the 'value' property (8.10.5
+ step 5.a)
+---*/
+
+var obj = {};
+
+var errObj = new Error();
+
+errObj.value = "Error";
+
+Object.defineProperty(obj, "property", errObj);
+
+assert.sameValue(obj.property, "Error", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-149-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-149-1.js
new file mode 100644
index 0000000000..77cbf27119
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-149-1.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-149-1
+description: >
+ Object.defineProperty - 'Attributes' is an Arguments object which
+ implements its own [[Get]] method to access the 'value' property
+ of prototype object (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+Object.prototype.value = "arguments";
+var argObj = (function() {
+ return arguments;
+})();
+
+
+Object.defineProperty(obj, "property", argObj);
+
+assert.sameValue(obj.property, "arguments", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-149.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-149.js
new file mode 100644
index 0000000000..ec0ba3354a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-149.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-149
+description: >
+ Object.defineProperty - 'Attributes' is an Arguments object which
+ implements its own [[Get]] method to access the 'value' property
+ (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+var argObj = (function() {
+ return arguments;
+})();
+
+argObj.value = "arguments";
+
+Object.defineProperty(obj, "property", argObj);
+
+assert.sameValue(obj.property, "arguments", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-15.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-15.js
new file mode 100644
index 0000000000..9cefe1867a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-15.js
@@ -0,0 +1,14 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-15
+description: Object.defineProperty - 'Attributes' is undefined (8.10.5 step 1)
+---*/
+
+var obj = {};
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "property", undefined);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-151.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-151.js
new file mode 100644
index 0000000000..0b2c843f70
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-151.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-151
+description: >
+ Object.defineProperty - 'Attributes' is the global object that
+ uses Object's [[Get]] method to access the 'value' property
+ (8.10.5 step 5.a)
+---*/
+
+var obj = {};
+
+this.value = "global";
+
+Object.defineProperty(obj, "property", this);
+
+assert.sameValue(obj.property, "global", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-152.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-152.js
new file mode 100644
index 0000000000..87913b2d2d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-152.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-152
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is
+ present (8.10.5 step 6)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var attr = {
+ writable: false
+};
+
+Object.defineProperty(obj, "property", attr);
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-153.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-153.js
new file mode 100644
index 0000000000..20c3e5c191
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-153.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-153
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is not
+ present (8.10.5 step 6)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var attr = {
+ value: 100
+};
+
+Object.defineProperty(obj, "property", attr);
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-154.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-154.js
new file mode 100644
index 0000000000..cb9d525c84
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-154.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-154
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is own
+ data property (8.10.5 step 6.a)
+---*/
+
+var obj = {};
+
+var attr = {
+ writable: true
+};
+
+Object.defineProperty(obj, "property", attr);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-155.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-155.js
new file mode 100644
index 0000000000..c263509dc6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-155.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-155
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is an
+ inherited data property (8.10.5 step 6.a)
+---*/
+
+var obj = {};
+
+var proto = {
+ writable: true
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+
+Object.defineProperty(obj, "property", child);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-156.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-156.js
new file mode 100644
index 0000000000..92a5f4b5d2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-156.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-156
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is own
+ data property that overrides an inherited data property (8.10.5
+ step 6.a)
+---*/
+
+var obj = {};
+
+var proto = {
+ writable: false
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+child.writable = true;
+
+Object.defineProperty(obj, "property", child);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-157.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-157.js
new file mode 100644
index 0000000000..53ab93c445
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-157.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-157
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is own
+ data property that overrides an inherited accessor property
+ (8.10.5 step 6.a)
+---*/
+
+var obj = {};
+
+var proto = {};
+Object.defineProperty(proto, "writable", {
+ get: function() {
+ return false;
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "writable", {
+ value: true
+});
+
+Object.defineProperty(obj, "property", child);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-158.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-158.js
new file mode 100644
index 0000000000..066e92a946
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-158.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-158
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is own
+ accessor property (8.10.5 step 6.a)
+---*/
+
+var obj = {};
+
+var attr = {};
+Object.defineProperty(attr, "writable", {
+ get: function() {
+ return true;
+ }
+});
+
+Object.defineProperty(obj, "property", attr);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-159.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-159.js
new file mode 100644
index 0000000000..409c2ba6c2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-159.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-159
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is an
+ inherited accessor property (8.10.5 step 6.a)
+---*/
+
+var obj = {};
+
+var proto = {};
+Object.defineProperty(proto, "writable", {
+ get: function() {
+ return true;
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+
+Object.defineProperty(obj, "property", child);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-16.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-16.js
new file mode 100644
index 0000000000..f1a398eb31
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-16.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-16
+description: Object.defineProperty - 'Attributes' is null (8.10.5 step 1)
+---*/
+
+assert.throws(TypeError, function() {
+ Object.defineProperty({}, "property", null);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-160.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-160.js
new file mode 100644
index 0000000000..a95d0134bf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-160.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-160
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is own
+ accessor property that overrides an inherited data property
+ (8.10.5 step 6.a)
+---*/
+
+var obj = {};
+
+var proto = {
+ writable: false
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "writable", {
+ get: function() {
+ return true;
+ }
+});
+
+Object.defineProperty(obj, "property", child);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-161.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-161.js
new file mode 100644
index 0000000000..6d4f5298e9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-161.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-161
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is own
+ accessor property that overrides an inherited accessor property
+ (8.10.5 step 6.a)
+---*/
+
+var obj = {};
+
+var proto = {};
+Object.defineProperty(proto, "writable", {
+ get: function() {
+ return false;
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "writable", {
+ get: function() {
+ return true;
+ }
+});
+
+Object.defineProperty(obj, "property", child);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-162.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-162.js
new file mode 100644
index 0000000000..088bb9d5d2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-162.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-162
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is own
+ accessor property without a get function (8.10.5 step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var attr = {};
+Object.defineProperty(attr, "writable", {
+ set: function() {}
+});
+
+Object.defineProperty(obj, "property", attr);
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-163.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-163.js
new file mode 100644
index 0000000000..bfd2ff3dfb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-163.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-163
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is own
+ accessor property(without a get function) that overrides an
+ inherited accessor property (8.10.5 step 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var proto = {};
+Object.defineProperty(proto, "writable", {
+ get: function() {
+ return true;
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "writable", {
+ set: function() {}
+});
+
+Object.defineProperty(obj, "property", child);
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-164.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-164.js
new file mode 100644
index 0000000000..61fe9a5583
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-164.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-164
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is an
+ inherited accessor property without a get function (8.10.5 step
+ 6.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var proto = {};
+Object.defineProperty(proto, "writable", {
+ set: function() {}
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+
+Object.defineProperty(obj, "property", child);
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-165-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-165-1.js
new file mode 100644
index 0000000000..2821ab6772
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-165-1.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-165-1
+description: >
+ Object.defineProperty - 'Attributes' is a Function object which
+ implements its own [[Get]] method to access the 'writable'
+ property of prototype object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Function.prototype.writable = true;
+var funObj = function(a, b) {
+ return a + b;
+};
+
+Object.defineProperty(obj, "property", funObj);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-165.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-165.js
new file mode 100644
index 0000000000..368e30b6cb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-165.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-165
+description: >
+ Object.defineProperty - 'Attributes' is a Function object which
+ implements its own [[Get]] method to access the 'writable'
+ property (8.10.5 step 6.a)
+---*/
+
+var obj = {};
+
+var funObj = function(a, b) {
+ return a + b;
+};
+
+funObj.writable = true;
+
+Object.defineProperty(obj, "property", funObj);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-166-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-166-1.js
new file mode 100644
index 0000000000..a53286acdb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-166-1.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-166-1
+description: >
+ Object.defineProperty - 'Attributes' is an Array object that uses
+ Object's [[Get]] method to access the 'writable' property of
+ prototype object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Array.prototype.writable = true;
+var arrObj = [1, 2, 3];
+
+Object.defineProperty(obj, "property", arrObj);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-166.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-166.js
new file mode 100644
index 0000000000..80704d9996
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-166.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-166
+description: >
+ Object.defineProperty - 'Attributes' is an Array object that uses
+ Object's [[Get]] method to access the 'writable' property (8.10.5
+ step 6.a)
+---*/
+
+var obj = {};
+
+var arrObj = [1, 2, 3];
+
+arrObj.writable = true;
+
+Object.defineProperty(obj, "property", arrObj);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-167-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-167-1.js
new file mode 100644
index 0000000000..ff940f03d5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-167-1.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-167-1
+description: >
+ Object.defineProperty - 'Attributes' is a String object that uses
+ Object's [[Get]] method to access the 'writable' property of
+ prototype object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+String.prototype.writable = true;
+var strObj = new String("abc");
+
+Object.defineProperty(obj, "property", strObj);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-167.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-167.js
new file mode 100644
index 0000000000..0f02dbc091
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-167.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-167
+description: >
+ Object.defineProperty - 'Attributes' is a String object that uses
+ Object's [[Get]] method to access the 'writable' property (8.10.5
+ step 6.a)
+---*/
+
+var obj = {};
+
+var strObj = new String("abc");
+
+strObj.writable = true;
+
+Object.defineProperty(obj, "property", strObj);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-168-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-168-1.js
new file mode 100644
index 0000000000..61dfd5e523
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-168-1.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-168-1
+description: >
+ Object.defineProperty - 'Attributes' is a Boolean object that uses
+ Object's [[Get]] method to access the 'writable' property of
+ prototype object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Boolean.prototype.writable = true;
+var boolObj = new Boolean(true);
+
+Object.defineProperty(obj, "property", boolObj);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-168.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-168.js
new file mode 100644
index 0000000000..99020bc751
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-168.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-168
+description: >
+ Object.defineProperty - 'Attributes' is a Boolean object that uses
+ Object's [[Get]] method to access the 'writable' property (8.10.5
+ step 6.a)
+---*/
+
+var obj = {};
+
+var boolObj = new Boolean(true);
+
+boolObj.writable = true;
+
+Object.defineProperty(obj, "property", boolObj);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-169-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-169-1.js
new file mode 100644
index 0000000000..19b93a5881
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-169-1.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-169-1
+description: >
+ Object.defineProperty - 'Attributes' is a Number object that uses
+ Object's [[Get]] method to access the 'writable' property of
+ prototype object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Number.prototype.writable = true;
+var numObj = new Number(-2);
+
+Object.defineProperty(obj, "property", numObj);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-169.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-169.js
new file mode 100644
index 0000000000..ea310b7838
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-169.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-169
+description: >
+ Object.defineProperty - 'Attributes' is a Number object that uses
+ Object's [[Get]] method to access the 'writable' property (8.10.5
+ step 6.a)
+---*/
+
+var obj = {};
+
+var numObj = new Number(-2);
+
+numObj.writable = true;
+
+Object.defineProperty(obj, "property", numObj);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-17.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-17.js
new file mode 100644
index 0000000000..620d5c9a68
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-17.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-17
+description: >
+ Object.defineProperty - 'Attributes' is a boolean primitive
+ (8.10.5 step 1)
+---*/
+
+assert.throws(TypeError, function() {
+ Object.defineProperty({}, "property", true);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-170-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-170-1.js
new file mode 100644
index 0000000000..f17040876f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-170-1.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-170-1
+description: >
+ Object.defineProperty - 'Attributes' is the Math object that uses
+ Object's [[Get]] method to access the 'writable' property of
+ prototype object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.prototype.writable = true;
+
+Object.defineProperty(obj, "property", Math);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-170.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-170.js
new file mode 100644
index 0000000000..d51097d001
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-170.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-170
+description: >
+ Object.defineProperty - 'Attributes' is the Math object that uses
+ Object's [[Get]] method to access the 'writable' property (8.10.5
+ step 6.a)
+---*/
+
+var obj = {};
+
+Math.writable = true;
+
+Object.defineProperty(obj, "property", Math);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-171-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-171-1.js
new file mode 100644
index 0000000000..d8ee8da884
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-171-1.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-171-1
+description: >
+ Object.defineProperty - 'Attributes' is a Date object that uses
+ Object's [[Get]] method to access the 'writable' property of
+ prototype object (8.10.5 step 6.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+try {
+ Date.prototype.writable = true;
+
+ var dateObj = new Date();
+
+ Object.defineProperty(obj, "property", dateObj);
+ verifyWritable(obj, "property");
+
+} finally {
+ delete Date.prototype.writable;
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-171.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-171.js
new file mode 100644
index 0000000000..c1ca15e585
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-171.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-171
+description: >
+ Object.defineProperty - 'Attributes' is a Date object that uses
+ Object's [[Get]] method to access the 'writable' property (8.10.5
+ step 6.a)
+---*/
+
+var obj = {};
+
+var dateObj = new Date();
+
+dateObj.writable = true;
+
+Object.defineProperty(obj, "property", dateObj);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-172-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-172-1.js
new file mode 100644
index 0000000000..23ae06bbcb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-172-1.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-172-1
+description: >
+ Object.defineProperty - 'Attributes' is a RegExp object that uses
+ Object's [[Get]] method to access the 'writable' property of
+ prototype object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+RegExp.prototype.writable = true;
+
+var regObj = new RegExp();
+
+Object.defineProperty(obj, "property", regObj);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-172.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-172.js
new file mode 100644
index 0000000000..842cc036b3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-172.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-172
+description: >
+ Object.defineProperty - 'Attributes' is a RegExp object that uses
+ Object's [[Get]] method to access the 'writable' property (8.10.5
+ step 6.a)
+---*/
+
+var obj = {};
+
+var regObj = new RegExp();
+
+regObj.writable = true;
+
+Object.defineProperty(obj, "property", regObj);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-173-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-173-1.js
new file mode 100644
index 0000000000..612e7243a3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-173-1.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-173-1
+description: >
+ Object.defineProperty - 'Attributes' is the JSON object that uses
+ Object's [[Get]] method to access the 'writable' property of
+ prototype object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.prototype.writable = true;
+
+Object.defineProperty(obj, "property", JSON);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-173.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-173.js
new file mode 100644
index 0000000000..5a836a9f7d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-173.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-173
+description: >
+ Object.defineProperty - 'Attributes' is the JSON object that uses
+ Object's [[Get]] method to access the 'writable' property (8.10.5
+ step 6.a)
+---*/
+
+var obj = {};
+
+JSON.writable = true;
+
+Object.defineProperty(obj, "property", JSON);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-174-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-174-1.js
new file mode 100644
index 0000000000..1ffb4062a4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-174-1.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-174-1
+description: >
+ Object.defineProperty - 'Attributes' is an Error object that uses
+ Object's [[Get]] method to access the 'writable' property of
+ prototype object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Error.prototype.writable = true;
+
+var errObj = new Error();
+
+Object.defineProperty(obj, "property", errObj);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-174.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-174.js
new file mode 100644
index 0000000000..382ae8cef5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-174.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-174
+description: >
+ Object.defineProperty - 'Attributes' is an Error object that uses
+ Object's [[Get]] method to access the 'writable' property (8.10.5
+ step 6.a)
+---*/
+
+var obj = {};
+
+var errObj = new Error();
+
+errObj.writable = true;
+
+Object.defineProperty(obj, "property", errObj);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-175-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-175-1.js
new file mode 100644
index 0000000000..42774ad55e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-175-1.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-175-1
+description: >
+ Object.defineProperty - 'Attributes' is an Arguments object which
+ implements its own [[Get]] method to access the 'writable'
+ property of prototype object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.prototype.writable = true;
+
+var argObj = (function() {
+ return arguments;
+})();
+
+Object.defineProperty(obj, "property", argObj);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-175.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-175.js
new file mode 100644
index 0000000000..4c4579eab8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-175.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-175
+description: >
+ Object.defineProperty - 'Attributes' is an Arguments object which
+ implements its own [[Get]] method to access the 'writable'
+ property (8.10.5 step 6.a)
+---*/
+
+var obj = {};
+
+var argObj = (function() {
+ return arguments;
+})();
+
+argObj.writable = true;
+
+Object.defineProperty(obj, "property", argObj);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-177.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-177.js
new file mode 100644
index 0000000000..02ca9f73e1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-177.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-177
+description: >
+ Object.defineProperty - 'Attributes' is the global object that
+ uses Object's [[Get]] method to access the 'writable' property
+ (8.10.5 step 6.a)
+---*/
+
+var obj = {};
+
+this.writable = true;
+
+Object.defineProperty(obj, "property", this);
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-178.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-178.js
new file mode 100644
index 0000000000..42ab36b422
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-178.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-178
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is
+ undefined (8.10.5 step 6.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: undefined
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-179.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-179.js
new file mode 100644
index 0000000000..be0fca785e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-179.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-179
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is
+ null (8.10.5 step 6.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: null
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-18.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-18.js
new file mode 100644
index 0000000000..ac40d86a66
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-18.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-18
+description: >
+ Object.defineProperty - 'Attributes' is a number primitive (8.10.5
+ step 1)
+---*/
+
+assert.throws(TypeError, function() {
+ Object.defineProperty({}, "property", 12);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-180.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-180.js
new file mode 100644
index 0000000000..fcab783b53
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-180.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-180
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is
+ true (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: true
+});
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-181.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-181.js
new file mode 100644
index 0000000000..04a60062e3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-181.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-181
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is
+ false (8.10.5 step 6.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: false
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-182.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-182.js
new file mode 100644
index 0000000000..e1506931c8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-182.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-182
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is 0
+ (8.10.5 step 6.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: 0
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-183.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-183.js
new file mode 100644
index 0000000000..08b46c555a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-183.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-183
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is +0
+ (8.10.5 step 6.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: +0
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-184.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-184.js
new file mode 100644
index 0000000000..d456fbeb38
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-184.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-184
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is -0
+ (8.10.5 step 6.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: -0
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-185.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-185.js
new file mode 100644
index 0000000000..81061f91f0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-185.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-185
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is
+ NaN (8.10.5 step 6.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: NaN
+});
+
+assert(obj.hasOwnProperty("property"));
+
+verifyNotWritable(obj, "property");
+
+assert.sameValue(typeof(obj.property), "undefined");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-186.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-186.js
new file mode 100644
index 0000000000..37100e18ea
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-186.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-186
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is a
+ positive number (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: 12345
+});
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-187.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-187.js
new file mode 100644
index 0000000000..39948162d7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-187.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-187
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is a
+ negative number (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: -12345
+});
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-188.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-188.js
new file mode 100644
index 0000000000..29e6a06d42
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-188.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-188
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is an
+ empty string (8.10.5 step 6.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: ""
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-189.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-189.js
new file mode 100644
index 0000000000..4061bc2094
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-189.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-189
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is a
+ non-empty string (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: " "
+});
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-19.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-19.js
new file mode 100644
index 0000000000..4206cc47c5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-19.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-19
+description: >
+ Object.defineProperty - 'Attributes' is a string primitive (8.10.5
+ step 1)
+---*/
+
+assert.throws(TypeError, function() {
+ Object.defineProperty({}, "property", "abc");
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-190.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-190.js
new file mode 100644
index 0000000000..e00b66381d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-190.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-190
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is a
+ Function object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: function() {}
+});
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-191.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-191.js
new file mode 100644
index 0000000000..d06e87dbc6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-191.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-191
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is an
+ Array object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: [1, 2, 3]
+});
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-192.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-192.js
new file mode 100644
index 0000000000..e54f72a7a0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-192.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-192
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is a
+ String object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: new String("bbq")
+});
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-193.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-193.js
new file mode 100644
index 0000000000..00d785d147
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-193.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-193
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is a
+ Boolean object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: new Boolean(true)
+});
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-194.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-194.js
new file mode 100644
index 0000000000..15730be9a2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-194.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-194
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is a
+ Number object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: new Number(123)
+});
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-195.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-195.js
new file mode 100644
index 0000000000..d0372c657a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-195.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-195
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is the
+ Math object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: Math
+});
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-196.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-196.js
new file mode 100644
index 0000000000..708f889f58
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-196.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-196
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is a
+ Date object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: new Date()
+});
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-197.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-197.js
new file mode 100644
index 0000000000..e08574efe0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-197.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-197
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is a
+ RegExp object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: new RegExp()
+});
+
+var beforeWrite = obj.hasOwnProperty("property") && typeof obj.property === "undefined";
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert(beforeWrite, 'beforeWrite !== true');
+assert(afterWrite, 'afterWrite !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-198.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-198.js
new file mode 100644
index 0000000000..795b03e85f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-198.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-198
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is the
+ JSON object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: JSON
+});
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-199.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-199.js
new file mode 100644
index 0000000000..787cb597ee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-199.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-199
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is a
+ Error object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: new SyntaxError()
+});
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-2.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-2.js
new file mode 100644
index 0000000000..8d02967050
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-2.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The abtract operation ToPropertyDescriptor is used to package the
+ into a property desc. Step 10 of ToPropertyDescriptor throws a TypeError
+ if the property desc ends up having a mix of accessor and data property elements.
+es5id: 15.2.3.6-3-2
+description: >
+ Object.defineProperty throws TypeError if desc has 'get' and
+ 'writable' present(8.10.5 step 9.a)
+---*/
+
+var o = {};
+
+// dummy getter
+var getter = function() {
+ return 1;
+}
+var desc = {
+ get: getter,
+ writable: false
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(o, "foo", desc);
+});
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-20.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-20.js
new file mode 100644
index 0000000000..3abd3c77bf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-20.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-20
+description: >
+ Object.defineProperty - 'enumerable' property in 'Attributes' is
+ present (8.10.5 step 3)
+---*/
+
+var obj = {};
+
+var accessed = false;
+Object.defineProperty(obj, "property", {
+ enumerable: false
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-200.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-200.js
new file mode 100644
index 0000000000..6c4e3f8a8c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-200.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-200
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is the
+ Argument object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+var argObj = (function() {
+ return arguments;
+})(1, true, "a");
+
+Object.defineProperty(obj, "property", {
+ writable: argObj
+});
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-202.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-202.js
new file mode 100644
index 0000000000..4758c979ec
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-202.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-202
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is the
+ global object (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: this
+});
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-203.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-203.js
new file mode 100644
index 0000000000..fe8837e340
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-203.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-203
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is
+ treated as true when it is a string(value is 'false') (8.10.5 step
+ 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: "false"
+});
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-204.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-204.js
new file mode 100644
index 0000000000..ccc4a78caa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-204.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-204
+description: >
+ Object.defineProperty - 'writable' property in 'Attributes' is
+ treated as true when it is new Boolean(false) (8.10.5 step 6.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: new Boolean(false)
+});
+
+var beforeWrite = obj.hasOwnProperty("property");
+
+obj.property = "isWritable";
+
+var afterWrite = (obj.property === "isWritable");
+
+assert.sameValue(beforeWrite, true, 'beforeWrite');
+assert.sameValue(afterWrite, true, 'afterWrite');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-205.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-205.js
new file mode 100644
index 0000000000..a7b8b486c1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-205.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-205
+description: >
+ Object.defineProperty - 'get' property in 'Attributes' is present
+ (8.10.5 step 7)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ get: function() {
+ return "present";
+ }
+});
+
+assert.sameValue(obj.property, "present", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-206.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-206.js
new file mode 100644
index 0000000000..f13597bebb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-206.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-206
+description: >
+ Object.defineProperty - 'get' property in 'Attributes' is not
+ present (8.10.5 step 7)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ set: function() {}
+});
+
+assert.sameValue(typeof obj.property, "undefined", 'typeof obj.property');
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-207.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-207.js
new file mode 100644
index 0000000000..d5da5ab911
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-207.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-207
+description: >
+ Object.defineProperty - 'get' property in 'Attributes' is own data
+ property (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+var attributes = {
+ get: function() {
+ return "ownDataProperty";
+ }
+};
+
+Object.defineProperty(obj, "property", attributes);
+
+assert.sameValue(obj.property, "ownDataProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-208.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-208.js
new file mode 100644
index 0000000000..7891396a3b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-208.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-208
+description: >
+ Object.defineProperty - 'get' property in 'Attributes' is an
+ inherited data property (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+var proto = {
+ get: function() {
+ return "inheritedDataProperty";
+ }
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+
+Object.defineProperty(obj, "property", child);
+
+assert.sameValue(obj.property, "inheritedDataProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-209.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-209.js
new file mode 100644
index 0000000000..07927d8efa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-209.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-209
+description: >
+ Object.defineProperty - 'get' property in 'Attributes' is own data
+ property that overrides an inherited data property (8.10.5 step
+ 7.a)
+---*/
+
+var obj = {};
+var proto = {
+ get: function() {
+ return "inheritedDataProperty";
+ }
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+child.get = function() {
+ return "ownDataProperty";
+};
+
+Object.defineProperty(obj, "property", child);
+
+assert.sameValue(obj.property, "ownDataProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-21.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-21.js
new file mode 100644
index 0000000000..1225bd4913
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-21.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-21
+description: >
+ Object.defineProperty - 'enumerable' property in 'Attributes' is
+ not present (8.10.5 step 3)
+---*/
+
+var obj = {};
+
+var attr = {};
+var accessed = false;
+Object.defineProperty(obj, "property", attr);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-210.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-210.js
new file mode 100644
index 0000000000..c1f4d2c7a9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-210.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-210
+description: >
+ Object.defineProperty - 'get' property in 'Attributes' is own data
+ property that overrides an inherited accessor property (8.10.5
+ step 7.a)
+---*/
+
+var obj = {};
+var proto = {};
+var fun = function() {
+ return "inheritedAccessorProperty";
+};
+Object.defineProperty(proto, "get", {
+ get: function() {
+ return fun;
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "get", {
+ value: function() {
+ return "ownDataProperty";
+ }
+});
+
+Object.defineProperty(obj, "property", child);
+
+assert.sameValue(obj.property, "ownDataProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-211.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-211.js
new file mode 100644
index 0000000000..0dfa711f7f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-211.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-211
+description: >
+ Object.defineProperty - 'get' property in 'Attributes' is own
+ accessor property (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+
+var attributes = {};
+Object.defineProperty(attributes, "get", {
+ get: function() {
+ return function() {
+ return "ownAccessorProperty";
+ };
+ }
+});
+
+Object.defineProperty(obj, "property", attributes);
+
+assert.sameValue(obj.property, "ownAccessorProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-212.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-212.js
new file mode 100644
index 0000000000..657d936f65
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-212.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-212
+description: >
+ Object.defineProperty - 'get' property in 'Attributes' is an
+ inherited accessor property (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+var proto = {};
+Object.defineProperty(proto, "get", {
+ get: function() {
+ return function() {
+ return "inheritedAccessorProperty";
+ };
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+
+Object.defineProperty(obj, "property", child);
+
+assert.sameValue(obj.property, "inheritedAccessorProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-213.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-213.js
new file mode 100644
index 0000000000..59e03352dc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-213.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-213
+description: >
+ Object.defineProperty - 'get' property in 'Attributes' is own
+ accessor property that overrides an inherited data property
+ (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+var proto = {
+ get: function() {
+ return "inheritedDataProperty";
+ }
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "get", {
+ get: function() {
+ return function() {
+ return "ownAccessorProperty";
+ };
+ }
+});
+
+Object.defineProperty(obj, "property", child);
+
+assert.sameValue(obj.property, "ownAccessorProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-214.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-214.js
new file mode 100644
index 0000000000..2306097d3a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-214.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-214
+description: >
+ Object.defineProperty - 'get' property in 'Attributes' is own
+ accessor property that overrides an inherited accessor property
+ (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+var proto = {};
+Object.defineProperty(proto, "get", {
+ get: function() {
+ return function() {
+ return "inheritedAccessorProperty";
+ };
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "get", {
+ get: function() {
+ return function() {
+ return "ownAccessorProperty";
+ };
+ }
+});
+
+Object.defineProperty(obj, "property", child);
+
+assert.sameValue(obj.property, "ownAccessorProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-215.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-215.js
new file mode 100644
index 0000000000..14e442c9da
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-215.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-215
+description: >
+ Object.defineProperty - 'get' property in 'Attributes' is own
+ accessor property without a get function (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+
+var attributes = {};
+Object.defineProperty(attributes, "get", {
+ set: function() {}
+});
+
+Object.defineProperty(obj, "property", attributes);
+
+assert.sameValue(typeof obj.property, "undefined", 'typeof obj.property');
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-216.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-216.js
new file mode 100644
index 0000000000..77017b73bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-216.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-216
+description: >
+ Object.defineProperty - 'get' property in 'Attributes' is own
+ accessor property(without a get function) that overrides an
+ inherited accessor property (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+var proto = {};
+Object.defineProperty(proto, "get", {
+ get: function() {
+ return function() {
+ return "inheritedAccessorProperty";
+ };
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "get", {
+ set: function() {}
+});
+
+Object.defineProperty(obj, "property", child);
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(typeof obj.property, "undefined", 'typeof obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-217.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-217.js
new file mode 100644
index 0000000000..4acef5e27a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-217.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-217
+description: >
+ Object.defineProperty - 'get' property in 'Attributes' is an
+ inherited accessor property without a get function (8.10.5 step
+ 7.a)
+---*/
+
+var obj = {};
+var proto = {};
+Object.defineProperty(proto, "get", {
+ set: function() {}
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+
+Object.defineProperty(obj, "property", child);
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(typeof obj.property, "undefined", 'typeof obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-218-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-218-1.js
new file mode 100644
index 0000000000..cb6e82d1df
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-218-1.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-218-1
+description: >
+ Object.defineProperty - 'Attributes' is a Function object which
+ implements its own [[Get]] method to access the 'get' property of
+ prototype object (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+
+Function.prototype.get = function() {
+ return "functionGetProperty";
+};
+var funObj = function() {};
+
+Object.defineProperty(obj, "property", funObj);
+
+assert.sameValue(obj.property, "functionGetProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-218.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-218.js
new file mode 100644
index 0000000000..bcb7d2e737
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-218.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-218
+description: >
+ Object.defineProperty - 'Attributes' is a Function object which
+ implements its own [[Get]] method to access the 'get' property
+ (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+
+var funObj = function() {};
+
+funObj.get = function() {
+ return "functionGetProperty";
+};
+
+Object.defineProperty(obj, "property", funObj);
+
+assert.sameValue(obj.property, "functionGetProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-219-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-219-1.js
new file mode 100644
index 0000000000..929f61b361
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-219-1.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-219-1
+description: >
+ Object.defineProperty - 'Attributes' is an Array object that uses
+ Object's [[Get]] method to access the 'get' property of prototype
+ object (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+
+Array.prototype.get = function() {
+ return "arrayGetProperty";
+};
+var arrObj = [];
+
+Object.defineProperty(obj, "property", arrObj);
+
+assert.sameValue(obj.property, "arrayGetProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-219.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-219.js
new file mode 100644
index 0000000000..f896351a4e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-219.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-219
+description: >
+ Object.defineProperty - 'Attributes' is an Array object that uses
+ Object's [[Get]] method to access the 'get' property (8.10.5 step
+ 7.a)
+---*/
+
+var obj = {};
+
+var arrObj = [];
+
+arrObj.get = function() {
+ return "arrayGetProperty";
+};
+
+Object.defineProperty(obj, "property", arrObj);
+
+assert.sameValue(obj.property, "arrayGetProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-22.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-22.js
new file mode 100644
index 0000000000..76730e0b8a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-22.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-22
+description: >
+ Object.defineProperty - 'enumerable' property in 'Attributes' is
+ own data property (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: true
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-220-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-220-1.js
new file mode 100644
index 0000000000..3abc78124e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-220-1.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-220-1
+description: >
+ Object.defineProperty - 'Attributes' is a String object that uses
+ Object's [[Get]] method to access the 'get' property of prototype
+ object (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+
+String.prototype.get = function() {
+ return "stringGetProperty";
+};
+var strObj = new String();
+
+Object.defineProperty(obj, "property", strObj);
+
+assert.sameValue(obj.property, "stringGetProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-220.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-220.js
new file mode 100644
index 0000000000..b98621c995
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-220.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-220
+description: >
+ Object.defineProperty - 'Attributes' is a String object that uses
+ Object's [[Get]] method to access the 'get' property (8.10.5 step
+ 7.a)
+---*/
+
+var obj = {};
+
+var strObj = new String();
+
+strObj.get = function() {
+ return "stringGetProperty";
+};
+
+Object.defineProperty(obj, "property", strObj);
+
+assert.sameValue(obj.property, "stringGetProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-221-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-221-1.js
new file mode 100644
index 0000000000..b7c4695599
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-221-1.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-221-1
+description: >
+ Object.defineProperty - 'Attributes' is a Boolean object that uses
+ Object's [[Get]] method to access the 'get' property of prototype
+ object (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+
+Boolean.prototype.get = function() {
+ return "booleanGetProperty";
+};
+var boolObj = new Boolean(true);
+
+Object.defineProperty(obj, "property", boolObj);
+
+assert.sameValue(obj.property, "booleanGetProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-221.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-221.js
new file mode 100644
index 0000000000..b8f1d5f22f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-221.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-221
+description: >
+ Object.defineProperty - 'Attributes' is a Boolean object that uses
+ Object's [[Get]] method to access the 'get' property (8.10.5 step
+ 7.a)
+---*/
+
+var obj = {};
+
+var boolObj = new Boolean(true);
+
+boolObj.get = function() {
+ return "booleanGetProperty";
+};
+
+Object.defineProperty(obj, "property", boolObj);
+
+assert.sameValue(obj.property, "booleanGetProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-222-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-222-1.js
new file mode 100644
index 0000000000..654421a5f4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-222-1.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-222-1
+description: >
+ Object.defineProperty - 'Attributes' is a Number object that uses
+ Object's [[Get]] method to access the 'get' property of prototype
+ object (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+
+Number.prototype.get = function() {
+ return "numberGetProperty";
+};
+var numObj = new Number(-2);
+
+Object.defineProperty(obj, "property", numObj);
+
+assert.sameValue(obj.property, "numberGetProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-222.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-222.js
new file mode 100644
index 0000000000..2a47af48ae
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-222.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-222
+description: >
+ Object.defineProperty - 'Attributes' is a Number object that uses
+ Object's [[Get]] method to access the 'get' property (8.10.5 step
+ 7.a)
+---*/
+
+var obj = {};
+
+var numObj = new Number(-2);
+
+numObj.get = function() {
+ return "numberGetProperty";
+};
+
+Object.defineProperty(obj, "property", numObj);
+
+assert.sameValue(obj.property, "numberGetProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-223-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-223-1.js
new file mode 100644
index 0000000000..d594d21a61
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-223-1.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-223-1
+description: >
+ Object.defineProperty - 'Attributes' is the Math object that uses
+ Object's [[Get]] method to access the 'get' property of prototype
+ object (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+
+Object.prototype.get = function() {
+ return "mathGetProperty";
+};
+
+Object.defineProperty(obj, "property", Math);
+
+assert.sameValue(obj.property, "mathGetProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-223.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-223.js
new file mode 100644
index 0000000000..650493171d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-223.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-223
+description: >
+ Object.defineProperty - 'Attributes' is the Math object that uses
+ Object's [[Get]] method to access the 'get' property (8.10.5 step
+ 7.a)
+---*/
+
+var obj = {};
+
+Math.get = function() {
+ return "mathGetProperty";
+};
+
+Object.defineProperty(obj, "property", Math);
+
+assert.sameValue(obj.property, "mathGetProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-224-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-224-1.js
new file mode 100644
index 0000000000..a3511a42d5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-224-1.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-224-1
+description: >
+ Object.defineProperty - 'Attributes' is a Date object that uses
+ Object's [[Get]] method to access the 'get' property of prototype
+ object (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+
+Date.prototype.get = function() {
+ return "dateGetProperty";
+};
+var dateObj = new Date();
+
+Object.defineProperty(obj, "property", dateObj);
+
+assert.sameValue(obj.property, "dateGetProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-224.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-224.js
new file mode 100644
index 0000000000..6a1c6b279a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-224.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-224
+description: >
+ Object.defineProperty - 'Attributes' is a Date object that uses
+ Object's [[Get]] method to access the 'get' property (8.10.5 step
+ 7.a)
+---*/
+
+var obj = {};
+
+var dateObj = new Date();
+
+dateObj.get = function() {
+ return "dateGetProperty";
+};
+
+Object.defineProperty(obj, "property", dateObj);
+
+assert.sameValue(obj.property, "dateGetProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-225-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-225-1.js
new file mode 100644
index 0000000000..72106eb354
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-225-1.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-225-1
+description: >
+ Object.defineProperty - 'Attributes' is a RegExp object that uses
+ Object's [[Get]] method to access the 'get' property of prototype
+ object (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+
+RegExp.prototype.get = function() {
+ return "regExpGetProperty";
+};
+var regObj = new RegExp();
+
+
+Object.defineProperty(obj, "property", regObj);
+
+assert.sameValue(obj.property, "regExpGetProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-225.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-225.js
new file mode 100644
index 0000000000..5008c418f4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-225.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-225
+description: >
+ Object.defineProperty - 'Attributes' is a RegExp object that uses
+ Object's [[Get]] method to access the 'get' property (8.10.5 step
+ 7.a)
+---*/
+
+var obj = {};
+
+var regObj = new RegExp();
+
+regObj.get = function() {
+ return "regExpGetProperty";
+};
+
+Object.defineProperty(obj, "property", regObj);
+
+assert.sameValue(obj.property, "regExpGetProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-226-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-226-1.js
new file mode 100644
index 0000000000..199d32a914
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-226-1.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-226-1
+description: >
+ Object.defineProperty - 'Attributes' is the JSON object that uses
+ Object's [[Get]] method to access the 'get' property of prototype
+ object (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+
+Object.prototype.get = function() {
+ return "jsonGetProperty";
+};
+
+Object.defineProperty(obj, "property", JSON);
+
+assert.sameValue(obj.property, "jsonGetProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-226.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-226.js
new file mode 100644
index 0000000000..6d6cbb3f28
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-226.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-226
+description: >
+ Object.defineProperty - 'Attributes' is the JSON object that uses
+ Object's [[Get]] method to access the 'get' property (8.10.5 step
+ 7.a)
+---*/
+
+var obj = {};
+
+JSON.get = function() {
+ return "jsonGetProperty";
+};
+
+Object.defineProperty(obj, "property", JSON);
+
+assert.sameValue(obj.property, "jsonGetProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-227-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-227-1.js
new file mode 100644
index 0000000000..24644f07ee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-227-1.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-227-1
+description: >
+ Object.defineProperty - 'Attributes' is an Error object that uses
+ Object's [[Get]] method to access the 'get' property of prototype
+ object (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+
+Error.prototype.get = function() {
+ return "errorGetProperty";
+};
+var errObj = new Error();
+
+Object.defineProperty(obj, "property", errObj);
+
+assert.sameValue(obj.property, "errorGetProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-227.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-227.js
new file mode 100644
index 0000000000..97591f9929
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-227.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-227
+description: >
+ Object.defineProperty - 'Attributes' is an Error object that uses
+ Object's [[Get]] method to access the 'get' property (8.10.5 step
+ 7.a)
+---*/
+
+var obj = {};
+
+var errObj = new Error();
+
+errObj.get = function() {
+ return "errorGetProperty";
+};
+
+Object.defineProperty(obj, "property", errObj);
+
+assert.sameValue(obj.property, "errorGetProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-228-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-228-1.js
new file mode 100644
index 0000000000..4f61cdd4f5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-228-1.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-228-1
+description: >
+ Object.defineProperty - 'Attributes' is an Arguments object which
+ implements its own [[Get]] method to access the 'get' property of
+ prototype object (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+
+Object.prototype.get = function() {
+ return "argumentGetProperty";
+};
+var argObj = (function() {
+ return arguments;
+})();
+
+Object.defineProperty(obj, "property", argObj);
+
+assert.sameValue(obj.property, "argumentGetProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-228.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-228.js
new file mode 100644
index 0000000000..c160ec3db7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-228.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-228
+description: >
+ Object.defineProperty - 'Attributes' is an Arguments object which
+ implements its own [[Get]] method to access the 'get' property
+ (8.10.5 step 7.a)
+---*/
+
+var obj = {};
+
+var argObj = (function() {
+ return arguments;
+})();
+
+argObj.get = function() {
+ return "argumentGetProperty";
+};
+
+Object.defineProperty(obj, "property", argObj);
+
+assert.sameValue(obj.property, "argumentGetProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-23.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-23.js
new file mode 100644
index 0000000000..4cba7def73
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-23.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-23
+description: >
+ Object.defineProperty - 'enumerable' property in 'Attributes' is
+ an inherited data property (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+var proto = {};
+Object.defineProperty(proto, "enumerable", {
+ value: true
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+
+Object.defineProperty(obj, "property", child);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-230.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-230.js
new file mode 100644
index 0000000000..29aa610879
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-230.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-230
+description: >
+ Object.defineProperty - 'Attributes' is the global object that
+ uses Object's [[Get]] method to access the 'get' property (8.10.5
+ step 7.a)
+---*/
+
+var obj = {};
+
+this.get = function() {
+ return "globalGetProperty";
+};
+
+Object.defineProperty(obj, "property", this);
+
+assert.sameValue(obj.property, "globalGetProperty", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-231.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-231.js
new file mode 100644
index 0000000000..93e561661f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-231.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-231
+description: >
+ Object.defineProperty - value of 'get' property in 'Attributes' is
+ undefined (8.10.5 step 7.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ get: undefined
+});
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(typeof obj.property, "undefined", 'typeof obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-232.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-232.js
new file mode 100644
index 0000000000..16b31733f0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-232.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-232
+description: >
+ Object.defineProperty - value of 'get' property in 'Attributes' is
+ a function (8.10.5 step 7.b)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ get: function() {
+ return "getFunction";
+ }
+});
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(obj.property, "getFunction", 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-235.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-235.js
new file mode 100644
index 0000000000..4f661cd7e2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-235.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-235
+description: >
+ Object.defineProperty - 'set' property in 'Attributes' is present
+ (8.10.5 step 8)
+---*/
+
+var obj = {};
+var data = "data";
+
+Object.defineProperty(obj, "property", {
+ set: function(value) {
+ data = value;
+ }
+});
+
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-236.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-236.js
new file mode 100644
index 0000000000..1aade5cdb3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-236.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-236
+description: >
+ Object.defineProperty - 'set' property in 'Attributes' is not
+ present (8.10.5 step 8)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ get: function() {
+ return 11;
+ }
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-237.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-237.js
new file mode 100644
index 0000000000..9f8700c8bc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-237.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-237
+description: >
+ Object.defineProperty - 'set' property in 'Attributes' is own data
+ property (8.10.5 step 8.a)
+---*/
+
+var obj = {};
+var data = "data";
+
+Object.defineProperty(obj, "property", {
+ set: function(value) {
+ data = value;
+ }
+});
+
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-238.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-238.js
new file mode 100644
index 0000000000..843bb131ca
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-238.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-238
+description: >
+ Object.defineProperty - 'set' property in 'Attributes' is an
+ inherited data property (8.10.5 step 8.a)
+---*/
+
+var obj = {};
+var data = "data";
+var proto = {
+ set: function(value) {
+ data = value;
+ }
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+
+Object.defineProperty(obj, "property", child);
+
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-239.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-239.js
new file mode 100644
index 0000000000..03fdde5785
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-239.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-239
+description: >
+ Object.defineProperty - 'set' property in 'Attributes' is own data
+ property that overrides an inherited data property (8.10.5 step
+ 8.a)
+---*/
+
+var obj = {};
+var data1 = "data";
+var data2 = "data";
+var proto = {
+ set: function(value) {
+ data1 = value;
+ }
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+child.set = function(value) {
+ data2 = value;
+};
+
+Object.defineProperty(obj, "property", child);
+
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data1, "data", 'data1');
+assert.sameValue(data2, "overrideData", 'data2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-24.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-24.js
new file mode 100644
index 0000000000..6de470315b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-24.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-24
+description: >
+ Object.defineProperty - 'enumerable' property in 'Attributes' is
+ own data property that overrides an inherited data property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+var proto = {};
+Object.defineProperty(proto, "enumerable", {
+ value: false
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "enumerable", {
+ value: true
+});
+
+Object.defineProperty(obj, "property", child);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-240.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-240.js
new file mode 100644
index 0000000000..3c46844005
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-240.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-240
+description: >
+ Object.defineProperty - 'set' property in 'Attributes' is own data
+ property that overrides an inherited accessor property (8.10.5
+ step 8.a)
+---*/
+
+var obj = {};
+var proto = {};
+var data1 = "data";
+var data2 = "data";
+
+Object.defineProperty(proto, "set", {
+ get: function() {
+ return function(value) {
+ data1 = value;
+ };
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "set", {
+ value: function(value) {
+ data2 = value;
+ }
+});
+
+Object.defineProperty(obj, "property", child);
+
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data1, "data", 'data1');
+assert.sameValue(data2, "overrideData", 'data2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-241.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-241.js
new file mode 100644
index 0000000000..25a5bcf665
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-241.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-241
+description: >
+ Object.defineProperty - 'set' property in 'Attributes' is own
+ accessor property (8.10.5 step 8.a)
+---*/
+
+var obj = {};
+var data = "data";
+var attributes = {};
+Object.defineProperty(attributes, "set", {
+ get: function() {
+ return function(value) {
+ data = value;
+ };
+ }
+});
+
+Object.defineProperty(obj, "property", attributes);
+obj.property = "ownAccessorProperty";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "ownAccessorProperty", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-242.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-242.js
new file mode 100644
index 0000000000..96f28c5b37
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-242.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-242
+description: >
+ Object.defineProperty - 'set' property in 'Attributes' is an
+ inherited accessor property (8.10.5 step 8.a)
+---*/
+
+var obj = {};
+var proto = {};
+var data = "data";
+Object.defineProperty(proto, "set", {
+ get: function() {
+ return function(value) {
+ data = value;
+ };
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+
+Object.defineProperty(obj, "property", child);
+obj.property = "inheritedAccessorProperty";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "inheritedAccessorProperty", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-243.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-243.js
new file mode 100644
index 0000000000..b959e3aca5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-243.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-243
+description: >
+ Object.defineProperty - 'set' property in 'Attributes' is own
+ accessor property that overrides an inherited data property
+ (8.10.5 step 8.a)
+---*/
+
+var obj = {};
+var data1 = "data";
+var data2 = "data";
+
+var proto = {
+ set: function(value) {
+ data1 = value;
+ }
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "set", {
+ get: function() {
+ return function(value) {
+ data2 = value;
+ };
+ }
+});
+
+Object.defineProperty(obj, "property", child);
+obj.property = "ownAccessorProperty";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data1, "data", 'data1');
+assert.sameValue(data2, "ownAccessorProperty", 'data2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-244.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-244.js
new file mode 100644
index 0000000000..418a65251f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-244.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-244
+description: >
+ Object.defineProperty - 'set' property in 'Attributes' is own
+ accessor property that overrides an inherited accessor property
+ (8.10.5 step 8.a)
+---*/
+
+var obj = {};
+var proto = {};
+var data1 = "data";
+var data2 = "data";
+Object.defineProperty(proto, "set", {
+ get: function() {
+ return function(value) {
+ data1 = value;
+ };
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "set", {
+ get: function() {
+ return function(value) {
+ data2 = value;
+ };
+ }
+});
+
+Object.defineProperty(obj, "property", child);
+obj.property = "ownAccessorProperty";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data1, "data", 'data1');
+assert.sameValue(data2, "ownAccessorProperty", 'data2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-245.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-245.js
new file mode 100644
index 0000000000..f7e231e45e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-245.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-245
+description: >
+ Object.defineProperty - 'set' property in 'Attributes' is own
+ accessor property without a get function (8.10.5 step 8.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var attributes = {};
+Object.defineProperty(attributes, "set", {
+ set: function() {}
+});
+
+Object.defineProperty(obj, "property", attributes);
+
+verifyNotWritable(obj, "property");
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+assert(obj.hasOwnProperty("property"));
+assert.sameValue(typeof obj.property, "undefined");
+assert.sameValue(typeof desc.set, "undefined");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-246.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-246.js
new file mode 100644
index 0000000000..1ac0edb30b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-246.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-246
+description: >
+ Object.defineProperty - 'set' property in 'Attributes' is own
+ accessor property(without a get function) that overrides an
+ inherited accessor property (8.10.5 step 8.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+var proto = {};
+var data = "data";
+Object.defineProperty(proto, "set", {
+ get: function() {
+ return function(value) {
+ data = value;
+ };
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "set", {
+ set: function() {}
+});
+
+Object.defineProperty(obj, "property", child);
+
+verifyNotWritable(obj, "property");
+
+assert.sameValue(typeof obj.property, "undefined");
+assert.sameValue(data, "data");
+
+assert(obj.hasOwnProperty("property"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-247.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-247.js
new file mode 100644
index 0000000000..7c3f46d87c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-247.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-247
+description: >
+ Object.defineProperty - 'set' property in 'Attributes' is an
+ inherited accessor property without a get function (8.10.5 step
+ 8.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+var proto = {};
+Object.defineProperty(proto, "set", {
+ set: function() {}
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+
+Object.defineProperty(obj, "property", child);
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-248-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-248-1.js
new file mode 100644
index 0000000000..4edb6fabed
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-248-1.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-248-1
+description: >
+ Object.defineProperty - 'Attributes' is a Function object which
+ implements its own [[Get]] method to access the 'set' property of
+ prototype object (8.10.5 step 8.a)
+---*/
+
+var obj = {};
+var data = "data";
+
+Function.prototype.set = function(value) {
+ data = value;
+};
+var funObj = function() {};
+
+Object.defineProperty(obj, "property", funObj);
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-248.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-248.js
new file mode 100644
index 0000000000..22da395e54
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-248.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-248
+description: >
+ Object.defineProperty - 'Attributes' is a Function object which
+ implements its own [[Get]] method to access the 'set' property
+ (8.10.5 step 8.a)
+---*/
+
+var obj = {};
+var data = "data";
+var funObj = function() {};
+
+funObj.set = function(value) {
+ data = value;
+};
+
+Object.defineProperty(obj, "property", funObj);
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-249-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-249-1.js
new file mode 100644
index 0000000000..de80096156
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-249-1.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-249-1
+description: >
+ Object.defineProperty - 'Attributes' is an Array object that uses
+ Object's [[Get]] method to access the 'set' property of prototype
+ object (8.10.5 step 8.a)
+---*/
+
+var obj = {};
+var data = "data";
+
+Array.prototype.set = function(value) {
+ data = value;
+};
+var arrObj = [];
+
+Object.defineProperty(obj, "property", arrObj);
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-249.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-249.js
new file mode 100644
index 0000000000..d18e24c996
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-249.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-249
+description: >
+ Object.defineProperty - 'Attributes' is an Array object that uses
+ Object's [[Get]] method to access the 'set' property (8.10.5 step
+ 8.a)
+---*/
+
+var obj = {};
+var data = "data";
+var arrObj = [];
+
+arrObj.set = function(value) {
+ data = value;
+};
+
+Object.defineProperty(obj, "property", arrObj);
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-25.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-25.js
new file mode 100644
index 0000000000..09d3f967ae
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-25.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-25
+description: >
+ Object.defineProperty - 'enumerable' property in 'Attributes' is
+ own data property that overrides an inherited accessor property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+var proto = {};
+Object.defineProperty(proto, "enumerable", {
+ get: function() {
+ return false;
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "enumerable", {
+ value: true
+});
+
+Object.defineProperty(obj, "property", child);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-250-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-250-1.js
new file mode 100644
index 0000000000..f3f6bba2f5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-250-1.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-250-1
+description: >
+ Object.defineProperty - 'Attributes' is a String object that uses
+ Object's [[Get]] method to access the 'set' property of prototype
+ object (8.10.5 step 8.a)
+---*/
+
+var obj = {};
+
+String.prototype.set = function(value) {
+ data = value;
+};
+var strObj = new String();
+var data = "data";
+
+Object.defineProperty(obj, "property", strObj);
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-250.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-250.js
new file mode 100644
index 0000000000..e8874f6c3f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-250.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-250
+description: >
+ Object.defineProperty - 'Attributes' is a String object that uses
+ Object's [[Get]] method to access the 'set' property (8.10.5 step
+ 8.a)
+---*/
+
+var obj = {};
+var strObj = new String();
+var data = "data";
+
+strObj.set = function(value) {
+ data = value;
+};
+
+Object.defineProperty(obj, "property", strObj);
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-251-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-251-1.js
new file mode 100644
index 0000000000..e5046e9b66
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-251-1.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-251-1
+description: >
+ Object.defineProperty - 'Attributes' is a Boolean object that uses
+ Object's [[Get]] method to access the 'set' property of prototype
+ object (8.10.5 step 8.a)
+---*/
+
+var obj = {};
+var data = "data";
+
+Boolean.prototype.set = function(value) {
+ data = value;
+};
+var boolObj = new Boolean(true);
+
+Object.defineProperty(obj, "property", boolObj);
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-251.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-251.js
new file mode 100644
index 0000000000..3993d7c82a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-251.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-251
+description: >
+ Object.defineProperty - 'Attributes' is a Boolean object that uses
+ Object's [[Get]] method to access the 'set' property (8.10.5 step
+ 8.a)
+---*/
+
+var obj = {};
+var data = "data";
+var boolObj = new Boolean(true);
+
+boolObj.set = function(value) {
+ data = value;
+};
+
+Object.defineProperty(obj, "property", boolObj);
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-252-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-252-1.js
new file mode 100644
index 0000000000..07a7559276
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-252-1.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-252-1
+description: >
+ Object.defineProperty - 'Attributes' is a Number object that uses
+ Object's [[Get]] method to access the 'set' property of prototype
+ object (8.10.5 step 8.a)
+---*/
+
+var obj = {};
+var data = "data";
+
+Number.prototype.set = function(value) {
+ data = value;
+};
+var numObj = new Number(-2);
+
+Object.defineProperty(obj, "property", numObj);
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-252.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-252.js
new file mode 100644
index 0000000000..479421c879
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-252.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-252
+description: >
+ Object.defineProperty - 'Attributes' is a Number object that uses
+ Object's [[Get]] method to access the 'set' property (8.10.5 step
+ 8.a)
+---*/
+
+var obj = {};
+var data = "data";
+var numObj = new Number(-2);
+
+numObj.set = function(value) {
+ data = value;
+};
+
+Object.defineProperty(obj, "property", numObj);
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-253-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-253-1.js
new file mode 100644
index 0000000000..7327a3e7af
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-253-1.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-253-1
+description: >
+ Object.defineProperty - 'Attributes' is the Math object that uses
+ Object's [[Get]] method to access the 'set' property of prototype
+ object (8.10.5 step 8.a)
+---*/
+
+var obj = {};
+var data = "data";
+
+Object.prototype.set = function(value) {
+ data = value;
+};
+
+Object.defineProperty(obj, "property", Math);
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-253.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-253.js
new file mode 100644
index 0000000000..1367770594
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-253.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-253
+description: >
+ Object.defineProperty - 'Attributes' is the Math object that uses
+ Object's [[Get]] method to access the 'set' property (8.10.5 step
+ 8.a)
+---*/
+
+var obj = {};
+var data = "data";
+
+Math.set = function(value) {
+ data = value;
+};
+
+Object.defineProperty(obj, "property", Math);
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-254-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-254-1.js
new file mode 100644
index 0000000000..03a59fe2ff
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-254-1.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-254-1
+description: >
+ Object.defineProperty - 'Attributes' is a Date object that uses
+ Object's [[Get]] method to access the 'set' property of prototype
+ object (8.10.5 step 8.a)
+---*/
+
+var obj = {};
+var data = "data";
+
+Date.prototype.set = function(value) {
+ data = value;
+};
+var dateObj = new Date();
+
+Object.defineProperty(obj, "property", dateObj);
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-254.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-254.js
new file mode 100644
index 0000000000..53010e849a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-254.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-254
+description: >
+ Object.defineProperty - 'Attributes' is a Date object that uses
+ Object's [[Get]] method to access the 'set' property (8.10.5 step
+ 8.a)
+---*/
+
+var obj = {};
+var data = "data";
+var dateObj = new Date();
+
+dateObj.set = function(value) {
+ data = value;
+};
+
+Object.defineProperty(obj, "property", dateObj);
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-255-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-255-1.js
new file mode 100644
index 0000000000..01c9632dcd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-255-1.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-255-1
+description: >
+ Object.defineProperty - 'Attributes' is a RegExp object that uses
+ Object's [[Get]] method to access the 'set' property of prototype
+ object (8.10.5 step 8.a)
+---*/
+
+var obj = {};
+var data = "data";
+
+RegExp.prototype.set = function(value) {
+ data = value;
+};
+var regObj = new RegExp();
+
+Object.defineProperty(obj, "property", regObj);
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-255.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-255.js
new file mode 100644
index 0000000000..b51f9ee021
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-255.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-255
+description: >
+ Object.defineProperty - 'Attributes' is a RegExp object that uses
+ Object's [[Get]] method to access the 'set' property (8.10.5 step
+ 8.a)
+---*/
+
+var obj = {};
+var data = "data";
+var regObj = new RegExp();
+
+regObj.set = function(value) {
+ data = value;
+};
+
+Object.defineProperty(obj, "property", regObj);
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-256-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-256-1.js
new file mode 100644
index 0000000000..f619c3c185
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-256-1.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-256-1
+description: >
+ Object.defineProperty - 'Attributes' is the JSON object that uses
+ Object's [[Get]] method to access the 'set' property of prototype
+ object (8.10.5 step 8.a)
+---*/
+
+var obj = {};
+var data = "data";
+
+Object.prototype.set = function(value) {
+ data = value;
+};
+
+Object.defineProperty(obj, "property", JSON);
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-256.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-256.js
new file mode 100644
index 0000000000..af2d5c27b8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-256.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-256
+description: >
+ Object.defineProperty - 'Attributes' is the JSON object that uses
+ Object's [[Get]] method to access the 'set' property (8.10.5 step
+ 8.a)
+---*/
+
+var obj = {};
+var data = "data";
+
+JSON.set = function(value) {
+ data = value;
+};
+
+Object.defineProperty(obj, "property", JSON);
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-257-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-257-1.js
new file mode 100644
index 0000000000..a7c7f0dd85
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-257-1.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-257-1
+description: >
+ Object.defineProperty - 'Attributes' is an Error object that uses
+ Object's [[Get]] method to access the 'set' property of prototype
+ object (8.10.5 step 8.a)
+---*/
+
+var obj = {};
+var data = "data";
+
+Error.prototype.set = function(value) {
+ data = value;
+};
+var errObj = new Error();
+
+Object.defineProperty(obj, "property", errObj);
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-257.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-257.js
new file mode 100644
index 0000000000..ead729262a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-257.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-257
+description: >
+ Object.defineProperty - 'Attributes' is an Error object that uses
+ Object's [[Get]] method to access the 'set' property (8.10.5 step
+ 8.a)
+---*/
+
+var obj = {};
+var data = "data";
+var errObj = new Error();
+
+errObj.set = function(value) {
+ data = value;
+};
+
+Object.defineProperty(obj, "property", errObj);
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-258-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-258-1.js
new file mode 100644
index 0000000000..5d8cdec335
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-258-1.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-258-1
+description: >
+ Object.defineProperty - 'Attributes' is an Arguments object which
+ implements its own [[Get]] method to access the 'set' property of
+ prototype object (8.10.5 step 8.a)
+---*/
+
+var obj = {};
+var data = "data";
+
+Object.prototype.set = function(value) {
+ data = value;
+};
+var argObj = (function() {
+ return arguments;
+})();
+
+Object.defineProperty(obj, "property", argObj);
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-258.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-258.js
new file mode 100644
index 0000000000..c614237e87
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-258.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-258
+description: >
+ Object.defineProperty - 'Attributes' is an Arguments object which
+ implements its own [[Get]] method to access the 'set' property
+ (8.10.5 step 8.a)
+---*/
+
+var obj = {};
+var data = "data";
+var argObj = (function() {
+ return arguments;
+})();
+argObj.set = function(value) {
+ data = value;
+};
+
+Object.defineProperty(obj, "property", argObj);
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-26.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-26.js
new file mode 100644
index 0000000000..17e26a9259
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-26.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-26
+description: >
+ Object.defineProperty - 'enumerable' property in 'Attributes' is
+ own accessor property (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+var attr = {};
+Object.defineProperty(attr, "enumerable", {
+ get: function() {
+ return true;
+ }
+});
+
+Object.defineProperty(obj, "property", attr);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-260.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-260.js
new file mode 100644
index 0000000000..cee78d4f73
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-260.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-260
+description: >
+ Object.defineProperty - 'Attributes' is the global object that
+ uses Object's [[Get]] method to access the 'set' property (8.10.5
+ step 8.a)
+---*/
+
+var obj = {};
+var data = "data";
+
+this.set = function(value) {
+ data = value;
+};
+
+Object.defineProperty(obj, "property", this);
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-261.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-261.js
new file mode 100644
index 0000000000..dbb19915e9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-261.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-261
+description: >
+ Object.defineProperty - value of 'set' property in 'Attributes' is
+ undefined (8.10.5 step 8.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ set: undefined
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+assert(obj.hasOwnProperty("property"));
+verifyNotWritable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-262.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-262.js
new file mode 100644
index 0000000000..4c3cb62889
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-262.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-262
+description: >
+ Object.defineProperty - value of 'set' property in 'Attributes' is
+ a function (8.10.5 step 8.b)
+---*/
+
+var obj = {};
+var data = "data";
+
+Object.defineProperty(obj, "property", {
+ set: function(value) {
+ data = value;
+ }
+});
+obj.property = "overrideData";
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(data, "overrideData", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-27.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-27.js
new file mode 100644
index 0000000000..9644362ff2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-27.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-27
+description: >
+ Object.defineProperty - 'enumerable' property in 'Attributes' is
+ an inherited accessor property (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+var proto = {};
+Object.defineProperty(proto, "enumerable", {
+ get: function() {
+ return true;
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+
+Object.defineProperty(obj, "property", child);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-28.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-28.js
new file mode 100644
index 0000000000..3a9f78a675
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-28.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-28
+description: >
+ Object.defineProperty - 'enumerable' property in 'Attributes' is
+ own accessor property that overrides an inherited data property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+var proto = {
+ enumerable: false
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+
+Object.defineProperty(child, "enumerable", {
+ get: function() {
+ return true;
+ }
+});
+
+Object.defineProperty(obj, "property", child);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-29.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-29.js
new file mode 100644
index 0000000000..34ef15fee6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-29.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-29
+description: >
+ Object.defineProperty - 'enumerable' property in 'Attributes' is
+ own accessor property that overrides an inherited accessor
+ property (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+var proto = {};
+
+Object.defineProperty(proto, "enumerable", {
+ get: function() {
+ return false;
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+
+Object.defineProperty(child, "enumerable", {
+ get: function() {
+ return true;
+ }
+});
+
+Object.defineProperty(obj, "property", child);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-3.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-3.js
new file mode 100644
index 0000000000..b881b648a1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-3.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The abtract operation ToPropertyDescriptor is used to package the
+ into a property desc. Step 10 of ToPropertyDescriptor throws a TypeError
+ if the property desc ends up having a mix of accessor and data property elements.
+es5id: 15.2.3.6-3-3
+description: >
+ Object.defineProperty throws TypeError if desc has 'set' and
+ 'value' present(8.10.5 step 9.a)
+---*/
+
+var o = {};
+
+// dummy setter
+var setter = function() {}
+var desc = {
+ set: setter,
+ value: 101
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(o, "foo", desc);
+});
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-30.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-30.js
new file mode 100644
index 0000000000..829bb02117
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-30.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-30
+description: >
+ Object.defineProperty - 'enumerable' property in 'Attributes' is
+ own accessor property without a get function (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+var attr = {};
+Object.defineProperty(attr, "enumerable", {
+ set: function() {}
+});
+
+Object.defineProperty(obj, "property", attr);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-31.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-31.js
new file mode 100644
index 0000000000..b343002b64
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-31.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-31
+description: >
+ Object.defineProperty - 'enumerable' property in 'Attributes' is
+ own accessor property(without a get function) that overrides an
+ inherited accessor property (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+var proto = {};
+
+Object.defineProperty(proto, "enumerable", {
+ get: function() {
+ return true;
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+
+Object.defineProperty(child, "enumerable", {
+ set: function() {}
+});
+
+Object.defineProperty(obj, "property", child);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-32.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-32.js
new file mode 100644
index 0000000000..a938c27750
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-32.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-32
+description: >
+ Object.defineProperty - 'enumerable' property in 'Attributes' is
+ an inherited accessor property without a get function (8.10.5 step
+ 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+var proto = {};
+
+Object.defineProperty(proto, "enumerable", {
+ set: function() {}
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+
+Object.defineProperty(obj, "property", child);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-33-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-33-1.js
new file mode 100644
index 0000000000..08b05b45b5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-33-1.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-33-1
+description: >
+ Object.defineProperty - 'Attributes' is a Function object which
+ implements its own [[Get]] method to access the 'enumerable'
+ property of prototype object (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Function.prototype.enumerable = true;
+var fun = function() {};
+
+Object.defineProperty(obj, "property", fun);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-33.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-33.js
new file mode 100644
index 0000000000..253bbd6fa8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-33.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-33
+description: >
+ Object.defineProperty - 'Attributes' is a Function object which
+ implements its own [[Get]] method to access the 'enumerable'
+ property (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+var fun = function() {};
+fun.enumerable = true;
+
+Object.defineProperty(obj, "property", fun);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-34-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-34-1.js
new file mode 100644
index 0000000000..02574877dd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-34-1.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-34-1
+description: >
+ Object.defineProperty - 'Attributes' is an Array object that uses
+ Object's [[Get]] method to access the 'enumerable' property of
+ prototype object (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Array.prototype.enumerable = true;
+var arrObj = [];
+
+Object.defineProperty(obj, "property", arrObj);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-34.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-34.js
new file mode 100644
index 0000000000..c3db1bb320
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-34.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-34
+description: >
+ Object.defineProperty - 'Attributes' is an Array object that uses
+ Object's [[Get]] method to access the 'enumerable' property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+var arrObj = [];
+arrObj.enumerable = true;
+
+Object.defineProperty(obj, "property", arrObj);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-35-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-35-1.js
new file mode 100644
index 0000000000..0319b48ac4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-35-1.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-35-1
+description: >
+ Object.defineProperty - 'Attributes' is a String object that uses
+ Object's [[Get]] method to access the 'enumerable' property of
+ prototype object (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+String.prototype.enumerable = true;
+var strObj = new String();
+
+Object.defineProperty(obj, "property", strObj);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-35.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-35.js
new file mode 100644
index 0000000000..2d4a51c83a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-35.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-35
+description: >
+ Object.defineProperty - 'Attributes' is a String object that uses
+ Object's [[Get]] method to access the 'enumerable' property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+var strObj = new String();
+strObj.enumerable = true;
+
+Object.defineProperty(obj, "property", strObj);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-36-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-36-1.js
new file mode 100644
index 0000000000..3d75971d5d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-36-1.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-36-1
+description: >
+ Object.defineProperty - 'Attributes' is a Boolean object that uses
+ Object's [[Get]] method to access the 'enumerable' property of
+ prototype object (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Boolean.prototype.enumerable = true;
+var boolObj = new Boolean(true);
+
+Object.defineProperty(obj, "property", boolObj);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-36.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-36.js
new file mode 100644
index 0000000000..1ac0a9a31b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-36.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-36
+description: >
+ Object.defineProperty - 'Attributes' is a Boolean object that uses
+ Object's [[Get]] method to access the 'enumerable' property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+var boolObj = new Boolean(true);
+boolObj.enumerable = true;
+
+Object.defineProperty(obj, "property", boolObj);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-37-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-37-1.js
new file mode 100644
index 0000000000..abd72173c0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-37-1.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-37-1
+description: >
+ Object.defineProperty - 'Attributes' is a Number object that uses
+ Object's [[Get]] method to access the 'enumerable' property of
+ prototype object (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Number.prototype.enumerable = true;
+var numObj = new Number(-2);
+
+Object.defineProperty(obj, "property", numObj);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-37.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-37.js
new file mode 100644
index 0000000000..8b781bf354
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-37.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-37
+description: >
+ Object.defineProperty - 'Attributes' is a Number object that uses
+ Object's [[Get]] method to access the 'enumerable' property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+var numObj = new Number(-2);
+numObj.enumerable = true;
+
+Object.defineProperty(obj, "property", numObj);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-38-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-38-1.js
new file mode 100644
index 0000000000..216e127165
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-38-1.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-38-1
+description: >
+ Object.defineProperty - 'Attributes' is the Math object that uses
+ Object's [[Get]] method to access the 'enumerable' property of
+ prototype object (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.prototype.enumerable = true;
+
+Object.defineProperty(obj, "property", Math);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-38.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-38.js
new file mode 100644
index 0000000000..fc7ca0931a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-38.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-38
+description: >
+ Object.defineProperty - 'Attributes' is the Math object that uses
+ Object's [[Get]] method to access the 'enumerable' property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Math.enumerable = true;
+
+Object.defineProperty(obj, "property", Math);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-39-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-39-1.js
new file mode 100644
index 0000000000..af264b53d2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-39-1.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-39-1
+description: >
+ Object.defineProperty - 'Attributes' is a Date object that uses
+ Object's [[Get]] method to access the 'enumerable' property of
+ prototype object (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Date.prototype.enumerable = true;
+var dateObj = new Date();
+
+Object.defineProperty(obj, "property", dateObj);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-39.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-39.js
new file mode 100644
index 0000000000..6dff863697
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-39.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-39
+description: >
+ Object.defineProperty - 'Attributes' is a Date object that uses
+ Object's [[Get]] method to access the 'enumerable' property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+var dateObj = new Date();
+dateObj.enumerable = true;
+
+Object.defineProperty(obj, "property", dateObj);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-4.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-4.js
new file mode 100644
index 0000000000..6094fafa1d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-4.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The abtract operation ToPropertyDescriptor is used to package the
+ into a property desc. Step 10 of ToPropertyDescriptor throws a TypeError
+ if the property desc ends up having a mix of accessor and data property elements.
+es5id: 15.2.3.6-3-4
+description: >
+ Object.defineProperty throws TypeError if desc has 'set' and
+ 'writable' present(8.10.5 step 9.a)
+---*/
+
+var o = {};
+
+// dummy getter
+var setter = function() {}
+var desc = {
+ set: setter,
+ writable: false
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(o, "foo", desc);
+});
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-40-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-40-1.js
new file mode 100644
index 0000000000..3825e62f47
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-40-1.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-40-1
+description: >
+ Object.defineProperty - 'Attributes' is an RegExp object that uses
+ Object's [[Get]] method to access the 'enumerable' property of
+ prototype object (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+RegExp.prototype.enumerable = true;
+var regObj = new RegExp();
+
+Object.defineProperty(obj, "property", regObj);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-40.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-40.js
new file mode 100644
index 0000000000..3f2272f1e6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-40.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-40
+description: >
+ Object.defineProperty - 'Attributes' is an RegExp object that uses
+ Object's [[Get]] method to access the 'enumerable' property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+var regObj = new RegExp();
+regObj.enumerable = true;
+
+Object.defineProperty(obj, "property", regObj);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-41-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-41-1.js
new file mode 100644
index 0000000000..92b5b52a77
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-41-1.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-41-1
+description: >
+ Object.defineProperty - 'Attributes' is the JSON object that uses
+ Object's [[Get]] method to access the 'enumerable' property of
+ prototype object (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.prototype.enumerable = true;
+
+Object.defineProperty(obj, "property", JSON);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-41.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-41.js
new file mode 100644
index 0000000000..64b6bdc293
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-41.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-41
+description: >
+ Object.defineProperty - 'Attributes' is the JSON object that uses
+ Object's [[Get]] method to access the 'enumerable' property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+JSON.enumerable = true;
+
+Object.defineProperty(obj, "property", JSON);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-42-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-42-1.js
new file mode 100644
index 0000000000..14fe43adf5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-42-1.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-42-1
+description: >
+ Object.defineProperty - 'Attributes' is an Error object that uses
+ Object's [[Get]] method to access the 'enumerable' property of
+ prototype object (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Error.prototype.enumerable = true;
+var errObj = new Error();
+
+Object.defineProperty(obj, "property", errObj);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-42.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-42.js
new file mode 100644
index 0000000000..f5781ac3e8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-42.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-42
+description: >
+ Object.defineProperty - 'Attributes' is an Error object that uses
+ Object's [[Get]] method to access the 'enumerable' property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+var errObj = new Error();
+errObj.enumerable = true;
+
+Object.defineProperty(obj, "property", errObj);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-43-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-43-1.js
new file mode 100644
index 0000000000..6e64e8f305
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-43-1.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-43-1
+description: >
+ Object.defineProperty - 'Attributes' is an Arguments object which
+ implements its own [[Get]] method to access the 'enumerable'
+ property of prototype object (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.prototype.enumerable = true;
+var argObj = (function() {
+ return arguments;
+})();
+
+Object.defineProperty(obj, "property", argObj);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-43.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-43.js
new file mode 100644
index 0000000000..a9b9271c3b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-43.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-43
+description: >
+ Object.defineProperty - 'Attributes' is an Arguments object which
+ implements its own [[Get]] method to access the 'enumerable'
+ property (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+var argObj = (function() {
+ return arguments;
+})();
+argObj.enumerable = true;
+
+Object.defineProperty(obj, "property", argObj);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-45.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-45.js
new file mode 100644
index 0000000000..ef414a936b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-45.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-45
+description: >
+ Object.defineProperty - 'Attributes' is the global object that
+ uses Object's [[Get]] method to access the 'enumerable' property
+ (8.10.5 step 3.a)
+---*/
+
+var obj = {};
+var accessed = false;
+
+this.enumerable = true;
+
+Object.defineProperty(obj, "property", this);
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-46.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-46.js
new file mode 100644
index 0000000000..60c0e62cbe
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-46.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-46
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is undefined (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: undefined
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-47.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-47.js
new file mode 100644
index 0000000000..7c91011d9d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-47.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-47
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is null (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: null
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-48.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-48.js
new file mode 100644
index 0000000000..f35549a3a0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-48.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-48
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is true (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: true
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-49.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-49.js
new file mode 100644
index 0000000000..0456d9e3d6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-49.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-49
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is false (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: false
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-5.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-5.js
new file mode 100644
index 0000000000..33c8ea9c23
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-5.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The abtract operation ToPropertyDescriptor is used to package the
+ into a property desc. Step 10 of ToPropertyDescriptor throws a TypeError
+ if the property desc ends up having a mix of accessor and data property elements.
+es5id: 15.2.3.6-3-5
+description: >
+ Object.defineProperty throws TypeError if getter is not callable
+ but not undefined (Number)(8.10.5 step 7.b)
+---*/
+
+var o = {};
+
+// dummy getter
+var getter = 42;
+var desc = {
+ get: getter
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(o, "foo", desc);
+});
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-50.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-50.js
new file mode 100644
index 0000000000..736d97a926
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-50.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-50
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is 0 (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: 0
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-51.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-51.js
new file mode 100644
index 0000000000..1c625e8fb6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-51.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-51
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is +0 (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: +0
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-52.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-52.js
new file mode 100644
index 0000000000..5ff4156232
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-52.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-52
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is -0 (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: -0
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-53.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-53.js
new file mode 100644
index 0000000000..e00a220d0a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-53.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-53
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is NaN (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: NaN
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-54.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-54.js
new file mode 100644
index 0000000000..088f3f85b7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-54.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-54
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is a positive number (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: 12
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-55.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-55.js
new file mode 100644
index 0000000000..4a34e236a4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-55.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-55
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is a negative number (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: -2
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-56.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-56.js
new file mode 100644
index 0000000000..a31c78e9df
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-56.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-56
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is an empty string (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: ""
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert.sameValue(accessed, false, 'accessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-57.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-57.js
new file mode 100644
index 0000000000..a23c65c9d9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-57.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-57
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is a non-empty string (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: "AB\n\\cd"
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-58.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-58.js
new file mode 100644
index 0000000000..e3cf96af5f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-58.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-58
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is a Function object (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: function() {}
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-59.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-59.js
new file mode 100644
index 0000000000..4fff4bae8f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-59.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-59
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is an Array object (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: []
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-6.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-6.js
new file mode 100644
index 0000000000..dc5da2297a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-6.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The abtract operation ToPropertyDescriptor is used to package the
+ into a property desc. Step 10 of ToPropertyDescriptor throws a TypeError
+ if the property desc ends up having a mix of accessor and data property elements.
+es5id: 15.2.3.6-3-6
+description: >
+ Object.defineProperty throws TypeError if getter is not callable
+ but not undefined (Boolean)(8.10.5 step 7.b)
+---*/
+
+var o = {};
+
+// dummy getter
+var getter = true;
+var desc = {
+ get: getter
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(o, "foo", desc);
+});
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-60.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-60.js
new file mode 100644
index 0000000000..caf4c81fea
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-60.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-60
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is a String Object (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: new String()
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-61.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-61.js
new file mode 100644
index 0000000000..182996fca8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-61.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-61
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is a Boolean Object (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: new Boolean()
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-62.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-62.js
new file mode 100644
index 0000000000..6c21bd9bff
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-62.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-62
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is a Number Object (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: new Number()
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-63.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-63.js
new file mode 100644
index 0000000000..95c7bdf415
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-63.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-63
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is the Math Object (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: Math
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-64.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-64.js
new file mode 100644
index 0000000000..12fbea3f87
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-64.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-64
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is a Date Object (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: new Date()
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-65.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-65.js
new file mode 100644
index 0000000000..169cd7a1ca
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-65.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-65
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is a RegExp Object (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: new RegExp()
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-66.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-66.js
new file mode 100644
index 0000000000..2da5cc0042
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-66.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-66
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is the JSON Object (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: JSON
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-67.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-67.js
new file mode 100644
index 0000000000..e544a3e756
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-67.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-67
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is an Error Object (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: new Error()
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-68.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-68.js
new file mode 100644
index 0000000000..37721703e3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-68.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-68
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is an Arguments Object (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+var argObj = (function() {
+ return arguments;
+})(0, 1, 2);
+
+Object.defineProperty(obj, "property", {
+ enumerable: argObj
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-7.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-7.js
new file mode 100644
index 0000000000..22b52bdb59
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-7.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The abtract operation ToPropertyDescriptor is used to package the
+ into a property desc. Step 10 of ToPropertyDescriptor throws a TypeError
+ if the property desc ends up having a mix of accessor and data property elements.
+es5id: 15.2.3.6-3-7
+description: >
+ Object.defineProperty throws TypeError if getter is not callable
+ but not undefined (String)(8.10.5 step 7.b)
+---*/
+
+var o = {};
+
+// dummy getter
+var getter = "abc";
+var desc = {
+ get: getter
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(o, "foo", desc);
+});
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-70.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-70.js
new file mode 100644
index 0000000000..f2f6860918
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-70.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-70
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is the global object (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: this
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-71.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-71.js
new file mode 100644
index 0000000000..26c910d1c8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-71.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-71
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is treated as true when it is a string (value is
+ 'false') (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: "false"
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-72.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-72.js
new file mode 100644
index 0000000000..35004b426f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-72.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-72
+description: >
+ Object.defineProperty - value of 'enumerable' property in
+ 'Attributes' is new Boolean(false) which is treated as true value
+ (8.10.5 step 3.b)
+---*/
+
+var obj = {};
+var accessed = false;
+
+Object.defineProperty(obj, "property", {
+ enumerable: new Boolean(false)
+});
+
+for (var prop in obj) {
+ if (prop === "property") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-73.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-73.js
new file mode 100644
index 0000000000..965fa44537
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-73.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-73
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ present (8.10.5 step 4)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ configurable: false
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-74.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-74.js
new file mode 100644
index 0000000000..443d61a4a7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-74.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-74
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ not present (8.10.5 step 4)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ value: 100
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-75.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-75.js
new file mode 100644
index 0000000000..30c5d53090
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-75.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-75
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ own data property (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ configurable: true
+});
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-76.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-76.js
new file mode 100644
index 0000000000..076c86ede5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-76.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-76
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ an inherited data property (8.10.5 step 4.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var proto = {
+ configurable: false
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+
+Object.defineProperty(obj, "property", child);
+
+assert(obj.hasOwnProperty("property"));
+
+verifyNotConfigurable(obj, "property");
+
+assert(obj.hasOwnProperty("property"));
+
+assert.sameValue(typeof(obj.property), "undefined");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-77.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-77.js
new file mode 100644
index 0000000000..d5b38d7c0d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-77.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-77
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ own data property that overrides an inherited data property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+var proto = {
+ configurable: false
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+child.configurable = true;
+
+Object.defineProperty(obj, "property", child);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-78.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-78.js
new file mode 100644
index 0000000000..d61327b686
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-78.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-78
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ own data property that overrides an inherited accessor property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+var proto = {};
+
+Object.defineProperty(proto, "configurable", {
+ get: function() {
+ return false;
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "configurable", {
+ value: true
+});
+
+Object.defineProperty(obj, "property", child);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-79.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-79.js
new file mode 100644
index 0000000000..962fd06375
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-79.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-79
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ own accessor property (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+var attr = {};
+Object.defineProperty(attr, "configurable", {
+ get: function() {
+ return true;
+ }
+});
+
+Object.defineProperty(obj, "property", attr);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-8.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-8.js
new file mode 100644
index 0000000000..65baf21693
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-8.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The abtract operation ToPropertyDescriptor is used to package the
+ into a property desc. Step 10 of ToPropertyDescriptor throws a TypeError
+ if the property desc ends up having a mix of accessor and data property elements.
+es5id: 15.2.3.6-3-8
+description: >
+ Object.defineProperty throws TypeError if getter is not callable
+ but not undefined (Null)(8.10.5 step 7.b)
+---*/
+
+var o = {};
+
+// dummy getter
+var getter = null;
+var desc = {
+ get: getter
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(o, "foo", desc);
+});
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-80.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-80.js
new file mode 100644
index 0000000000..a15e67824a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-80.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-80
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ an inherited accessor property (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+var proto = {};
+Object.defineProperty(proto, "configurable", {
+ get: function() {
+ return true;
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+
+Object.defineProperty(obj, "property", child);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-81.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-81.js
new file mode 100644
index 0000000000..7ce29be186
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-81.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-81
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ own accessor property that overrides an inherited data property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+var proto = {
+ configurable: false
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "configurable", {
+ get: function() {
+ return true;
+ }
+});
+
+Object.defineProperty(obj, "property", child);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-82.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-82.js
new file mode 100644
index 0000000000..de771e073a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-82.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-82
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ own accessor property that overrides an inherited accessor
+ property (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+var proto = {};
+Object.defineProperty(proto, "configurable", {
+ get: function() {
+ return false;
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "configurable", {
+ get: function() {
+ return true;
+ }
+});
+
+Object.defineProperty(obj, "property", child);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-83.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-83.js
new file mode 100644
index 0000000000..1ab0672165
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-83.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-83
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ own accessor property without a get function (8.10.5 step 4.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var attr = {};
+Object.defineProperty(attr, "configurable", {
+ set: function() {}
+});
+
+Object.defineProperty(obj, "property", attr);
+
+assert(obj.hasOwnProperty("property"));
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-84.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-84.js
new file mode 100644
index 0000000000..2361aa0708
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-84.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-84
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ own accessor property(without a get function) that overrides an
+ inherited accessor property (8.10.5 step 4.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var proto = {};
+Object.defineProperty(proto, "configurable", {
+ get: function() {
+ return true;
+ }
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+Object.defineProperty(child, "configurable", {
+ set: function() {}
+});
+
+Object.defineProperty(obj, "property", child);
+
+assert(obj.hasOwnProperty("property"));
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-85.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-85.js
new file mode 100644
index 0000000000..0b0868625f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-85.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-85
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ an inherited accessor property without a get function (8.10.5 step
+ 4.a)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var proto = {};
+Object.defineProperty(proto, "configurable", {
+ set: function() {}
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+
+Object.defineProperty(obj, "property", child);
+
+assert(obj.hasOwnProperty("property"));
+
+verifyNotConfigurable(obj, "property");
+
+assert(obj.hasOwnProperty("property"));
+assert.sameValue(typeof(obj.property), "undefined");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-86-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-86-1.js
new file mode 100644
index 0000000000..2024068458
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-86-1.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-86-1
+description: >
+ Object.defineProperty - 'Attributes' is a Function object which
+ implements its own [[Get]] method to access the 'configurable'
+ property of prototype object (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+Function.prototype.configurable = true;
+var funObj = function(a, b) {
+ return a + b;
+};
+
+Object.defineProperty(obj, "property", funObj);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-86.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-86.js
new file mode 100644
index 0000000000..512a37fafa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-86.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-86
+description: >
+ Object.defineProperty - 'Attributes' is a Function object which
+ implements its own [[Get]] method to access the 'configurable'
+ property (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+var funObj = function(a, b) {
+ return a + b;
+};
+
+funObj.configurable = true;
+
+Object.defineProperty(obj, "property", funObj);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-87-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-87-1.js
new file mode 100644
index 0000000000..6bbf484f20
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-87-1.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-87-1
+description: >
+ Object.defineProperty - 'Attributes' is an Array object that uses
+ Object's [[Get]] method to access the 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+Array.prototype.configurable = true;
+var arrObj = [1, 2, 3];
+
+Object.defineProperty(obj, "property", arrObj);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-87.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-87.js
new file mode 100644
index 0000000000..0462349a5d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-87.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-87
+description: >
+ Object.defineProperty - 'Attributes' is an Array object that uses
+ Object's [[Get]] method to access the 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+var arrObj = [1, 2, 3];
+
+arrObj.configurable = true;
+
+Object.defineProperty(obj, "property", arrObj);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-88-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-88-1.js
new file mode 100644
index 0000000000..005a7544ed
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-88-1.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-88-1
+description: >
+ Object.defineProperty - 'Attributes' is a String object that uses
+ Object's [[Get]] method to access the 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+String.prototype.configurable = true;
+var strObj = new String("abc");
+
+Object.defineProperty(obj, "property", strObj);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-88.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-88.js
new file mode 100644
index 0000000000..cfef428e43
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-88.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-88
+description: >
+ Object.defineProperty - 'Attributes' is a String object that uses
+ Object's [[Get]] method to access the 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+var strObj = new String("abc");
+
+strObj.configurable = true;
+
+Object.defineProperty(obj, "property", strObj);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-89-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-89-1.js
new file mode 100644
index 0000000000..a2e0e0af99
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-89-1.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-89-1
+description: >
+ Object.defineProperty - 'Attributes' is a Boolean object that uses
+ Object's [[Get]] method to access the 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+Boolean.prototype.configurable = true;
+var boolObj = new Boolean(true);
+
+Object.defineProperty(obj, "property", boolObj);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-89.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-89.js
new file mode 100644
index 0000000000..44df1b6e3c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-89.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-89
+description: >
+ Object.defineProperty - 'Attributes' is a Boolean object that uses
+ Object's [[Get]] method to access the 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+var boolObj = new Boolean(true);
+
+boolObj.configurable = true;
+
+Object.defineProperty(obj, "property", boolObj);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-9.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-9.js
new file mode 100644
index 0000000000..5a9310275b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-9.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The abtract operation ToPropertyDescriptor is used to package the
+ into a property desc. Step 10 of ToPropertyDescriptor throws a TypeError
+ if the property desc ends up having a mix of accessor and data property elements.
+es5id: 15.2.3.6-3-9
+description: >
+ Object.defineProperty throws TypeError if getter is not callable
+ but not undefined (Object)(8.10.5 step 7.b)
+---*/
+
+var o = {};
+
+// dummy getter
+var getter = {
+ a: 1
+};
+var desc = {
+ get: getter
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(o, "foo", desc);
+});
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-90-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-90-1.js
new file mode 100644
index 0000000000..6079a53c82
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-90-1.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-90-1
+description: >
+ Object.defineProperty - 'Attributes' is a Number object that uses
+ Object's [[Get]] method to access the 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+Number.prototype.configurable = true;
+var numObj = new Number(-2);
+
+Object.defineProperty(obj, "property", numObj);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-90.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-90.js
new file mode 100644
index 0000000000..d684335835
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-90.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-90
+description: >
+ Object.defineProperty - 'Attributes' is a Number object that uses
+ Object's [[Get]] method to access the 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+var numObj = new Number(-2);
+
+numObj.configurable = true;
+
+Object.defineProperty(obj, "property", numObj);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-91-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-91-1.js
new file mode 100644
index 0000000000..567248b150
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-91-1.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-91-1
+description: >
+ Object.defineProperty - 'Attributes' is the Math object that uses
+ Object's [[Get]] method to access the 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+Object.prototype.configurable = true;
+
+Object.defineProperty(obj, "property", Math);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-91.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-91.js
new file mode 100644
index 0000000000..302774537c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-91.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-91
+description: >
+ Object.defineProperty - 'Attributes' is the Math object that uses
+ Object's [[Get]] method to access the 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+Math.configurable = true;
+
+Object.defineProperty(obj, "property", Math);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-92-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-92-1.js
new file mode 100644
index 0000000000..7bb3580ce5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-92-1.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-92-1
+description: >
+ Object.defineProperty - 'Attributes' is a Date object that uses
+ Object's [[Get]] method to access the 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+Date.prototype.configurable = true;
+var dateObj = new Date();
+
+Object.defineProperty(obj, "property", dateObj);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-92.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-92.js
new file mode 100644
index 0000000000..cd9bf29b9e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-92.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-92
+description: >
+ Object.defineProperty - 'Attributes' is a Date object that uses
+ Object's [[Get]] method to access the 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+var dateObj = new Date();
+
+dateObj.configurable = true;
+
+Object.defineProperty(obj, "property", dateObj);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-93-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-93-1.js
new file mode 100644
index 0000000000..f5736ccaa5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-93-1.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-93-1
+description: >
+ Object.defineProperty - 'Attributes' is an RegExp object that uses
+ Object's [[Get]] method to access the 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+RegExp.prototype.configurable = true;
+var regObj = new RegExp();
+
+Object.defineProperty(obj, "property", regObj);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-93.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-93.js
new file mode 100644
index 0000000000..595a3b6857
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-93.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-93
+description: >
+ Object.defineProperty - 'Attributes' is an RegExp object that uses
+ Object's [[Get]] method to access the 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+var regObj = new RegExp();
+
+regObj.configurable = true;
+
+Object.defineProperty(obj, "property", regObj);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-94-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-94-1.js
new file mode 100644
index 0000000000..d0b6c4dadf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-94-1.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-94-1
+description: >
+ Object.defineProperty - 'Attributes' is the JSON object that uses
+ Object's [[Get]] method to access the 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+Object.prototype.configurable = true;
+
+Object.defineProperty(obj, "property", JSON);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-94.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-94.js
new file mode 100644
index 0000000000..f5b58f85f3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-94.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-94
+description: >
+ Object.defineProperty - 'Attributes' is the JSON object that uses
+ Object's [[Get]] method to access the 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+JSON.configurable = true;
+
+Object.defineProperty(obj, "property", JSON);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-95-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-95-1.js
new file mode 100644
index 0000000000..2a06a28507
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-95-1.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-95-1
+description: >
+ Object.defineProperty - 'Attributes' is an Error object that uses
+ Object's [[Get]] method to access the 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+Error.prototype.configurable = true;
+var errObj = new Error();
+
+Object.defineProperty(obj, "property", errObj);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-95.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-95.js
new file mode 100644
index 0000000000..b17895a478
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-95.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-95
+description: >
+ Object.defineProperty - 'Attributes' is an Error object that uses
+ Object's [[Get]] method to access the 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+var errObj = new Error();
+
+errObj.configurable = true;
+
+Object.defineProperty(obj, "property", errObj);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-96-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-96-1.js
new file mode 100644
index 0000000000..29f10ca5cc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-96-1.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-96-1
+description: >
+ Object.defineProperty - 'Attributes' is an Arguments object which
+ implements its own [[Get]] method to access the 'configurable'
+ property (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+Object.prototype.configurable = true;
+var argObj = (function() {
+ return arguments;
+})();
+
+Object.defineProperty(obj, "property", argObj);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-96.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-96.js
new file mode 100644
index 0000000000..8c54cf0175
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-96.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-96
+description: >
+ Object.defineProperty - 'Attributes' is an Arguments object which
+ implements its own [[Get]] method to access the 'configurable'
+ property (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+var argObj = (function() {
+ return arguments;
+})();
+argObj.configurable = true;
+
+Object.defineProperty(obj, "property", argObj);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-98.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-98.js
new file mode 100644
index 0000000000..5079bbd85b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-98.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-98
+description: >
+ Object.defineProperty - 'Attributes' is the global object that
+ uses Object's [[Get]] method to access the 'configurable' property
+ (8.10.5 step 4.a)
+---*/
+
+var obj = {};
+
+this.configurable = true;
+
+Object.defineProperty(obj, "property", this);
+
+var beforeDeleted = obj.hasOwnProperty("property");
+
+delete obj.property;
+
+var afterDeleted = obj.hasOwnProperty("property");
+
+assert.sameValue(beforeDeleted, true, 'beforeDeleted');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-99.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-99.js
new file mode 100644
index 0000000000..aabe445bef
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-3-99.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-3-99
+description: >
+ Object.defineProperty - 'configurable' property in 'Attributes' is
+ undefined (8.10.5 step 4.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ configurable: undefined
+});
+
+assert(obj.hasOwnProperty("property"));
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-1.js
new file mode 100644
index 0000000000..2ec7824d67
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-1.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Step 4 of defineProperty calls the [[DefineOwnProperty]] internal method
+ of O passing 'true' for the Throw flag. In this case, step 3 of
+ [[DefineOwnProperty]] requires that it throw a TypeError exception when
+ current is undefined and extensible is false. The value of desc does not
+ matter.
+es5id: 15.2.3.6-4-1
+description: >
+ Object.defineProperty throws TypeError when adding properties to
+ non-extensible objects(8.12.9 step 3)
+---*/
+
+var o = {};
+Object.preventExtensions(o);
+assert.throws(TypeError, function() {
+ var desc = {
+ value: 1
+ };
+ Object.defineProperty(o, "foo", desc);
+});
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-10.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-10.js
new file mode 100644
index 0000000000..732b55062c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-10.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Step 4 of defineProperty calls the [[DefineOwnProperty]] internal method
+ of O to define the property. Step 7b of [[DefineOwnProperty]] rejects if
+ current.[[Enumerable]] and desc.[[Enumerable]] are the boolean negations
+ of each other.
+es5id: 15.2.3.6-4-10
+description: >
+ Object.defineProperty throws TypeError when changing
+ [[Enumerable]] from false to true on non-configurable accessor
+ properties
+---*/
+
+var o = {};
+
+// create an accessor property; all other attributes default to false.
+// dummy getter
+var getter = function() {
+ return 1;
+}
+var d1 = {
+ get: getter,
+ enumerable: false,
+ configurable: false
+};
+Object.defineProperty(o, "foo", d1);
+
+// now, setting enumerable to true should fail, since [[Configurable]]
+// on the original property will be false.
+var desc = {
+ get: getter,
+ enumerable: true
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(o, "foo", desc);
+});
+// the property should remain unchanged.
+var d2 = Object.getOwnPropertyDescriptor(o, "foo");
+assert.sameValue(d2.get, getter, 'd2.get');
+assert.sameValue(d2.enumerable, false, 'd2.enumerable');
+assert.sameValue(d2.configurable, false, 'd2.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-100.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-100.js
new file mode 100644
index 0000000000..34c2f090cd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-100.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-101.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-101.js
new file mode 100644
index 0000000000..1da7826cf5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-101.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-102.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-102.js
new file mode 100644
index 0000000000..33d84c9f53
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-102.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-103.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-103.js
new file mode 100644
index 0000000000..b98b2837f7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-103.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-103
+description: >
+ Object.defineProperty - 'name' and 'desc' are data properties,
+ name.writable and desc.writable are different values (8.12.9 step
+ 12)
+includes: [propertyHelper.js]
+---*/
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-104.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-104.js
new file mode 100644
index 0000000000..28de47218b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-104.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-104
+description: >
+ Object.defineProperty - 'name' and 'desc' are data properties,
+ name.enumerable and desc.enumerable are different values (8.12.9
+ step 12)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-105.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-105.js
new file mode 100644
index 0000000000..d1c51afdd3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-105.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-105
+description: >
+ Object.defineProperty - 'name' and 'desc' are data properties,
+ name.configurable = true and desc.configurable = false (8.12.9
+ step 12)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-106.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-106.js
new file mode 100644
index 0000000000..9d726fe9c3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-106.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-106
+description: >
+ Object.defineProperty - 'name' and 'desc' are data properties,
+ several attributes values of name and desc are different (8.12.9
+ step 12)
+includes: [propertyHelper.js]
+---*/
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-107.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-107.js
new file mode 100644
index 0000000000..949c297366
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-107.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-107
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function getFunc() {
+ return 10;
+}
+
+function setFunc(value) {
+ obj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(obj, "foo", {
+ get: getFunc,
+ set: setFunc,
+ configurable: true
+});
+
+function getFunc2() {
+ return 20;
+}
+
+Object.defineProperty(obj, "foo", {
+ get: getFunc2
+});
+verifyEqualTo(obj, "foo", getFunc2());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-108.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-108.js
new file mode 100644
index 0000000000..c9f5864973
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-108.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-108
+description: >
+ Object.defineProperty - 'name' and 'desc' are accessor
+ properties, name.[[Get]] is present and desc.[[Get]] is undefined
+ (8.12.9 step 12)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function getFunc() {
+ return 10;
+}
+
+function setFunc(value) {
+ obj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(obj, "foo", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: true,
+ configurable: true
+});
+
+Object.defineProperty(obj, "foo", {
+ set: setFunc,
+ get: undefined
+});
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-109.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-109.js
new file mode 100644
index 0000000000..8093ffd718
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-109.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-109
+description: >
+ Object.defineProperty - 'name' and 'desc' are accessor properties,
+ name.[[Get]] is undefined and desc.[[Get]] is function (8.12.9
+ step 12)
+includes: [propertyHelper.js]
+---*/
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-11.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-11.js
new file mode 100644
index 0000000000..e1eb427683
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-11.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Step 4 of defineProperty calls the [[DefineOwnProperty]] internal method
+ of O to define the property. Step 7b of [[DefineOwnProperty]] rejects if
+ current.[[Enumerable]] and desc.[[Enumerable]] are the boolean negations
+ of each other.
+es5id: 15.2.3.6-4-11
+description: >
+ Object.defineProperty throws TypeError when changing
+ [[Enumerable]] from true to false on non-configurable accessor
+ properties
+---*/
+
+var o = {};
+
+// create an accessor property; all other attributes default to false.
+// dummy getter
+var getter = function() {
+ return 1;
+}
+var d1 = {
+ get: getter,
+ enumerable: true,
+ configurable: false
+};
+Object.defineProperty(o, "foo", d1);
+
+// now, setting enumerable to true should fail, since [[Configurable]]
+// on the original property will be false.
+var desc = {
+ get: getter,
+ enumerable: false
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(o, "foo", desc);
+});
+// the property should remain unchanged.
+var d2 = Object.getOwnPropertyDescriptor(o, "foo");
+assert.sameValue(d2.get, getter, 'd2.get');
+assert.sameValue(d2.enumerable, true, 'd2.enumerable');
+assert.sameValue(d2.configurable, false, 'd2.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-110.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-110.js
new file mode 100644
index 0000000000..c94fbc8af0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-110.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-110
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function setFunc1() {
+ return 10;
+}
+
+Object.defineProperty(obj, "foo", {
+ set: setFunc1,
+ enumerable: true,
+ configurable: true
+});
+
+function setFunc2(value) {
+ obj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(obj, "foo", {
+ set: setFunc2
+});
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-111.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-111.js
new file mode 100644
index 0000000000..80b0489702
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-111.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-111
+description: >
+ Object.defineProperty - 'name' and 'desc' are accessor
+ properties, name.[[Set]] is present and desc.[[Set]] is undefined
+ (8.12.9 step 12)
+---*/
+
+var obj = {};
+
+function getFunc() {
+ return 10;
+}
+
+function setFunc(value) {
+ obj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(obj, "foo", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: true,
+ configurable: true
+});
+
+Object.defineProperty(obj, "foo", {
+ set: undefined,
+ get: getFunc
+});
+
+
+var desc = Object.getOwnPropertyDescriptor(obj, "foo");
+
+assert(obj.hasOwnProperty("foo"), 'obj.hasOwnProperty("foo") !== true');
+assert.sameValue(typeof(desc.set), "undefined", 'typeof (desc.set)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-112.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-112.js
new file mode 100644
index 0000000000..4a80f6b084
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-112.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-112
+description: >
+ Object.defineProperty - 'name' and 'desc' are accessor properties,
+ name.[[Set]] is undefined and desc.[[Set]] is function (8.12.9
+ step 12)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function getFunc() {
+ return 10;
+}
+
+Object.defineProperty(obj, "foo", {
+ set: undefined,
+ get: getFunc,
+ enumerable: true,
+ configurable: true
+});
+
+function setFunc(value) {
+ obj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(obj, "foo", {
+ set: setFunc
+});
+verifyEqualTo(obj, "foo", getFunc());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-113.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-113.js
new file mode 100644
index 0000000000..48e4fa7f6d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-113.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-113
+description: >
+ Object.defineProperty - 'name' and 'desc' are accessor properties,
+ name.enumerable and desc.enumerable are different values (8.12.9
+ step 12)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function getFunc() {
+ return 10;
+}
+
+Object.defineProperty(obj, "foo", {
+ get: getFunc,
+ enumerable: true,
+ configurable: true
+});
+
+Object.defineProperty(obj, "foo", {
+ get: getFunc,
+ enumerable: false
+});
+
+verifyEqualTo(obj, "foo", getFunc());
+
+verifyNotEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-114.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-114.js
new file mode 100644
index 0000000000..a0a8bc367d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-114.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-114
+description: >
+ Object.defineProperty - 'name' and 'desc' are accessor properties,
+ name.configurable = true and desc.configurable = false (8.12.9
+ step 12)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function setFunc(value) {
+ obj.setVerifyHelpProp = value;
+}
+
+function getFunc() {
+ return 10;
+}
+
+Object.defineProperty(obj, "foo", {
+ get: getFunc,
+ set: setFunc,
+ configurable: true
+});
+
+Object.defineProperty(obj, "foo", {
+ get: getFunc,
+ configurable: false
+});
+verifyEqualTo(obj, "foo", getFunc());
+
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-115.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-115.js
new file mode 100644
index 0000000000..5481206420
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-115.js
@@ -0,0 +1,49 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-115
+description: >
+ Object.defineProperty - 'name' and 'desc' are accessor properties,
+ several attributes values of 'name' and 'desc' are different
+ (8.12.9 step 12)
+includes: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-116.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-116.js
new file mode 100644
index 0000000000..d3ef817243
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-116.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-116
+description: >
+ Object.defineProperty - 'O' is an Array, test the length property
+ of 'O' is own data property (15.4.5.1 step 1)
+includes: [propertyHelper.js]
+---*/
+
+var arrObj = [0, 1];
+Object.defineProperty(arrObj, "1", {
+ value: 1,
+ configurable: false
+});
+
+assert.throws(TypeError, function() {
+ Object.defineProperty(arrObj, "length", {
+ value: 1
+ });
+});
+
+verifyProperty(arrObj, "length", {
+ value: 2,
+ writable: true,
+ configurable: false,
+ enumerable: false,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-117.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-117.js
new file mode 100644
index 0000000000..96989d3052
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-117.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-117
+description: >
+ Object.defineProperty - 'O' is an Array, test the length property
+ of 'O' is own data property that overrides an inherited data
+ property (15.4.5.1 step 1)
+---*/
+
+var arrObj = [0, 1, 2];
+var arrProtoLen;
+
+assert.throws(TypeError, function() {
+ arrProtoLen = Array.prototype.length;
+ Array.prototype.length = 0;
+
+
+ Object.defineProperty(arrObj, "2", {
+ configurable: false
+ });
+
+ Object.defineProperty(arrObj, "length", {
+ value: 1
+ });
+});
+assert.sameValue(arrObj.length, 3, 'arrObj.length');
+assert.sameValue(Array.prototype.length, 0, 'Array.prototype.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-118.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-118.js
new file mode 100644
index 0000000000..47a6508761
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-118.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-118
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' 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 arrObj = [];
+
+Object.defineProperty(arrObj, "length", {});
+
+assert.sameValue(arrObj.length, 0);
+arrObj.length = 2;
+assert.sameValue(arrObj.length, 2);
+verifyNotEnumerable(arrObj, "length");
+verifyNotConfigurable(arrObj, "length");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-119.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-119.js
new file mode 100644
index 0000000000..0c07b625e0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-119.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-119
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', the [[Value]] field of 'desc' is absent, test
+ every field in 'desc' is same with corresponding attribute value
+ of the length property in 'O' (15.4.5.1 step 3.a.i)
+includes: [propertyHelper.js]
+---*/
+
+
+var arrObj = [];
+Object.defineProperty(arrObj, "length", {
+ writable: true,
+ enumerable: false,
+ configurable: false
+});
+
+assert.sameValue(arrObj.length, 0);
+arrObj.length = 2;
+assert.sameValue(arrObj.length, 2);
+verifyNotEnumerable(arrObj, "length");
+verifyNotConfigurable(arrObj, "length");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-12.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-12.js
new file mode 100644
index 0000000000..b823076eda
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-12.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Step 4 of defineProperty calls the [[DefineOwnProperty]] internal method
+ of O to define the property. For non-configurable properties, step 9a of
+ [[DefineOwnProperty]] rejects changing the kind of a property.
+es5id: 15.2.3.6-4-12
+description: >
+ Object.defineProperty throws TypeError when changing
+ non-configurable data properties to accessor properties
+---*/
+
+var o = {};
+
+// create a data valued property; all other attributes default to false.
+var d1 = {
+ value: 101,
+ configurable: false
+};
+Object.defineProperty(o, "foo", d1);
+
+// changing "foo" to be an accessor should fail, since [[Configurable]]
+// on the original property will be false.
+
+// dummy getter
+var getter = function() {
+ return 1;
+}
+
+var desc = {
+ get: getter
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(o, "foo", desc);
+});
+// the property should remain a data valued property.
+var d2 = Object.getOwnPropertyDescriptor(o, "foo");
+assert.sameValue(d2.value, 101, 'd2.value');
+assert.sameValue(d2.writable, false, 'd2.writable');
+assert.sameValue(d2.enumerable, false, 'd2.enumerable');
+assert.sameValue(d2.configurable, false, 'd2.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-120.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-120.js
new file mode 100644
index 0000000000..b346edeaa2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-120.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-120
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', the [[Value]] field of 'desc' is absent, test
+ TypeError is thrown when updating the [[Configurable]] attribute
+ of the length property from false to true (15.4.5.1 step 3.a.i)
+---*/
+
+var arrObj = [];
+assert.throws(TypeError, function() {
+ Object.defineProperty(arrObj, "length", {
+ configurable: true
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-121.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-121.js
new file mode 100644
index 0000000000..89ecc7b1d4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-121.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-121
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', the [[Value]] field of 'desc' is absent, test
+ TypeError is thrown when updating the [[Enumerable]] attribute of
+ the length property from false to true (15.4.5.1 step 3.a.i)
+---*/
+
+var arrObj = [];
+assert.throws(TypeError, function() {
+ Object.defineProperty(arrObj, "length", {
+ enumerable: true
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-122.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-122.js
new file mode 100644
index 0000000000..e8ee0f856f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-122.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-122
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test TypeError is thrown when 'desc' is accessor
+ descriptor (15.4.5.1 step 3.a.i)
+---*/
+
+var arrObj = [];
+assert.throws(TypeError, function() {
+ Object.defineProperty(arrObj, "length", {
+ get: function() {
+ return 2;
+ }
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-123.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-123.js
new file mode 100644
index 0000000000..019be751a0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-123.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-123
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', the [[Value]] field of 'desc' is absent, test
+ TypeError is thrown when updating the [[Writable]] attribute of
+ the length property from false to true (15.4.5.1 step 3.a.i)
+---*/
+
+var arrObj = [];
+assert.throws(TypeError, function() {
+ Object.defineProperty(arrObj, "length", {
+ writable: false
+ });
+ Object.defineProperty(arrObj, "length", {
+ writable: true
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-124.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-124.js
new file mode 100644
index 0000000000..1dce4ea87c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-124.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-124
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', the [[Value]] field of 'desc' is absent, test
+ updating the [[Writable]] attribute of the length property from
+ true to false (15.4.5.1 step 3.a.i)
+includes: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "length", {
+ writable: false
+});
+verifyEqualTo(arrObj, "length", 0);
+
+verifyNotWritable(arrObj, "length");
+
+verifyNotEnumerable(arrObj, "length");
+
+verifyNotConfigurable(arrObj, "length");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-125.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-125.js
new file mode 100644
index 0000000000..04afc2ed1a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-125.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-125
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test that RangeError exception is thrown when
+ [[Value]] field of 'desc' is undefined (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [];
+assert.throws(RangeError, function() {
+ Object.defineProperty(arrObj, "length", {
+ value: undefined
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-126.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-126.js
new file mode 100644
index 0000000000..37e3e1fccd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-126.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-126
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is null
+ (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [0, 1];
+
+Object.defineProperty(arrObj, "length", {
+ value: null
+});
+
+assert.sameValue(arrObj.length, 0, 'arrObj.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-127.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-127.js
new file mode 100644
index 0000000000..5fe718c75d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-127.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-127
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is a boolean
+ with value false (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [0, 1];
+
+Object.defineProperty(arrObj, "length", {
+ value: false
+});
+
+assert.sameValue(arrObj.length, 0, 'arrObj.length');
+assert.sameValue(arrObj.hasOwnProperty("0"), false, 'arrObj.hasOwnProperty("0")');
+assert.sameValue(arrObj.hasOwnProperty("1"), false, 'arrObj.hasOwnProperty("1")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-128.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-128.js
new file mode 100644
index 0000000000..2a97e81a32
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-128.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-128
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is a boolean
+ with value true (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "length", {
+ value: true
+});
+
+assert.sameValue(arrObj.length, 1, 'arrObj.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-129.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-129.js
new file mode 100644
index 0000000000..d98863c616
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-129.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-129
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test RangeError exception is not thrown when the
+ [[Value]] field of 'desc' is 0 (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [0, 1];
+
+Object.defineProperty(arrObj, "length", {
+ value: 0
+});
+
+assert.sameValue(arrObj.length, 0, 'arrObj.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-13.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-13.js
new file mode 100644
index 0000000000..8be4d52236
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-13.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Step 4 of defineProperty calls the [[DefineOwnProperty]] internal method
+ of O to define the property. For non-configurable properties, step 9a of
+ [[DefineOwnProperty]] rejects changing the kind of a property.
+es5id: 15.2.3.6-4-13
+description: >
+ Object.defineProperty throws TypeError when changing
+ non-configurable accessor properties to data properties
+---*/
+
+var o = {};
+
+// create an accessor property; all other attributes default to false.
+
+// dummy getter
+var getter = function() {
+ return 1;
+}
+var d1 = {
+ get: getter,
+ configurable: false
+};
+Object.defineProperty(o, "foo", d1);
+
+// changing "foo" to be a data property should fail, since [[Configurable]]
+// on the original property will be false.
+var desc = {
+ value: 101
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(o, "foo", desc);
+});
+// the property should remain an accessor property.
+var d2 = Object.getOwnPropertyDescriptor(o, "foo");
+assert.sameValue(d2.get, getter, 'd2.get');
+assert.sameValue(d2.configurable, false, 'd2.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-130.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-130.js
new file mode 100644
index 0000000000..7591d9c343
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-130.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-130
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test RangeError exception is not thrown when the
+ [[Value]] field of 'desc' is +0 (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [0, 1];
+
+Object.defineProperty(arrObj, "length", {
+ value: +0
+});
+
+assert.sameValue(arrObj.length, 0, 'arrObj.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-131.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-131.js
new file mode 100644
index 0000000000..7c81479205
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-131.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-131
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test RangeError exception is not thrown when the
+ [[Value]] field of 'desc' is -0 (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [0, 1];
+
+Object.defineProperty(arrObj, "length", {
+ value: -0
+});
+
+assert.sameValue(arrObj.length, 0, 'arrObj.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-132.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-132.js
new file mode 100644
index 0000000000..517fda892f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-132.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-132
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test RangeError exception is not thrown when the
+ [[Value]] field of 'desc' is a positive number (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "length", {
+ value: 12
+});
+
+assert.sameValue(arrObj.length, 12, 'arrObj.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-133.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-133.js
new file mode 100644
index 0000000000..047b6aaec3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-133.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-133
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test RangeError exception is thrown when the
+ [[Value]] field of 'desc' is a negative number (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [];
+assert.throws(RangeError, function() {
+ Object.defineProperty(arrObj, "length", {
+ value: -9
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-134.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-134.js
new file mode 100644
index 0000000000..c8a5ec719d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-134.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-134
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test RangeError exception is thrown when the
+ [[Value]] field of 'desc' is +Infinity (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [];
+assert.throws(RangeError, function() {
+ Object.defineProperty(arrObj, "length", {
+ value: +Infinity
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-135.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-135.js
new file mode 100644
index 0000000000..52130077e3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-135.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-135
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test RangeError exception is thrown when the
+ [[Value]] field of 'desc' is -Infinity (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [];
+assert.throws(RangeError, function() {
+ Object.defineProperty(arrObj, "length", {
+ value: -Infinity
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-136.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-136.js
new file mode 100644
index 0000000000..e025c7bca1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-136.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-136
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test RangeError exception is thrown when the
+ [[Value]] field of 'desc' is NaN (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [];
+assert.throws(RangeError, function() {
+ Object.defineProperty(arrObj, "length", {
+ value: NaN
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-137.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-137.js
new file mode 100644
index 0000000000..a0f59409bf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-137.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-137
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test RangeError exception is not thrown when the
+ [[Value]] field of 'desc' is a string containing a positive number
+ (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "length", {
+ value: "2"
+});
+
+assert.sameValue(arrObj.length, 2, 'arrObj.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-138.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-138.js
new file mode 100644
index 0000000000..4f7df20288
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-138.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-138
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test RangeError exception is thrown when the
+ [[Value]] field of 'desc' is a string containing a negative number
+ (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [];
+assert.throws(RangeError, function() {
+ Object.defineProperty(arrObj, "length", {
+ value: "-42"
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-139.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-139.js
new file mode 100644
index 0000000000..e3cbaca429
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-139.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-139
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test RangeError exception is thrown when the
+ [[Value]] field of 'desc' is a string containing a decimal number
+ (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [];
+assert.throws(RangeError, function() {
+ Object.defineProperty(arrObj, "length", {
+ value: "200.59"
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-14.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-14.js
new file mode 100644
index 0000000000..f84d14edad
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-14.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Step 4 of defineProperty calls the [[DefineOwnProperty]] internal method
+ of O to define the property. For configurable properties, step 9b of
+ [[DefineOwnProperty]] permits changing the kind of a property.
+es5id: 15.2.3.6-4-14
+description: >
+ Object.defineProperty permits changing data property to accessor
+ property for configurable properties
+---*/
+
+var o = {};
+
+// create a data property. In this case,
+// [[Enumerable]] and [[Configurable]] are true
+o["foo"] = 101;
+
+// changing "foo" to be an accessor should succeed, since [[Configurable]]
+// on the original property will be true. Existing values of [[Configurable]]
+// and [[Enumerable]] need to be preserved and the rest need to be set to
+// their default values
+
+// dummy getter
+var getter = function() {
+ return 1;
+}
+var d1 = {
+ get: getter
+};
+Object.defineProperty(o, "foo", d1);
+
+var d2 = Object.getOwnPropertyDescriptor(o, "foo");
+
+assert.sameValue(d2.get, getter, 'd2.get');
+assert.sameValue(d2.enumerable, true, 'd2.enumerable');
+assert.sameValue(d2.configurable, true, 'd2.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-140.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-140.js
new file mode 100644
index 0000000000..e17d87caaf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-140.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-140
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test RangeError exception is thrown when the
+ [[Value]] field of 'desc' is a string containing +Infinity
+ (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [];
+assert.throws(RangeError, function() {
+ Object.defineProperty(arrObj, "length", {
+ value: "+Infinity"
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-141.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-141.js
new file mode 100644
index 0000000000..aad7e6a6a8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-141.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-141
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test RangeError exception is thrown when the
+ [[Value]] field of 'desc' is a string containing -Infinity
+ (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [];
+assert.throws(RangeError, function() {
+ Object.defineProperty(arrObj, "length", {
+ value: "-Infinity"
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-142.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-142.js
new file mode 100644
index 0000000000..de827ec701
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-142.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-142
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is a string
+ containing an exponential number (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "length", {
+ value: "2E3"
+});
+
+assert.sameValue(arrObj.length, 2E3, 'arrObj.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-143.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-143.js
new file mode 100644
index 0000000000..289bfd819e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-143.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-143
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is a string
+ containing a hex number (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "length", {
+ value: "0x00B"
+});
+
+assert.sameValue(arrObj.length, 0x00B, 'arrObj.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-144.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-144.js
new file mode 100644
index 0000000000..dcd4edafec
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-144.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-144
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is a string
+ containing a number with leading zeros (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "length", {
+ value: "0002.0"
+});
+
+assert.sameValue(arrObj.length, 2, 'arrObj.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-145.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-145.js
new file mode 100644
index 0000000000..b20705a9bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-145.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-145
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test RangeError exception is thrown when the
+ [[Value]] field of 'desc' is a string which doesn't convert to a
+ number (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [];
+assert.throws(RangeError, function() {
+ Object.defineProperty(arrObj, "length", {
+ value: "two"
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-146.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-146.js
new file mode 100644
index 0000000000..0ace2a69e7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-146.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-146
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is an object
+ which has an own toString method (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "length", {
+ value: {
+ toString: function() {
+ return '2';
+ }
+ }
+});
+
+assert.sameValue(arrObj.length, 2, 'arrObj.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-147.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-147.js
new file mode 100644
index 0000000000..6e7906bb72
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-147.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-147
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is an Object
+ which has an own valueOf method (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "length", {
+ value: {
+ valueOf: function() {
+ return 2;
+ }
+ }
+});
+
+assert.sameValue(arrObj.length, 2, 'arrObj.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-148.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-148.js
new file mode 100644
index 0000000000..6b52e81756
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-148.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-148
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is an Object
+ which has an own valueOf method that returns an object and
+ toString method that returns a string (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [];
+var toStringAccessed = false;
+var valueOfAccessed = false;
+
+Object.defineProperty(arrObj, "length", {
+ value: {
+ toString: function() {
+ toStringAccessed = true;
+ return '2';
+ },
+
+ valueOf: function() {
+ valueOfAccessed = true;
+ return {};
+ }
+ }
+});
+
+assert.sameValue(arrObj.length, 2, 'arrObj.length');
+assert(toStringAccessed, 'toStringAccessed !== true');
+assert(valueOfAccessed, 'valueOfAccessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-149.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-149.js
new file mode 100644
index 0000000000..9926f307f7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-149.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-149
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is an Object
+ which has an own toString and valueOf method (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [];
+var toStringAccessed = false;
+var valueOfAccessed = false;
+
+Object.defineProperty(arrObj, "length", {
+ value: {
+ toString: function() {
+ toStringAccessed = true;
+ return '2';
+ },
+
+ valueOf: function() {
+ valueOfAccessed = true;
+ return 3;
+ }
+ }
+});
+
+assert.sameValue(arrObj.length, 3, 'arrObj.length');
+assert.sameValue(toStringAccessed, false, 'toStringAccessed');
+assert(valueOfAccessed, 'valueOfAccessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-15.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-15.js
new file mode 100644
index 0000000000..a79cef36b7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-15.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Step 4 of defineProperty calls the [[DefineOwnProperty]] internal method
+ of O to define the property. For configurable properties, step 9c of
+ [[DefineOwnProperty]] permits changing the kind of a property.
+es5id: 15.2.3.6-4-15
+description: >
+ Object.defineProperty permits changing accessor property to data
+ property for configurable properties
+---*/
+
+var o = {};
+
+// define an accessor property
+// dummy getter
+var getter = function() {
+ return 1;
+}
+var d1 = {
+ get: getter,
+ configurable: true
+};
+Object.defineProperty(o, "foo", d1);
+
+// changing "foo" to be a data valued property should succeed, since
+// [[Configurable]] on the original property will be true. Existing
+// values of [[Configurable]] and [[Enumerable]] need to be preserved
+// and the rest need to be set to their default values.
+var desc = {
+ value: 101
+};
+Object.defineProperty(o, "foo", desc);
+var d2 = Object.getOwnPropertyDescriptor(o, "foo");
+
+assert.sameValue(d2.value, 101, 'd2.value');
+assert.sameValue(d2.writable, false, 'd2.writable');
+assert.sameValue(d2.enumerable, false, 'd2.enumerable');
+assert.sameValue(d2.configurable, true, 'd2.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-150.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-150.js
new file mode 100644
index 0000000000..644d864cc3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-150.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-150
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test TypeError is thrown when the [[Value]] field
+ of 'desc' is an Object that both toString and valueOf wouldn't
+ return primitive value (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [];
+var toStringAccessed = false;
+var valueOfAccessed = false;
+assert.throws(TypeError, function() {
+ Object.defineProperty(arrObj, "length", {
+ value: {
+ toString: function() {
+ toStringAccessed = true;
+ return {};
+ },
+
+ valueOf: function() {
+ valueOfAccessed = true;
+ return {};
+ }
+ }
+ });
+});
+assert(toStringAccessed, 'toStringAccessed !== true');
+assert(valueOfAccessed, 'valueOfAccessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-151.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-151.js
new file mode 100644
index 0000000000..fc0f440498
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-151.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-151
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', and the [[Value]] field of 'desc' is an Object
+ with an own toString method and an inherited valueOf method
+ (15.4.5.1 step 3.c), test that the inherited valueOf method is used
+---*/
+
+var arrObj = [];
+var toStringAccessed = false;
+var valueOfAccessed = false;
+
+var proto = {
+ valueOf: function() {
+ valueOfAccessed = true;
+ return 2;
+ }
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+child.toString = function() {
+ toStringAccessed = true;
+ return 3;
+};
+
+Object.defineProperty(arrObj, "length", {
+ value: child
+});
+
+assert.sameValue(arrObj.length, 2, 'arrObj.length');
+assert.sameValue(toStringAccessed, false, 'toStringAccessed');
+assert(valueOfAccessed, 'valueOfAccessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-152.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-152.js
new file mode 100644
index 0000000000..afe5f79092
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-152.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-152
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test RangeError is thrown when the [[Value]]
+ field of 'desc' is a positive non-integer values (15.4.5.1 step
+ 3.c)
+---*/
+
+var arrObj = [];
+assert.throws(RangeError, function() {
+ Object.defineProperty(arrObj, "length", {
+ value: 123.5
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-153.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-153.js
new file mode 100644
index 0000000000..5482b5345a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-153.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-153
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test RangeError is thrown when the [[Value]]
+ field of 'desc' is a negative non-integer values (15.4.5.1 step
+ 3.c)
+---*/
+
+var arrObj = [];
+assert.throws(RangeError, function() {
+ Object.defineProperty(arrObj, "length", {
+ value: -4294967294.5
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-154.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-154.js
new file mode 100644
index 0000000000..35466aea65
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-154.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-154
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is boundary
+ value 2^32 - 2 (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "length", {
+ value: 4294967294
+});
+
+assert.sameValue(arrObj.length, 4294967294, 'arrObj.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-155.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-155.js
new file mode 100644
index 0000000000..4cc37d22d0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-155.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-155
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test the [[Value]] field of 'desc' is boundary
+ value 2^32 - 1 (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "length", {
+ value: 4294967295
+});
+
+assert.sameValue(arrObj.length, 4294967295, 'arrObj.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-156.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-156.js
new file mode 100644
index 0000000000..2d9440ecd2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-156.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-156
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test RangeError is thrown when the [[Value]]
+ field of 'desc' is boundary value 2^32 (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [];
+assert.throws(RangeError, function() {
+ Object.defineProperty(arrObj, "length", {
+ value: 4294967296
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-157.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-157.js
new file mode 100644
index 0000000000..fc1324bc48
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-157.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-157
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', test RangeError is thrown when the [[Value]]
+ field of 'desc' is boundary value 2^32 + 1 (15.4.5.1 step 3.c)
+---*/
+
+var arrObj = [];
+assert.throws(RangeError, function() {
+ Object.defineProperty(arrObj, "length", {
+ value: 4294967297
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-159.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-159.js
new file mode 100644
index 0000000000..7e61a82e42
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-159.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-159
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', set the [[Value]] field of 'desc' to a value
+ greater than the existing value of length (15.4.5.1 step 3.f)
+---*/
+
+var arrObj = [0, , 2];
+
+Object.defineProperty(arrObj, "length", {
+ value: 5
+});
+
+assert.sameValue(arrObj.length, 5, 'arrObj.length');
+assert.sameValue(arrObj[0], 0, 'arrObj[0]');
+assert.sameValue(arrObj.hasOwnProperty("1"), false, 'arrObj.hasOwnProperty("1")');
+assert.sameValue(arrObj[2], 2, 'arrObj[2]');
+assert.sameValue(arrObj.hasOwnProperty("4"), false, 'arrObj.hasOwnProperty("4")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-16.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-16.js
new file mode 100644
index 0000000000..a6bc962c84
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-16.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Step 4 of defineProperty calls the [[DefineOwnProperty]] internal method
+ of O to define the property. For non-configurable properties, step 10.a.i
+ of [[DefineOwnProperty]] rejects if relaxing the [[Writable]] attribute.
+es5id: 15.2.3.6-4-16
+description: >
+ Object.defineProperty throws TypeError when relaxing [[Writable]]
+ on non-configurable data properties
+---*/
+
+var o = {};
+
+// create a data valued property; all other attributes default to false.
+var d1 = {
+ value: 101
+};
+Object.defineProperty(o, "foo", d1);
+
+// now, relaxing [[Writable]] on "foo" should fail, since both
+// [[Configurable]] and [[Writable]] on the original property will be false.
+var desc = {
+ value: 101,
+ writable: true
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(o, "foo", desc);
+});
+// the property should remain unchanged.
+var d2 = Object.getOwnPropertyDescriptor(o, "foo");
+assert.sameValue(d2.value, 101, 'd2.value');
+assert.sameValue(d2.writable, false, 'd2.writable');
+assert.sameValue(d2.enumerable, false, 'd2.enumerable');
+assert.sameValue(d2.configurable, false, 'd2.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-160.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-160.js
new file mode 100644
index 0000000000..6fd7dc5419
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-160.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-160
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', set the [[Value]] field of 'desc' to a value
+ equal to the existing value of length (15.4.5.1 step 3.f)
+---*/
+
+var arrObj = [0, , 2];
+
+Object.defineProperty(arrObj, "length", {
+ value: 3
+});
+
+assert.sameValue(arrObj.length, 3, 'arrObj.length');
+assert.sameValue(arrObj[0], 0, 'arrObj[0]');
+assert.sameValue(arrObj.hasOwnProperty("1"), false, 'arrObj.hasOwnProperty("1")');
+assert.sameValue(arrObj[2], 2, 'arrObj[2]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-161.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-161.js
new file mode 100644
index 0000000000..7dbf220d08
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-161.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-161
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', set the [[Value]] field of 'desc' to a value
+ lesser than the existing value of length and test that indexes
+ beyond the new length are deleted(15.4.5.1 step 3.f)
+---*/
+
+var arrObj = [0, 1];
+
+Object.defineProperty(arrObj, "length", {
+ value: 1
+});
+
+assert.sameValue(arrObj.length, 1, 'arrObj.length');
+assert.sameValue(arrObj.hasOwnProperty("1"), false, 'arrObj.hasOwnProperty("1")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-162.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-162.js
new file mode 100644
index 0000000000..9f95f2a88c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-162.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-162
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', the [[Value]] field of 'desc' is greater than
+ value of the length property, test TypeError is thrown when the
+ length property is not writable (15.4.5.1 step 3.f.i)
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "length", {
+ writable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperty(arrObj, "length", {
+ value: 12
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-163.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-163.js
new file mode 100644
index 0000000000..b11428d19a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-163.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-163
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', the [[Value]] field of 'desc' equals to value of
+ the length property, test no TypeError is thrown when the length
+ property is not writable (15.4.5.1 step 3.f.i)
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "length", {
+ writable: false
+});
+
+Object.defineProperty(arrObj, "length", {
+ value: 0
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-164.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-164.js
new file mode 100644
index 0000000000..39c4562f65
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-164.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-164
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test TypeError is thrown when the
+ [[Writable]] attribute of the length property is false (15.4.5.1
+ step 3.g)
+---*/
+
+var arrObj = [0, 1];
+
+Object.defineProperty(arrObj, "length", {
+ writable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperty(arrObj, "length", {
+ value: 0
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-165.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-165.js
new file mode 100644
index 0000000000..ac1b8394c3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-165.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-165
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the [[Writable]] attribute of the
+ length property is set to true after deleting properties with
+ large index named if the [[Writable]] field of 'desc' is absent
+ (15.4.5.1 step 3.h)
+---*/
+
+var arrObj = [0, 1];
+
+Object.defineProperty(arrObj, "length", {
+ value: 1
+});
+
+var indexDeleted = !arrObj.hasOwnProperty("1");
+
+arrObj.length = 10;
+
+assert(indexDeleted, 'indexDeleted !== true');
+assert.sameValue(arrObj.length, 10, 'arrObj.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-166.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-166.js
new file mode 100644
index 0000000000..7fcec19a4e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-166.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-166
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the [[Writable]] attribute of the
+ length property is set to true after deleting properties with
+ large index named if the [[Writable]] field of 'desc' is true
+ (15.4.5.1 step 3.h)
+---*/
+
+var arrObj = [0, 1];
+
+Object.defineProperty(arrObj, "length", {
+ value: 1,
+ writable: true
+});
+
+var indexDeleted = !arrObj.hasOwnProperty("1");
+
+arrObj.length = 10;
+
+assert(indexDeleted, 'indexDeleted !== true');
+assert.sameValue(arrObj.length, 10, 'arrObj.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-167.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-167.js
new file mode 100644
index 0000000000..8c51484bd1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-167.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-167
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the [[Writable]] attribute of the
+ length property is set to false after deleting properties with
+ large index named if the [[Writable]] field of 'desc' is false
+ (15.4.5.1 step 3.i.ii)
+includes: [propertyHelper.js]
+---*/
+
+
+var arrObj = [0, 1];
+
+Object.defineProperty(arrObj, "length", {
+ value: 1,
+ writable: false
+});
+
+assert(!arrObj.hasOwnProperty("1"))
+assert.sameValue(arrObj.length, 1);
+verifyNotWritable(arrObj, "length");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-168.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-168.js
new file mode 100644
index 0000000000..89f38d9721
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-168.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-168
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', whose writable attribute is being changed to
+ false and the [[Value]] field of 'desc' is less than value of the
+ length property and also lesser than an index of the array which
+ is set to configurable:false, test that new length is set to a
+ value greater than the non-deletable index by 1, writable
+ attribute of length is set to false and TypeError exception is
+ thrown (15.4.5.1 step 3.i.iii)
+---*/
+
+var arrObj = [0, 1, 2];
+assert.throws(TypeError, function() {
+ Object.defineProperty(arrObj, "1", {
+ configurable: false
+ });
+
+ Object.defineProperty(arrObj, "length", {
+ value: 0,
+ writable: false
+ });
+});
+assert.sameValue(arrObj.length, 2, 'arrObj.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-169.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-169.js
new file mode 100644
index 0000000000..6c9cdc648b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-169.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-169
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property and also lesser than an index of the array
+ which is set to configurable: false, test that new length is set
+ to a value greater than the non-deletable index by 1, and
+ TypeError is thrown (15.4.5.1 step 3.l.i)
+---*/
+
+var arrObj = [0, 1, 2];
+
+Object.defineProperty(arrObj, "1", {
+ configurable: false
+});
+
+Object.defineProperty(arrObj, "2", {
+ configurable: true
+});
+assert.throws(TypeError, function() {
+ Object.defineProperty(arrObj, "length", {
+ value: 1
+ });
+});
+assert.sameValue(arrObj.length, 2, 'arrObj.length');
+assert.sameValue(arrObj.hasOwnProperty("2"), false, 'arrObj.hasOwnProperty("2")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-17.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-17.js
new file mode 100644
index 0000000000..28ba9fae71
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-17.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Step 4 of defineProperty calls the [[DefineOwnProperty]] internal method
+ of O to define the property. For non-configurable properties, step 10.a.ii.1
+ of [[DefineOwnProperty]] rejects changing the value of non-writable properties.
+es5id: 15.2.3.6-4-17
+description: >
+ Object.defineProperty throws TypeError when changing value of
+ non-writable non-configurable data properties
+---*/
+
+var o = {};
+
+// create a data valued property; all other attributes default to false.
+var d1 = {
+ value: 101
+};
+Object.defineProperty(o, "foo", d1);
+
+// now, trying to change the value of "foo" should fail, since both
+// [[Configurable]] and [[Writable]] on the original property will be false.
+var desc = {
+ value: 102
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(o, "foo", desc);
+});
+// the property should remain unchanged.
+var d2 = Object.getOwnPropertyDescriptor(o, "foo");
+
+assert.sameValue(d2.value, 101, 'd2.value');
+assert.sameValue(d2.writable, false, 'd2.writable');
+assert.sameValue(d2.enumerable, false, 'd2.enumerable');
+assert.sameValue(d2.configurable, false, 'd2.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-170.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-170.js
new file mode 100644
index 0000000000..0dbe772bdd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-170.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-170
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property and also lesser than an index of the array
+ which is set to configurable: false, test that new length is set
+ to a value greater than the non-deletable index by 1, writable
+ attribute of length is set to false and TypeError exception is
+ thrown (15.4.5.1 step 3.l.ii)
+---*/
+
+var arrObj = [0, 1];
+assert.throws(TypeError, function() {
+ Object.defineProperty(arrObj, "1", {
+ configurable: false
+ });
+
+ Object.defineProperty(arrObj, "length", {
+ value: 1
+ });
+});
+assert.sameValue(arrObj.length, 2, 'arrObj.length');
+assert(arrObj.hasOwnProperty("1"), 'arrObj.hasOwnProperty("1") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-171.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-171.js
new file mode 100644
index 0000000000..c6732ffecc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-171.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-171
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the [[Configurable]] attribute of an
+ inherited data property with large index named in 'O' can't stop
+ deleting index named properties (15.4.5.1 step 3.l.ii)
+---*/
+
+var arrObj = [0, 1];
+
+Array.prototype[1] = 2; // Not setting the [[Configurable]] attribute of property "1" to false here, since Array.prototype is a global object, and non-configurbale property can't revert to configurable
+Object.defineProperty(arrObj, "length", {
+ value: 1
+});
+
+assert.sameValue(arrObj.length, 1, 'arrObj.length');
+assert.sameValue(arrObj.hasOwnProperty("1"), false, 'arrObj.hasOwnProperty("1")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-172.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-172.js
new file mode 100644
index 0000000000..c26d21a80d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-172.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-172
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the [[Configurable]] attribute of
+ own data property with large index named in 'O' that overrides an
+ inherited data property can stop deleting index named properties
+ (15.4.5.1 step 3.l.ii)
+---*/
+
+var arrObj = [0, 1];
+
+assert.throws(TypeError, function() {
+ Object.defineProperty(arrObj, "1", {
+ configurable: false
+ });
+
+ Array.prototype[1] = 2;
+ Object.defineProperty(arrObj, "length", {
+ value: 1
+ });
+});
+assert.sameValue(arrObj.length, 2, 'arrObj.length');
+assert(arrObj.hasOwnProperty("1"), 'arrObj.hasOwnProperty("1") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-173.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-173.js
new file mode 100644
index 0000000000..4abc8e4730
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-173.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-173
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the [[Configurable]] attribute of
+ own data property with large index named in 'O' that overrides an
+ inherited accessor property can stop deleting index named
+ properties (15.4.5.1 step 3.l.ii)
+---*/
+
+var arrObj = [0, 1];
+
+assert.throws(TypeError, function() {
+ Object.defineProperty(arrObj, "1", {
+ configurable: false
+ });
+
+ Object.defineProperty(Array.prototype, "1", {
+ get: function() {
+ return 2;
+ },
+ configurable: true
+ });
+
+ Object.defineProperty(arrObj, "length", {
+ value: 1
+ });
+});
+assert.sameValue(arrObj.length, 2, 'arrObj.length');
+assert(arrObj.hasOwnProperty("1"), 'arrObj.hasOwnProperty("1") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-174.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-174.js
new file mode 100644
index 0000000000..168a30e73d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-174.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-174
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the [[Configurable]] attribute of
+ own accessor property with large index named in 'O' can stop
+ deleting index named properties (15.4.5.1 step 3.l.ii)
+---*/
+
+var arrObj = [0, 1];
+assert.throws(TypeError, function() {
+ Object.defineProperty(arrObj, "1", {
+ get: function() {
+ return 1;
+ },
+ configurable: false
+ });
+
+ Object.defineProperty(arrObj, "length", {
+ value: 1
+ });
+});
+assert.sameValue(arrObj.length, 2, 'arrObj.length');
+assert(arrObj.hasOwnProperty("1"), 'arrObj.hasOwnProperty("1") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-175.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-175.js
new file mode 100644
index 0000000000..2be4dea4f9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-175.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-175
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the [[Configurable]] attribute of an
+ inherited accessor property with large index named in 'O' can't
+ stop deleting index named properties (15.4.5.1 step 3.l.ii)
+---*/
+
+var arrObj = [0, 1];
+
+Object.defineProperty(Array.prototype, "1", {
+ get: function() {
+ return 1;
+ },
+ configurable: true // Not setting the [[Configurable]] attribute of property "1" to false here, since Array.prototype is a global object, and non-configurbale property can't revert to configurable
+});
+
+Object.defineProperty(arrObj, "length", {
+ value: 1
+});
+
+assert.sameValue(arrObj.length, 1, 'arrObj.length');
+assert.sameValue(arrObj.hasOwnProperty("1"), false, 'arrObj.hasOwnProperty("1")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-176.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-176.js
new file mode 100644
index 0000000000..7463cbce32
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-176.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-176
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the [[Configurable]] attribute of
+ own accessor property with large index named in 'O' that overrides
+ an inherited data property can stop deleting index named
+ properties (15.4.5.1 step 3.l.ii)
+---*/
+
+var arrObj = [0, 1];
+
+assert.throws(TypeError, function() {
+ Object.defineProperty(arrObj, "1", {
+ get: function() {
+ return 2;
+ },
+ configurable: false
+ });
+
+ Array.prototype[1] = 2;
+ Object.defineProperty(arrObj, "length", {
+ value: 1
+ });
+});
+assert.sameValue(arrObj.length, 2, 'arrObj.length');
+assert(arrObj.hasOwnProperty("1"), 'arrObj.hasOwnProperty("1") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-177.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-177.js
new file mode 100644
index 0000000000..60bbee3532
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-177.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-177
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the [[Configurable]] attribute of
+ own accessor property with large index named in 'O' that overrides
+ an inherited accessor property can stop deleting index named
+ properties (15.4.5.1 step 3.l.ii)
+---*/
+
+var arrObj = [0, 1];
+
+assert.throws(TypeError, function() {
+ Object.defineProperty(arrObj, "1", {
+ get: function() {
+ return 1;
+ },
+ configurable: false
+ });
+
+ Object.defineProperty(Array.prototype, "1", {
+ get: function() {
+ return 2;
+ },
+ configurable: true
+ });
+
+ Object.defineProperty(arrObj, "length", {
+ value: 1
+ });
+});
+assert.sameValue(arrObj.length, 2, 'arrObj.length');
+assert(arrObj.hasOwnProperty("1"), 'arrObj.hasOwnProperty("1") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-178.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-178.js
new file mode 100644
index 0000000000..690b57fe2a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-178.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-178
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the configurable large index named
+ property of 'O' is deleted (15.4.5.1 step 3.l.ii)
+---*/
+
+var arrObj = [0, 1];
+
+Object.defineProperty(arrObj, "length", {
+ value: 1
+});
+
+assert.sameValue(arrObj.hasOwnProperty("1"), false, 'arrObj.hasOwnProperty("1")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-179-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-179-1.js
new file mode 100644
index 0000000000..5b6a6d6da9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-179-1.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-179-1
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', the [[Value]] field of 'desc' is greater than
+ value of the length property, test value of the length property
+ is same as [[Value]] (15.4.5.1 step 3.l.iii.1)
+---*/
+
+var arrObj = [0, 1, 2, 3];
+
+Object.defineProperty(arrObj, "1", {
+ configurable: false
+});
+
+Object.defineProperty(arrObj, "length", {
+ value: 3
+});
+
+assert.sameValue(arrObj.length, 3, 'arrObj.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-18.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-18.js
new file mode 100644
index 0000000000..bf8a2dc3ca
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-18.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Step 4 of defineProperty calls the [[DefineOwnProperty]] internal method
+ of O to define the property. For non-configurable properties, step 11.a.i
+ of [[DefineOwnProperty]] rejects changing the setter if present.
+es5id: 15.2.3.6-4-18
+description: >
+ Object.defineProperty throws TypeError when changing setter of
+ non-configurable accessor properties(8.12.9 step 11.a.i)
+---*/
+
+var o = {};
+
+// create an accessor property; all other attributes default to false.
+// dummy getter
+var getter = function() {
+ return 1;
+}
+var d1 = {
+ get: getter
+};
+Object.defineProperty(o, "foo", d1);
+
+// now, trying to change the setter should fail, since [[Configurable]]
+// on the original property will be false.
+var setter = function(x) {};
+var desc = {
+ set: setter
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(o, "foo", desc);
+});
+// the property should remain unchanged.
+var d2 = Object.getOwnPropertyDescriptor(o, "foo");
+assert.sameValue(d2.get, getter, 'd2.get');
+assert.sameValue(d2.configurable, false, 'd2.configurable');
+assert.sameValue(d2.enumerable, false, 'd2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-181.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-181.js
new file mode 100644
index 0000000000..26f0e3e3cd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-181.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-181
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is the length
+ property of 'O', the [[Value]] field of 'desc' is less than value
+ of the length property, test the [[Writable]] attribute of the
+ length property is set to false at last when the [[Writable]]
+ field of 'desc' is false and 'O' doesn't contain non-configurable
+ large index named property (15.4.5.1 step 3.m)
+includes: [propertyHelper.js]
+---*/
+
+
+var arrObj = [0, 1];
+
+Object.defineProperty(arrObj, "length", {
+ value: 0,
+ writable: false
+});
+
+verifyNotWritable(arrObj, "length");
+
+assert(!arrObj.hasOwnProperty("1"));
+assert.sameValue(arrObj.length, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-182.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-182.js
new file mode 100644
index 0000000000..bd662904ea
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-182.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-182
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' is available String values that convert to
+ numbers (15.4.5.1 step 4.a)
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "0", {
+ value: 12
+});
+
+assert.sameValue(arrObj[0], 12, 'arrObj[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-183.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-183.js
new file mode 100644
index 0000000000..0548d23453
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-183.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-183
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' is boundary value 2^32 - 2 (15.4.5.1 step
+ 4.a)
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, 4294967294, {
+ value: 100
+});
+
+assert(arrObj.hasOwnProperty("4294967294"), 'arrObj.hasOwnProperty("4294967294") !== true');
+assert.sameValue(arrObj.length, 4294967295, 'arrObj.length');
+assert.sameValue(arrObj[4294967294], 100, 'arrObj[4294967294]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-184.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-184.js
new file mode 100644
index 0000000000..d9ac8f433a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-184.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-184
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' is boundary value 2^32 - 1 (15.4.5.1 step
+ 4.a)
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, 4294967295, {
+ value: 100
+});
+
+assert(arrObj.hasOwnProperty("4294967295"), 'arrObj.hasOwnProperty("4294967295") !== true');
+assert.sameValue(arrObj.length, 0, 'arrObj.length');
+assert.sameValue(arrObj[4294967295], 100, 'arrObj[4294967295]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-185.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-185.js
new file mode 100644
index 0000000000..135d52b2d2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-185.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-185
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' is boundary value 2^32 (15.4.5.1 step 4.a)
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, 4294967296, {
+ value: 100
+});
+
+assert(arrObj.hasOwnProperty("4294967296"), 'arrObj.hasOwnProperty("4294967296") !== true');
+assert.sameValue(arrObj.length, 0, 'arrObj.length');
+assert.sameValue(arrObj[4294967296], 100, 'arrObj[4294967296]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-186.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-186.js
new file mode 100644
index 0000000000..24e3880dcc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-186.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-186
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' is boundary value 2^32 + 1 (15.4.5.1 step
+ 4.a)
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, 4294967297, {
+ value: 100
+});
+
+assert(arrObj.hasOwnProperty("4294967297"), 'arrObj.hasOwnProperty("4294967297") !== true');
+assert.sameValue(arrObj.length, 0, 'arrObj.length');
+assert.sameValue(arrObj[4294967297], 100, 'arrObj[4294967297]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-187.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-187.js
new file mode 100644
index 0000000000..253d472e4a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-187.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-187
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, test TypeError is not thrown if the [[Writable]]
+ attribute of the length property in 'O' is false and value of
+ 'name' is less than value of the length property (15.4.5.1 step
+ 4.b)
+---*/
+
+var arrObj = [1, 2, 3];
+
+Object.defineProperty(arrObj, "length", {
+ writable: false
+});
+
+Object.defineProperty(arrObj, 1, {
+ value: "abc"
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-188.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-188.js
new file mode 100644
index 0000000000..ff82432f6b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-188.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-188
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, test TypeError is thrown if the [[Writable]]
+ attribute of the length property in 'O' is false and value of
+ 'name' equals to value of the length property (15.4.5.1 step 4.b)
+---*/
+
+var arrObj = [1, 2, 3];
+
+Object.defineProperty(arrObj, "length", {
+ writable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperty(arrObj, 3, {
+ value: "abc"
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-189.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-189.js
new file mode 100644
index 0000000000..566916b271
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-189.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-189
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, test TypeError is thrown if the [[Writable]]
+ attribute of the length property in 'O' is false and value of
+ 'name' is greater than value of the length property (15.4.5.1 step
+ 4.b)
+---*/
+
+var arrObj = [1, 2, 3];
+
+Object.defineProperty(arrObj, "length", {
+ writable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperty(arrObj, 4, {
+ value: "abc"
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-19.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-19.js
new file mode 100644
index 0000000000..276d8dc60c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-19.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Step 4 of defineProperty calls the [[DefineOwnProperty]] internal method
+ of O to define the property. For non-configurable properties, step 11.a.i
+ of [[DefineOwnProperty]] permits setting a setter (if absent).
+es5id: 15.2.3.6-4-19
+description: >
+ Object.defineProperty permits setting a setter (if absent) of
+ non-configurable accessor properties(8.12.9 step 10.a.ii.1)
+---*/
+
+var o = {};
+
+// create an accessor property; all other attributes default to false.
+// dummy getter
+var getter = function() {
+ return 1;
+}
+var d1 = {
+ get: getter
+};
+Object.defineProperty(o, "foo", d1);
+
+// now, trying to set the setter should succeed even though [[Configurable]]
+// on the original property will be false.
+var desc = {
+ set: undefined
+};
+Object.defineProperty(o, "foo", desc);
+
+var d2 = Object.getOwnPropertyDescriptor(o, "foo");
+
+assert.sameValue(d2.get, getter, 'd2.get');
+assert.sameValue(d2.set, undefined, 'd2.set');
+assert.sameValue(d2.configurable, false, 'd2.configurable');
+assert.sameValue(d2.enumerable, false, 'd2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-190.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-190.js
new file mode 100644
index 0000000000..e9f7f17e6a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-190.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-190
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, 0, {
+ value: "ownDataProperty",
+ configurable: false
+});
+
+try {
+ Object.defineProperty(arrObj, 0, {
+ configurable: true
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arrObj, "0", "ownDataProperty");
+
+ verifyNotWritable(arrObj, "0");
+
+ verifyNotEnumerable(arrObj, "0");
+
+ verifyNotConfigurable(arrObj, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-191.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-191.js
new file mode 100644
index 0000000000..c2c3f7b45f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-191.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-191
+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)
+---*/
+
+try {
+ Object.defineProperty(Array.prototype, "0", {
+ value: 11,
+ configurable: true
+ });
+
+ var arrObj = [];
+
+ Object.defineProperty(arrObj, "0", {
+ configurable: false
+ });
+
+ if (!arrObj.hasOwnProperty("0")) {
+ throw new Test262Error("Expected arrObj.hasOwnProperty('0') === true, actually " + arrObj.hasOwnProperty("0"));
+ }
+ if (Array.prototype[0] !== 11) {
+ throw new Test262Error("Expected Array.prototype[0] === 11), actually " + Array.prototype[0]);
+ }
+ if (typeof arrObj[0] !== "undefined") {
+ throw new Test262Error("Expected typeof arrObj[0] === 'undefined'), actually " + typeof arrObj[0]);
+ }
+
+} finally {
+ delete Array.prototype[0];
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-192.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-192.js
new file mode 100644
index 0000000000..3914db9592
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-192.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-192
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' is own data property that overrides an
+ inherited data property, test TypeError is thrown on updating the
+ [[Configurable]] attribute from false to true (15.4.5.1 step 4.c)
+---*/
+
+var arrObj = [];
+
+assert.throws(TypeError, function() {
+ Object.defineProperty(Array.prototype, "0", {
+ value: 11,
+ configurable: true
+ });
+
+ Object.defineProperty(arrObj, "0", {
+ value: 12,
+ configurable: false
+ });
+
+ Object.defineProperty(arrObj, "0", {
+ configurable: true
+ });
+});
+assert.sameValue(Array.prototype[0], 11, 'Array.prototype[0]');
+assert.sameValue(arrObj[0], 12, 'arrObj[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-193.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-193.js
new file mode 100644
index 0000000000..d9c51ebd90
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-193.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-193
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' is own data property that overrides an
+ inherited accessor property, test TypeError is thrown when update
+ the [[Configurable]] attribute to true and value of
+ [[Configurable]] attribute of original is false (15.4.5.1 step
+ 4.c)
+---*/
+
+var arrObj = [];
+
+assert.throws(TypeError, function() {
+ Object.defineProperty(Array.prototype, "0", {
+ get: function() {
+ return 11;
+ },
+ configurable: true
+ });
+
+ Object.defineProperty(arrObj, "0", {
+ value: 12,
+ configurable: false
+ });
+
+ Object.defineProperty(arrObj, "0", {
+ configurable: true
+ });
+});
+assert.sameValue(Array.prototype[0], 11, 'Array.prototype[0]');
+assert.sameValue(arrObj[0], 12, 'arrObj[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-194.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-194.js
new file mode 100644
index 0000000000..c69f78bdbc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-194.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-194
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+var getFunc = function() {
+ return 11;
+};
+
+Object.defineProperty(arrObj, "0", {
+ get: getFunc,
+ configurable: false
+});
+
+try {
+ Object.defineProperty(arrObj, "0", {
+ configurable: true
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arrObj, "0", getFunc());
+
+ verifyNotEnumerable(arrObj, "0");
+
+ verifyNotConfigurable(arrObj, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e.name);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-195.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-195.js
new file mode 100644
index 0000000000..56e50846b6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-195.js
@@ -0,0 +1,51 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-195
+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: [propertyHelper.js]
+---*/
+
+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];
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-196.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-196.js
new file mode 100644
index 0000000000..2c494aae84
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-196.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-196
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' is own accessor property that overrides an
+ inherited data property (15.4.5.1 step 4.c)
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.defineProperty(Array.prototype, "0", {
+ value: 11,
+ configurable: true
+ });
+
+ var arrObj = [];
+ Object.defineProperty(arrObj, "0", {
+ get: function() {},
+ configurable: false
+ });
+
+ Object.defineProperty(arrObj, "0", {
+ configurable: true
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-197.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-197.js
new file mode 100644
index 0000000000..c9e2feaf5a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-197.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-197
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' is own accessor property that overrides an
+ inherited accessor property (15.4.5.1 step 4.c)
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.defineProperty(Array.prototype, "0", {
+ get: function() {},
+ configurable: true
+ });
+
+ var arrObj = [];
+ Object.defineProperty(arrObj, "0", {
+ get: function() {},
+ configurable: false
+ });
+
+ Object.defineProperty(arrObj, "0", {
+ configurable: true
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-198.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-198.js
new file mode 100644
index 0000000000..526ebadfdf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-198.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-198
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' property doesn't exist in 'O', test
+ TypeError is thrown when 'O' is not extensible (15.4.5.1 step 4.c)
+---*/
+
+var arrObj = [];
+Object.preventExtensions(arrObj);
+assert.throws(TypeError, function() {
+ var desc = {
+ value: 1
+ };
+ Object.defineProperty(arrObj, "0", desc);
+});
+assert.sameValue(arrObj.hasOwnProperty("0"), false, 'arrObj.hasOwnProperty("0")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-199.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-199.js
new file mode 100644
index 0000000000..98cefd1ded
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-199.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-199
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "0", {
+ enumerable: true
+});
+
+verifyEqualTo(arrObj, "0", undefined);
+
+verifyNotWritable(arrObj, "0");
+
+verifyEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-2.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-2.js
new file mode 100644
index 0000000000..115e9bdda5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-2.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Step 4 of defineProperty calls the [[DefineOwnProperty]] internal method
+ of O to define the property. For newly defined data properties, attributes
+ missing from desc should have values set to the defaults from 8.6.1.
+es5id: 15.2.3.6-4-2
+description: >
+ Object.defineProperty sets missing attributes to their default
+ values (data properties)(8.12.9 step 4.a.i)
+---*/
+
+var o = {};
+
+var desc = {
+ value: 1
+};
+Object.defineProperty(o, "foo", desc);
+
+var propDesc = Object.getOwnPropertyDescriptor(o, "foo");
+
+assert.sameValue(propDesc.value, 1, 'propDesc.value'); // this is the value that was set
+assert.sameValue(propDesc.writable, false, 'propDesc.writable'); // false by default
+assert.sameValue(propDesc.enumerable, false, 'propDesc.enumerable'); // false by default
+assert.sameValue(propDesc.configurable, false, 'propDesc.configurable'); // false by default
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-20.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-20.js
new file mode 100644
index 0000000000..7814434368
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-20.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Step 4 of defineProperty calls the [[DefineOwnProperty]] internal method
+ of O to define the property. For non-configurable properties, step 11.a.ii
+ of [[DefineOwnProperty]] rejects changing the getter if present.
+es5id: 15.2.3.6-4-20
+description: >
+ Object.defineProperty throws TypeError when changing getter (if
+ present) of non-configurable accessor properties(8.12.9 step
+ 11.a.ii)
+---*/
+
+var o = {};
+
+// create an accessor property; all other attributes default to false.
+// dummy getter/setter
+var getter = function() {
+ return 1;
+}
+var d1 = {
+ get: getter,
+ configurable: false
+};
+Object.defineProperty(o, "foo", d1);
+
+// now, trying to change the setter should fail, since [[Configurable]]
+// on the original property will be false.
+var desc = {
+ get: undefined
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(o, "foo", desc);
+});
+var d2 = Object.getOwnPropertyDescriptor(o, "foo");
+
+assert.sameValue(d2.get, getter, 'd2.get');
+assert.sameValue(d2.configurable, false, 'd2.configurable');
+assert.sameValue(d2.enumerable, false, 'd2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-200.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-200.js
new file mode 100644
index 0000000000..2c0632c716
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-200.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-200
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' property doesn't exist in 'O', test
+ [[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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "0", {
+ writable: true,
+ enumerable: true,
+ configurable: false
+});
+
+verifyEqualTo(arrObj, "0", undefined);
+
+verifyWritable(arrObj, "0");
+
+verifyEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-201.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-201.js
new file mode 100644
index 0000000000..ab771a71c0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-201.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-201
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' property doesn't exist in 'O' and
+ [[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: [propertyHelper.js]
+---*/
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-202.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-202.js
new file mode 100644
index 0000000000..f6fe819199
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-202.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-202
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' property doesn't exist in 'O' and
+ [[Enumerable]] is absent in data descriptor 'desc', test
+ [[Enumerable]] of property 'name' is set to false (15.4.5.1 step
+ 4.c)
+includes: [propertyHelper.js]
+---*/
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-203.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-203.js
new file mode 100644
index 0000000000..9e6cad35fb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-203.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-203
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' property doesn't exist in 'O' and
+ [[Configurable]] is absent in data descriptor 'desc', test
+ [[Configurable]] of property 'name' is set to false (15.4.5.1 step
+ 4.c)
+includes: [propertyHelper.js]
+---*/
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-204.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-204.js
new file mode 100644
index 0000000000..b513a1dbb9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-204.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-204
+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: [propertyHelper.js]
+---*/
+
+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
+});
+
+verifyEqualTo(arrObj, "0", 1001);
+
+verifyNotWritable(arrObj, "0");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-205.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-205.js
new file mode 100644
index 0000000000..72e179ef74
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-205.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-205
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+var setFunc = function(value) {
+ arrObj.setVerifyHelpProp = value;
+};
+
+Object.defineProperty(arrObj, "0", {
+ set: setFunc,
+ enumerable: true,
+ configurable: true
+});
+
+verifyWritable(arrObj, "0", "setVerifyHelpProp");
+
+verifyEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-206.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-206.js
new file mode 100644
index 0000000000..124b0f9a43
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-206.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-206
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' property doesn't exist in 'O', test [[Set]]
+ of 'name' property in 'Attributes' is set as undefined if [[Set]]
+ is absent in accessor descriptor 'desc' (15.4.5.1 step 4.c)
+---*/
+
+var arrObj = [];
+var getFunc = function() {};
+
+Object.defineProperty(arrObj, "0", {
+ get: getFunc,
+ enumerable: true,
+ configurable: true
+});
+
+var desc = Object.getOwnPropertyDescriptor(arrObj, "0");
+
+assert(arrObj.hasOwnProperty("0"), 'arrObj.hasOwnProperty("0") !== true');
+assert(desc.hasOwnProperty("set"), 'desc.hasOwnProperty("set") !== true');
+assert.sameValue(typeof desc.set, "undefined", 'typeof desc.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-207.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-207.js
new file mode 100644
index 0000000000..966b1744bd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-207.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-207
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' property doesn't exist in 'O' and
+ [[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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+var setFunc = function(value) {
+ arrObj.setVerifyHelpProp = value;
+};
+var getFunc = function() {};
+
+Object.defineProperty(arrObj, "0", {
+ set: setFunc,
+ get: getFunc,
+ configurable: true
+});
+verifyEqualTo(arrObj, "0", getFunc());
+
+verifyWritable(arrObj, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-208.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-208.js
new file mode 100644
index 0000000000..ba15c84b8e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-208.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-208
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' property doesn't exist in 'O' and
+ [[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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+var setFunc = function(value) {
+ arrObj.setVerifyHelpProp = value;
+};
+var getFunc = function() {};
+
+Object.defineProperty(arrObj, "0", {
+ set: setFunc,
+ get: getFunc,
+ enumerable: true
+});
+verifyEqualTo(arrObj, "0", getFunc());
+
+verifyWritable(arrObj, "0", "setVerifyHelpProp");
+
+verifyEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-209.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-209.js
new file mode 100644
index 0000000000..cdefdc539e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-209.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-209
+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: [propertyHelper.js]
+---*/
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-21.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-21.js
new file mode 100644
index 0000000000..1ffe487dd7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-21.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Step 4 of defineProperty calls the [[DefineOwnProperty]] internal method
+ of O to define the property. For non-configurable properties, step 11.a.ii
+ of [[DefineOwnProperty]] permits setting a getter if absent.
+es5id: 15.2.3.6-4-21
+description: >
+ Object.defineProperty permits setting a getter (if absent) of
+ non-configurable accessor properties(8.12.9 step 11.a.ii)
+---*/
+
+var o = {};
+
+// create an accessor property; all other attributes default to false.
+// dummy setter
+var setter = function(x) {}
+var d1 = {
+ set: setter
+};
+Object.defineProperty(o, "foo", d1);
+
+// now, trying to set the getter should succeed even though [[Configurable]]
+// on the original property will be false. Existing values of need to be preserved.
+var getter = undefined;
+var desc = {
+ get: getter
+};
+
+Object.defineProperty(o, "foo", desc);
+var d2 = Object.getOwnPropertyDescriptor(o, "foo");
+
+assert.sameValue(d2.get, getter, 'd2.get');
+assert.sameValue(d2.set, setter, 'd2.set');
+assert.sameValue(d2.configurable, false, 'd2.configurable');
+assert.sameValue(d2.enumerable, false, 'd2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-210.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-210.js
new file mode 100644
index 0000000000..3d5614db18
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-210.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-210
+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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-211.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-211.js
new file mode 100644
index 0000000000..74773a8b8c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-211.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-211
+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: [propertyHelper.js]
+---*/
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-212.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-212.js
new file mode 100644
index 0000000000..60a73af96b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-212.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-212
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+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
+});
+
+verifyEqualTo(arrObj, "0", 100);
+
+verifyWritable(arrObj, "0");
+
+verifyEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-213.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-213.js
new file mode 100644
index 0000000000..aba7e1fb85
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-213.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-213
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-214.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-214.js
new file mode 100644
index 0000000000..a68119a095
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-214.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-214
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ property and its configurable and writable attributes are set to
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, 0, {
+ value: 101,
+ writable: false,
+ configurable: false
+});
+
+try {
+ Object.defineProperty(arrObj, "0", {
+ value: "abc"
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arrObj, "0", 101);
+
+ verifyNotWritable(arrObj, "0");
+
+ verifyNotEnumerable(arrObj, "0");
+
+ verifyNotConfigurable(arrObj, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-215.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-215.js
new file mode 100644
index 0000000000..f6fccd3a61
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-215.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-215
+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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-216.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-216.js
new file mode 100644
index 0000000000..ac7099d2bd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-216.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-216
+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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-217.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-217.js
new file mode 100644
index 0000000000..3b9df95a20
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-217.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-217
+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 NaN (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "0", {
+ value: NaN
+});
+
+Object.defineProperty(arrObj, "0", {
+ value: NaN
+});
+
+assert(arrObj.hasOwnProperty("0"));
+assert(arrObj[0] !== arrObj[0]);
+
+verifyNotWritable(arrObj, "0");
+verifyNotEnumerable(arrObj, "0");
+verifyNotConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-218.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-218.js
new file mode 100644
index 0000000000..f9e2e8c567
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-218.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-218
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "0", {
+ value: -0
+});
+
+try {
+ Object.defineProperty(arrObj, "0", {
+ value: +0
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arrObj, "0", -0);
+
+ verifyNotWritable(arrObj, "0");
+
+ verifyNotEnumerable(arrObj, "0");
+
+ verifyNotConfigurable(arrObj, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-219.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-219.js
new file mode 100644
index 0000000000..627a70f3ac
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-219.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-219
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "0", {
+ value: +0
+});
+
+try {
+ Object.defineProperty(arrObj, "0", {
+ value: -0
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arrObj, "0", +0);
+
+ verifyNotWritable(arrObj, "0");
+
+ verifyNotEnumerable(arrObj, "0");
+
+ verifyNotConfigurable(arrObj, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-22.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-22.js
new file mode 100644
index 0000000000..b43c7308e4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-22.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-22
+description: >
+ Object.defineProperty - 'name' is existing own data property
+ (8.12.9 step 1)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, "foo", {
+ value: 11,
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "foo", {
+ value: 12,
+ configurable: true
+ });
+});
+assert.sameValue(obj.foo, 11, 'obj.foo');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-220.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-220.js
new file mode 100644
index 0000000000..1e3d4a2d4c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-220.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-220
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ property, the [[Value]] field of 'desc' and the [[Value]]
+ attribute value of 'name' are two numbers with same vaule
+ (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "0", {
+ value: 101
+});
+
+Object.defineProperty(arrObj, "0", {
+ value: 101
+});
+verifyEqualTo(arrObj, "0", 101);
+
+verifyNotWritable(arrObj, "0");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-221.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-221.js
new file mode 100644
index 0000000000..00732ff7be
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-221.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-221
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, 0, {
+ value: 101,
+ writable: false,
+ configurable: false
+});
+
+try {
+ Object.defineProperty(arrObj, "0", {
+ value: 123
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arrObj, "0", 101);
+
+ verifyNotWritable(arrObj, "0");
+
+ verifyNotEnumerable(arrObj, "0");
+
+ verifyNotConfigurable(arrObj, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-222.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-222.js
new file mode 100644
index 0000000000..88d73c0af9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-222.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-222
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ property, the [[Value]] field of 'desc' and the [[Value]]
+ attribute value of 'name' are two strings which have same length
+ and same characters in corresponding positions (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-223.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-223.js
new file mode 100644
index 0000000000..7177f6a39a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-223.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-223
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, 0, {
+ value: "abcd",
+ writable: false,
+ configurable: false
+});
+
+try {
+ Object.defineProperty(arrObj, "0", {
+ value: "fghj"
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arrObj, "0", "abcd");
+
+ verifyNotWritable(arrObj, "0");
+
+ verifyNotEnumerable(arrObj, "0");
+
+ verifyNotConfigurable(arrObj, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-224.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-224.js
new file mode 100644
index 0000000000..91cac8ffdc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-224.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-224
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ property, the [[Value]] field of 'desc' and the [[Value]]
+ attribute value of 'name' are two booleans with same value
+ (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-225.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-225.js
new file mode 100644
index 0000000000..28d8f74f8e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-225.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-225
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, 0, {
+ value: true,
+ writable: false,
+ configurable: false
+});
+
+try {
+ Object.defineProperty(arrObj, "0", {
+ value: false
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arrObj, "0", true);
+
+ verifyNotWritable(arrObj, "0");
+
+ verifyNotEnumerable(arrObj, "0");
+
+ verifyNotConfigurable(arrObj, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-226.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-226.js
new file mode 100644
index 0000000000..d766b26449
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-226.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-226
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ property, the [[Value]] field of 'desc' and the [[Value]]
+ attribute value of 'name' are two objects which refer to the same
+ object (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+var obj1 = {
+ length: 10
+};
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-227.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-227.js
new file mode 100644
index 0000000000..1834373563
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-227.js
@@ -0,0 +1,49 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-227
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+var obj1 = {
+ length: 10
+};
+Object.defineProperty(arrObj, 0, {
+ value: obj1,
+ writable: false,
+ configurable: false
+});
+
+var obj2 = {
+ length: 20
+};
+
+try {
+ Object.defineProperty(arrObj, "0", {
+ value: obj2
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arrObj, "0", obj1);
+
+ verifyNotWritable(arrObj, "0");
+
+ verifyNotEnumerable(arrObj, "0");
+
+ verifyNotConfigurable(arrObj, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-228.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-228.js
new file mode 100644
index 0000000000..9316e59db2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-228.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-228
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-229.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-229.js
new file mode 100644
index 0000000000..e1dead5a60
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-229.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-229
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "0", {
+ writable: false,
+ configurable: true
+});
+
+Object.defineProperty(arrObj, "0", {
+ writable: true
+});
+verifyEqualTo(arrObj, "0", undefined);
+
+verifyWritable(arrObj, "0");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-23.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-23.js
new file mode 100644
index 0000000000..c4d0277445
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-23.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-23
+description: >
+ Object.defineProperty - 'name' is existing an inherited data
+ property (8.12.9 step 1)
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "foo", {
+ value: 11,
+ configurable: false
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var obj = new ConstructFun();
+
+Object.defineProperty(obj, "foo", {
+ configurable: true
+});
+
+assert(obj.hasOwnProperty("foo"), 'obj.hasOwnProperty("foo") !== true');
+assert.sameValue(typeof obj.foo, "undefined", 'typeof obj.foo');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-230.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-230.js
new file mode 100644
index 0000000000..61d0187d81
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-230.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-230
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-231.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-231.js
new file mode 100644
index 0000000000..40199bd209
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-231.js
@@ -0,0 +1,47 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-231
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-232.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-232.js
new file mode 100644
index 0000000000..d22adbe6f1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-232.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-232
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+function setFunc(value) {
+ arrObj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(arrObj, "0", {
+ set: setFunc
+});
+
+Object.defineProperty(arrObj, "0", {
+ set: setFunc
+});
+verifyWritable(arrObj, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-233.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-233.js
new file mode 100644
index 0000000000..bd2f68977e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-233.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-233
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+function setFunc1() {}
+
+Object.defineProperty(arrObj, "0", {
+ set: setFunc1,
+ configurable: true
+});
+
+function setFunc2(value) {
+ arrObj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(arrObj, "0", {
+ set: setFunc2
+});
+verifyWritable(arrObj, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-234.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-234.js
new file mode 100644
index 0000000000..b67690ecd5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-234.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-234
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-235.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-235.js
new file mode 100644
index 0000000000..d10baaf8d4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-235.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-235
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-236.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-236.js
new file mode 100644
index 0000000000..b7df65b72a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-236.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-236
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "0", {
+ configurable: false
+});
+
+Object.defineProperty(arrObj, "0", {
+ configurable: false
+});
+verifyEqualTo(arrObj, "0", undefined);
+
+verifyNotWritable(arrObj, "0");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-237.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-237.js
new file mode 100644
index 0000000000..59d2e8c84e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-237.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-237
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-238.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-238.js
new file mode 100644
index 0000000000..9708bd0766
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-238.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-238
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "1", {
+ value: 3,
+ writable: true,
+ configurable: false
+});
+
+try {
+ Object.defineProperty(arrObj, "1", {
+ value: 13,
+ writable: true,
+ configurable: true
+ });
+ throw new Test262Error("Expected an exception.");
+
+} catch (e) {
+ verifyEqualTo(arrObj, "1", 3);
+
+ verifyWritable(arrObj, "1");
+
+ verifyNotEnumerable(arrObj, "1");
+
+ verifyNotConfigurable(arrObj, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-239.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-239.js
new file mode 100644
index 0000000000..16a8aa0b1a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-239.js
@@ -0,0 +1,48 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-239
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, TypeError is thrown if the [[Configurable]]
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "1", {
+ value: 3,
+ writable: true,
+ configurable: false,
+ enumerable: false
+});
+
+try {
+ Object.defineProperty(arrObj, "1", {
+ value: 13,
+ writable: true,
+ enumerable: true
+ });
+ throw new Test262Error("Expected an exception.");
+
+} catch (e) {
+ verifyEqualTo(arrObj, "1", 3);
+
+ verifyWritable(arrObj, "1");
+
+ verifyNotEnumerable(arrObj, "1");
+
+ verifyNotConfigurable(arrObj, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-24.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-24.js
new file mode 100644
index 0000000000..0254703005
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-24.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-24
+description: >
+ Object.defineProperty - 'name' is own data property that overrides
+ an inherited data property (8.12.9 step 1)
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "foo", {
+ value: 12,
+ configurable: true
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var obj = new ConstructFun();
+Object.defineProperty(obj, "foo", {
+ value: 11,
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "foo", {
+ configurable: true
+ });
+});
+assert.sameValue(obj.foo, 11, 'obj.foo');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-240.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-240.js
new file mode 100644
index 0000000000..e74b2479d3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-240.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-240
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [];
+
+function setFunc(value) {
+ arrObj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(arrObj, "1", {
+ set: setFunc,
+ configurable: false
+});
+
+try {
+ Object.defineProperty(arrObj, "1", {
+ value: 13
+ });
+ throw new Test262Error("Expected an exception.");
+
+} catch (e) {
+ verifyWritable(arrObj, "1", "setVerifyHelpProp");
+
+ verifyNotEnumerable(arrObj, "1");
+
+ verifyNotConfigurable(arrObj, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-241.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-241.js
new file mode 100644
index 0000000000..8923abc966
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-241.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-241
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "1", {
+ value: 3,
+ configurable: false
+});
+
+try {
+ Object.defineProperty(arrObj, "1", {
+ set: function() {}
+ });
+ throw new Test262Error("Expected an exception.");
+
+} catch (e) {
+ verifyEqualTo(arrObj, "1", 3);
+
+ verifyNotWritable(arrObj, "1");
+
+ verifyNotEnumerable(arrObj, "1");
+
+ verifyNotConfigurable(arrObj, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-242-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-242-1.js
new file mode 100644
index 0000000000..7c21f48ca5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-242-1.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-242-1
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [3];
+
+Object.defineProperty(arrObj, "0", {
+ value: 1001,
+ writable: false,
+ enumerable: false
+});
+
+verifyEqualTo(arrObj, "0", 1001);
+
+verifyNotWritable(arrObj, "0");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-242.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-242.js
new file mode 100644
index 0000000000..5f1d4a8dce
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-242.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-242
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' is data property and 'desc' is accessor
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [3];
+
+function setFunc(value) {
+ arrObj.setVerifyHelpProp = value;
+}
+Object.defineProperty(arrObj, "0", {
+ set: setFunc
+});
+
+verifyWritable(arrObj, "0", "setVerifyHelpProp");
+
+verifyEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-243-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-243-1.js
new file mode 100644
index 0000000000..a87d6172ea
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-243-1.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-243-1
+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: [noStrict]
+---*/
+
+
+var arrObj = [];
+
+function getFunc() {
+ return 3;
+}
+Object.defineProperty(arrObj, "1", {
+ get: getFunc,
+ configurable: true
+});
+
+arrObj[1] = 4;
+
+verifyEqualTo(arrObj, "1", getFunc());
+
+verifyNotEnumerable(arrObj, "1");
+
+verifyConfigurable(arrObj, "1");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-243-2-strict.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-243-2-strict.js
new file mode 100644
index 0000000000..ef5649662c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-243-2-strict.js
@@ -0,0 +1,36 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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
+});
+
+assert.throws(TypeError, function() {
+ arrObj[1] = 4;
+});
+verifyEqualTo(arrObj, "1", getFunc());
+
+verifyNotEnumerable(arrObj, "1");
+
+verifyConfigurable(arrObj, "1");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-243.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-243.js
new file mode 100644
index 0000000000..08a11f8705
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-243.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-243
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' is accessor property and 'desc' is data
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [];
+
+function getFunc() {
+ return 3;
+}
+Object.defineProperty(arrObj, "1", {
+ get: getFunc,
+ configurable: true
+});
+
+Object.defineProperty(arrObj, "1", {
+ value: 12
+});
+
+verifyEqualTo(arrObj, "1", 12);
+
+verifyNotWritable(arrObj, "1");
+
+verifyNotEnumerable(arrObj, "1");
+
+verifyConfigurable(arrObj, "1");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-244.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-244.js
new file mode 100644
index 0000000000..e5e1d30c7b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-244.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-244
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' is data property and 'desc' is data
+ descriptor, and the [[Configurable]] attribute value of 'name' is
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "1", {
+ writable: false,
+ configurable: false
+});
+
+try {
+
+ Object.defineProperty(arrObj, "1", {
+ writable: true
+ });
+ throw new Test262Error("Expected an exception.");
+
+} catch (e) {
+ verifyEqualTo(arrObj, "1", undefined);
+
+ verifyNotWritable(arrObj, "1");
+
+ verifyNotEnumerable(arrObj, "1");
+
+ verifyNotConfigurable(arrObj, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-245.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-245.js
new file mode 100644
index 0000000000..eae22cfee2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-245.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-245
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' is data property and 'desc' is data
+ descriptor, and the [[Configurable]] attribute value of 'name' is
+ false, test TypeError is thrown if the [[Writable]] attribute
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "1", {
+ value: 3,
+ writable: false,
+ configurable: false
+});
+
+try {
+ Object.defineProperty(arrObj, "1", {
+ value: "abc"
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arrObj, "1", 3);
+
+ verifyNotWritable(arrObj, "1");
+
+ verifyNotEnumerable(arrObj, "1");
+
+ verifyNotConfigurable(arrObj, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-246.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-246.js
new file mode 100644
index 0000000000..dddbc50767
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-246.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-246
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' is data property and 'desc' is data
+ descriptor, and the [[Configurable]] attribute value of 'name' is
+ false, test TypeError is thrown if the [[Writable]] attribute
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "1", {
+ value: -0
+
+});
+
+try {
+ Object.defineProperty(arrObj, "1", {
+ value: +0
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arrObj, "1", -0);
+
+ verifyNotWritable(arrObj, "1");
+
+ verifyNotEnumerable(arrObj, "1");
+
+ verifyNotConfigurable(arrObj, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-247.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-247.js
new file mode 100644
index 0000000000..1a3085a231
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-247.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-247
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' is data property and 'desc' is data
+ descriptor, and the [[Configurable]] attribute value of 'name' is
+ false, test TypeError is thrown if the [[Writable]] attribute
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "1", {
+ value: +0
+});
+
+try {
+
+ Object.defineProperty(arrObj, "1", {
+ value: -0
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arrObj, "1", +0);
+
+ verifyNotWritable(arrObj, "1");
+
+ verifyNotEnumerable(arrObj, "1");
+
+ verifyNotConfigurable(arrObj, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-248.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-248.js
new file mode 100644
index 0000000000..b946c44ae1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-248.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-248
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' is data property and 'desc' is data
+ descriptor, and the [[Configurable]] attribute value of 'name' is
+ false, test TypeError is thrown if the [[Writable]] attribute
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "1", {
+ value: 12
+});
+
+try {
+ Object.defineProperty(arrObj, "1", {
+ value: 15
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arrObj, "1", 12);
+
+ verifyNotWritable(arrObj, "1");
+
+ verifyNotEnumerable(arrObj, "1");
+
+ verifyNotConfigurable(arrObj, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-249.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-249.js
new file mode 100644
index 0000000000..9a7132c20f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-249.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-249
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' is data property and 'desc' is data
+ descriptor, and the [[Configurable]] attribute value of 'name' is
+ false, test TypeError is thrown if the [[Writable]] attribute
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "1", {
+ value: "abc"
+});
+
+try {
+ Object.defineProperty(arrObj, "1", {
+ value: "fgh"
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arrObj, "1", "abc");
+
+ verifyNotWritable(arrObj, "1");
+
+ verifyNotEnumerable(arrObj, "1");
+
+ verifyNotConfigurable(arrObj, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-25.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-25.js
new file mode 100644
index 0000000000..dd8be9d5af
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-25.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-25
+description: >
+ Object.defineProperty - 'data' is own data property that overrides
+ an inherited accessor property (8.12.9 step 1)
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "foo", {
+ get: function() {},
+ configurable: true
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var obj = new ConstructFun();
+Object.defineProperty(obj, "foo", {
+ value: 11,
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "foo", {
+ configurable: true
+ });
+});
+assert.sameValue(obj.foo, 11, 'obj.foo');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-250.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-250.js
new file mode 100644
index 0000000000..e4710d7ef8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-250.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-250
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' is data property and 'desc' is data
+ descriptor, and the [[Configurable]] attribute value of 'name' is
+ false, test TypeError is thrown if the [[Writable]] attribute
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "1", {
+ value: false
+});
+
+try {
+ Object.defineProperty(arrObj, "1", {
+ value: true
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arrObj, "1", false);
+
+ verifyNotWritable(arrObj, "1");
+
+ verifyNotEnumerable(arrObj, "1");
+
+ verifyNotConfigurable(arrObj, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-251.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-251.js
new file mode 100644
index 0000000000..594cb3a3ee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-251.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-251
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' is data property and 'desc' is data
+ descriptor, and the [[Configurable]] attribute value of 'name' is
+ false, test TypeError is thrown if the [[Writable]] attribute
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+var obj = {
+ length: 10
+};
+
+Object.defineProperty(arrObj, "1", {
+ value: obj
+});
+
+try {
+ Object.defineProperty(arrObj, "1", {
+ value: {}
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arrObj, "1", obj);
+
+ verifyNotWritable(arrObj, "1");
+
+ verifyNotEnumerable(arrObj, "1");
+
+ verifyNotConfigurable(arrObj, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-252.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-252.js
new file mode 100644
index 0000000000..ab56258dc1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-252.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-252
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' is accessor property and 'desc' is accessor
+ descriptor, and the [[Configurable]] attribute value of 'name' is
+ false, test TypeError is thrown if the [[Set]] field of 'desc' is
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+function setFunc(value) {
+ arrObj.setVerifyHelpProp = value;
+}
+Object.defineProperty(arrObj, "1", {
+ set: setFunc
+});
+
+try {
+ Object.defineProperty(arrObj, "1", {
+ set: function() {}
+ });
+ throw new Test262Error("Expected an exception.");
+
+} catch (e) {
+ verifyWritable(arrObj, "1", "setVerifyHelpProp");
+
+ verifyNotEnumerable(arrObj, "1");
+
+ verifyNotConfigurable(arrObj, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-253.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-253.js
new file mode 100644
index 0000000000..a6fbb2221c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-253.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-253
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' is accessor property and 'desc' is accessor
+ descriptor, and the [[Configurable]] attribute value of 'name' is
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+function getFunc() {
+ return 12;
+}
+
+Object.defineProperty(arrObj, "1", {
+ get: getFunc,
+ set: undefined
+});
+
+try {
+ Object.defineProperty(arrObj, "1", {
+ set: function() {}
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arrObj, "1", getFunc());
+
+ verifyNotEnumerable(arrObj, "1");
+
+ verifyNotConfigurable(arrObj, "1");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-254.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-254.js
new file mode 100644
index 0000000000..857f5bd3e1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-254.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-254
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' is accessor property and 'desc' is accessor
+ descriptor, and the [[Configurable]] attribute value of 'name' is
+ false, test TypeError is not thrown if the [[Set]] field of 'desc'
+ is present, and the [[Set]] field of 'desc' and the [[Set]]
+ attribute value of 'name' are undefined (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "1", {
+ set: undefined
+});
+assert(arrObj.hasOwnProperty("1"));
+
+Object.defineProperty(arrObj, "1", {
+ set: undefined
+});
+
+var desc = Object.getOwnPropertyDescriptor(arrObj, "1");
+
+assert(desc.hasOwnProperty("get") && typeof desc.get === "undefined");
+assert(desc.hasOwnProperty("set") && typeof desc.set === "undefined");
+
+verifyNotEnumerable(arrObj, "1");
+verifyNotConfigurable(arrObj, "1");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-255.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-255.js
new file mode 100644
index 0000000000..03e3d8a268
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-255.js
@@ -0,0 +1,48 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-255
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' is accessor property and 'desc' is accessor
+ descriptor, and the [[Configurable]] attribute value of 'name' is
+ false, test TypeError is thrown if the [[Get]] field of 'desc' is
+ present, and 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+function getFunc() {
+ return 12;
+}
+Object.defineProperty(arrObj, "1", {
+ get: getFunc
+});
+
+try {
+ Object.defineProperty(arrObj, "1", {
+ get: function() {
+ return 14;
+ }
+ });
+
+ throw new Test262Error("Expected TypeError");
+} catch (e) {
+ assert(e instanceof TypeError);
+ assert(arrObj.hasOwnProperty("1"));
+
+ var desc = Object.getOwnPropertyDescriptor(arrObj, "1");
+
+ assert(arrObj[1] === getFunc());
+
+ assert(desc.hasOwnProperty("set") && typeof desc.set === "undefined");
+
+ verifyNotEnumerable(arrObj, "1");
+ verifyNotConfigurable(arrObj, "1");
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-256.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-256.js
new file mode 100644
index 0000000000..a015f2a9a0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-256.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-256
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' is accessor property and 'desc' is accessor
+ descriptor, and the [[Configurable]] attribute value of 'name' is
+ false, test TypeError is thrown if the [[Get]] field of 'desc' is
+ present, and the [[Get]] field of 'desc' is an object and the
+ [[Get]] attribute value of 'name' is undefined (15.4.5.1 step 4.c)
+includes: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+function getFunc() {
+ return 12;
+}
+
+Object.defineProperty(arrObj, "1", {
+ get: getFunc
+});
+
+try {
+ Object.defineProperty(arrObj, "1", {
+ get: undefined
+ });
+ throw new Test262Error("Expected TypeError");
+} catch (e) {
+ assert(e instanceof TypeError);
+ assert(arrObj.hasOwnProperty("1"));
+
+ var desc = Object.getOwnPropertyDescriptor(arrObj, "1");
+
+ assert(arrObj[1] === getFunc());
+ assert(desc.hasOwnProperty("set") && typeof desc.set === "undefined");
+
+ verifyNotWritable(arrObj, "1");
+
+ verifyNotConfigurable(arrObj, "1");
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-257.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-257.js
new file mode 100644
index 0000000000..e6e8c2d369
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-257.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-257
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, 'name' is accessor property and 'desc' is accessor
+ descriptor, and the [[Configurable]] attribute value of 'name' is
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+function setFunc(value) {
+ arrObj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(arrObj, "1", {
+ get: undefined,
+ set: setFunc,
+ configurable: false
+});
+
+Object.defineProperty(arrObj, "1", {
+ get: undefined
+});
+
+verifyWritable(arrObj, "1", "setVerifyHelpProp");
+
+verifyNotEnumerable(arrObj, "1");
+
+verifyNotConfigurable(arrObj, "1");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-258.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-258.js
new file mode 100644
index 0000000000..9821d646bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-258.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-258
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [100];
+
+Object.defineProperty(arrObj, "0", {
+ value: 200
+});
+verifyEqualTo(arrObj, "0", 200);
+
+verifyWritable(arrObj, "0");
+
+verifyEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-259.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-259.js
new file mode 100644
index 0000000000..b0fbd5e780
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-259.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-259
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [100];
+
+Object.defineProperty(arrObj, "0", {
+ value: undefined
+});
+verifyEqualTo(arrObj, "0", undefined);
+
+verifyWritable(arrObj, "0");
+
+verifyEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-26.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-26.js
new file mode 100644
index 0000000000..5f6f340564
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-26.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-26
+description: >
+ Object.defineProperty - 'name' is own accessor property (8.12.9
+ step 1)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ get: function() {
+ return 11;
+ },
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "property", {
+ get: function() {
+ return 12;
+ },
+ configurable: true
+ });
+});
+assert.sameValue(obj.property, 11, 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-260.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-260.js
new file mode 100644
index 0000000000..5e2b69c160
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-260.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-260
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [undefined];
+Object.defineProperty(arrObj, "0", {
+ value: 100
+});
+verifyEqualTo(arrObj, "0", 100);
+
+verifyWritable(arrObj, "0");
+
+verifyEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-261.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-261.js
new file mode 100644
index 0000000000..e945f54eeb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-261.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-261
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [100];
+Object.defineProperty(arrObj, "0", {
+ writable: false
+});
+verifyEqualTo(arrObj, "0", 100);
+
+verifyNotWritable(arrObj, "0");
+
+verifyEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-262.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-262.js
new file mode 100644
index 0000000000..aed61cb5ae
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-262.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-262
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [100];
+
+Object.defineProperty(arrObj, "0", {
+ enumerable: false
+});
+verifyEqualTo(arrObj, "0", 100);
+
+verifyWritable(arrObj, "0");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-263.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-263.js
new file mode 100644
index 0000000000..b0b4ea2cc0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-263.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-263
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [100];
+
+Object.defineProperty(arrObj, "0", {
+ configurable: false
+});
+verifyEqualTo(arrObj, "0", 100);
+
+verifyWritable(arrObj, "0");
+
+verifyEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-264.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-264.js
new file mode 100644
index 0000000000..a7d2eac7f2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-264.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-264
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-265.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-265.js
new file mode 100644
index 0000000000..f68fdd93f4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-265.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-265
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [];
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-266.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-266.js
new file mode 100644
index 0000000000..98d664d424
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-266.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-266
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [];
+
+function getFunc() {
+ return 12;
+}
+
+Object.defineProperty(arrObj, "0", {
+ get: getFunc,
+ configurable: true
+});
+
+Object.defineProperty(arrObj, "0", {
+ get: undefined
+});
+verifyNotEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-267.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-267.js
new file mode 100644
index 0000000000..b1d1f3c19e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-267.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-267
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [];
+
+function getFunc() {
+ return 12;
+}
+Object.defineProperty(arrObj, "0", {
+ get: undefined,
+ configurable: true
+});
+
+Object.defineProperty(arrObj, "0", {
+ get: getFunc
+});
+verifyEqualTo(arrObj, "0", getFunc());
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-268.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-268.js
new file mode 100644
index 0000000000..8f65ec43a1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-268.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-268
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [];
+
+function setFunc(value) {
+ arrObj.setVerifyHelpProp = value;
+}
+Object.defineProperty(arrObj, "0", {
+ set: function() {},
+ configurable: true
+});
+
+Object.defineProperty(arrObj, "0", {
+ set: setFunc
+});
+verifyWritable(arrObj, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-269.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-269.js
new file mode 100644
index 0000000000..84be2830ff
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-269.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-269
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "0", {
+ set: function() {},
+ configurable: true
+});
+
+Object.defineProperty(arrObj, "0", {
+ set: undefined
+});
+verifyNotEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-27.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-27.js
new file mode 100644
index 0000000000..44511c75b9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-27.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-27
+description: >
+ Object.defineProperty - 'name' is an inherited accessor property
+ (8.12.9 step 1)
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "property", {
+ get: function() {
+ return 11;
+ },
+ configurable: false
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var obj = new ConstructFun();
+
+Object.defineProperty(obj, "property", {
+ get: function() {
+ return 12;
+ },
+ configurable: true
+});
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert.sameValue(obj.property, 12, 'obj.property');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-270.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-270.js
new file mode 100644
index 0000000000..696ebb956a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-270.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-270
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [];
+
+function setFunc(value) {
+ arrObj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(arrObj, "0", {
+ set: undefined,
+ configurable: true
+});
+
+Object.defineProperty(arrObj, "0", {
+ set: setFunc
+});
+verifyWritable(arrObj, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-271.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-271.js
new file mode 100644
index 0000000000..e82084fe9e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-271.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-271
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [];
+
+function setFunc(value) {
+ arrObj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(arrObj, "0", {
+ set: setFunc,
+ enumerable: true,
+ configurable: true
+});
+
+Object.defineProperty(arrObj, "0", {
+ enumerable: false
+});
+verifyWritable(arrObj, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-272.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-272.js
new file mode 100644
index 0000000000..663614560e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-272.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-272
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [];
+
+function setFunc(value) {
+ arrObj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(arrObj, "0", {
+ set: setFunc,
+ configurable: true
+});
+
+Object.defineProperty(arrObj, "0", {
+ configurable: false
+});
+verifyWritable(arrObj, "0", "setVerifyHelpProp");
+
+verifyNotEnumerable(arrObj, "0");
+
+verifyNotConfigurable(arrObj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-273.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-273.js
new file mode 100644
index 0000000000..14d45dbbb5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-273.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-273
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ 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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-274.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-274.js
new file mode 100644
index 0000000000..39367644a2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-274.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-274
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, test the length property of 'O' is not changed if
+ ToUint32('name') is less than value of the length property in 'O'
+ (15.4.5.1 step 4.e)
+---*/
+
+var arrObj = [];
+arrObj.length = 3; // default value of length: writable: true, configurable: false, enumerable: false
+
+Object.defineProperty(arrObj, "1", {
+ value: 14
+});
+
+assert.sameValue(arrObj.length, 3, 'arrObj.length');
+assert.sameValue(arrObj[1], 14, 'arrObj[1]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-275.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-275.js
new file mode 100644
index 0000000000..ce176462cc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-275.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-275
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, test the length property of 'O' is set as
+ ToUint32('name') + 1 if ToUint32('name') equals to value of the
+ length property in 'O' (15.4.5.1 step 4.e.ii)
+---*/
+
+var arrObj = [];
+arrObj.length = 3; // default value of length: writable: true, configurable: false, enumerable: false
+
+Object.defineProperty(arrObj, "3", {
+ value: 3
+});
+
+assert.sameValue(arrObj.length, 4, 'arrObj.length');
+assert.sameValue(arrObj[3], 3, 'arrObj[3]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-276.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-276.js
new file mode 100644
index 0000000000..a5b4616b80
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-276.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-276
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is an array index
+ named property, test the length property of 'O' is set as
+ ToUint32('name') + 1 if ToUint32('name') is greater than value of
+ the length property in 'O' (15.4.5.1 step 4.e.ii)
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "5", {
+ value: 3
+});
+
+assert.sameValue(arrObj.length, 6, 'arrObj.length');
+assert.sameValue(arrObj[5], 3, 'arrObj[5]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-277.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-277.js
new file mode 100644
index 0000000000..825c594a6b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-277.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-277
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is generic
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [];
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-278.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-278.js
new file mode 100644
index 0000000000..4ad70e2558
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-278.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-278
+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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [];
+
+function getFunc() {
+ return 12;
+}
+
+function setFunc(value) {
+ arrObj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(arrObj, "property", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: true,
+ configurable: true
+});
+
+verifyEqualTo(arrObj, "property", getFunc());
+
+verifyWritable(arrObj, "property", "setVerifyHelpProp");
+
+verifyEnumerable(arrObj, "property");
+
+verifyConfigurable(arrObj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-279.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-279.js
new file mode 100644
index 0000000000..9f78e7cc67
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-279.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-279
+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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-28.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-28.js
new file mode 100644
index 0000000000..12ce2647fd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-28.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-28
+description: >
+ Object.defineProperty - 'name' is own accessor property that
+ overrides an inherited data property (8.12.9 step 1)
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "foo", {
+ value: 11,
+ configurable: true
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var obj = new ConstructFun();
+Object.defineProperty(obj, "foo", {
+ get: function() {},
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "foo", {
+ configurable: true
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-280.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-280.js
new file mode 100644
index 0000000000..7315c8c784
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-280.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-280
+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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [];
+
+arrObj.property = 12; // default value of attributes: writable: true, configurable: true, enumerable: true
+
+Object.defineProperty(arrObj, "property", {
+ writable: false,
+ enumerable: false,
+ configurable: false
+});
+
+verifyEqualTo(arrObj, "property", 12);
+
+verifyNotWritable(arrObj, "property");
+
+verifyNotEnumerable(arrObj, "property");
+
+verifyNotConfigurable(arrObj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-281.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-281.js
new file mode 100644
index 0000000000..67ec5776bc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-281.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-281
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is generic own
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "property", {
+ value: 12
+});
+try {
+ Object.defineProperty(arrObj, "property", {
+ value: 36
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arrObj, "property", 12);
+
+ verifyNotWritable(arrObj, "property");
+
+ verifyNotEnumerable(arrObj, "property");
+
+ verifyNotConfigurable(arrObj, "property");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-282.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-282.js
new file mode 100644
index 0000000000..0b05899bc6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-282.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-282
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is generic own
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "property", {
+ writable: false
+});
+try {
+ Object.defineProperty(arrObj, "property", {
+ writable: true
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arrObj, "property", undefined);
+
+ verifyNotWritable(arrObj, "property");
+
+ verifyNotEnumerable(arrObj, "property");
+
+ verifyNotConfigurable(arrObj, "property");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-283.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-283.js
new file mode 100644
index 0000000000..7ca939b4f5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-283.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-283
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is generic own
+ 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: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "property", {
+ value: 12,
+ enumerable: false
+});
+try {
+ Object.defineProperty(arrObj, "property", {
+ enumerable: true
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arrObj, "property", 12);
+
+ verifyNotWritable(arrObj, "property");
+
+ verifyNotEnumerable(arrObj, "property");
+
+ verifyNotConfigurable(arrObj, "property");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-284.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-284.js
new file mode 100644
index 0000000000..48bd118b9c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-284.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-284
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is generic own
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "property", {
+ value: 12
+});
+try {
+ Object.defineProperty(arrObj, "property", {
+ configurable: true
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arrObj, "property", 12);
+
+ verifyNotWritable(arrObj, "property");
+
+ verifyNotEnumerable(arrObj, "property");
+
+ verifyNotConfigurable(arrObj, "property");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-285.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-285.js
new file mode 100644
index 0000000000..055d7d32d7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-285.js
@@ -0,0 +1,50 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-285
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is generic own
+ 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: [propertyHelper.js]
+---*/
+
+
+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;
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(arrObj, "property", getFunc());
+
+ verifyWritable(arrObj, "property", "setVerifyHelpProp");
+
+ verifyNotEnumerable(arrObj, "property");
+
+ verifyNotConfigurable(arrObj, "property");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-286.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-286.js
new file mode 100644
index 0000000000..ebf54b5e61
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-286.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-286
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is generic own
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [];
+
+function setFunc(value) {
+ arrObj.setVerifyHelpProp = value;
+}
+Object.defineProperty(arrObj, "property", {
+ set: setFunc
+});
+try {
+ Object.defineProperty(arrObj, "property", {
+ set: function() {}
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyWritable(arrObj, "property", "setVerifyHelpProp");
+
+ verifyNotEnumerable(arrObj, "property");
+
+ verifyNotConfigurable(arrObj, "property");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-287.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-287.js
new file mode 100644
index 0000000000..3aa609e301
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-287.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-287
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is generic own
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [];
+
+function setFunc(value) {
+ arrObj.setVerifyHelpProp = value;
+}
+Object.defineProperty(arrObj, "property", {
+ set: setFunc,
+ enumerable: false
+});
+try {
+ Object.defineProperty(arrObj, "property", {
+ enumerable: true
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyWritable(arrObj, "property", "setVerifyHelpProp");
+
+ verifyNotEnumerable(arrObj, "property");
+
+ verifyNotConfigurable(arrObj, "property");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-288.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-288.js
new file mode 100644
index 0000000000..99317bcbab
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-288.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-288
+description: >
+ Object.defineProperty - 'O' is an Array, 'name' is generic own
+ 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: [propertyHelper.js]
+---*/
+
+
+var arrObj = [];
+
+function setFunc(value) {
+ arrObj.setVerifyHelpProp = value;
+}
+Object.defineProperty(arrObj, "property", {
+ set: setFunc,
+ configurable: false
+});
+try {
+ Object.defineProperty(arrObj, "property", {
+ configurable: true
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyWritable(arrObj, "property", "setVerifyHelpProp");
+
+ verifyNotEnumerable(arrObj, "property");
+
+ verifyNotConfigurable(arrObj, "property");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-289-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-289-1.js
new file mode 100644
index 0000000000..9c16dbb07a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-289-1.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+;
+(function(a, b, c) {
+ delete arguments[0];
+
+ Object.defineProperty(arguments, "0", {
+ value: 10,
+ writable: true,
+ enumerable: true,
+ configurable: true
+ });
+
+ if (a !== 0) {
+ throw new Test262Error("Expected a === 0, actually " + a);
+ }
+
+ verifyEqualTo(arguments, "0", 10);
+
+ verifyWritable(arguments, "0");
+
+ verifyEnumerable(arguments, "0");
+
+ verifyConfigurable(arguments, "0");
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-289.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-289.js
new file mode 100644
index 0000000000..4b90e38ef6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-289.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-289
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is own
+ 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: [propertyHelper.js]
+---*/
+
+(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));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-29.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-29.js
new file mode 100644
index 0000000000..4ffa113be7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-29.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-29
+description: >
+ Object.defineProperty - 'name' is own accessor property that
+ overrides an inherited accessor property (8.12.9 step 1)
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "foo", {
+ get: function() {},
+ configurable: true
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var obj = new ConstructFun();
+Object.defineProperty(obj, "foo", {
+ get: function() {},
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "foo", {
+ configurable: true
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-290-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-290-1.js
new file mode 100644
index 0000000000..71fa4baeff
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-290-1.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-290-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', 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: [propertyHelper.js]
+---*/
+
+(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
+ });
+ if (a !== 0) {
+ throw new Test262Error('Expected a === 0, actually ' + a);
+ }
+
+ verifyEqualTo(arguments, "0", getFunc());
+
+ verifyWritable(arguments, "0", "setVerifyHelpProp");
+
+ verifyEnumerable(arguments, "0");
+
+ verifyConfigurable(arguments, "0");
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-290.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-290.js
new file mode 100644
index 0000000000..6b4d350268
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-290.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-290
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is own
+ 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: [propertyHelper.js]
+---*/
+
+(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
+ });
+ verifyEqualTo(arguments, "0", getFunc());
+
+ verifyWritable(arguments, "0", "setVerifyHelpProp");
+
+ verifyEnumerable(arguments, "0");
+
+ verifyConfigurable(arguments, "0");
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-291-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-291-1.js
new file mode 100644
index 0000000000..04faea4a9e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-291-1.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-291-1
+description: >
+ Object.defineProperty - 'O' is an Arguments object of a function
+ that has formal parameters, 'name' is own accessor property of 'O'
+ which is also defined in [[ParameterMap]] of 'O', and 'desc' is
+ accessor descriptor, test updating multiple attribute values of
+ 'name' (10.6 [[DefineOwnProperty]] step 3 and 5.a.i)
+includes: [propertyHelper.js]
+---*/
+
+(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
+ });
+ if (a !== 0) {
+ throw new Test262Error('Expected a === 0, actually ' + a);
+ }
+
+ verifyEqualTo(arguments, "0", getFunc2());
+
+ verifyNotEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-291.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-291.js
new file mode 100644
index 0000000000..0d936a72a3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-291.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-291
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is own
+ accessor property of 'O', and 'desc' is accessor descriptor, test
+ updating multiple attribute values of 'name' (10.6
+ [[DefineOwnProperty]] step 3)
+includes: [propertyHelper.js]
+---*/
+
+(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
+ });
+ verifyEqualTo(arguments, "0", getFunc2());
+
+ verifyNotEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-292-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-292-1.js
new file mode 100644
index 0000000000..124143b87c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-292-1.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [noStrict]
+---*/
+
+(function(a, b, c) {
+ Object.defineProperty(arguments, "0", {
+ value: 20,
+ writable: false,
+ enumerable: false,
+ configurable: false
+ });
+
+ if (a !== 20) {
+ throw new Test262Error('Expected a === 20, actually ' + a);
+ }
+
+ verifyEqualTo(arguments, "0", 20);
+
+ verifyNotWritable(arguments, "0");
+
+ verifyNotEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-292-2-strict.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-292-2-strict.js
new file mode 100644
index 0000000000..5327e61f5d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-292-2-strict.js
@@ -0,0 +1,38 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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) {
+ Object.defineProperty(arguments, "0", {
+ value: 20,
+ writable: false,
+ enumerable: false,
+ configurable: false
+ });
+
+ if (a !== 0) {
+ throw new Test262Error('Expected a === 0, actually ' + a);
+ }
+
+ verifyEqualTo(arguments, "0", 20);
+
+ verifyNotWritable(arguments, "0");
+
+ verifyNotEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-292.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-292.js
new file mode 100644
index 0000000000..7091d42cf8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-292.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-292
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is own
+ data property of 'O', and 'desc' is data descriptor, test updating
+ multiple attribute values of 'name' (10.6 [[DefineOwnProperty]]
+ step 3)
+includes: [propertyHelper.js]
+---*/
+
+(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));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-293-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-293-1.js
new file mode 100644
index 0000000000..642e95f413
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-293-1.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-293-1
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is own
+ data property 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 5b)
+includes: [propertyHelper.js]
+---*/
+
+(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));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-293-2.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-293-2.js
new file mode 100644
index 0000000000..063ab121d1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-293-2.js
@@ -0,0 +1,51 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-293-2
+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 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: [propertyHelper.js]
+flags: [noStrict]
+---*/
+
+(function(a, b, c) {
+ Object.defineProperty(arguments, "0", {
+ value: 10,
+ writable: false,
+ enumerable: false,
+ configurable: false
+ });
+ try {
+ Object.defineProperty(arguments, "0", {
+ value: 20
+ });
+ throw new Test262Error("Expected an exception.");
+
+ } catch (e) {
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ verifyEqualTo(arguments, "0", 10);
+
+ verifyNotWritable(arguments, "0");
+
+ verifyNotEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+
+ if (a !== 10) {
+ throw new Test262Error('Expected "a === 10", actually ' + a);
+ }
+
+ }
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-293-3.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-293-3.js
new file mode 100644
index 0000000000..a27f584a65
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-293-3.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-293-3
+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: [noStrict]
+---*/
+
+(function(a, b, c) {
+ Object.defineProperty(arguments, "0", {
+ value: 10,
+ writable: false,
+ });
+ Object.defineProperty(arguments, "0", {
+ value: 20
+ });
+ if (a !== 10) {
+ throw new Test262Error('Expected "a === 10", actually ' + a);
+ }
+
+ verifyEqualTo(arguments, "0", 20);
+
+ verifyNotWritable(arguments, "0");
+
+ verifyEnumerable(arguments, "0");
+
+ verifyConfigurable(arguments, "0");
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-293-4-strict.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-293-4-strict.js
new file mode 100644
index 0000000000..03ace78694
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-293-4-strict.js
@@ -0,0 +1,39 @@
+'use strict';
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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) {
+ throw new Test262Error('Expected "a === 0", actually ' + a);
+ }
+
+ verifyEqualTo(arguments, "0", 20);
+
+ verifyNotWritable(arguments, "0");
+
+ verifyEnumerable(arguments, "0");
+
+ verifyConfigurable(arguments, "0");
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-293.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-293.js
new file mode 100644
index 0000000000..4ca208ba8e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-293.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-293
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is own
+ 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 (10.6 [[DefineOwnProperty]] step
+ 3)
+includes: [propertyHelper.js]
+---*/
+
+(function() {
+ Object.defineProperty(arguments, "0", {
+ value: 10,
+ writable: false,
+ enumerable: false,
+ configurable: false
+ });
+ try {
+ Object.defineProperty(arguments, "0", {
+ value: 20
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyEqualTo(arguments, "0", 10);
+
+ verifyNotWritable(arguments, "0");
+
+ verifyNotEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-294-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-294-1.js
new file mode 100644
index 0000000000..e358ab75e8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-294-1.js
@@ -0,0 +1,51 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-294-1
+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 thrown when updating the [[Writable]] attribute value of 'name'
+ which is defined as non-configurable (10.6 [[DefineOwnProperty]]
+ step 4 and 5b)
+includes: [propertyHelper.js]
+flags: [noStrict]
+---*/
+
+(function(a, b, c) {
+ Object.defineProperty(arguments, "0", {
+ value: 10,
+ writable: false,
+ enumerable: false,
+ configurable: false
+ });
+ try {
+ Object.defineProperty(arguments, "0", {
+ writable: true
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ verifyEqualTo(arguments, "0", 10);
+
+ verifyNotWritable(arguments, "0");
+
+ verifyNotEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+
+ if (a !== 10) {
+ throw new Test262Error('Expected "a === 10", actually ' + a);
+ }
+
+ }
+
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-294.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-294.js
new file mode 100644
index 0000000000..08c69e755e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-294.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-294
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is own
+ 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: [propertyHelper.js]
+---*/
+
+(function() {
+ Object.defineProperty(arguments, "0", {
+ value: 10,
+ writable: false,
+ enumerable: false,
+ configurable: false
+ });
+ try {
+ Object.defineProperty(arguments, "0", {
+ writable: true
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyEqualTo(arguments, "0", 10);
+
+ verifyNotWritable(arguments, "0");
+
+ verifyNotEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-295-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-295-1.js
new file mode 100644
index 0000000000..394066dfc2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-295-1.js
@@ -0,0 +1,49 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-295-1
+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 thrown when updating the [[Enumerable]] attribute value of
+ 'name' which is defined as non-configurable (10.6
+ [[DefineOwnProperty]] step 4 and step 5b)
+includes: [propertyHelper.js]
+flags: [noStrict]
+---*/
+
+
+(function(a, b, c) {
+ Object.defineProperty(arguments, "0", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: false
+ });
+ try {
+ Object.defineProperty(arguments, "0", {
+ enumerable: false
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ verifyEqualTo(arguments, "0", 10);
+
+ verifyNotWritable(arguments, "0");
+
+ verifyEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+
+ if (a !== 10) {
+ throw new Test262Error('Expected "a === 10", actually ' + a);
+ }
+ }
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-295.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-295.js
new file mode 100644
index 0000000000..cd7eb340b7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-295.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-295
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is own
+ 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: [propertyHelper.js]
+---*/
+
+(function() {
+ Object.defineProperty(arguments, "0", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: false
+ });
+ try {
+ Object.defineProperty(arguments, "0", {
+ enumerable: false
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyEqualTo(arguments, "0", 10);
+
+ verifyNotWritable(arguments, "0");
+
+ verifyEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-296-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-296-1.js
new file mode 100644
index 0000000000..77e9fe1642
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-296-1.js
@@ -0,0 +1,48 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-296-1
+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 thrown when updating the [[Configurable]] attribute value of
+ 'name' which is defined as non-configurable (10.6
+ [[DefineOwnProperty]] step 4 and step 5b)
+includes: [propertyHelper.js]
+flags: [noStrict]
+---*/
+
+(function(a, b, c) {
+ Object.defineProperty(arguments, "0", {
+ value: 10,
+ writable: false,
+ enumerable: false,
+ configurable: false
+ });
+ try {
+ Object.defineProperty(arguments, "0", {
+ configurable: true
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ verifyEqualTo(arguments, "0", 10);
+
+ verifyNotWritable(arguments, "0");
+
+ verifyNotEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+
+ if (a !== 10) {
+ throw new Test262Error('Expected "a === 10", actually ' + a);
+ }
+ }
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-296.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-296.js
new file mode 100644
index 0000000000..8625821007
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-296.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-296
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is own
+ 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: [propertyHelper.js]
+---*/
+
+(function() {
+ Object.defineProperty(arguments, "0", {
+ value: 10,
+ writable: false,
+ enumerable: false,
+ configurable: false
+ });
+ try {
+ Object.defineProperty(arguments, "0", {
+ configurable: true
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyEqualTo(arguments, "0", 10);
+
+ verifyNotWritable(arguments, "0");
+
+ verifyNotEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-297-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-297-1.js
new file mode 100644
index 0000000000..8627560fa9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-297-1.js
@@ -0,0 +1,52 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-297-1
+description: >
+ Object.defineProperty - 'O' is an Arguments object of a function
+ that has formal parameters, 'name' is own accessor property of 'O'
+ which is also defined in [[ParameterMap]] of 'O', test TypeError
+ is thrown when updating the [[Get]] attribute value of 'name'
+ which is defined as non-configurable (10.6 [[DefineOwnProperty]]
+ step 4 and step 5a)
+includes: [propertyHelper.js]
+---*/
+
+(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
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ if (a !== 0) {
+ throw new Test262Error('Expected a === 0, actually ' + a);
+ }
+
+ verifyEqualTo(arguments, "0", getFunc1());
+
+ verifyNotEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-297.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-297.js
new file mode 100644
index 0000000000..e738fc84a3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-297.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-297
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is own
+ 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: [propertyHelper.js]
+---*/
+
+(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
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyEqualTo(arguments, "0", getFunc1());
+
+ verifyNotEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-298-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-298-1.js
new file mode 100644
index 0000000000..9cb976b0fd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-298-1.js
@@ -0,0 +1,53 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-298-1
+description: >
+ Object.defineProperty - 'O' is an Arguments object of a function
+ that has formal parameters, 'name' is own accessor property of 'O'
+ which is also defined in [[ParameterMap]] of 'O', test TypeError
+ is thrown when updating the [[Set]] attribute value of 'name'
+ which is defined as non-configurable (10.6 [[DefineOwnProperty]]
+ steps 4 and 5a)
+includes: [propertyHelper.js]
+---*/
+
+(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
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ if (a !== 0) {
+ throw new Test262Error('Expected a === 0, actually ' + a);
+ }
+
+ verifyEqualTo(arguments, "0", getFunc());
+
+ verifyNotEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-298.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-298.js
new file mode 100644
index 0000000000..651330f8f5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-298.js
@@ -0,0 +1,47 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-298
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is own
+ 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: [propertyHelper.js]
+---*/
+
+(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
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyEqualTo(arguments, "0", getFunc());
+
+ verifyNotEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-299-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-299-1.js
new file mode 100644
index 0000000000..2ef3e98416
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-299-1.js
@@ -0,0 +1,47 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-299-1
+description: >
+ Object.defineProperty - 'O' is an Arguments object of a function
+ that has formal parameters, 'name' is own accessor property of 'O'
+ which is also defined in [[ParameterMap]] of 'O', test TypeError
+ is thrown when updating the [[Enumerable]] attribute value of
+ 'name' which is defined as non-configurable (10.6
+ [[DefineOwnProperty]] steps 4 and 5a)
+includes: [propertyHelper.js]
+---*/
+
+(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
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ if (a !== 0) {
+ throw new Test262Error('Expected a === 0, actually ' + a);
+ }
+ verifyEqualTo(arguments, "0", getFunc());
+
+ verifyEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-299.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-299.js
new file mode 100644
index 0000000000..8294112d3a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-299.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-299
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is own
+ 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: [propertyHelper.js]
+---*/
+
+(function() {
+ function getFunc() {
+ return 10;
+ }
+ Object.defineProperty(arguments, "0", {
+ get: getFunc,
+ enumerable: true,
+ configurable: false
+ });
+ try {
+ Object.defineProperty(arguments, "0", {
+ enumerable: false
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyEqualTo(arguments, "0", getFunc());
+
+ verifyEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-3.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-3.js
new file mode 100644
index 0000000000..9273fd373c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-3.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Step 4 of defineProperty calls the [[DefineOwnProperty]] internal method
+ of O to define the property. For newly defined accessor properties, attributes
+ missing from desc should have values set to the defaults from 8.6.1.
+es5id: 15.2.3.6-4-3
+description: >
+ Object.defineProperty sets missing attributes to their default
+ values (accessor)(8.12.9 step 4.b.i)
+---*/
+
+var o = {};
+
+var getter = function() {
+ return 1;
+};
+var desc = {
+ get: getter
+};
+
+Object.defineProperty(o, "foo", desc);
+
+var propDesc = Object.getOwnPropertyDescriptor(o, "foo");
+
+assert.sameValue(typeof(propDesc.get), "function", 'typeof(propDesc.get)');
+assert.sameValue(propDesc.get, getter, 'propDesc.get'); // the getter must be the function that was provided
+assert.sameValue(propDesc.set, undefined, 'propDesc.set'); // undefined by default
+assert.sameValue(propDesc.enumerable, false, 'propDesc.enumerable'); // false by default
+assert.sameValue(propDesc.configurable, false, 'propDesc.configurable'); // false by default
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-30.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-30.js
new file mode 100644
index 0000000000..b86fe03227
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-30.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-30
+description: >
+ Object.defineProperty - 'name' is own accessor property without a
+ get function (8.12.9 step 1)
+---*/
+
+var obj = {};
+Object.defineProperty(obj, "foo", {
+ set: function() {},
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "foo", {
+ configurable: true
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-300-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-300-1.js
new file mode 100644
index 0000000000..802dd24613
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-300-1.js
@@ -0,0 +1,47 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-300-1
+description: >
+ Object.defineProperty - 'O' is an Arguments object of a function
+ that has formal parameters, 'name' is own accessor property of 'O'
+ which is also defined in [[ParameterMap]] of 'O', test TypeError
+ is thrown when updating the [[Configurable]] attribute value of
+ 'name' which is defined as non-configurable (10.6
+ [[DefineOwnProperty]] step 4 and step 5a)
+includes: [propertyHelper.js]
+---*/
+
+(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
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ if (a !== 0) {
+ throw new Test262Error('Expected a === 0, actually ' + a);
+ }
+ verifyEqualTo(arguments, "0", getFunc());
+
+ verifyEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-300.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-300.js
new file mode 100644
index 0000000000..2341d87dca
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-300.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-300
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is own
+ 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: [propertyHelper.js]
+---*/
+
+(function() {
+ function getFunc() {
+ return 10;
+ }
+ Object.defineProperty(arguments, "0", {
+ get: getFunc,
+ enumerable: true,
+ configurable: false
+ });
+ try {
+ Object.defineProperty(arguments, "0", {
+ configurable: true
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyEqualTo(arguments, "0", getFunc());
+
+ verifyEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-301-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-301-1.js
new file mode 100644
index 0000000000..50854b502f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-301-1.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-301-1
+description: >
+ Object.defineProperty - 'O' is an Arguments object of a function
+ that has formal parameters, 'name' is an index named property of
+ 'O', and 'desc' is data descriptor, test 'name' is defined in 'O'
+ with all correct attribute values (10.6 [[DefineOwnProperty]] step
+ 3)
+includes: [propertyHelper.js]
+---*/
+
+(function(a, b, c) {
+ delete arguments[0];
+ Object.defineProperty(arguments, "0", {
+ value: 10,
+ writable: false,
+ enumerable: false,
+ configurable: false
+ });
+ if (a !== 0) {
+ throw new Test262Error("Expected a === 0, actually " + a);
+ }
+ verifyEqualTo(arguments, "0", 10);
+
+ verifyNotWritable(arguments, "0");
+
+ verifyNotEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-301.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-301.js
new file mode 100644
index 0000000000..6387b45b3c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-301.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-301
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is an
+ array index named property of 'O' but not defined in
+ [[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: [propertyHelper.js]
+---*/
+
+(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));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-302-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-302-1.js
new file mode 100644
index 0000000000..d9e24450e1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-302-1.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-302-1
+description: >
+ Object.defineProperty - 'O' is an Arguments object of a function
+ that has formal parameters, 'name' is an index named property of
+ 'O' but not defined in [[ParameterMap]] of 'O', and 'desc' is
+ accessor descriptor, test 'name' is defined in 'O' with all
+ correct attribute values (10.6 [[DefineOwnProperty]] step 3 and
+ step 5a)
+includes: [propertyHelper.js]
+---*/
+
+(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
+ });
+ if (a !== 0) {
+ throw new Test262Error('Expected a === 0, actually ' + a);
+ }
+ verifyEqualTo(arguments, "0", getFunc());
+
+ verifyWritable(arguments, "0", "setVerifyHelpProp");
+
+ verifyNotEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-302.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-302.js
new file mode 100644
index 0000000000..40fe4d4fcd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-302.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-302
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is an
+ index named property of 'O' but not defined in [[ParameterMap]] of
+ 'O', and 'desc' is accessor descriptor, test 'name' is defined in
+ 'O' with all correct attribute values (10.6 [[DefineOwnProperty]]
+ step 3)
+includes: [propertyHelper.js]
+---*/
+
+(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
+ });
+ verifyEqualTo(arguments, "0", getFunc());
+
+ verifyWritable(arguments, "0", "setVerifyHelpProp");
+
+ verifyNotEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+}(0, 1, 2));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-303.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-303.js
new file mode 100644
index 0000000000..e1d15a9dcd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-303.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-303
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is an
+ index named accessor property of 'O' but not defined in
+ [[ParameterMap]] of 'O', and 'desc' is accessor descriptor, test
+ updating multiple attribute values of 'name' (10.6
+ [[DefineOwnProperty]] step 3)
+includes: [propertyHelper.js]
+---*/
+
+(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
+ });
+ verifyEqualTo(arguments, "0", getFunc2());
+
+ verifyNotEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+}());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-304.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-304.js
new file mode 100644
index 0000000000..058949b82b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-304.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-304
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is an
+ index named data property of 'O' but not defined in
+ [[ParameterMap]] of 'O', and 'desc' is data descriptor, test
+ updating multiple attribute values of 'name' (10.6
+ [[DefineOwnProperty]] step 3)
+includes: [propertyHelper.js]
+---*/
+
+(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");
+}());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-305.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-305.js
new file mode 100644
index 0000000000..88e3ea9526
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-305.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-305
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is an
+ index named data property of 'O' but not defined in
+ [[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: [propertyHelper.js]
+---*/
+
+(function() {
+ Object.defineProperty(arguments, "0", {
+ value: 0,
+ writable: false,
+ configurable: false
+ });
+
+ try {
+ Object.defineProperty(arguments, "0", {
+ value: 10
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyEqualTo(arguments, "0", 0);
+
+ verifyNotWritable(arguments, "0");
+
+ verifyNotEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-306.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-306.js
new file mode 100644
index 0000000000..a33eff559b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-306.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-306
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is an
+ index named data property of 'O' but not defined in
+ [[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: [propertyHelper.js]
+---*/
+
+(function() {
+ Object.defineProperty(arguments, "0", {
+ value: 0,
+ writable: false,
+ enumerable: false,
+ configurable: false
+ });
+ try {
+ Object.defineProperty(arguments, "0", {
+ writable: true
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyEqualTo(arguments, "0", 0);
+
+ verifyNotWritable(arguments, "0");
+
+ verifyNotEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-307.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-307.js
new file mode 100644
index 0000000000..c9fdf870ff
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-307.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-307
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is an
+ index named data property of 'O' but not defined in
+ [[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: [propertyHelper.js]
+---*/
+
+(function() {
+ Object.defineProperty(arguments, "0", {
+ value: 0,
+ writable: false,
+ enumerable: true,
+ configurable: false
+ });
+ try {
+ Object.defineProperty(arguments, "0", {
+ enumerable: false
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyEqualTo(arguments, "0", 0);
+
+ verifyNotWritable(arguments, "0");
+
+ verifyEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-308.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-308.js
new file mode 100644
index 0000000000..aceabc53a0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-308.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-308
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is an
+ index named data property of 'O' but not defined in
+ [[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: [propertyHelper.js]
+---*/
+
+(function() {
+ Object.defineProperty(arguments, "0", {
+ value: 0,
+ writable: false,
+ enumerable: false,
+ configurable: false
+ });
+ try {
+ Object.defineProperty(arguments, "0", {
+ configurable: true
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyEqualTo(arguments, "0", 0);
+
+ verifyNotWritable(arguments, "0");
+
+ verifyNotEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-309.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-309.js
new file mode 100644
index 0000000000..f1803f13cd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-309.js
@@ -0,0 +1,47 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-309
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is an
+ index named accessor property of 'O' but not defined in
+ [[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: [propertyHelper.js]
+---*/
+
+(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
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyEqualTo(arguments, "0", getFunc1());
+
+ verifyNotEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-31.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-31.js
new file mode 100644
index 0000000000..bb0adb7433
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-31.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-31
+description: >
+ Object.defineProperty - 'name' is own accessor property without a
+ get function that overrides an inherited accessor property(8.12.9
+ step 1)
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "foo", {
+ get: function() {},
+ configurable: true
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var obj = new ConstructFun();
+Object.defineProperty(obj, "foo", {
+ set: function() {},
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "foo", {
+ configurable: true
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-310.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-310.js
new file mode 100644
index 0000000000..094229861a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-310.js
@@ -0,0 +1,48 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-310
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is an
+ index named accessor property of 'O' but not defined in
+ [[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: [propertyHelper.js]
+---*/
+
+(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
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyEqualTo(arguments, "0", getFunc());
+
+ verifyNotEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-311.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-311.js
new file mode 100644
index 0000000000..ede81f7918
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-311.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-311
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is an
+ index named accessor property of 'O' but not defined in
+ [[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: [propertyHelper.js]
+---*/
+
+(function() {
+ function getFunc() {
+ return 0;
+ }
+ Object.defineProperty(arguments, "0", {
+ get: getFunc,
+ enumerable: true,
+ configurable: false
+ });
+ try {
+ Object.defineProperty(arguments, "0", {
+ enumerable: false
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyEqualTo(arguments, "0", getFunc());
+
+ verifyEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-312.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-312.js
new file mode 100644
index 0000000000..eaf2c27fab
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-312.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-312
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is an
+ index named accessor property of 'O' but not defined in
+ [[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: [propertyHelper.js]
+---*/
+
+(function() {
+ function getFunc() {}
+ Object.defineProperty(arguments, "0", {
+ get: getFunc,
+ enumerable: true,
+ configurable: false
+ });
+ try {
+ Object.defineProperty(arguments, "0", {
+ configurable: true
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyEqualTo(arguments, "0", getFunc());
+
+ verifyEnumerable(arguments, "0");
+
+ verifyNotConfigurable(arguments, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-313-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-313-1.js
new file mode 100644
index 0000000000..24f6b77d8b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-313-1.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-313-1
+description: >
+ Object.defineProperty - 'O' is an Arguments object of a function
+ 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: [propertyHelper.js]
+---*/
+
+(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));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-313.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-313.js
new file mode 100644
index 0000000000..5f5650d942
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-313.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-313
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'P' is generic
+ property, and 'desc' is data descriptor, test 'P' is defined in
+ 'O' with all correct attribute values (10.6 [[DefineOwnProperty]]
+ step 3)
+includes: [propertyHelper.js]
+---*/
+
+(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));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-314-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-314-1.js
new file mode 100644
index 0000000000..aaa4d6a0fc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-314-1.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-314-1
+description: >
+ Object.defineProperty - 'O' is an Arguments object of a function
+ 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: [propertyHelper.js]
+---*/
+
+(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
+ });
+ verifyEqualTo(arguments, "genericProperty", getFunc());
+
+ verifyWritable(arguments, "genericProperty", "testgetFunction");
+
+ verifyEnumerable(arguments, "genericProperty");
+
+ verifyConfigurable(arguments, "genericProperty");
+}(1, 2, 3));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-314.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-314.js
new file mode 100644
index 0000000000..707689d404
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-314.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-314
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'P' is generic
+ property, and 'desc' is accessor descriptor, test 'P' is defined
+ in 'O' with all correct attribute values (10.6
+ [[DefineOwnProperty]] step 3)
+includes: [propertyHelper.js]
+---*/
+
+(function() {
+ function getFunc() {
+ return "getFunctionString";
+ }
+
+ 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));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-315-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-315-1.js
new file mode 100644
index 0000000000..078b2b0c03
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-315-1.js
@@ -0,0 +1,52 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-315-1
+description: >
+ Object.defineProperty - 'O' is an Arguments object of a function
+ 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: [propertyHelper.js]
+---*/
+
+(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
+ });
+ if (c !== 3) {
+ throw new Test262Error('Expected c === 3, actually ' + c);
+ }
+
+ verifyEqualTo(arguments, "genericProperty", getFunc());
+
+ verifyWritable(arguments, "genericProperty", "testgetFunction");
+
+ verifyNotEnumerable(arguments, "genericProperty");
+
+ verifyNotConfigurable(arguments, "genericProperty");
+}(1, 2, 3));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-315.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-315.js
new file mode 100644
index 0000000000..f9e6b876a8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-315.js
@@ -0,0 +1,48 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-315
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'P' is generic
+ own accessor property of 'O', and 'desc' is accessor descriptor,
+ test updating multiple attribute values of 'P' (10.6
+ [[DefineOwnProperty]] step 3)
+includes: [propertyHelper.js]
+---*/
+
+(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
+ });
+ verifyEqualTo(arguments, "genericProperty", getFunc());
+
+ verifyWritable(arguments, "genericProperty", "testgetFunction");
+
+ verifyNotEnumerable(arguments, "genericProperty");
+
+ verifyNotConfigurable(arguments, "genericProperty");
+}(1, 2, 3));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-316-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-316-1.js
new file mode 100644
index 0000000000..4c18c0b45c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-316-1.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-316-1
+description: >
+ Object.defineProperty - 'O' is an Arguments object of a function
+ 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: [propertyHelper.js]
+---*/
+
+(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));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-316.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-316.js
new file mode 100644
index 0000000000..6683891473
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-316.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-316
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'P' is generic
+ own data property of 'O', and 'desc' is data descriptor, test
+ updating multiple attribute values of 'P' (10.6
+ [[DefineOwnProperty]] step 3)
+includes: [propertyHelper.js]
+---*/
+
+(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));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-317-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-317-1.js
new file mode 100644
index 0000000000..be820cbce1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-317-1.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-317-1
+description: >
+ Object.defineProperty - 'O' is an Arguments object of a function
+ that has formal parameters, 'P' is 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: [propertyHelper.js]
+---*/
+
+(function(a, b, c) {
+ Object.defineProperty(arguments, "genericProperty", {
+ value: 1001,
+ writable: false,
+ configurable: false
+ });
+ try {
+ Object.defineProperty(arguments, "genericProperty", {
+ value: 1002
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ if (b !== 2) {
+ throw new Test262Error('Expected "b === 2;", actually ' + b);
+ }
+
+ verifyEqualTo(arguments, "genericProperty", 1001);
+
+ verifyNotWritable(arguments, "genericProperty");
+
+ verifyNotEnumerable(arguments, "genericProperty");
+
+ verifyNotConfigurable(arguments, "genericProperty");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}(1, 2, 3));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-317.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-317.js
new file mode 100644
index 0000000000..77ca0ba862
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-317.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-317
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'P' is generic
+ own data property of 'O', test TypeError is thrown when updating
+ the [[Value]] attribute value of 'P' which is not writable and not
+ configurable (10.6 [[DefineOwnProperty]] step 4)
+includes: [propertyHelper.js]
+---*/
+
+(function() {
+ Object.defineProperty(arguments, "genericProperty", {
+ value: 1001,
+ writable: false,
+ configurable: false
+ });
+ try {
+ Object.defineProperty(arguments, "genericProperty", {
+ value: 1002
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyEqualTo(arguments, "genericProperty", 1001);
+
+ verifyNotWritable(arguments, "genericProperty");
+
+ verifyNotEnumerable(arguments, "genericProperty");
+
+ verifyNotConfigurable(arguments, "genericProperty");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}(1, 2, 3));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-318-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-318-1.js
new file mode 100644
index 0000000000..c275772feb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-318-1.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-318-1
+description: >
+ Object.defineProperty - 'O' is an Arguments object of a function
+ that has formal parameters, 'name' is 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: [propertyHelper.js]
+---*/
+
+(function(a, b, c) {
+ Object.defineProperty(arguments, "genericProperty", {
+ writable: false,
+ configurable: false
+ });
+ try {
+ Object.defineProperty(arguments, "genericProperty", {
+ writable: true
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyEqualTo(arguments, "genericProperty", undefined);
+
+ verifyNotWritable(arguments, "genericProperty");
+
+ verifyNotEnumerable(arguments, "genericProperty");
+
+ verifyNotConfigurable(arguments, "genericProperty");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}(1, 2, 3));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-318.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-318.js
new file mode 100644
index 0000000000..95284091f6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-318.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-318
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is
+ 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: [propertyHelper.js]
+---*/
+
+(function() {
+ Object.defineProperty(arguments, "genericProperty", {
+ writable: false,
+ configurable: false
+ });
+ try {
+ Object.defineProperty(arguments, "genericProperty", {
+ writable: true
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyEqualTo(arguments, "genericProperty", undefined);
+
+ verifyNotWritable(arguments, "genericProperty");
+
+ verifyNotEnumerable(arguments, "genericProperty");
+
+ verifyNotConfigurable(arguments, "genericProperty");
+
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+
+}(1, 2, 3));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-319-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-319-1.js
new file mode 100644
index 0000000000..6f184f8196
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-319-1.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-319-1
+description: >
+ Object.defineProperty - 'O' is an Arguments object of a function
+ that has formal parameters, 'P' is 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: [propertyHelper.js]
+---*/
+
+(function(a, b, c) {
+ Object.defineProperty(arguments, "genericProperty", {
+ enumerable: true,
+ configurable: false
+ });
+ try {
+ Object.defineProperty(arguments, "genericProperty", {
+ enumerable: false
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyEqualTo(arguments, "genericProperty", undefined);
+
+ verifyNotWritable(arguments, "genericProperty");
+
+ verifyEnumerable(arguments, "genericProperty");
+
+ verifyNotConfigurable(arguments, "genericProperty");
+
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}(1, 2, 3));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-319.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-319.js
new file mode 100644
index 0000000000..d4c4c20dc9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-319.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-319
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'P' is 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: [propertyHelper.js]
+---*/
+
+(function() {
+ Object.defineProperty(arguments, "genericProperty", {
+ enumerable: true,
+ configurable: false
+ });
+ try {
+ Object.defineProperty(arguments, "genericProperty", {
+ enumerable: false
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyEqualTo(arguments, "genericProperty", undefined);
+
+ verifyNotWritable(arguments, "genericProperty");
+
+ verifyEnumerable(arguments, "genericProperty");
+
+ verifyNotConfigurable(arguments, "genericProperty");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}(1, 2, 3));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-32.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-32.js
new file mode 100644
index 0000000000..b50308be75
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-32.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-32
+description: >
+ Object.defineProperty - 'name' is an inherited accessor property
+ without a get function (8.12.9 step 1)
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "foo", {
+ set: function() {},
+ configurable: false
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var obj = new ConstructFun();
+
+Object.defineProperty(obj, "foo", {
+ configurable: true
+});
+
+assert(obj.hasOwnProperty("foo"), 'obj.hasOwnProperty("foo") !== true');
+assert.sameValue(typeof obj.foo, "undefined", 'typeof obj.foo');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-320-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-320-1.js
new file mode 100644
index 0000000000..794b689a98
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-320-1.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-320-1
+description: >
+ Object.defineProperty - 'O' is an Arguments object of a function
+ that has formal parameters, 'P' is 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: [propertyHelper.js]
+---*/
+
+(function(a, b, c) {
+ Object.defineProperty(arguments, "genericProperty", {
+ configurable: false
+ });
+ try {
+ Object.defineProperty(arguments, "genericProperty", {
+ configurable: true
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyEqualTo(arguments, "genericProperty", undefined);
+
+ verifyNotWritable(arguments, "genericProperty");
+
+ verifyNotEnumerable(arguments, "genericProperty");
+
+ verifyNotConfigurable(arguments, "genericProperty");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}(1, 2, 3));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-320.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-320.js
new file mode 100644
index 0000000000..2d16488d20
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-320.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-320
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'P' is 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: [propertyHelper.js]
+---*/
+
+(function() {
+ Object.defineProperty(arguments, "genericProperty", {
+ configurable: false
+ });
+ try {
+ Object.defineProperty(arguments, "genericProperty", {
+ configurable: true
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyEqualTo(arguments, "genericProperty", undefined);
+
+ verifyNotWritable(arguments, "genericProperty");
+
+ verifyNotEnumerable(arguments, "genericProperty");
+
+ verifyNotConfigurable(arguments, "genericProperty");
+
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+
+}(1, 2, 3));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-321-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-321-1.js
new file mode 100644
index 0000000000..f0b19aff91
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-321-1.js
@@ -0,0 +1,55 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-321-1
+description: >
+ Object.defineProperty - 'O' is an Arguments object of a function
+ that has formal parameters, 'P' is 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: [propertyHelper.js]
+---*/
+
+(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";
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ if (a !== 1) {
+ throw new Test262Error('Expected a === 1, actually ' + a);
+ }
+
+ verifyEqualTo(arguments, "genericProperty", getFunc());
+
+ verifyWritable(arguments, "genericProperty", "helpVerifyGet");
+
+ verifyNotEnumerable(arguments, "genericProperty");
+
+ verifyNotConfigurable(arguments, "genericProperty");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}(1, 2, 3));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-321.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-321.js
new file mode 100644
index 0000000000..ce1ebc65ec
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-321.js
@@ -0,0 +1,50 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-321
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'P' is 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: [propertyHelper.js]
+---*/
+
+(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";
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyEqualTo(arguments, "genericProperty", getFunc());
+
+ verifyWritable(arguments, "genericProperty", "helpVerifyGet");
+
+ verifyNotEnumerable(arguments, "genericProperty");
+
+ verifyNotConfigurable(arguments, "genericProperty");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}(1, 2, 3));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-322-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-322-1.js
new file mode 100644
index 0000000000..4261b4980b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-322-1.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-322-1
+description: >
+ Object.defineProperty - 'O' is an Arguments object of a function
+ that has formal parameters, 'P' is 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: [propertyHelper.js]
+---*/
+
+(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;
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyWritable(arguments, "genericProperty", "genericPropertyString");
+
+ verifyNotEnumerable(arguments, "genericProperty");
+
+ verifyNotConfigurable(arguments, "genericProperty");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}(1, 2, 3));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-322.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-322.js
new file mode 100644
index 0000000000..9414c90d54
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-322.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-322
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'P' is 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: [propertyHelper.js]
+---*/
+
+(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;
+ }
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyWritable(arguments, "genericProperty", "genericPropertyString");
+
+ verifyNotEnumerable(arguments, "genericProperty");
+
+ verifyNotConfigurable(arguments, "genericProperty");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}(1, 2, 3));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-323-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-323-1.js
new file mode 100644
index 0000000000..769c0a8634
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-323-1.js
@@ -0,0 +1,47 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-323-1
+description: >
+ Object.defineProperty - ''O' is an Arguments object of a function
+ that has formal parameters, 'P' is 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: [propertyHelper.js]
+---*/
+
+(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
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ if (c !== 3) {
+ throw new Test262Error('Expected c === 3, actually ' + c);
+ }
+ verifyWritable(arguments, "genericProperty", "genericPropertyString");
+
+ verifyEnumerable(arguments, "genericProperty");
+
+ verifyNotConfigurable(arguments, "genericProperty");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+
+}(1, 2, 3));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-323.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-323.js
new file mode 100644
index 0000000000..a6e17705ef
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-323.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-323
+description: >
+ Object.defineProperty - ''O' is an Arguments object, 'P' is 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: [propertyHelper.js]
+---*/
+
+(function() {
+ function setFunc(value) {
+ this.genericPropertyString = value;
+ }
+ Object.defineProperty(arguments, "genericProperty", {
+ set: setFunc,
+ enumerable: true,
+ configurable: false
+ });
+ try {
+ Object.defineProperty(arguments, "genericProperty", {
+ enumerable: false
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyWritable(arguments, "genericProperty", "genericPropertyString");
+
+ verifyEnumerable(arguments, "genericProperty");
+
+ verifyNotConfigurable(arguments, "genericProperty");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}(1, 2, 3));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-324-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-324-1.js
new file mode 100644
index 0000000000..949102ee2f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-324-1.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-324-1
+description: >
+ Object.defineProperty - 'O' is an Arguments object of a function
+ that has formal parameters, 'P' is 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: [propertyHelper.js]
+---*/
+
+(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
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyWritable(arguments, "genericProperty", "genericPropertyString");
+
+ verifyNotEnumerable(arguments, "genericProperty");
+
+ verifyNotConfigurable(arguments, "genericProperty");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+}(1, 2, 3));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-324.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-324.js
new file mode 100644
index 0000000000..bd7e47b2d2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-324.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-324
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'P' is 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: [propertyHelper.js]
+---*/
+
+(function() {
+ function setFunc(value) {
+ this.genericPropertyString = value;
+ }
+ Object.defineProperty(arguments, "genericProperty", {
+ set: setFunc,
+ configurable: false
+ });
+ try {
+ Object.defineProperty(arguments, "genericProperty", {
+ configurable: true
+ });
+ throw new Test262Error("Expected an exception.");
+ } catch (e) {
+ verifyWritable(arguments, "genericProperty", "genericPropertyString");
+
+ verifyNotEnumerable(arguments, "genericProperty");
+
+ verifyNotConfigurable(arguments, "genericProperty");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+ }
+ false;
+}(1, 2, 3));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-325-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-325-1.js
new file mode 100644
index 0000000000..7fd5606d8d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-325-1.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-325-1
+description: >
+ Object.defineProperty - 'O' is an Arguments object which created
+ with function take formal parameters, 'name' is own property of
+ [[ParameterMap]] of 'O', test 'name' is deleted if 'name' is
+ configurable and 'desc' is accessor descriptor (10.6
+ [[DefineOwnProperty]] step 5.a.i)
+---*/
+
+var argObj = (function(a, b, c) {
+ return arguments;
+})(1, 2, 3);
+var accessed = false;
+
+Object.defineProperty(argObj, 0, {
+ get: function() {
+ accessed = true;
+ return 12;
+ }
+});
+
+assert.sameValue(argObj[0], 12, 'argObj[0]');
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-325.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-325.js
new file mode 100644
index 0000000000..52fb06e715
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-325.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-325
+description: >
+ Object.defineProperty - 'O' is an Arguments object, 'name' is own
+ property of [[ParameterMap]] of 'O', test 'name' is deleted if
+ 'name' is configurable and 'desc' is accessor descriptor (10.6
+ [[DefineOwnProperty]] step 5.a.i)
+---*/
+
+var argObj = (function() {
+ return arguments;
+})(1, 2, 3);
+var accessed = false;
+
+Object.defineProperty(argObj, 0, {
+ get: function() {
+ accessed = true;
+ return 12;
+ }
+});
+
+assert.sameValue(argObj[0], 12, 'argObj[0]');
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-326.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-326.js
new file mode 100644
index 0000000000..7752bd6713
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-326.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-326
+description: >
+ ES5 Attributes - property ([[Writable]] is true, [[Enumerable]] is
+ true, [[Configurable]] is true) is writable
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+var propertyDefineCorrect = (obj.prop === 2010);
+obj.prop = 1001;
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(obj.prop, 1001, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-327.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-327.js
new file mode 100644
index 0000000000..25b2be0adb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-327.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-327
+description: >
+ ES5 Attributes - property ([[Writable]] is true, [[Enumerable]] is
+ true, [[Configurable]] is true) is enumerable
+---*/
+
+var propertyFound = false;
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var property in obj) {
+ if (property === "prop") {
+ propertyFound = true;
+ break;
+ }
+}
+
+assert(propertyFound, 'Property not found');
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.enumerable, true, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-328.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-328.js
new file mode 100644
index 0000000000..cd0da76fa7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-328.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-328
+description: >
+ ES5 Attributes - property ([[Writable]] is true, [[Enumerable]] is
+ true, [[Configurable]] is true) is deletable
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+var beforeDelete = obj.hasOwnProperty("prop");
+delete obj.prop;
+var afterDelete = obj.hasOwnProperty("prop");
+
+assert(beforeDelete, 'beforeDelete !== true');
+assert.sameValue(afterDelete, false, 'afterDelete');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-329.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-329.js
new file mode 100644
index 0000000000..2c4c1556b2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-329.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-329
+description: >
+ ES5 Attributes - success to update [[Writable]] attribute of data
+ property ([[Writable]] is true, [[Enumerable]] is true,
+ [[Configurable]] is true) to different value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ writable: false
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.writable, true, 'desc1.writable');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc2.writable, false, 'desc2.writable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-33.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-33.js
new file mode 100644
index 0000000000..ec1e0bb134
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-33.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-33
+description: >
+ Object.defineProperty - 'O' is a Function object that uses
+ Object's [[GetOwnProperty]] method to access the 'name' property
+ (8.12.9 step 1)
+---*/
+
+var fun = function() {};
+
+Object.defineProperty(fun, "foo", {
+ value: 12,
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperty(fun, "foo", {
+ value: 11,
+ configurable: true
+ });
+});
+assert.sameValue(fun.foo, 12, 'fun.foo');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-330.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-330.js
new file mode 100644
index 0000000000..9ec752dcd0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-330.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-330
+description: >
+ ES5 Attributes - success to update [[enumerable]] attribute of
+ data property ([[Writable]] is true, [[Enumerable]] is true,
+ [[Configurable]] is true) to different value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ enumerable: false
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.enumerable, true, 'desc1.enumerable');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc2.enumerable, false, 'desc2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-331.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-331.js
new file mode 100644
index 0000000000..d486912194
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-331.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-331
+description: >
+ ES5 Attributes - success to update [[Configurable]] attribute of
+ data property ([[Writable]] is true, [[Enumerable]] is true,
+ [[Configurable]] is true) to different value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ configurable: false
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.configurable, true, 'desc1.configurable');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc2.configurable, false, 'desc2.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-332.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-332.js
new file mode 100644
index 0000000000..87c3523276
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-332.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-332
+description: >
+ ES5 Attributes - success to update the data property ([[Writable]]
+ is true, [[Enumerable]] is true, [[Configurable]] is true) to an
+ accessor property
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+function getFunc() {
+ return 20;
+}
+Object.defineProperty(obj, "prop", {
+ get: getFunc
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(desc1.hasOwnProperty("value"), 'desc1.hasOwnProperty("value") !== true');
+assert.sameValue(desc2.get, getFunc, 'desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-1.js
new file mode 100644
index 0000000000..b38f669f07
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-1.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-333-1
+description: >
+ Object.defineProperty will update [[Value]] attribute of named
+ property 'P' successfully when [[Configurable]] attribute is
+ false, [[Writable]] attribute is true and 'O' is an Object object
+ (8.12.9 - step 10)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ value: 1001,
+ writable: true,
+ configurable: false
+});
+
+Object.defineProperty(obj, "property", {
+ value: 1002
+});
+
+verifyEqualTo(obj, "property", 1002);
+
+verifyWritable(obj, "property");
+
+verifyNotEnumerable(obj, "property");
+
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-10.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-10.js
new file mode 100644
index 0000000000..5ef66b6e02
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-10.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-333-10
+description: >
+ ES5 Attributes - indexed data property 'P' with attributes
+ [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: false
+ is writable using simple assignment, 'O' is an Arguments object
+---*/
+
+var obj = (function() {
+ return arguments;
+}());
+
+Object.defineProperty(obj, "0", {
+ value: 2010,
+ writable: true,
+ enumerable: true,
+ configurable: false
+});
+var verifyValue = (obj[0] === 2010);
+obj[0] = 1001;
+
+assert(verifyValue, 'verifyValue !== true');
+assert.sameValue(obj[0], 1001, 'obj[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-11.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-11.js
new file mode 100644
index 0000000000..82b7979a03
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-11.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-333-11
+description: >
+ ES5 Attributes - indexed property 'P' with attributes
+ [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: false
+ is writable using simple assignment, 'O' is an Arguments object
+---*/
+
+var obj = (function(x) {
+ return arguments;
+}(1001));
+
+Object.defineProperty(obj, "0", {
+ value: 2010,
+ writable: true,
+ enumerable: true,
+ configurable: false
+});
+var verifyValue = (obj[0] === 2010);
+
+assert(verifyValue, 'verifyValue !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-2.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-2.js
new file mode 100644
index 0000000000..2c7ac9fd07
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-2.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-333-2
+description: >
+ Object.defineProperty will update [[Value]] attribute of indexed
+ property 'P' successfully when [[Configurable]] attribute is
+ false, [[Writable]] attribute is true and 'A' is an Array object
+ (8.12.9 - step 10)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = [];
+
+Object.defineProperty(obj, "0", {
+ value: 1001,
+ writable: true,
+ configurable: false
+});
+
+Object.defineProperty(obj, "0", {
+ value: 1002
+});
+
+verifyEqualTo(obj, "0", 1002);
+
+verifyWritable(obj, "0");
+
+verifyNotEnumerable(obj, "0");
+
+verifyNotConfigurable(obj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-3.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-3.js
new file mode 100644
index 0000000000..214436cb50
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-3.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-333-3
+description: >
+ Object.defineProperty will update [[Value]] attribute of named
+ property 'P' successfully when [[Configurable]] attribute is
+ false, [[Writable]] attribute is true and 'O' is an Arguments
+ object (8.12.9 - step 10)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = (function() {
+ return arguments;
+}());
+
+Object.defineProperty(obj, "property", {
+ value: 1001,
+ writable: true,
+ configurable: false
+});
+
+Object.defineProperty(obj, "property", {
+ value: 1002
+});
+
+verifyEqualTo(obj, "property", 1002);
+
+verifyWritable(obj, "property");
+
+verifyNotEnumerable(obj, "property");
+
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-4.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-4.js
new file mode 100644
index 0000000000..22cc6d3969
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-4.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-333-4
+description: >
+ Indexed property 'P' with attributes [[Writable]]: true,
+ [[Enumerable]]:true, [[Configurable]]:false is writable using
+ simple assignment, 'A' is an Array Object
+---*/
+
+var obj = [];
+
+Object.defineProperty(obj, "0", {
+ value: 2010,
+ writable: true,
+ enumerable: true,
+ configurable: false
+});
+var verifyValue = (obj[0] === 2010);
+obj[0] = 1001;
+
+assert(verifyValue, 'verifyValue !== true');
+assert.sameValue(obj[0], 1001, 'obj[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-5.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-5.js
new file mode 100644
index 0000000000..59bfb0fdc3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-5.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-333-5
+description: >
+ ES5 Attributes - named data property 'P' with attributes
+ [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: false
+ is writable using simple assignment, 'O' is an Arguments object
+---*/
+
+var obj = (function() {
+ return arguments;
+}());
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: true,
+ configurable: false
+});
+var verifyValue = (obj.prop === 2010);
+obj.prop = 1001;
+
+assert(verifyValue, 'verifyValue !== true');
+assert.sameValue(obj.prop, 1001, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-6.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-6.js
new file mode 100644
index 0000000000..21265866ff
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-6.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-333-6
+description: >
+ Object.defineProperty will update [[Value]] attribute of indexed
+ property 'P' successfully when [[Configurable]] attribute is
+ false, [[Writable]] attribute is true and 'O' is an Object object
+ (8.12.9 - step 10)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "0", {
+ value: 1001,
+ writable: true,
+ configurable: false
+});
+
+Object.defineProperty(obj, "0", {
+ value: 1002
+});
+
+verifyEqualTo(obj, "0", 1002);
+
+verifyWritable(obj, "0");
+
+verifyNotEnumerable(obj, "0");
+
+verifyNotConfigurable(obj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-7.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-7.js
new file mode 100644
index 0000000000..dea755a355
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-7.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-333-7
+description: >
+ Object.defineProperty will update [[Value]] attribute of named
+ property 'P' successfully when [[Configurable]] attribute is
+ false, [[Writable]] attribute is true and 'A' is an Array object
+ (8.12.9 - step 10)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = [];
+
+Object.defineProperty(obj, "prop", {
+ value: 1001,
+ writable: true,
+ configurable: false
+});
+
+Object.defineProperty(obj, "prop", {
+ value: 1002
+});
+
+verifyEqualTo(obj, "prop", 1002);
+
+verifyWritable(obj, "prop");
+
+verifyNotEnumerable(obj, "prop");
+
+verifyNotConfigurable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-8.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-8.js
new file mode 100644
index 0000000000..785d0adc99
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-8.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-333-8
+description: >
+ Object.defineProperty will update [[Value]] attribute of indexed
+ property 'P'successfully when [[Configurable]] attribute is false,
+ [[Writable]] attribute is true and 'O' is an Arguments object
+ (8.12.9 - step 10)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = (function() {
+ return arguments;
+}());
+
+Object.defineProperty(obj, "0", {
+ value: 1001,
+ writable: true,
+ configurable: false
+});
+
+Object.defineProperty(obj, "0", {
+ value: 1002
+});
+
+verifyEqualTo(obj, "0", 1002);
+
+verifyWritable(obj, "0");
+
+verifyNotEnumerable(obj, "0");
+
+verifyNotConfigurable(obj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-9.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-9.js
new file mode 100644
index 0000000000..3e4826bc68
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333-9.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-333-9
+description: >
+ Object.defineProperty - Named property 'P' with attributes
+ [[Writable]]: true, [[Enumerable]]:true, [[Configurable]]:false is
+ writable using simple assignment, 'A' is an Array Object
+---*/
+
+var obj = [];
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: true,
+ configurable: false
+});
+var verifyValue = (obj.prop === 2010);
+obj.prop = 1001;
+
+assert(verifyValue, 'verifyValue !== true');
+assert.sameValue(obj.prop, 1001, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333.js
new file mode 100644
index 0000000000..a058a96dfb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-333.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-333
+description: >
+ ES5 Attributes - property ([[Writable]] is true, [[Enumerable]] is
+ true, [[Configurable]] is false) is writable
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: true,
+ configurable: false
+});
+var propertyDefineCorrect = (obj.prop === 2010);
+obj.prop = 1001;
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(obj.prop, 1001, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-334.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-334.js
new file mode 100644
index 0000000000..9dd1913d57
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-334.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-334
+description: >
+ ES5 Attributes - property ([[Writable]] is true, [[Enumerable]] is
+ true, [[Configurable]] is false) is enumerable
+---*/
+
+var propertyFound = false;
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: true,
+ configurable: false
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p in obj) {
+ if (p === "prop") {
+ propertyFound = true;
+ break;
+ }
+}
+
+assert(propertyFound, 'Property not found');
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.enumerable, true, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-335.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-335.js
new file mode 100644
index 0000000000..177a249f90
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-335.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-335
+description: >
+ ES5 Attributes - property ([[Writable]] is true, [[Enumerable]] is
+ true, [[Configurable]] is false) is undeletable
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: true,
+ configurable: false
+});
+
+assert(obj.hasOwnProperty("prop"));
+verifyNotConfigurable(obj, "prop");
+assert.sameValue(obj.prop, 2010);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-336.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-336.js
new file mode 100644
index 0000000000..1d36f87db1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-336.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-336
+description: >
+ ES5 Attributes - Success to update [[Writable]] attribute of data
+ property ([[Writable]] is true, [[Enumerable]] is true,
+ [[Configurable]] is false) to different value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: true,
+ configurable: false
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ writable: false
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.writable, true, 'desc1.writable');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc2.writable, false, 'desc2.writable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-337.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-337.js
new file mode 100644
index 0000000000..6dbfc373e8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-337.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-337
+description: >
+ ES5 Attributes - fail to update [[Enumerable]] attribute of data
+ property ([[Writable]] is true, [[Enumerable]] is true,
+ [[Configurable]] is false) to different value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: true,
+ configurable: false
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ enumerable: false
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.enumerable, true, 'desc1.enumerable');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc2.enumerable, true, 'desc2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-338.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-338.js
new file mode 100644
index 0000000000..f5895fba7a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-338.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-338
+description: >
+ ES5 Attributes - fail to update [[Configurable]] attribute of data
+ property ([[Writable]] is true, [[Enumerable]] is true,
+ [[Configurable]] is false) to different value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: true,
+ configurable: false
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ configurable: true
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.configurable, false, 'desc1.configurable');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc2.configurable, false, 'desc2.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-339-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-339-1.js
new file mode 100644
index 0000000000..bbb084c07d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-339-1.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-339-1
+description: >
+ Object.defineProperty - Updating indexed data property 'P' with
+ attributes [[Writable]]: true, [[Enumerable]]: true,
+ [[Configurable]]: false to an accessor property does not succeed,
+ 'A' is an Array object (8.12.9 - step 9.a)
+---*/
+
+var obj = [];
+
+Object.defineProperty(obj, "0", {
+ value: 2010,
+ writable: true,
+ enumerable: true,
+ configurable: false
+});
+var propertyDefineCorrect = obj.hasOwnProperty("0");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "0");
+
+function getFunc() {
+ return 20;
+}
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "0", {
+ get: getFunc
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "0");
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.value, 2010, 'desc1.value');
+assert.sameValue(obj[0], 2010, 'obj[0]');
+assert.sameValue(typeof desc2.get, "undefined", 'typeof desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-339-2.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-339-2.js
new file mode 100644
index 0000000000..b03613e1c5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-339-2.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-339-2
+description: >
+ Object.defineProperty - Updating named data property 'P' with
+ attributes [[Writable]]: true, [[Enumerable]]: true,
+ [[Configurable]]: false to an accessor property does not succeed,
+ 'O' is an Arguments object (8.12.9 - step 9.a)
+---*/
+
+var obj = (function() {
+ return arguments;
+}());
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: true,
+ configurable: false
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+function getFunc() {
+ return 20;
+}
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ get: getFunc
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.value, 2010, 'desc1.value');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(typeof desc2.get, "undefined", 'typeof desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-339-3.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-339-3.js
new file mode 100644
index 0000000000..dd51c78891
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-339-3.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-339-3
+description: >
+ Object.defineProperty - Updating named data property 'P' with
+ attributes [[Writable]]: true, [[Enumerable]]: true,
+ [[Configurable]]: false to an accessor property does not succeed,
+ 'A' is an Array object (8.12.9 - step 9.a)
+---*/
+
+var obj = [];
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: true,
+ configurable: false
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+function getFunc() {
+ return 20;
+}
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ get: getFunc
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.value, 2010, 'desc1.value');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(typeof desc2.get, "undefined", 'typeof desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-339-4.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-339-4.js
new file mode 100644
index 0000000000..9d0706c67e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-339-4.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-339-4
+description: >
+ Object.defineProperty - Updating indexed data property 'P' with
+ attributes [[Writable]]: true, [[Enumerable]]: true,
+ [[Configurable]]: false to an accessor property does not succeed,
+ 'O' is an Arguments object (8.12.9 - step 9.a)
+---*/
+
+var obj = (function() {
+ return arguments;
+}());
+
+Object.defineProperty(obj, "0", {
+ value: 2010,
+ writable: true,
+ enumerable: true,
+ configurable: false
+});
+var propertyDefineCorrect = obj.hasOwnProperty("0");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "0");
+
+function getFunc() {
+ return 20;
+}
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "0", {
+ get: getFunc
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "0");
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.value, 2010, 'desc1.value');
+assert.sameValue(obj[0], 2010, 'obj[0]');
+assert.sameValue(typeof desc2.get, "undefined", 'typeof desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-339.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-339.js
new file mode 100644
index 0000000000..5dda522258
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-339.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-339
+description: >
+ ES5 Attributes - fail to update the data property ([[Writable]] is
+ true, [[Enumerable]] is true, [[Configurable]] is false) to an
+ accessor property
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: true,
+ configurable: false
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+function getFunc() {
+ return 20;
+}
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ get: getFunc
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.value, 2010, 'desc1.value');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(typeof desc2.get, "undefined", 'typeof desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-34.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-34.js
new file mode 100644
index 0000000000..75abd1d192
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-34.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-34
+description: >
+ Object.defineProperty - 'O' is an Array object that uses Object's
+ [[GetOwnProperty]] method to access the 'name' property (8.12.9
+ step 1)
+---*/
+
+var arrObj = [];
+
+Object.defineProperty(arrObj, "foo", {
+ value: 12,
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperty(arrObj, "foo", {
+ value: 11,
+ configurable: true
+ });
+});
+assert.sameValue(arrObj.foo, 12, 'arrObj.foo');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-340.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-340.js
new file mode 100644
index 0000000000..1c409533d5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-340.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-340
+description: >
+ ES5 Attributes - property ([[Writable]] is true, [[Enumerable]] is
+ false, [[Configurable]] is true) is writable
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: false,
+ configurable: true
+});
+var propertyDefineCorrect = (obj.prop === 2010);
+obj.prop = 1001;
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(obj.prop, 1001, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-341.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-341.js
new file mode 100644
index 0000000000..5a69176101
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-341.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-341
+description: >
+ ES5 Attributes - property ([[Writable]] is true, [[Enumerable]] is
+ false, [[Configurable]] is true) is non-enumerable
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: false,
+ configurable: true
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p in obj) {
+ assert.notSameValue(p, "prop", 'p');
+}
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-342.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-342.js
new file mode 100644
index 0000000000..f548201ebe
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-342.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-342
+description: >
+ ES5 Attributes - property ([[Writable]] is true, [[Enumerable]] is
+ false, [[Configurable]] is true) is deletable
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: false,
+ configurable: true
+});
+var beforeDelete = obj.hasOwnProperty("prop");
+delete obj.prop;
+var afterDelete = obj.hasOwnProperty("prop");
+
+assert(beforeDelete, 'beforeDelete !== true');
+assert.sameValue(afterDelete, false, 'afterDelete');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-343.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-343.js
new file mode 100644
index 0000000000..f277f07f73
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-343.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-343
+description: >
+ ES5 Attributes - success to update [[Writable]] attribute of data
+ property ([[Writable]] is true, [[Enumerable]] is false,
+ [[Configurable]] is true) to different value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: false,
+ configurable: true
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ writable: false
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.writable, true, 'desc1.writable');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc2.writable, false, 'desc2.writable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-344.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-344.js
new file mode 100644
index 0000000000..6e4242ade1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-344.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-344
+description: >
+ ES5 Attributes - success to update [[Enumerable]] attribute of
+ data property ([[Writable]] is true, [[Enumerable]] is false,
+ [[Configurable]] is true) to different value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: false,
+ configurable: true
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ enumerable: true
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.enumerable, false, 'desc1.enumerable');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc2.enumerable, true, 'desc2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-345.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-345.js
new file mode 100644
index 0000000000..00f26c332b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-345.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-345
+description: >
+ ES5 Attributes - success to update [[Configurable]] attribute of
+ data property ([[Writable]] is true, [[Enumerable]] is false,
+ [[Configurable]] is true) to different value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: false,
+ configurable: true
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ configurable: false
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.configurable, true, 'desc1.configurable');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc2.configurable, false, 'desc2.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-346.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-346.js
new file mode 100644
index 0000000000..39bae9dae3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-346.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-346
+description: >
+ ES5 Attributes - success to update the data property ([[Writable]]
+ is true, [[Enumerable]] is false, [[Configurable]] is true) to an
+ accessor property
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: false,
+ configurable: true
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+function getFunc() {
+ return 20;
+}
+Object.defineProperty(obj, "prop", {
+ get: getFunc
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(desc1.hasOwnProperty("value"), 'desc1.hasOwnProperty("value") !== true');
+assert(desc2.hasOwnProperty("get"), 'desc2.hasOwnProperty("get") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-347.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-347.js
new file mode 100644
index 0000000000..2f1aef5c38
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-347.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-347
+description: >
+ ES5 Attributes - property ([[Writable]] is true, [[Enumerable]] is
+ false, [[Configurable]] is false) is writable
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: false,
+ configurable: false
+});
+var propertyDefineCorrect = (obj.prop === 2010);
+obj.prop = 1001;
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(obj.prop, 1001, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-348.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-348.js
new file mode 100644
index 0000000000..4aadfec3be
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-348.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-348
+description: >
+ ES5 Attributes - property ([[Writable]] is true, [[Enumerable]] is
+ false, [[Configurable]] is false) is non-enumerable
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: false,
+ configurable: false
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p in obj) {
+ assert.notSameValue(p, "prop", 'p');
+}
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-349.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-349.js
new file mode 100644
index 0000000000..143606c7a9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-349.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-349
+description: >
+ ES5 Attributes - property ([[Writable]] is true, [[Enumerable]] is
+ false, [[Configurable]] is false) is undeletable
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: false,
+ configurable: false
+});
+
+assert(obj.hasOwnProperty("prop"));
+verifyNotConfigurable(obj, "prop");
+assert.sameValue(obj.prop, 2010);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-35.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-35.js
new file mode 100644
index 0000000000..3d3e33d8db
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-35.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-35
+description: >
+ Object.defineProperty - 'O' is a String object which implements
+ its own [[GetOwnProperty]] method to access the 'name' property
+ (8.12.9 step 1)
+---*/
+
+var str = new String("abc");
+
+Object.defineProperty(str, "foo", {
+ value: 12,
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperty(str, "foo", {
+ value: 11,
+ configurable: true
+ });
+});
+assert.sameValue(str.foo, 12, 'str.foo');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-350.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-350.js
new file mode 100644
index 0000000000..aa7e7bbd32
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-350.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-350
+description: >
+ ES5 Attributes - fail to update [[Writable]] attribute of data
+ property ([[Writable]] is true, [[Enumerable]] is false,
+ [[Configurable]] is false) to different value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: false,
+ configurable: false
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ writable: false
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.writable, true, 'desc1.writable');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc2.writable, false, 'desc2.writable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-351.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-351.js
new file mode 100644
index 0000000000..7febca7766
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-351.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-351
+description: >
+ ES5 Attributes - fail to update [[Enumerable]] attribute of data
+ property ([[Writable]] is true, [[Enumerable]] is false,
+ [[Configurable]] is false) to different value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: false,
+ configurable: false
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ enumerable: true
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.enumerable, false, 'desc1.enumerable');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc2.enumerable, false, 'desc2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-352.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-352.js
new file mode 100644
index 0000000000..83ef3294c4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-352.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-352
+description: >
+ ES5 Attributes - fail to update [[Configurable]] attribute of data
+ property ([[Writable]] is true, [[Enumerable]] is false,
+ [[Configurable]] is false) to different value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: false,
+ configurable: false
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ configurable: true
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.configurable, false, 'desc1.configurable');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc2.configurable, false, 'desc2.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-353.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-353.js
new file mode 100644
index 0000000000..3a0ac2fc30
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-353.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-353
+description: >
+ ES5 Attributes - fail to update the data property ([[Writable]] is
+ true, [[Enumerable]] is false, [[Configurable]] is false) to an
+ accessor property
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: true,
+ enumerable: false,
+ configurable: false
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+function getFunc() {
+ return 20;
+}
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ get: getFunc
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.value, 2010, 'desc1.value');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(typeof desc2.get, "undefined", 'typeof desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-1.js
new file mode 100644
index 0000000000..3e580abc51
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-1.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-354-1
+description: >
+ Object.defineProperty will update [[Value]] attribute of named
+ property 'P' successfully when [[Configurable]] attribute is true
+ and [[Writable]] attribute is false, 'O' is an Object object
+ (8.12.9 step - Note)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ value: 1001,
+ writable: false,
+ configurable: true
+});
+
+Object.defineProperty(obj, "property", {
+ value: 1002
+});
+
+verifyEqualTo(obj, "property", 1002);
+
+verifyNotWritable(obj, "property");
+
+verifyNotEnumerable(obj, "property");
+
+verifyConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-10.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-10.js
new file mode 100644
index 0000000000..4fa47d892d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-10.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-354-10
+description: >
+ Object.defineProperty will update [[Value]] attribute of indexed
+ property 'P' successfully when [[Configurable]] attribute is true
+ and [[Writable]] attribute is false, 'O' is an Object object
+ (8.12.9 step - Note)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "0", {
+ value: 1001,
+ writable: false,
+ configurable: true
+});
+
+Object.defineProperty(obj, "0", {
+ value: 1002
+});
+
+verifyEqualTo(obj, "0", 1002);
+
+verifyNotWritable(obj, "0");
+
+verifyNotEnumerable(obj, "0");
+
+verifyConfigurable(obj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-11.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-11.js
new file mode 100644
index 0000000000..0f23373bff
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-11.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-354-11
+description: >
+ Object.defineProperty will update [[Value]] attribute of named
+ property 'P' successfully when [[Configurable]] attribute is true
+ and [[Writable]] attribute is false, 'A' is an Array object
+ (8.12.9 step - Note)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = [];
+
+Object.defineProperty(obj, "prop", {
+ value: 1001,
+ writable: false,
+ configurable: true
+});
+
+Object.defineProperty(obj, "prop", {
+ value: 1002
+});
+
+verifyEqualTo(obj, "prop", 1002);
+
+verifyNotWritable(obj, "prop");
+
+verifyNotEnumerable(obj, "prop");
+
+verifyConfigurable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-12.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-12.js
new file mode 100644
index 0000000000..c301667d62
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-12.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-354-12
+description: >
+ Object.defineProperty will update [[Value]] attribute of indexed
+ property successfully when [[Configurable]] attribute is true and
+ [[Writable]] attribute is false, 'O' is an Arguments object
+ (8.12.9 - step Note)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = (function() {
+ return arguments;
+}());
+
+Object.defineProperty(obj, "0", {
+ value: 1001,
+ writable: false,
+ configurable: true
+});
+
+Object.defineProperty(obj, "0", {
+ value: 1002
+});
+
+verifyEqualTo(obj, "0", 1002);
+
+verifyNotWritable(obj, "0");
+
+verifyNotEnumerable(obj, "0");
+
+verifyConfigurable(obj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-15.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-15.js
new file mode 100644
index 0000000000..42cf188ef5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-15.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-354-15
+description: >
+ Object.defineProperty - Named property 'P' with attributes
+ [[Writable]]: false, [[Enumerable]]: true, [[Configurable]]: true
+ is non-writable using simple assignment, 'A' is an Array object
+includes: [propertyHelper.js]
+---*/
+
+var obj = [];
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: true,
+ configurable: true
+});
+
+assert.sameValue(obj.prop, 2010);
+verifyNotWritable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-16.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-16.js
new file mode 100644
index 0000000000..b5947a8818
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-16.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-354-16
+description: >
+ ES5 Attributes - property 'P' is an indexed data property with
+ attributes [[Writable]]: false, [[Enumerable]]: true,
+ [[Configurable]] : true) is non-writable using simple assignment,
+ 'O' is an Arguments object
+includes: [propertyHelper.js]
+---*/
+
+var obj = (function() {
+ return arguments;
+}());
+
+Object.defineProperty(obj, "0", {
+ value: 2010,
+ writable: false,
+ enumerable: true,
+ configurable: true
+});
+
+assert.sameValue(obj[0], 2010);
+verifyNotWritable(obj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-2.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-2.js
new file mode 100644
index 0000000000..60ef5a8187
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-2.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-354-2
+description: >
+ Object.defineProperty will update [[Value]] attribute of indexed
+ property 'P' successfully when [[Configurable]] attribute is true
+ and [[Writable]] attribute is false, 'A' is an Array object
+ (8.12.9 step - Note)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = [];
+
+Object.defineProperty(obj, "0", {
+ value: 1001,
+ writable: false,
+ configurable: true
+});
+
+Object.defineProperty(obj, "0", {
+ value: 1002
+});
+
+verifyEqualTo(obj, "0", 1002);
+
+verifyNotWritable(obj, "0");
+
+verifyNotEnumerable(obj, "0");
+
+verifyConfigurable(obj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-3.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-3.js
new file mode 100644
index 0000000000..fecfdd55a4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-3.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-354-3
+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: [propertyHelper.js]
+---*/
+
+
+var obj = (function() {
+ return arguments;
+}());
+
+Object.defineProperty(obj, "property", {
+ value: 1001,
+ writable: false,
+ configurable: true
+});
+
+Object.defineProperty(obj, "property", {
+ value: 1002
+});
+
+verifyEqualTo(obj, "property", 1002);
+
+verifyNotWritable(obj, "property");
+
+verifyNotEnumerable(obj, "property");
+
+verifyConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-6.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-6.js
new file mode 100644
index 0000000000..140bc5b7f7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-6.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-354-6
+description: >
+ Object.defineProperty - Indexed property 'P' with attributes
+ [[Writable]]: false, [[Enumerable]]: true, [[Configurable]]: true
+ is non-writable using simple assignment, 'A' is an Array object
+includes: [propertyHelper.js]
+---*/
+
+var obj = [];
+
+Object.defineProperty(obj, "0", {
+ value: 2010,
+ writable: false,
+ enumerable: true,
+ configurable: true
+});
+
+assert.sameValue(obj[0], 2010);
+verifyNotWritable(obj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-7.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-7.js
new file mode 100644
index 0000000000..31fffa2ee2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354-7.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-354-7
+description: >
+ ES5 Attributes - property 'P' with attributes [[Writable]]: false,
+ [[Enumerable]]: true, [[Configurable]] : true) is non-writable
+ using simple assignment, 'O' is an Arguments object
+includes: [propertyHelper.js]
+---*/
+
+var obj = (function() {
+ return arguments;
+}());
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: true,
+ configurable: true
+});
+
+assert.sameValue(obj.prop, 2010);
+verifyNotWritable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354.js
new file mode 100644
index 0000000000..dbf15887fb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-354.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-354
+description: >
+ ES5 Attributes - property ([[Writable]] is false, [[Enumerable]]
+ is true, [[Configurable]] is true) is unwritable
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: true,
+ configurable: true
+});
+
+assert.sameValue(obj.prop, 2010);
+verifyNotWritable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-355.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-355.js
new file mode 100644
index 0000000000..764432c18f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-355.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-355
+description: >
+ ES5 Attributes - property ([[Writable]] is false, [[Enumerable]]
+ is true, [[Configurable]] is true) is enumerable
+---*/
+
+var propertyFound = false;
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: true,
+ configurable: true
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var property in obj) {
+ if (property === "prop") {
+ propertyFound = true;
+ break;
+ }
+}
+
+assert(propertyFound, 'Property not found');
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.enumerable, true, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-356.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-356.js
new file mode 100644
index 0000000000..fd34047c0e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-356.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-356
+description: >
+ ES5 Attributes - property ([[Writable]] is false, [[Enumerable]]
+ is true, [[Configurable]] is true) is deletable
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: true,
+ configurable: true
+});
+var beforeDelete = obj.hasOwnProperty("prop");
+delete obj.prop;
+var afterDelete = obj.hasOwnProperty("prop");
+
+assert(beforeDelete, 'beforeDelete !== true');
+assert.sameValue(afterDelete, false, 'afterDelete');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-357.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-357.js
new file mode 100644
index 0000000000..3d760926ec
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-357.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-357
+description: >
+ ES5 Attributes - success to update [[Writable]] attribute of data
+ property ([[Writable]] is false, [[Enumerable]] is true,
+ [[Configurable]] is true) to different value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: true,
+ configurable: true
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ writable: true
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.writable, false, 'desc1.writable');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc2.writable, true, 'desc2.writable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-358.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-358.js
new file mode 100644
index 0000000000..c61f1fe0ac
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-358.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-358
+description: >
+ ES5 Attributes - success to update [[Enumerable]] attribute of
+ data property ([[Writable]] is false, [[Enumerable]] is true,
+ [[Configurable]] is true) to different value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: true,
+ configurable: true
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ enumerable: false
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.enumerable, true, 'desc1.enumerable');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc2.enumerable, false, 'desc2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-359.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-359.js
new file mode 100644
index 0000000000..d7d587f941
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-359.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-359
+description: >
+ ES5 Attributes - success to update [[Configurable]] attribute of
+ data property ([[Writable]] is false, [[Enumerable]] is true,
+ [[Configurable]] is true) to different value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: true,
+ configurable: true
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ configurable: false
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.configurable, true, 'desc1.configurable');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc2.configurable, false, 'desc2.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-36.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-36.js
new file mode 100644
index 0000000000..b9a846fa3e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-36.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-36
+description: >
+ Object.defineProperty - 'O' is a Boolean object that uses Object's
+ [[GetOwnProperty]] method to access the 'name' property (8.12.9
+ step 1)
+---*/
+
+var obj = new Boolean(true);
+
+Object.defineProperty(obj, "foo", {
+ value: 12,
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "foo", {
+ value: 11,
+ configurable: true
+ });
+});
+assert.sameValue(obj.foo, 12, 'obj.foo');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-360-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-360-1.js
new file mode 100644
index 0000000000..0cc765ee6d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-360-1.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-360-1
+description: >
+ ES5 Attributes - Updating indexed data property 'P' whose
+ attributes are [[Writable]]: false, [[Enumerable]]: true,
+ [[Configurable]]: true to an accessor property, 'A' is an Array
+ object (8.12.9 - step 9.b.i)
+---*/
+
+var obj = [];
+
+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");
+
+assert(desc1.hasOwnProperty("value"), 'desc1.hasOwnProperty("value") !== true');
+assert(desc2.hasOwnProperty("get"), 'desc2.hasOwnProperty("get") !== true');
+assert.sameValue(desc2.enumerable, true, 'desc2.enumerable');
+assert.sameValue(desc2.configurable, true, 'desc2.configurable');
+assert.sameValue(obj[0], 20, 'obj[0]');
+assert.sameValue(typeof desc2.set, "undefined", 'typeof desc2.set');
+assert.sameValue(desc2.get, getFunc, 'desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-360-2.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-360-2.js
new file mode 100644
index 0000000000..f7f96bdc52
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-360-2.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-360-2
+description: >
+ ES5 Attributes - Updating data property 'P' whose attributes are
+ [[Writable]]: false, [[Enumerable]]: true, [[Configurable]]: true
+ to an accessor property, 'O' is an Arguments object (8.12.9 - step
+ 9.b.i)
+---*/
+
+var obj = (function() {
+ return arguments;
+}());
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: true,
+ configurable: true
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+function getFunc() {
+ return 20;
+}
+Object.defineProperty(obj, "prop", {
+ get: getFunc
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(desc1.hasOwnProperty("value"), 'desc1.hasOwnProperty("value") !== true');
+assert(desc2.hasOwnProperty("get"), 'desc2.hasOwnProperty("get") !== true');
+assert.sameValue(desc2.enumerable, true, 'desc2.enumerable');
+assert.sameValue(desc2.configurable, true, 'desc2.configurable');
+assert.sameValue(obj.prop, 20, 'obj.prop');
+assert.sameValue(typeof desc2.set, "undefined", 'typeof desc2.set');
+assert.sameValue(desc2.get, getFunc, 'desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-360-5.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-360-5.js
new file mode 100644
index 0000000000..bcd2213f2c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-360-5.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-360-5
+description: >
+ ES5 Attributes - Updating named data property 'P' whose attributes
+ are [[Writable]]: false, [[Enumerable]]: true, [[Configurable]]:
+ true to an accessor property, 'A' is an Array object (8.12.9 -
+ step 9.b.i)
+---*/
+
+var obj = [];
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: true,
+ configurable: true
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+function getFunc() {
+ return 20;
+}
+Object.defineProperty(obj, "prop", {
+ get: getFunc
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(desc1.hasOwnProperty("value"), 'desc1.hasOwnProperty("value") !== true');
+assert(desc2.hasOwnProperty("get"), 'desc2.hasOwnProperty("get") !== true');
+assert.sameValue(desc2.enumerable, true, 'desc2.enumerable');
+assert.sameValue(desc2.configurable, true, 'desc2.configurable');
+assert.sameValue(obj.prop, 20, 'obj.prop');
+assert.sameValue(typeof desc2.set, "undefined", 'typeof desc2.set');
+assert.sameValue(desc2.get, getFunc, 'desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-360-6.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-360-6.js
new file mode 100644
index 0000000000..96e5b4e3b7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-360-6.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-360-6
+description: >
+ ES5 Attributes - Updating indexed data property 'P' whose
+ attributes are [[Writable]]: false, [[Enumerable]]: true,
+ [[Configurable]]: true to an accessor property, 'O' is an
+ Arguments object (8.12.9 - step 9.b.i)
+---*/
+
+var obj = (function() {
+ return arguments;
+}());
+
+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");
+
+assert(desc1.hasOwnProperty("value"), 'desc1.hasOwnProperty("value") !== true');
+assert(desc2.hasOwnProperty("get"), 'desc2.hasOwnProperty("get") !== true');
+assert.sameValue(desc2.enumerable, true, 'desc2.enumerable');
+assert.sameValue(desc2.configurable, true, 'desc2.configurable');
+assert.sameValue(obj[0], 20, 'obj[0]');
+assert.sameValue(typeof desc2.set, "undefined", 'typeof desc2.set');
+assert.sameValue(desc2.get, getFunc, 'desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-360.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-360.js
new file mode 100644
index 0000000000..b0975e43e7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-360.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-360
+description: >
+ ES5 Attributes - success to update the data property ([[Writable]]
+ is false, [[Enumerable]] is true, [[Configurable]] is true) to an
+ accessor property
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: true,
+ configurable: true
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+function getFunc() {
+ return 20;
+}
+Object.defineProperty(obj, "prop", {
+ get: getFunc
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(desc1.hasOwnProperty("value"), 'desc1.hasOwnProperty("value") !== true');
+assert(desc2.hasOwnProperty("get"), 'desc2.hasOwnProperty("get") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-361.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-361.js
new file mode 100644
index 0000000000..ddaf657cd8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-361.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-361
+description: >
+ ES5 Attributes - property ([[Writable]] is false, [[Enumerable]]
+ is true, [[Configurable]] is false) is unwritable
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: true,
+ configurable: false
+});
+
+assert.sameValue(obj.prop, 2010);
+verifyNotWritable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-362.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-362.js
new file mode 100644
index 0000000000..794aeb4686
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-362.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-362
+description: >
+ ES5 Attributes - property ([[Writable]] is false, [[Enumerable]]
+ is true, [[Configurable]] is false) is enumerable
+---*/
+
+var propertyFound = false;
+
+var obj = {};
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: true,
+ configurable: false
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var property in obj) {
+ if (property === "prop") {
+ propertyFound = true;
+ break;
+ }
+}
+
+assert(propertyFound, 'Property not found');
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.enumerable, true, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-363.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-363.js
new file mode 100644
index 0000000000..5eb3404f36
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-363.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-363
+description: >
+ ES5 Attributes - property ([[Writable]] is false, [[Enumerable]]
+ is true, [[Configurable]] is false) is undeletable
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: true,
+ configurable: false
+});
+
+assert(obj.hasOwnProperty("prop"));
+verifyNotConfigurable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-364.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-364.js
new file mode 100644
index 0000000000..06b1ec0dfb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-364.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-364
+description: >
+ ES5 Attributes - fail to update [[Writable]] attribute of data
+ property ([[Writable]] is false, [[Enumerable]] is true,
+ [[Configurable]] is false) to different value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: true,
+ configurable: false
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ writable: true
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.writable, false, 'desc1.writable');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc2.writable, false, 'desc2.writable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-365.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-365.js
new file mode 100644
index 0000000000..d7fc88a3f1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-365.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-365
+description: >
+ ES5 Attributes - fail to update [[Enumerable]] attribute of data
+ property ([[Writable]] is false, [[Enumerable]] is true,
+ [[Configurable]] is false) to different value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: true,
+ configurable: false
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ enumerable: false
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.enumerable, true, 'desc1.enumerable');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc2.enumerable, true, 'desc2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-366.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-366.js
new file mode 100644
index 0000000000..606e968895
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-366.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-366
+description: >
+ ES5 Attributes - fail to update [[Configurable]] attribute of data
+ property ([[Writable]] is false, [[Enumerable]] is true,
+ [[Configurable]] is false) to different value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: true,
+ configurable: false
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ configurable: true
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.configurable, false, 'desc1.configurable');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc2.configurable, false, 'desc2.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-367.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-367.js
new file mode 100644
index 0000000000..446290d074
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-367.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-367
+description: >
+ ES5 Attributes - fail to update the data property ([[Writable]] is
+ false, [[Enumerable]] is true, [[Configurable]] is false) to an
+ accessor property
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: true,
+ configurable: false
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+function getFunc() {
+ return 20;
+}
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ get: getFunc
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.value, 2010, 'desc1.value');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(typeof desc2.get, "undefined", 'typeof desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-368.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-368.js
new file mode 100644
index 0000000000..1faaa98d37
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-368.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-368
+description: >
+ ES5 Attributes - property ([[Writable]] is false, [[Enumerable]]
+ is false, [[Configurable]] is true) is unwritable
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+assert.sameValue(obj.prop, 2010);
+verifyNotWritable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-369.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-369.js
new file mode 100644
index 0000000000..60bfa0086a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-369.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-369
+description: >
+ ES5 Attributes - property ([[Writable]] is false, [[Enumerable]]
+ is false, [[Configurable]] is true) is non-enumerable
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p in obj) {
+ assert.notSameValue(p, "prop", 'p');
+}
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-37.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-37.js
new file mode 100644
index 0000000000..fe557c7dac
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-37.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-37
+description: >
+ Object.defineProperty - 'O' is a Number object that uses Object's
+ [[GetOwnProperty]] method to access the 'name' property (8.12.9
+ step 1)
+---*/
+
+var obj = new Number(-2);
+
+Object.defineProperty(obj, "foo", {
+ value: 12,
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "foo", {
+ value: 11,
+ configurable: true
+ });
+});
+assert.sameValue(obj.foo, 12, 'obj.foo');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-370.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-370.js
new file mode 100644
index 0000000000..1b0ad6b0a0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-370.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-370
+description: >
+ ES5 Attributes - property ([[Writable]] is false, [[Enumerable]]
+ is false, [[Configurable]] is true) is deletable
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+var beforeDelete = obj.hasOwnProperty("prop");
+delete obj.prop;
+var afterDelete = obj.hasOwnProperty("prop");
+
+assert(beforeDelete, 'beforeDelete !== true');
+assert.sameValue(afterDelete, false, 'afterDelete');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-371.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-371.js
new file mode 100644
index 0000000000..12585ce6f6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-371.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-371
+description: >
+ ES5 Attributes - success to update [[Writable]] attribute of data
+ property ([[Writable]] is false, [[Enumerable]] is false,
+ [[Configurable]] is true) to different value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ writable: true
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.writable, false, 'desc1.writable');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc2.writable, true, 'desc2.writable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-372.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-372.js
new file mode 100644
index 0000000000..2fd3b8b4d9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-372.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-372
+description: >
+ ES5 Attributes - success to update [[Enumerable]] attribute of
+ data property ([[Writable]] is false, [[Enumerable]] is false,
+ [[Configurable]] is true) to different value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ enumerable: true
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.enumerable, false, 'desc1.enumerable');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc2.enumerable, true, 'desc2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-373.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-373.js
new file mode 100644
index 0000000000..9ff4a194e7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-373.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-373
+description: >
+ ES5 Attributes - success to update [[Configurable]] attribute of
+ data property ([[Writable]] is false, [[Enumerable]] is false,
+ [[Configurable]] is true) to different value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ configurable: false
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.configurable, true, 'desc1.configurable');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc2.configurable, false, 'desc2.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-374.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-374.js
new file mode 100644
index 0000000000..ea1bb48679
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-374.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-374
+description: >
+ ES5 Attributes - success to update the data property ([[Writable]]
+ is false, [[Enumerable]] is false, [[Configurable]] is true) to an
+ accessor property
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+function getFunc() {
+ return 20;
+}
+Object.defineProperty(obj, "prop", {
+ get: getFunc
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(desc1.hasOwnProperty("value"), 'desc1.hasOwnProperty("value") !== true');
+assert.sameValue(desc2.get, getFunc, 'desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-375.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-375.js
new file mode 100644
index 0000000000..b41c9513e2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-375.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-375
+description: >
+ ES5 Attributes - property ([[Writable]] is false, [[Enumerable]]
+ is false, [[Configurable]] is false) is unwritable
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: false,
+ configurable: false
+});
+
+assert.sameValue(obj.prop, 2010);
+verifyNotWritable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-376.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-376.js
new file mode 100644
index 0000000000..fa2805314c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-376.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-376
+description: >
+ ES5 Attributes - property ([[Writable]] is false, [[Enumerable]]
+ is false, [[Configurable]] is false) is non-enumerable
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: false,
+ configurable: false
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p in obj) {
+ assert.notSameValue(p, "prop", 'p');
+}
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-377.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-377.js
new file mode 100644
index 0000000000..efd2e54659
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-377.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-377
+description: >
+ ES5 Attributes - property ([[Writable]] is false, [[Enumerable]]
+ is false, [[Configurable]] is false) is undeletable
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: false,
+ configurable: false
+});
+
+assert(obj.hasOwnProperty("prop"));
+verifyNotConfigurable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-378.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-378.js
new file mode 100644
index 0000000000..afde24d570
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-378.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-378
+description: >
+ ES5 Attributes - fail to update [[Writable]] attribute of data
+ property ([[Writable]] is false, [[Enumerable]] is false,
+ [[Configurable]] is false) to different value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: false,
+ configurable: false
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ writable: true
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.writable, false, 'desc1.writable');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc2.writable, false, 'desc2.writable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-379.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-379.js
new file mode 100644
index 0000000000..cbb72d6f8e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-379.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-379
+description: >
+ ES5 Attributes - fail to update [[Enumerable]] attribute of data
+ property ([[Writable]] is false, [[Enumerable]] is false,
+ [[Configurable]] is false) to different value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: false,
+ configurable: false
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ enumerable: true
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.enumerable, false, 'desc1.enumerable');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc2.enumerable, false, 'desc2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-38.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-38.js
new file mode 100644
index 0000000000..f40b4f152a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-38.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-38
+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: [propertyHelper.js]
+---*/
+
+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;
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-380.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-380.js
new file mode 100644
index 0000000000..9dde066977
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-380.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-380
+description: >
+ ES5 Attributes - fail to update [[Configurable]] attribute of data
+ property ([[Writable]] is false, [[Enumerable]] is false,
+ [[Configurable]] is false) to different value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: false,
+ configurable: false
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ configurable: true
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.configurable, false, 'desc1.configurable');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc2.configurable, false, 'desc2.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-381.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-381.js
new file mode 100644
index 0000000000..2efd739d82
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-381.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-381
+description: >
+ ES5 Attributes - fail to update the data property ([[Writable]] is
+ false, [[Enumerable]] is false, [[Configurable]] is false) to an
+ accessor property
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 2010,
+ writable: false,
+ enumerable: false,
+ configurable: false
+});
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+function getFunc() {
+ return 20;
+}
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ get: getFunc
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc1.value, 2010, 'desc1.value');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(typeof desc2.get, "undefined", 'typeof desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-382.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-382.js
new file mode 100644
index 0000000000..37efe23714
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-382.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-382
+description: ES5 Attributes - [[Value]] attribute of data property is a number
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 1001
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(obj.prop, 1001, 'obj.prop');
+assert.sameValue(desc.value, 1001, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-383.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-383.js
new file mode 100644
index 0000000000..05dc316613
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-383.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-383
+description: ES5 Attributes - [[Value]] attribute of data property is a string
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: "ThisIsAString"
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(obj.prop, "ThisIsAString", 'obj.prop');
+assert.sameValue(desc.value, "ThisIsAString", 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-384.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-384.js
new file mode 100644
index 0000000000..57719e51b5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-384.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-384
+description: ES5 Attributes - [[Value]] attribute of data property is a boolean
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: false
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(obj.prop, false, 'obj.prop');
+assert.sameValue(desc.value, false, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-385.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-385.js
new file mode 100644
index 0000000000..dfffe80f88
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-385.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-385
+description: >
+ ES5 Attributes - [[Value]] attribute of data property is a generic
+ object
+---*/
+
+var obj = {};
+var tempObj = {
+ testproperty: 100
+};
+
+Object.defineProperty(obj, "prop", {
+ value: tempObj
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(obj.prop, tempObj, 'obj.prop');
+assert.sameValue(desc.value, tempObj, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-386.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-386.js
new file mode 100644
index 0000000000..911752dcff
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-386.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-386
+description: >
+ ES5 Attributes - [[Value]] attribute of data property is an Array
+ object
+---*/
+
+var obj = {};
+var arrObj = [];
+
+Object.defineProperty(obj, "prop", {
+ value: arrObj
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(obj.prop, arrObj, 'obj.prop');
+assert.sameValue(desc.value, arrObj, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-387.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-387.js
new file mode 100644
index 0000000000..45ecb3f669
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-387.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-387
+description: >
+ ES5 Attributes - [[Value]] attribute of data property is a String
+ object
+---*/
+
+var obj = {};
+var strObj = new String();
+
+Object.defineProperty(obj, "prop", {
+ value: strObj
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(obj.prop, strObj, 'obj.prop');
+assert.sameValue(desc.value, strObj, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-388.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-388.js
new file mode 100644
index 0000000000..bf9546b71a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-388.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-388
+description: >
+ ES5 Attributes - [[Value]] attribute of data property is a Number
+ object
+---*/
+
+var obj = {};
+var numObj = new Number();
+
+Object.defineProperty(obj, "prop", {
+ value: numObj
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(obj.prop, numObj, 'obj.prop');
+assert.sameValue(desc.value, numObj, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-389.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-389.js
new file mode 100644
index 0000000000..7182ddfb85
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-389.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-389
+description: >
+ ES5 Attributes - [[Value]] attribute of data property is a Boolean
+ Object
+---*/
+
+var obj = {};
+var boolObj = new Boolean();
+
+Object.defineProperty(obj, "prop", {
+ value: boolObj
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(obj.prop, boolObj, 'obj.prop');
+assert.sameValue(desc.value, boolObj, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-39.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-39.js
new file mode 100644
index 0000000000..4a8721990d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-39.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-39
+description: >
+ Object.defineProperty - 'O' is a Date object that uses Object's
+ [[GetOwnProperty]] method to access the 'name' property (8.12.9
+ step 1)
+---*/
+
+var desc = new Date();
+
+Object.defineProperty(desc, "foo", {
+ value: 12,
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperty(desc, "foo", {
+ value: 11,
+ configurable: true
+ });
+});
+assert.sameValue(desc.foo, 12, 'desc.foo');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-390.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-390.js
new file mode 100644
index 0000000000..c80f3724bd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-390.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-390
+description: >
+ ES5 Attributes - [[Value]] attribute of data property is a
+ Function object
+---*/
+
+var obj = {};
+var funObj = function() {};
+
+Object.defineProperty(obj, "prop", {
+ value: funObj
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(obj.prop, funObj, 'obj.prop');
+assert.sameValue(desc.value, funObj, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-391.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-391.js
new file mode 100644
index 0000000000..584e8844af
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-391.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-391
+description: >
+ ES5 Attributes - [[Value]] attribute of data property is an Error
+ object
+---*/
+
+var obj = {};
+var errObj = new Error();
+
+Object.defineProperty(obj, "prop", {
+ value: errObj
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(obj.prop, errObj, 'obj.prop');
+assert.sameValue(desc.value, errObj, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-392.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-392.js
new file mode 100644
index 0000000000..268812cbc7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-392.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-392
+description: >
+ ES5 Attributes - [[Value]] attribute of data property is a Date
+ object
+---*/
+
+var obj = {};
+var dateObj = new Date();
+
+Object.defineProperty(obj, "prop", {
+ value: dateObj
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(obj.prop, dateObj, 'obj.prop');
+assert.sameValue(desc.value, dateObj, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-393.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-393.js
new file mode 100644
index 0000000000..5eaa735152
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-393.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-393
+description: >
+ ES5 Attributes - [[Value]] attribute of data property is a RegExp
+ object
+---*/
+
+var obj = {};
+var regObj = new RegExp();
+
+Object.defineProperty(obj, "prop", {
+ value: regObj
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(obj.prop, regObj, 'obj.prop');
+assert.sameValue(desc.value, regObj, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-394.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-394.js
new file mode 100644
index 0000000000..16f70bb333
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-394.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-394
+description: ES5 Attributes - [[Value]] attribute of data property is undefined
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: undefined
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(typeof obj.prop, "undefined", 'typeof obj.prop');
+assert.sameValue(typeof desc.value, "undefined", 'typeof desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-395.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-395.js
new file mode 100644
index 0000000000..4354960ae5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-395.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-395
+description: ES5 Attributes - [[Value]] attribute of data property is null
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: null
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(obj.prop, null, 'obj.prop');
+assert.sameValue(desc.value, null, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-396.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-396.js
new file mode 100644
index 0000000000..4ad3723e6e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-396.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-396
+description: ES5 Attributes - [[Value]] attribute of data property is NaN
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: NaN
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(obj.prop !== obj.prop, 'obj.prop !== obj.prop !== true');
+assert(desc.value !== desc.value, 'desc.value !== desc.value !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-397.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-397.js
new file mode 100644
index 0000000000..b6d89afb23
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-397.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-397
+description: ES5 Attributes - [[Value]] attribute of data property is Infinity
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: Infinity
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(obj.prop, Infinity, 'obj.prop');
+assert.sameValue(desc.value, Infinity, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-398.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-398.js
new file mode 100644
index 0000000000..2665cf01b5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-398.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-398
+description: ES5 Attributes - [[Value]] attribute of data property is -Infinity
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: -Infinity
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(obj.prop, -Infinity, 'obj.prop');
+assert.sameValue(desc.value, -Infinity, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-399.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-399.js
new file mode 100644
index 0000000000..97c6c7a46e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-399.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-399
+description: >
+ ES5 Attributes - [[Value]] attribute of data property is the
+ global object
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: this
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(obj.prop, this, 'obj.prop');
+assert.sameValue(desc.value, this, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-4.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-4.js
new file mode 100644
index 0000000000..80c9d3afd8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-4.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Step 4 of defineProperty calls the [[DefineOwnProperty]] internal method
+ of O to define the property. For newly defined properties, step 4.a.1 of
+ [[DefineOwnProperty]] creates a data property if handed a generic desc.
+es5id: 15.2.3.6-4-4
+description: >
+ Object.defineProperty defines a data property if given a generic
+ desc(8.12.9 step 4.a.i)
+---*/
+
+var o = {};
+
+var desc = {};
+Object.defineProperty(o, "foo", desc);
+
+var propDesc = Object.getOwnPropertyDescriptor(o, "foo");
+
+assert.sameValue(propDesc.value, undefined, 'propDesc.value'); // undefined by default
+assert.sameValue(propDesc.writable, false, 'propDesc.writable'); // false by default
+assert.sameValue(propDesc.enumerable, false, 'propDesc.enumerable'); // false by default
+assert.sameValue(propDesc.configurable, false, 'propDesc.configurable'); // false by default
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-40.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-40.js
new file mode 100644
index 0000000000..7418b9cb59
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-40.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-40
+description: >
+ Object.defineProperty - 'O' is a RegExp object that uses Object's
+ [[GetOwnProperty]] method to access the 'name' property (8.12.9
+ step 1)
+---*/
+
+var desc = new RegExp();
+
+Object.defineProperty(desc, "foo", {
+ value: 12,
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperty(desc, "foo", {
+ value: 11,
+ configurable: true
+ });
+});
+assert.sameValue(desc.foo, 12, 'desc.foo');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-402.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-402.js
new file mode 100644
index 0000000000..f4eac07a1d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-402.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-402
+description: >
+ ES5 Attributes - [[Value]] attribute of inherited property of
+ [[Prototype]] internal property is correct (String instance)
+---*/
+
+Object.defineProperty(String.prototype, "prop", {
+ value: 1001,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+var strObj = new String();
+
+assert.sameValue(strObj.hasOwnProperty("prop"), false, 'strObj.hasOwnProperty("prop")');
+assert.sameValue(strObj.prop, 1001, 'strObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-403.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-403.js
new file mode 100644
index 0000000000..f2161ad8dc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-403.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-403
+description: >
+ ES5 Attributes - Successfully add a property to an object when the
+ object's prototype has a property with same name and [[Writable]]
+ attribute is set to true (Array instance)
+---*/
+
+Object.defineProperty(Array.prototype, "prop", {
+ value: 1001,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+var arrObj = [];
+arrObj.prop = 1002;
+
+assert(arrObj.hasOwnProperty("prop"), 'arrObj.hasOwnProperty("prop") !== true');
+assert.sameValue(arrObj.prop, 1002, 'arrObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-404.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-404.js
new file mode 100644
index 0000000000..9726c27754
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-404.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-404
+description: >
+ ES5 Attributes - Inherited property whose [[Enumerable]] attribute
+ is set to true is enumerable (Boolean instance)
+---*/
+
+Object.defineProperty(Boolean.prototype, "prop", {
+ value: 1001,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+var boolObj = new Boolean();
+
+var verifyEnumerable = false;
+for (var p in boolObj) {
+ if (p === "prop") {
+ verifyEnumerable = true;
+ }
+}
+
+assert.sameValue(boolObj.hasOwnProperty("prop"), false, 'boolObj.hasOwnProperty("prop")');
+assert(verifyEnumerable, 'verifyEnumerable !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-405.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-405.js
new file mode 100644
index 0000000000..d5b183c72c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-405.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-405
+description: >
+ ES5 Attributes - Failed to add a property to an object when the
+ object's object has a property with same name and [[Writable]]
+ attribute is set to false (Number instance)
+includes: [propertyHelper.js]
+---*/
+
+Object.defineProperty(Number.prototype, "prop", {
+ value: 1001,
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+var numObj = new Number();
+
+assert(!numObj.hasOwnProperty("prop"));
+verifyNotWritable(numObj, "prop", "noCheckOwnProp");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-406.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-406.js
new file mode 100644
index 0000000000..78a9e6fef8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-406.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-406
+description: >
+ ES5 Attributes - Inherited property whose [[Enumerable]] attribute
+ is set to false is non-enumerable (Function instance)
+---*/
+
+Object.defineProperty(Function.prototype, "prop", {
+ value: 1001,
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+var funObj = function() {};
+
+var verifyEnumerable = false;
+for (var p in funObj) {
+ if (p === "prop") {
+ verifyEnumerable = true;
+ }
+}
+
+assert.sameValue(funObj.hasOwnProperty("prop"), false, 'funObj.hasOwnProperty("prop")');
+assert.sameValue(verifyEnumerable, false, 'verifyEnumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-407.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-407.js
new file mode 100644
index 0000000000..d901d82656
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-407.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-407
+description: >
+ ES5 Attributes - [[Value]] attribute of inherited property of
+ [[Prototype]] internal property is correct (Error Instance)
+---*/
+
+Object.defineProperty(Error.prototype, "prop", {
+ value: 1001,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+var errObj = new Error();
+
+assert.sameValue(errObj.hasOwnProperty("prop"), false, 'errObj.hasOwnProperty("prop")');
+assert.sameValue(errObj.prop, 1001, 'errObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-408.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-408.js
new file mode 100644
index 0000000000..30f7518af8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-408.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-408
+description: >
+ ES5 Attributes - Successfully add a property to an object when the
+ object's prototype has a property with same name and [[Writable]]
+ attribute is set to true (Date instance)
+---*/
+
+Object.defineProperty(Date.prototype, "prop", {
+ value: 1001,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+var dateObj = new Date();
+dateObj.prop = 1002;
+
+assert(dateObj.hasOwnProperty("prop"), 'dateObj.hasOwnProperty("prop") !== true');
+assert.sameValue(dateObj.prop, 1002, 'dateObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-409.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-409.js
new file mode 100644
index 0000000000..16a04628f5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-409.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-409
+description: >
+ ES5 Attributes - Inherited property whose [[Enumerable]] attribute
+ is set to false is enumerable (RegExp instance)
+---*/
+
+Object.defineProperty(RegExp.prototype, "prop", {
+ value: 1001,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+var regObj = new RegExp();
+
+var verifyEnumerable = false;
+for (var p in regObj) {
+ if (p === "prop") {
+ verifyEnumerable = true;
+ }
+}
+
+assert.sameValue(regObj.hasOwnProperty("prop"), false, 'regObj.hasOwnProperty("prop")');
+assert(verifyEnumerable, 'verifyEnumerable !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-41.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-41.js
new file mode 100644
index 0000000000..e69119a145
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-41.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-41
+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: [propertyHelper.js]
+---*/
+
+
+Object.defineProperty(JSON, "foo", {
+ value: 12,
+ configurable: true
+});
+
+verifyEqualTo(JSON, "foo", 12);
+
+verifyNotWritable(JSON, "foo");
+
+verifyNotEnumerable(JSON, "foo");
+
+verifyConfigurable(JSON, "foo");
+
+delete JSON.foo;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-410.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-410.js
new file mode 100644
index 0000000000..7d7d0aa713
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-410.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-410
+description: >
+ ES5 Attributes - Failed to add a property to an object when the
+ object's prototype has a property with the same name and
+ [[Writable]] set to false (JSON)
+includes: [propertyHelper.js]
+---*/
+
+Object.defineProperty(Object.prototype, "prop", {
+ value: 1001,
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+assert(!JSON.hasOwnProperty("prop"));
+verifyNotWritable(JSON, "prop", "noCheckOwnProp");
+assert.sameValue(JSON.prop, 1001);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-411.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-411.js
new file mode 100644
index 0000000000..20e5a656c2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-411.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-411
+description: >
+ ES5 Attributes - Inherited property whose [[Enumerable]] attribute
+ is set to false is non-enumerable (Math)
+---*/
+
+Object.defineProperty(Object.prototype, "prop", {
+ value: 1001,
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+var verifyEnumerable = false;
+for (var p in Math) {
+ if (p === "prop") {
+ verifyEnumerable = true;
+ }
+}
+
+assert.sameValue(Math.hasOwnProperty("prop"), false, 'Math.hasOwnProperty("prop")');
+assert.sameValue(verifyEnumerable, false, 'verifyEnumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-412.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-412.js
new file mode 100644
index 0000000000..337eb067c1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-412.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-412
+description: >
+ ES5 Attributes - [[Value]] field of inherited property of
+ [[Prototype]] internal property is correct(Object.create)
+---*/
+
+var appointment = {};
+
+Object.defineProperty(appointment, "startTime", {
+ value: 1001,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+Object.defineProperty(appointment, "name", {
+ value: "NAME",
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+
+var meeting = Object.create(appointment);
+Object.defineProperty(meeting, "conferenceCall", {
+ value: "In-person meeting",
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+
+var teamMeeting = Object.create(meeting);
+
+var hasOwnProperty = !teamMeeting.hasOwnProperty("name") &&
+ !teamMeeting.hasOwnProperty("startTime") &&
+ !teamMeeting.hasOwnProperty('conferenceCall');
+
+assert(hasOwnProperty, 'hasOwnProperty !== true');
+assert.sameValue(teamMeeting.name, "NAME", 'teamMeeting.name');
+assert.sameValue(teamMeeting.startTime, 1001, 'teamMeeting.startTime');
+assert.sameValue(teamMeeting.conferenceCall, "In-person meeting", 'teamMeeting.conferenceCall');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-413.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-413.js
new file mode 100644
index 0000000000..f801ed76af
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-413.js
@@ -0,0 +1,50 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-413
+description: >
+ ES5 Attributes - Successfully add a property to an object when the
+ object's prototype has a property with the same name and
+ [[Writable]] set to true (Object.create)
+---*/
+
+var appointment = {};
+
+Object.defineProperty(appointment, "startTime", {
+ value: 1001,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+Object.defineProperty(appointment, "name", {
+ value: "NAME",
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+
+var meeting = Object.create(appointment);
+Object.defineProperty(meeting, "conferenceCall", {
+ value: "In-person meeting",
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+
+var teamMeeting = Object.create(meeting);
+teamMeeting.name = "Team Meeting";
+var dateObj = new Date("10/31/2010 08:00");
+teamMeeting.startTime = dateObj;
+teamMeeting.conferenceCall = "4255551212";
+
+var hasOwnProperty = teamMeeting.hasOwnProperty("name") &&
+ teamMeeting.hasOwnProperty("startTime") &&
+ teamMeeting.hasOwnProperty('conferenceCall');
+
+assert(hasOwnProperty, 'hasOwnProperty !== true');
+assert.sameValue(teamMeeting.name, "Team Meeting", 'teamMeeting.name');
+assert.sameValue(teamMeeting.startTime, dateObj, 'teamMeeting.startTime');
+assert.sameValue(teamMeeting.conferenceCall, "4255551212", 'teamMeeting.conferenceCall');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-414.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-414.js
new file mode 100644
index 0000000000..945ecf7f1e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-414.js
@@ -0,0 +1,60 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-414
+description: >
+ ES5 Attributes - Inherited property whose [[Enumerable]] attribute
+ is set to true is enumerable (Object.create)
+---*/
+
+var appointment = new Object();
+
+Object.defineProperty(appointment, "startTime", {
+ value: 1001,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+Object.defineProperty(appointment, "name", {
+ value: "NAME",
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+
+var meeting = Object.create(appointment);
+Object.defineProperty(meeting, "conferenceCall", {
+ value: "In-person meeting",
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+
+var teamMeeting = Object.create(meeting);
+
+var verifyTimeProp = false;
+var verifyNameProp = false;
+var verifyCallProp = false;
+for (var p in teamMeeting) {
+ if (p === "startTime") {
+ verifyTimeProp = true;
+ }
+ if (p === "name") {
+ verifyNameProp = true;
+ }
+ if (p === "conferenceCall") {
+ verifyCallProp = true;
+ }
+}
+
+var hasOwnProperty = !teamMeeting.hasOwnProperty("name") &&
+ !teamMeeting.hasOwnProperty("startTime") &&
+ !teamMeeting.hasOwnProperty("conferenceCall");
+
+assert(hasOwnProperty, 'hasOwnProperty !== true');
+assert(verifyTimeProp, 'verifyTimeProp !== true');
+assert(verifyNameProp, 'verifyNameProp !== true');
+assert(verifyCallProp, 'verifyCallProp !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-415.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-415.js
new file mode 100644
index 0000000000..00559f4a49
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-415.js
@@ -0,0 +1,56 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-415
+description: >
+ ES5 Attributes - Failed to add properties to an object when the
+ object's prototype has properties with the same name and
+ [[Writable]] set to false (Object.create)
+includes: [propertyHelper.js]
+---*/
+
+var appointment = new Object();
+
+Object.defineProperty(appointment, "startTime", {
+ value: 1001,
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+Object.defineProperty(appointment, "name", {
+ value: "NAME",
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+var meeting = Object.create(appointment);
+Object.defineProperty(meeting, "conferenceCall", {
+ value: "In-person meeting",
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+var teamMeeting = Object.create(meeting);
+
+//teamMeeting.name = "Team Meeting";
+verifyNotWritable(teamMeeting, "name", "noCheckOwnProp");
+
+var dateObj = new Date("10/31/2010 08:00");
+//teamMeeting.startTime = dateObj;
+verifyNotWritable(teamMeeting, "startTime", "noCheckOwnProp");
+
+//teamMeeting.conferenceCall = "4255551212";
+verifyNotWritable(teamMeeting, "conferenceCall", "noCheckOwnProp");
+
+assert(!teamMeeting.hasOwnProperty("name"));
+assert(!teamMeeting.hasOwnProperty("startTime"));
+assert(!teamMeeting.hasOwnProperty('conferenceCall'));
+
+assert.sameValue(teamMeeting.name, "NAME");
+assert.sameValue(teamMeeting.startTime, 1001);
+assert.sameValue(teamMeeting.conferenceCall, "In-person meeting");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-416.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-416.js
new file mode 100644
index 0000000000..4f805ea994
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-416.js
@@ -0,0 +1,60 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-416
+description: >
+ ES5 Attributes - Inherited properties whose [[Enumerable]]
+ attribute is set to false is non-enumerable (Object.create)
+---*/
+
+var appointment = {};
+
+Object.defineProperty(appointment, "startTime", {
+ value: 1001,
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+Object.defineProperty(appointment, "name", {
+ value: "NAME",
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+var meeting = Object.create(appointment);
+Object.defineProperty(meeting, "conferenceCall", {
+ value: "In-person meeting",
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+var teamMeeting = Object.create(meeting);
+
+var verifyTimeProp = false;
+var verifyNameProp = false;
+var verifyCallProp = false;
+for (var p in teamMeeting) {
+ if (p === "startTime") {
+ verifyTimeProp = true;
+ }
+ if (p === "name") {
+ verifyNameProp = true;
+ }
+ if (p === "conferenceCall") {
+ verifyCallProp = true;
+ }
+}
+
+var hasOwnProperty = !teamMeeting.hasOwnProperty("name") &&
+ !teamMeeting.hasOwnProperty("startTime") &&
+ !teamMeeting.hasOwnProperty("conferenceCall");
+
+assert(hasOwnProperty, 'hasOwnProperty !== true');
+assert.sameValue(verifyTimeProp, false, 'verifyTimeProp');
+assert.sameValue(verifyNameProp, false, 'verifyNameProp');
+assert.sameValue(verifyCallProp, false, 'verifyCallProp');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-417.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-417.js
new file mode 100644
index 0000000000..d80d9e5536
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-417.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-417
+description: >
+ ES5 Attributes - [[Value]] attribute of inherited property of
+ [[Prototype]] internal property is correct(Function.prototype.bind)
+---*/
+
+var foo = function() {};
+
+Object.defineProperty(Function.prototype, "prop", {
+ value: 1001,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+
+var obj = foo.bind({});
+
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+assert.sameValue(obj.prop, 1001, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-418.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-418.js
new file mode 100644
index 0000000000..903bcd610c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-418.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-418
+description: >
+ ES5 Attributes - Successfully add a property to an object when the
+ object's prototype has a property with the same name and
+ [[Writable]] set to true (Function.prototype.bind)
+---*/
+
+var foo = function() {};
+
+Object.defineProperty(Function.prototype, "prop", {
+ value: 1001,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+
+var obj = foo.bind({});
+obj.prop = 1002;
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(obj.prop, 1002, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-419.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-419.js
new file mode 100644
index 0000000000..f952af15d8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-419.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-419
+description: >
+ ES5 Attributes - Inherited property whose [[Enumerable]] attribute
+ is set to true is enumerable (Function.prototype.bind)
+---*/
+
+var foo = function() {};
+
+Object.defineProperty(Function.prototype, "prop", {
+ value: 1001,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+
+var obj = foo.bind({});
+var verifyEnumerable = false;
+for (var p in obj) {
+ if (p === "prop") {
+ verifyEnumerable = true;
+ }
+}
+
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+assert(verifyEnumerable, 'verifyEnumerable !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-42.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-42.js
new file mode 100644
index 0000000000..194bc8cbeb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-42.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-42
+description: >
+ Object.defineProperty - 'O' is an Error object that uses Object's
+ [[GetOwnProperty]] method to access the 'name' property (8.12.9
+ step 1)
+---*/
+
+var desc = new Error();
+
+Object.defineProperty(desc, "foo", {
+ value: 12,
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperty(desc, "foo", {
+ value: 11,
+ configurable: true
+ });
+});
+assert.sameValue(desc.foo, 12, 'desc.foo');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-420.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-420.js
new file mode 100644
index 0000000000..0fe1d6bd55
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-420.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-420
+description: >
+ ES5 Attributes - Failed to add a property to an object when the
+ object's prototype has a property with the same name and
+ [[Writable]] set to false(Function.prototype.bind)
+includes: [propertyHelper.js]
+---*/
+
+var foo = function() {};
+
+Object.defineProperty(Function.prototype, "prop", {
+ value: 1001,
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+var obj = foo.bind({});
+assert(!obj.hasOwnProperty("prop"));
+verifyNotWritable(foo, "prop", "noCheckOwnProp");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-421.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-421.js
new file mode 100644
index 0000000000..e6da6e0502
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-421.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-421
+description: >
+ ES5 Attributes - Inherited property whose [[Enumerable]] attribute
+ is set to false is non-enumerable (Function.prototype.bind)
+---*/
+
+var foo = function() {};
+
+Object.defineProperty(Function.prototype, "prop", {
+ value: 1001,
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+var obj = foo.bind({});
+var verifyEnumerable = false;
+for (var p in obj) {
+ if (p === "prop") {
+ verifyEnumerable = true;
+ }
+}
+
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+assert.sameValue(verifyEnumerable, false, 'verifyEnumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-422.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-422.js
new file mode 100644
index 0000000000..f03715acec
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-422.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-422
+description: >
+ ES5 Attributes - [[Get]] attribute of accessor property ([[Get]]
+ is undefined, [[Set]] is undefined, [[Enumerable]] is true,
+ [[Configurable]] is true) is undefined
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: true,
+ configurable: true
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(typeof desc.get, "undefined", 'typeof desc.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-423.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-423.js
new file mode 100644
index 0000000000..93bb685cb7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-423.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-423
+description: >
+ ES5 Attributes - [[Set]] attribute of accessor property ([[Get]]
+ is undefined, [[Set]] is undefined, [[Enumerable]] is true,
+ [[Configurable]] is true) is undefined
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: true,
+ configurable: true
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(typeof desc.set, "undefined", 'typeof desc.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-424.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-424.js
new file mode 100644
index 0000000000..6b6b262c6f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-424.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-424
+description: >
+ ES5 Attributes - property ([[Get]] is undefined, [[Set]] is
+ undefined, [[Enumerable]] is true, [[Configurable]] is true) is
+ enumerable
+---*/
+
+var propertyFound = false;
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: true,
+ configurable: true
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+for (var p in obj) {
+ if (p === "prop") {
+ propertyFound = true;
+ break;
+ }
+}
+
+assert(propertyFound, 'Property not found');
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.enumerable, true, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-425.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-425.js
new file mode 100644
index 0000000000..643211086a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-425.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-425
+description: >
+ ES5 Attributes - property ([[Get]] is undefined, [[Set]] is
+ undefined, [[Enumerable]] is true, [[Configurable]] is true) is
+ deletable
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: true,
+ configurable: true
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+delete obj.prop;
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-426.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-426.js
new file mode 100644
index 0000000000..fa65a961d3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-426.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-426
+description: >
+ ES5 Attributes - success to update [[Get]] attribute of accessor
+ property ([[Get]] is undefined, [[Set]] is undefined,
+ [[Enumerable]] is true, [[Configurable]] is true) to different
+ value
+---*/
+
+var obj = {};
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: true,
+ configurable: true
+});
+
+var result1 = typeof obj.prop === "undefined";
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc
+});
+
+var result2 = obj.prop === 1001;
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(result1, 'result1 !== true');
+assert(result2, 'result2 !== true');
+assert.sameValue(typeof desc1.get, "undefined", 'typeof desc1.get');
+assert.sameValue(desc2.get, getFunc, 'desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-427.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-427.js
new file mode 100644
index 0000000000..a5310d9f12
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-427.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-427
+description: >
+ ES5 Attributes - success to update [[Set]] attribute of accessor
+ property ([[Get]] is undefined, [[Set]] is undefined,
+ [[Enumerable]] is true, [[Configurable]] is true) to different
+ value
+---*/
+
+var obj = {};
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: true,
+ configurable: true
+});
+
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ set: setFunc
+});
+
+obj.prop = "overrideData";
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(typeof desc1.set, "undefined", 'typeof desc1.set');
+assert.sameValue(desc2.set, setFunc, 'desc2.set');
+assert.sameValue(verifySetFunc, "overrideData", 'verifySetFunc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-428.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-428.js
new file mode 100644
index 0000000000..98084ff284
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-428.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-428
+description: >
+ ES5 Attributes - success to update [[Enumerable]] attribute of
+ accessor property ([[Get]] is undefined, [[Set]] is undefined,
+ [[Enumerable]] is true, [[Configurable]] is true) to different
+ value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: true,
+ configurable: true
+});
+var result1 = false;
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p1 in obj) {
+ if (p1 === "prop") {
+ result1 = true;
+ }
+}
+
+Object.defineProperty(obj, "prop", {
+ enumerable: false
+});
+var result2 = false;
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p2 in obj) {
+ if (p2 === "prop") {
+ result2 = true;
+ }
+}
+
+assert(result1, 'result1 !== true');
+assert.sameValue(result2, false, 'result2');
+assert.sameValue(desc1.enumerable, true, 'desc1.enumerable');
+assert.sameValue(desc2.enumerable, false, 'desc2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-429.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-429.js
new file mode 100644
index 0000000000..1484ccd385
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-429.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-429
+description: >
+ ES5 Attributes - success to update [[Configurable]] attribute of
+ accessor property ([[Get]] is undefined, [[Set]] is undefined,
+ [[Enumerable]] is true, [[Configurable]] is true) to different
+ value
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: true,
+ configurable: true
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ configurable: false
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+verifyNotConfigurable(obj, "prop");
+assert.sameValue(desc1.configurable, true);
+assert.sameValue(desc2.configurable, false);
+assert(obj.hasOwnProperty("prop"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-43.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-43.js
new file mode 100644
index 0000000000..2220be851e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-43.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-43
+description: >
+ Object.defineProperty - 'O' is an Arguments object which
+ implements its own [[GetOwnProperty]] method to access the 'name'
+ property (8.12.9 step 1)
+---*/
+
+var argObj = (function() {
+ return arguments;
+})();
+
+Object.defineProperty(argObj, "foo", {
+ value: 12,
+ configurable: false
+});
+assert.throws(TypeError, function() {
+ Object.defineProperty(argObj, "foo", {
+ value: 11,
+ configurable: true
+ });
+});
+assert.sameValue(argObj.foo, 12, 'argObj.foo');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-430.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-430.js
new file mode 100644
index 0000000000..d2260d4c56
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-430.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-430
+description: >
+ ES5 Attributes - success to update the accessor property ([[Get]]
+ is undefined, [[Set]] is undefined, [[Enumerable]] is true,
+ [[Configurable]] is true) to a data property
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: true,
+ configurable: true
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ value: 1001
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(desc1.hasOwnProperty("get"), 'desc1.hasOwnProperty("get") !== true');
+assert(desc2.hasOwnProperty("value"), 'desc2.hasOwnProperty("value") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-431.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-431.js
new file mode 100644
index 0000000000..da5a96c214
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-431.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-431
+description: >
+ ES5 Attributes - [[Get]] attribute of accessor property ([[Get]]
+ is undefined, [[Set]] is undefined, [[Enumerable]] is true,
+ [[Configurable]] is false) is undefined
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: true,
+ configurable: false
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(typeof desc.get, "undefined", 'typeof desc.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-432.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-432.js
new file mode 100644
index 0000000000..fc0e43f328
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-432.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-432
+description: >
+ ES5 Attributes - [[Set]] attribute of accessor property ([[Get]]
+ is undefined, [[Set]] is undefined, [[Enumerable]] is true,
+ [[Configurable]] is false) is undefined
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: true,
+ configurable: false
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(typeof desc.set, "undefined", 'typeof desc.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-433.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-433.js
new file mode 100644
index 0000000000..57c7e9f6d7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-433.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-433
+description: >
+ ES5 Attributes - property ([[Get]] is undefined, [[Set]] is
+ undefined, [[Enumerable]] is true, [[Configurable]] is false) is
+ enumerable
+---*/
+
+var propertyFound = false;
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: true,
+ configurable: false
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+for (var p in obj) {
+ if (p === "prop") {
+ propertyFound = true;
+ break;
+ }
+}
+
+assert(propertyFound, 'Property not found');
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.enumerable, true, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-434.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-434.js
new file mode 100644
index 0000000000..0c278f09b7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-434.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-434
+description: >
+ ES5 Attributes - property ([[Get]] is undefined, [[Set]] is
+ undefined, [[Enumerable]] is true, [[Configurable]] is false) is
+ undeletable
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: true,
+ configurable: false
+});
+
+assert(obj.hasOwnProperty("prop"));
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(desc.configurable, false);
+
+verifyNotConfigurable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-435.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-435.js
new file mode 100644
index 0000000000..f3068b86f0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-435.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-435
+description: >
+ ES5 Attributes - fail to update [[Get]] attribute of accessor
+ property ([[Get]] is undefined, [[Set]] is undefined,
+ [[Enumerable]] is true, [[Configurable]] is false) to different
+ value
+---*/
+
+var obj = {};
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: true,
+ configurable: false
+});
+
+var result1 = typeof obj.prop === "undefined";
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ get: getFunc
+ });
+});
+var result2 = typeof obj.prop === "undefined";
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert(result1, 'result1 !== true');
+assert(result2, 'result2 !== true');
+assert.sameValue(typeof desc1.get, "undefined", 'typeof desc1.get');
+assert.sameValue(typeof desc2.get, "undefined", 'typeof desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-436.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-436.js
new file mode 100644
index 0000000000..f7620105c4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-436.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-436
+description: >
+ ES5 Attributes - fail to update [[Set]] attribute of accessor
+ property ([[Get]] is undefined, [[Set]] is undefined,
+ [[Enumerable]] is true, [[Configurable]] is false) to different
+ value
+---*/
+
+var obj = {};
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: true,
+ configurable: false
+});
+
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ set: setFunc
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.sameValue(typeof desc1.set, "undefined", 'typeof desc1.set');
+assert.sameValue(typeof desc2.set, "undefined", 'typeof desc2.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-437.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-437.js
new file mode 100644
index 0000000000..f9336196bc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-437.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-437
+description: >
+ ES5 Attributes - fail to update [[Enumerable]] attribute of
+ accessor property ([[Get]] is undefined, [[Set]] is undefined,
+ [[Enumerable]] is true, [[Configurable]] is false) to different
+ value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: true,
+ configurable: false
+});
+var result1 = false;
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p1 in obj) {
+ if (p1 === "prop") {
+ result1 = true;
+ }
+}
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ enumerable: false
+ });
+});
+var result2 = false;
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p2 in obj) {
+ if (p2 === "prop") {
+ result2 = true;
+ }
+}
+
+assert(result1, 'result1 !== true');
+assert(result2, 'result2 !== true');
+assert.sameValue(desc1.enumerable, true, 'desc1.enumerable');
+assert.sameValue(desc2.enumerable, true, 'desc2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-438.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-438.js
new file mode 100644
index 0000000000..ccf6b3d0aa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-438.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-438
+description: >
+ ES5 Attributes - fail to update [[Configurable]] attribute of
+ accessor property ([[Get]] is undefined, [[Set]] is undefined,
+ [[Enumerable]] is true, [[Configurable]] is false) to different
+ value
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: true,
+ configurable: false
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+try {
+ Object.defineProperty(obj, "prop", {
+ configurable: true
+ });
+
+ throw new Test262Error("Expected TypeError");
+} catch (e) {
+ assert(e instanceof TypeError);
+
+ var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+ assert.sameValue(desc1.configurable, false);
+ assert.sameValue(desc2.configurable, false);
+
+ verifyNotConfigurable(obj, "prop");
+
+ assert(obj.hasOwnProperty("prop"));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-439.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-439.js
new file mode 100644
index 0000000000..71cd1da584
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-439.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-439
+description: >
+ ES5 Attributes - fail to update the accessor property ([[Get]] is
+ undefined, [[Set]] is undefined, [[Enumerable]] is true,
+ [[Configurable]] is false) to a data property
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: true,
+ configurable: false
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ value: 1001
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(desc1.hasOwnProperty("get"), 'desc1.hasOwnProperty("get") !== true');
+assert.sameValue(desc2.hasOwnProperty("value"), false, 'desc2.hasOwnProperty("value")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-440.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-440.js
new file mode 100644
index 0000000000..97b98b0c39
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-440.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-440
+description: >
+ ES5 Attributes - [[Get]] attribute of accessor property ([[Get]]
+ is undefined, [[Set]] is undefined, [[Enumerable]] is false,
+ [[Configurable]] is true) is undefined
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: false,
+ configurable: true
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(typeof desc.get, "undefined", 'typeof desc.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-441.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-441.js
new file mode 100644
index 0000000000..a4495cc980
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-441.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-441
+description: >
+ ES5 Attributes - [[Set]] attribute of accessor property ([[Get]]
+ is undefined, [[Set]] is undefined, [[Enumerable]] is false,
+ [[Configurable]] is true) is undefined
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: false,
+ configurable: true
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(typeof desc.set, "undefined", 'typeof desc.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-442.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-442.js
new file mode 100644
index 0000000000..c9eb02984f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-442.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-442
+description: >
+ ES5 Attributes - property ([[Get]] is undefined, [[Set]] is
+ undefined, [[Enumerable]] is false, [[Configurable]] is true) is
+ non-enumerable
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: false,
+ configurable: true
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+for (var p in obj) {
+ assert.notSameValue(p, "prop", 'p');
+}
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-443.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-443.js
new file mode 100644
index 0000000000..28d39c1995
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-443.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-443
+description: >
+ ES5 Attributes - property ([[Get]] is undefined, [[Set]] is
+ undefined, [[Enumerable]] is false, [[Configurable]] is true) is
+ deletable
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: false,
+ configurable: true
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+delete obj.prop;
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-444.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-444.js
new file mode 100644
index 0000000000..2c637ffcdb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-444.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-444
+description: >
+ ES5 Attributes - success to update [[Get]] attribute of accessor
+ property ([[Get]] is undefined, [[Set]] is undefined,
+ [[Enumerable]] is false, [[Configurable]] is true) to different
+ value
+---*/
+
+var obj = {};
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: false,
+ configurable: true
+});
+
+var result1 = typeof obj.prop === "undefined";
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc
+});
+
+var result2 = obj.prop === 1001;
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(result1, 'result1 !== true');
+assert(result2, 'result2 !== true');
+assert.sameValue(typeof desc1.get, "undefined", 'typeof desc1.get');
+assert.sameValue(desc2.get, getFunc, 'desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-445.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-445.js
new file mode 100644
index 0000000000..e570581612
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-445.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-445
+description: >
+ ES5 Attributes - success to update [[Set]] attribute of accessor
+ property ([[Get]] is undefined, [[Set]] is undefined,
+ [[Enumerable]] is false, [[Configurable]] is true) to different
+ value
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: false,
+ configurable: true
+});
+
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+
+Object.defineProperty(obj, "prop", {
+ set: setFunc
+});
+
+obj.prop = "overrideData";
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(typeof desc1.set, "undefined", 'typeof desc1.set');
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc2.set, setFunc, 'desc2.set');
+assert.sameValue(verifySetFunc, "overrideData", 'verifySetFunc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-446.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-446.js
new file mode 100644
index 0000000000..944fd5226f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-446.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-446
+description: >
+ ES5 Attributes - success to update [[Enumerable]] attribute of
+ accessor property ([[Get]] is undefined, [[Set]] is undefined,
+ [[Enumerable]] is false, [[Configurable]] is true) to different
+ value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: false,
+ configurable: true
+});
+var result1 = false;
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p1 in obj) {
+ if (p1 === "prop") {
+ result1 = true;
+ }
+}
+
+Object.defineProperty(obj, "prop", {
+ enumerable: true
+});
+var result2 = false;
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p2 in obj) {
+ if (p2 === "prop") {
+ result2 = true;
+ }
+}
+
+assert.sameValue(result1, false, 'result1');
+assert(result2, 'result2 !== true');
+assert.sameValue(desc1.enumerable, false, 'desc1.enumerable');
+assert.sameValue(desc2.enumerable, true, 'desc2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-447.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-447.js
new file mode 100644
index 0000000000..e7580caeb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-447.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-447
+description: >
+ ES5 Attributes - success to update [[Configurable]] attribute of
+ accessor property ([[Get]] is undefined, [[Set]] is undefined,
+ [[Enumerable]] is false, [[Configurable]] is true) to different
+ value
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: false,
+ configurable: true
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ configurable: false
+});
+
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(desc1.configurable, true);
+assert.sameValue(desc2.configurable, false);
+
+verifyNotConfigurable(obj, "prop");
+assert(obj.hasOwnProperty("prop"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-448.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-448.js
new file mode 100644
index 0000000000..b3e27acfc4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-448.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-448
+description: >
+ ES5 Attributes - success to update the accessor property ([[Get]]
+ is undefined, [[Set]] is undefined, [[Enumerable]] is false,
+ [[Configurable]] is true) to a data property
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: false,
+ configurable: true
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ value: 1001
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(desc1.hasOwnProperty("get"), 'desc1.hasOwnProperty("get") !== true');
+assert(desc2.hasOwnProperty("value"), 'desc2.hasOwnProperty("value") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-449.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-449.js
new file mode 100644
index 0000000000..3949afee2b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-449.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-449
+description: >
+ ES5 Attributes - [[Get]] attribute of accessor property ([[Get]]
+ is undefined, [[Set]] is undefined, [[Enumerable]] is false,
+ [[Configurable]] is false) is undefined
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: false,
+ configurable: false
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(typeof desc.get, "undefined", 'typeof desc.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-45.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-45.js
new file mode 100644
index 0000000000..65701f6c78
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-45.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-45
+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: [propertyHelper.js]
+---*/
+
+Object.defineProperty(this, "foo", {
+ value: 12,
+ configurable: true
+});
+
+verifyEqualTo(this, "foo", 12);
+
+verifyNotWritable(this, "foo");
+
+verifyNotEnumerable(this, "foo");
+
+verifyConfigurable(this, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-450.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-450.js
new file mode 100644
index 0000000000..3ccbac0cab
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-450.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-450
+description: >
+ ES5 Attributes - [[Set]] attribute of accessor property ([[Get]]
+ is undefined, [[Set]] is undefined, [[Enumerable]] is false,
+ [[Configurable]] is false) is undefined
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: false,
+ configurable: false
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(typeof desc.set, "undefined", 'typeof desc.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-451.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-451.js
new file mode 100644
index 0000000000..ac6f1cada0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-451.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-451
+description: >
+ ES5 Attributes - property ([[Get]] is undefined, [[Set]] is
+ undefined, [[Enumerable]] is false, [[Configurable]] is false) is
+ non-enumerable
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: false,
+ configurable: false
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+for (var p in obj) {
+ assert.notSameValue(p, "prop", 'p');
+}
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-452.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-452.js
new file mode 100644
index 0000000000..d099d78495
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-452.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-452
+description: >
+ ES5 Attributes - property ([[Get]] is undefined, [[Set]] is
+ undefined, [[Enumerable]] is false, [[Configurable]] is false) is
+ undeletable
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: false,
+ configurable: false
+});
+
+assert(obj.hasOwnProperty("prop"));
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(desc.configurable, false);
+
+verifyNotConfigurable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-453.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-453.js
new file mode 100644
index 0000000000..27c637f5b5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-453.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-453
+description: >
+ ES5 Attributes - fail to update [[Get]] attribute of accessor
+ property ([[Get]] is undefined, [[Set]] is undefined,
+ [[Enumerable]] is false, [[Configurable]] is false) to different
+ value
+---*/
+
+var obj = {};
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: false,
+ configurable: false
+});
+
+var result1 = typeof obj.prop === "undefined";
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ get: getFunc
+ });
+});
+var result2 = typeof obj.prop === "undefined";
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert(result1, 'result1 !== true');
+assert(result2, 'result2 !== true');
+assert.sameValue(typeof desc1.get, "undefined", 'typeof desc1.get');
+assert.sameValue(typeof desc2.get, "undefined", 'typeof desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-454.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-454.js
new file mode 100644
index 0000000000..5a0ef65a4f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-454.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-454
+description: >
+ ES5 Attributes - fail to update [[Set]] attribute of accessor
+ property ([[Get]] is undefined, [[Set]] is undefined,
+ [[Enumerable]] is false, [[Configurable]] is false) to different
+ value
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: false,
+ configurable: false
+});
+
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ set: setFunc
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.sameValue(typeof desc1.set, "undefined", 'typeof desc1.set');
+assert.sameValue(typeof desc2.set, "undefined", 'typeof desc2.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-455.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-455.js
new file mode 100644
index 0000000000..9d66f0ac7a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-455.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-455
+description: >
+ ES5 Attributes - fail to update [[Enumerable]] attribute of
+ accessor property ([[Get]] is undefined, [[Set]] is undefined,
+ [[Enumerable]] is false, [[Configurable]] is false) to different
+ value
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: false,
+ configurable: false
+});
+var result1 = false;
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p1 in obj) {
+ if (p1 === "prop") {
+ result1 = true;
+ }
+}
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ enumerable: true
+ });
+});
+var result2 = false;
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p2 in obj) {
+ if (p2 === "prop") {
+ result2 = true;
+ }
+}
+
+assert.sameValue(result1, false, 'result1');
+assert.sameValue(result2, false, 'result2');
+assert.sameValue(desc1.enumerable, false, 'desc1.enumerable');
+assert.sameValue(desc2.enumerable, false, 'desc2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-456.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-456.js
new file mode 100644
index 0000000000..da9397f14d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-456.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-456
+description: >
+ ES5 Attributes - fail to update [[Configurable]] attribute of
+ accessor property ([[Get]] is undefined, [[Set]] is undefined,
+ [[Enumerable]] is false, [[Configurable]] is false) to different
+ value
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: false,
+ configurable: false
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+try {
+ Object.defineProperty(obj, "prop", {
+ configurable: true
+ });
+
+ throw new Test262Error("Expected TypeError");
+} catch (e) {
+ assert(e instanceof TypeError);
+
+ var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+ assert.sameValue(desc1.configurable, false);
+ assert.sameValue(desc2.configurable, false);
+
+ verifyNotConfigurable(obj, "prop");
+
+ assert(obj.hasOwnProperty("prop"));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-457.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-457.js
new file mode 100644
index 0000000000..e731f2415e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-457.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-457
+description: >
+ ES5 Attributes - fail to update the accessor property ([[Get]] is
+ undefined, [[Set]] is undefined, [[Enumerable]] is false,
+ [[Configurable]] is false) to a data property
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: undefined,
+ enumerable: false,
+ configurable: false
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ value: 1001
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(desc1.hasOwnProperty("get"), 'desc1.hasOwnProperty("get") !== true');
+assert.sameValue(desc2.hasOwnProperty("value"), false, 'desc2.hasOwnProperty("value")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-458.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-458.js
new file mode 100644
index 0000000000..94f200aa09
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-458.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-458
+description: >
+ ES5 Attributes - [[Get]] attribute of accessor property ([[Get]]
+ is undefined, [[Set]] is a Function, [[Enumerable]] is true,
+ [[Configurable]] is true) is undefined
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: true,
+ configurable: true
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(typeof desc.get, "undefined", 'typeof desc.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-459.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-459.js
new file mode 100644
index 0000000000..cb36fd924b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-459.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-459
+description: >
+ ES5 Attributes - [[Set]] attribute of accessor property ([[Get]]
+ is undefined, [[Set]] is a Function, [[Enumerable]] is true,
+ [[Configurable]] is true) is the expected function
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: true,
+ configurable: true
+});
+
+obj.prop = "overrideData";
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.set, setFunc, 'desc.set');
+assert.sameValue(verifySetFunc, "overrideData", 'verifySetFunc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-46.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-46.js
new file mode 100644
index 0000000000..118d1e3aa7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-46.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-46
+description: >
+ Object.defineProperty - 'name' is defined as data property if
+ 'name' property doesn't exist in 'O' and 'desc' is generic
+ descriptor (8.12.9 step 4.a)
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ enumerable: true
+});
+
+var isEnumerable = false;
+for (var item in obj) {
+ if (obj.hasOwnProperty(item) && item === "property") {
+ isEnumerable = true;
+ }
+}
+
+assert(obj.hasOwnProperty("property"), 'obj.hasOwnProperty("property") !== true');
+assert(isEnumerable, 'isEnumerable !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-460.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-460.js
new file mode 100644
index 0000000000..d7245811e0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-460.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-460
+description: >
+ ES5 Attributes - property ([[Get]] is undefined, [[Set]] is a
+ Function, [[Enumerable]] is true, [[Configurable]] is true) is
+ enumerable
+---*/
+
+var propertyFound = false;
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: true,
+ configurable: true
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+for (var p in obj) {
+ if (p === "prop") {
+ propertyFound = true;
+ break;
+ }
+}
+
+assert(propertyFound, 'Property not found');
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.enumerable, true, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-461.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-461.js
new file mode 100644
index 0000000000..d7ef8ccb29
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-461.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-461
+description: >
+ ES5 Attributes - property ([[Get]] is undefined, [[Set]] is a
+ Function, [[Enumerable]] is true, [[Configurable]] is true) is
+ deletable
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: true,
+ configurable: true
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+delete obj.prop;
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-462.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-462.js
new file mode 100644
index 0000000000..fbca9ced97
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-462.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-462
+description: >
+ ES5 Attributes - success to update [[Get]] attribute of accessor
+ property ([[Get]] is undefined, [[Set]] is a Function,
+ [[Enumerable]] is true, [[Configurable]] is true) to different
+ value
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: true,
+ configurable: true
+});
+
+var result1 = typeof obj.prop === "undefined";
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc
+});
+
+var result2 = obj.prop === 1001;
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(result1, 'result1 !== true');
+assert(result2, 'result2 !== true');
+assert.sameValue(typeof desc1.get, "undefined", 'typeof desc1.get');
+assert.sameValue(desc2.get, getFunc, 'desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-463.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-463.js
new file mode 100644
index 0000000000..5dd3a15b54
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-463.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-463
+description: >
+ ES5 Attributes - success to update [[Set]] attribute of accessor
+ property ([[Get]] is undefined, [[Set]] is a Function,
+ [[Enumerable]] is true, [[Configurable]] is true) to different
+ value
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: true,
+ configurable: true
+});
+
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ set: undefined
+});
+
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(desc1.set, setFunc, 'desc1.set');
+assert.sameValue(typeof desc2.set, "undefined", 'typeof desc2.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-464.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-464.js
new file mode 100644
index 0000000000..28c41b7b0f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-464.js
@@ -0,0 +1,51 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-464
+description: >
+ ES5 Attributes - success to update [[Enumerable]] attribute of
+ accessor property ([[Get]] is undefined, [[Set]] is a Function,
+ [[Enumerable]] is true, [[Configurable]] is true) to different
+ value
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: true,
+ configurable: true
+});
+
+var result1 = false;
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p1 in obj) {
+ if (p1 === "prop") {
+ result1 = true;
+ }
+}
+
+Object.defineProperty(obj, "prop", {
+ enumerable: false
+});
+var result2 = false;
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p2 in obj) {
+ if (p2 === "prop") {
+ result2 = true;
+ }
+}
+
+assert(result1, 'result1 !== true');
+assert.sameValue(result2, false, 'result2');
+assert.sameValue(desc1.enumerable, true, 'desc1.enumerable');
+assert.sameValue(desc2.enumerable, false, 'desc2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-465.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-465.js
new file mode 100644
index 0000000000..6ff40b2cc5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-465.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-465
+description: >
+ ES5 Attributes - success to update [[Configurable]] attribute of
+ accessor property ([[Get]] is undefined, [[Set]] is a Function,
+ [[Enumerable]] is true, [[Configurable]] is true) to different
+ value
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: true,
+ configurable: true
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ configurable: false
+});
+
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(desc1.configurable, true);
+assert.sameValue(desc2.configurable, false);
+
+verifyNotConfigurable(obj, "prop");
+assert(obj.hasOwnProperty("prop"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-466.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-466.js
new file mode 100644
index 0000000000..b8a679e7c0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-466.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-466
+description: >
+ ES5 Attributes - success to update the accessor property ([[Get]]
+ is undefined, [[Set]] is a Function, [[Enumerable]] is true,
+ [[Configurable]] is true) to a data property
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: true,
+ configurable: true
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ value: 1001
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(desc1.hasOwnProperty("get"), 'desc1.hasOwnProperty("get") !== true');
+assert(desc2.hasOwnProperty("value"), 'desc2.hasOwnProperty("value") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-467.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-467.js
new file mode 100644
index 0000000000..28c68afe75
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-467.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-467
+description: >
+ ES5 Attributes - [[Get]] attribute of accessor property ([[Get]]
+ is undefined, [[Set]] is a Function, [[Enumerable]] is true,
+ [[Configurable]] is false) is undefined
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: true,
+ configurable: false
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(typeof desc.get, "undefined", 'typeof desc.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-468.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-468.js
new file mode 100644
index 0000000000..0eb09dac55
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-468.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-468
+description: >
+ ES5 Attributes - [[Set]] attribute of accessor property ([[Get]]
+ is undefined, [[Set]] is a Function, [[Enumerable]] is true,
+ [[Configurable]] is false) is the expected function
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: true,
+ configurable: false
+});
+
+obj.prop = "overrideData";
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.set, setFunc, 'desc.set');
+assert.sameValue(verifySetFunc, "overrideData", 'verifySetFunc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-469.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-469.js
new file mode 100644
index 0000000000..46f2175924
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-469.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-469
+description: >
+ ES5 Attributes - property ([[Get]] is undefined, [[Set]] is a
+ Function, [[Enumerable]] is true, [[Configurable]] is false) is
+ enumerable
+---*/
+
+var propertyFound = false;
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: true,
+ configurable: false
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+for (var p in obj) {
+ if (p === "prop") {
+ propertyFound = true;
+ break;
+ }
+}
+
+assert(propertyFound, 'Property not found');
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.enumerable, true, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-47.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-47.js
new file mode 100644
index 0000000000..4b8fd1bf7f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-47.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-47
+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: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ writable: true,
+ enumerable: true,
+ configurable: false
+});
+
+verifyEqualTo(obj, "property", undefined);
+
+verifyWritable(obj, "property");
+
+verifyEnumerable(obj, "property");
+
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-470.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-470.js
new file mode 100644
index 0000000000..39b025006b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-470.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-470
+description: >
+ ES5 Attributes - property ([[Get]] is undefined, [[Set]] is a
+ Function, [[Enumerable]] is true, [[Configurable]] is false) is
+ undeletable
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: true,
+ configurable: false
+});
+
+assert(obj.hasOwnProperty("prop"));
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+verifyNotWritable(obj, "prop");
+verifyNotConfigurable(obj, "prop");
+
+assert.sameValue(desc.configurable, false);
+
+assert(obj.hasOwnProperty("prop"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-471.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-471.js
new file mode 100644
index 0000000000..f3373dc3e6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-471.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-471
+description: >
+ ES5 Attributes - fail to update [[Get]] attribute of accessor
+ property ([[Get]] is undefined, [[Set]] is a Function,
+ [[Enumerable]] is true, [[Configurable]] is false) to different
+ value
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: true,
+ configurable: false
+});
+
+var result1 = typeof obj.prop === "undefined";
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ get: getFunc
+ });
+});
+var result2 = typeof obj.prop === "undefined";
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(result1, 'result1 !== true');
+assert(result2, 'result2 !== true');
+assert.sameValue(typeof desc1.get, "undefined", 'typeof desc1.get');
+assert.sameValue(typeof desc2.get, "undefined", 'typeof desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-472.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-472.js
new file mode 100644
index 0000000000..53788647fe
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-472.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-472
+description: >
+ ES5 Attributes - fail to update [[Set]] attribute of accessor
+ property ([[Get]] is undefined, [[Set]] is a Function,
+ [[Enumerable]] is true, [[Configurable]] is false) to different
+ value
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: true,
+ configurable: false
+});
+
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ set: undefined
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(desc1.set, setFunc, 'desc1.set');
+assert.sameValue(desc2.set, setFunc, 'desc2.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-473.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-473.js
new file mode 100644
index 0000000000..0e1914d48d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-473.js
@@ -0,0 +1,52 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-473
+description: >
+ ES5 Attributes - fail to update [[Enumerable]] attribute of
+ accessor property ([[Get]] is undefined, [[Set]] is a Function,
+ [[Enumerable]] is true, [[Configurable]] is false) to different
+ value
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: true,
+ configurable: false
+});
+
+var result1 = false;
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p1 in obj) {
+ if (p1 === "prop") {
+ result1 = true;
+ }
+}
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ enumerable: false
+ });
+});
+var result2 = false;
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p2 in obj) {
+ if (p2 === "prop") {
+ result2 = true;
+ }
+}
+
+assert(result1, 'result1 !== true');
+assert(result2, 'result2 !== true');
+assert.sameValue(desc1.enumerable, true, 'desc1.enumerable');
+assert.sameValue(desc2.enumerable, true, 'desc2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-474.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-474.js
new file mode 100644
index 0000000000..ce3fa250dd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-474.js
@@ -0,0 +1,48 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-474
+description: >
+ ES5 Attributes - fail to update [[Configurable]] attribute of
+ accessor property ([[Get]] is undefined, [[Set]] is a Function,
+ [[Enumerable]] is true, [[Configurable]] is false) to different
+ value
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: true,
+ configurable: false
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+try {
+ Object.defineProperty(obj, "prop", {
+ configurable: true
+ });
+
+ throw new Test262Error("Expected TypeError");
+} catch (e) {
+ assert(e instanceof TypeError);
+
+ var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+ assert.sameValue(desc1.configurable, false);
+ assert.sameValue(desc2.configurable, false);
+
+ verifyNotConfigurable(obj, "prop");
+
+ assert(obj.hasOwnProperty("prop"));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-475.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-475.js
new file mode 100644
index 0000000000..50e7f6a007
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-475.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-475
+description: >
+ ES5 Attributes - fail to update the accessor property ([[Get]] is
+ undefined, [[Set]] is a Function, [[Enumerable]] is true,
+ [[Configurable]] is false) to a data property
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: true,
+ configurable: false
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ value: 1001
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(desc1.hasOwnProperty("get"), 'desc1.hasOwnProperty("get") !== true');
+assert.sameValue(desc2.hasOwnProperty("value"), false, 'desc2.hasOwnProperty("value")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-476.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-476.js
new file mode 100644
index 0000000000..f30f03e397
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-476.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-476
+description: >
+ ES5 Attributes - [[Get]] attribute of accessor property ([[Get]]
+ is undefined, [[Set]] is a Function, [[Enumerable]] is false,
+ [[Configurable]] is true) is undefined
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: false,
+ configurable: true
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(typeof desc.get, "undefined", 'typeof desc.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-477.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-477.js
new file mode 100644
index 0000000000..d44370130c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-477.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-477
+description: >
+ ES5 Attributes - [[Set]] attribute of accessor property ([[Get]]
+ is undefined, [[Set]] is a Function, [[Enumerable]] is false,
+ [[Configurable]] is true) is the expected function
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: false,
+ configurable: true
+});
+
+obj.prop = "overrideData";
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.set, setFunc, 'desc.set');
+assert.sameValue(verifySetFunc, "overrideData", 'verifySetFunc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-478.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-478.js
new file mode 100644
index 0000000000..9677d58ef1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-478.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-478
+description: >
+ ES5 Attributes - property ([[Get]] is undefined, [[Set]] is a
+ Function, [[Enumerable]] is false, [[Configurable]] is true) is
+ non-enumerable
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: false,
+ configurable: true
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+for (var p in obj) {
+ assert.notSameValue(p, "prop", 'p');
+}
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-479.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-479.js
new file mode 100644
index 0000000000..fddbd21f2d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-479.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-479
+description: >
+ ES5 Attributes - property ([[Get]] is undefined, [[Set]] is a
+ Function, [[Enumerable]] is false, [[Configurable]] is true) is
+ deletable
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: false,
+ configurable: true
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+delete obj.prop;
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-48.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-48.js
new file mode 100644
index 0000000000..1dcf25ea46
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-48.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-48
+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: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ value: 1001,
+ enumerable: true,
+ configurable: false
+});
+
+verifyEqualTo(obj, "property", 1001);
+
+verifyNotWritable(obj, "property");
+
+verifyEnumerable(obj, "property");
+
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-480.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-480.js
new file mode 100644
index 0000000000..c488ae9a2c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-480.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-480
+description: >
+ ES5 Attributes - success to update [[Get]] attribute of accessor
+ property ([[Get]] is undefined, [[Set]] is a Function,
+ [[Enumerable]] is false, [[Configurable]] is true) to different
+ value
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: false,
+ configurable: true
+});
+
+var result1 = typeof obj.prop === "undefined";
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc
+});
+
+var result2 = obj.prop === 1001;
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(result1, 'result1 !== true');
+assert(result2, 'result2 !== true');
+assert.sameValue(typeof desc1.get, "undefined", 'typeof desc1.get');
+assert.sameValue(desc2.get, getFunc, 'desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-481.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-481.js
new file mode 100644
index 0000000000..fe8c7eba0b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-481.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-481
+description: >
+ ES5 Attributes - success to update [[Set]] attribute of accessor
+ property ([[Get]] is undefined, [[Set]] is a Function,
+ [[Enumerable]] is false, [[Configurable]] is true) to different
+ value
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: false,
+ configurable: true
+});
+
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ set: undefined
+});
+
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(desc1.set, setFunc, 'desc1.set');
+assert.sameValue(typeof desc2.set, "undefined", 'typeof desc2.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-482.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-482.js
new file mode 100644
index 0000000000..db87e9a238
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-482.js
@@ -0,0 +1,51 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-482
+description: >
+ ES5 Attributes - success to update [[Enumerable]] attribute of
+ accessor property ([[Get]] is undefined, [[Set]] is a Function,
+ [[Enumerable]] is false, [[Configurable]] is true) to different
+ value
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: false,
+ configurable: true
+});
+
+var result1 = false;
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p1 in obj) {
+ if (p1 === "prop") {
+ result1 = true;
+ }
+}
+
+Object.defineProperty(obj, "prop", {
+ enumerable: true
+});
+var result2 = false;
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p2 in obj) {
+ if (p2 === "prop") {
+ result2 = true;
+ }
+}
+
+assert.sameValue(result1, false, 'result1');
+assert(result2, 'result2 !== true');
+assert.sameValue(desc1.enumerable, false, 'desc1.enumerable');
+assert.sameValue(desc2.enumerable, true, 'desc2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-483.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-483.js
new file mode 100644
index 0000000000..118a8aac10
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-483.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-483
+description: >
+ ES5 Attributes - success to update [[Configurable]] attribute of
+ accessor property ([[Get]] is undefined, [[Set]] is a Function,
+ [[Enumerable]] is false, [[Configurable]] is true) to different
+ value
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: false,
+ configurable: true
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ configurable: false
+});
+
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(desc1.configurable, true);
+assert.sameValue(desc2.configurable, false);
+
+verifyNotConfigurable(obj, "prop");
+
+assert(obj.hasOwnProperty("prop"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-484.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-484.js
new file mode 100644
index 0000000000..54c080d470
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-484.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-484
+description: >
+ ES5 Attributes - success to update the accessor property ([[Get]]
+ is undefined, [[Set]] is a Function, [[Enumerable]] is false,
+ [[Configurable]] is true) to a data property
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: false,
+ configurable: true
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ value: 1001
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(desc1.hasOwnProperty("get"), 'desc1.hasOwnProperty("get") !== true');
+assert(desc2.hasOwnProperty("value"), 'desc2.hasOwnProperty("value") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-485.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-485.js
new file mode 100644
index 0000000000..ba7c8b29db
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-485.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-485
+description: >
+ ES5 Attributes - [[Get]] attribute of accessor property ([[Get]]
+ is undefined, [[Set]] is a Function, [[Enumerable]] is false,
+ [[Configurable]] is false) is undefined
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: false,
+ configurable: false
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(typeof desc.get, "undefined", 'typeof desc.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-486.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-486.js
new file mode 100644
index 0000000000..6ea9594ad3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-486.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-486
+description: >
+ ES5 Attributes - [[Set]] attribute of accessor property ([[Get]]
+ is undefined, [[Set]] is a Function, [[Enumerable]] is false,
+ [[Configurable]] is false) is the expected function
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: false,
+ configurable: false
+});
+
+obj.prop = "overrideData";
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.set, setFunc, 'desc.set');
+assert.sameValue(verifySetFunc, "overrideData", 'verifySetFunc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-487.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-487.js
new file mode 100644
index 0000000000..a5b5b747fc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-487.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-487
+description: >
+ ES5 Attributes - property ([[Get]] is undefined, [[Set]] is a
+ Function, [[Enumerable]] is false, [[Configurable]] is false) is
+ non-enumerable
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: false,
+ configurable: false
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+for (var p in obj) {
+ assert.notSameValue(p, "prop", 'p');
+}
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-488.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-488.js
new file mode 100644
index 0000000000..0785a3996e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-488.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-488
+description: >
+ ES5 Attributes - property ([[Get]] is undefined, [[Set]] is a
+ Function, [[Enumerable]] is false, [[Configurable]] is false) is
+ undeletable
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: false,
+ configurable: false
+});
+
+assert(obj.hasOwnProperty("prop"));
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+verifyNotConfigurable(obj, "prop");
+assert.sameValue(desc.configurable, false);
+
+assert(obj.hasOwnProperty("prop"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-489.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-489.js
new file mode 100644
index 0000000000..3218db8fa3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-489.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-489
+description: >
+ ES5 Attributes - fail to update [[Get]] attribute of accessor
+ property ([[Get]] is undefined, [[Set]] is a Function,
+ [[Enumerable]] is false, [[Configurable]] is false) to different
+ value
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: false,
+ configurable: false
+});
+
+var result1 = typeof obj.prop === "undefined";
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ get: getFunc
+ });
+});
+var result2 = typeof obj.prop === "undefined";
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(result1, 'result1 !== true');
+assert(result2, 'result2 !== true');
+assert.sameValue(typeof desc1.get, "undefined", 'typeof desc1.get');
+assert.sameValue(typeof desc2.get, "undefined", 'typeof desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-49.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-49.js
new file mode 100644
index 0000000000..9e45eed271
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-49.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-49
+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: [propertyHelper.js]
+---*/
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-490.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-490.js
new file mode 100644
index 0000000000..80ac582365
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-490.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-490
+description: >
+ ES5 Attributes - fail to update [[Set]] attribute of accessor
+ property ([[Get]] is undefined, [[Set]] is a Function,
+ [[Enumerable]] is false, [[Configurable]] is false) to different
+ value
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: false,
+ configurable: false
+});
+
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ set: undefined
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(desc1.set, setFunc, 'desc1.set');
+assert.sameValue(desc2.set, setFunc, 'desc2.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-491.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-491.js
new file mode 100644
index 0000000000..4af44ec230
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-491.js
@@ -0,0 +1,52 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-491
+description: >
+ ES5 Attributes - fail to update [[Enumerable]] attribute of
+ accessor property ([[Get]] is undefined, [[Set]] is a Function,
+ [[Enumerable]] is false, [[Configurable]] is false) to different
+ value
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: false,
+ configurable: false
+});
+
+var result1 = false;
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p1 in obj) {
+ if (p1 === "prop") {
+ result1 = true;
+ }
+}
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ enumerable: true
+ });
+});
+var result2 = false;
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p2 in obj) {
+ if (p2 === "prop") {
+ result2 = true;
+ }
+}
+
+assert.sameValue(result1, false, 'result1');
+assert.sameValue(result2, false, 'result2');
+assert.sameValue(desc1.enumerable, false, 'desc1.enumerable');
+assert.sameValue(desc2.enumerable, false, 'desc2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-492.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-492.js
new file mode 100644
index 0000000000..cc418c9e12
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-492.js
@@ -0,0 +1,48 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-492
+description: >
+ ES5 Attributes - fail to update [[Configurable]] attribute of
+ accessor property ([[Get]] is undefined, [[Set]] is a Function,
+ [[Enumerable]] is false, [[Configurable]] is false) to different
+ value
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: false,
+ configurable: false
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+try {
+ Object.defineProperty(obj, "prop", {
+ configurable: true
+ });
+
+ throw new Test262Error("Expected TypeError");
+} catch (e) {
+ assert(e instanceof TypeError);
+
+ var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+ verifyNotConfigurable(obj, "prop");
+
+ assert.sameValue(desc1.configurable, false);
+ assert.sameValue(desc2.configurable, false);
+
+ assert(obj.hasOwnProperty("prop"));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-493.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-493.js
new file mode 100644
index 0000000000..112765a427
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-493.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-493
+description: >
+ ES5 Attributes - fail to update the accessor property ([[Get]] is
+ undefined, [[Set]] is a Function, [[Enumerable]] is false,
+ [[Configurable]] is false) to a data property
+---*/
+
+var obj = {};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: undefined,
+ set: setFunc,
+ enumerable: false,
+ configurable: false
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ value: 1001
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(desc1.hasOwnProperty("get"), 'desc1.hasOwnProperty("get") !== true');
+assert.sameValue(desc2.hasOwnProperty("value"), false, 'desc2.hasOwnProperty("value")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-494.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-494.js
new file mode 100644
index 0000000000..360d5f2ebd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-494.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-494
+description: >
+ ES5 Attributes - [[Get]] attribute of accessor property ([[Get]]
+ is a Function, [[Set]] is undefined, [[Enumerable]] is true,
+ [[Configurable]] is true) is the expected function
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: true,
+ configurable: true
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.get, getFunc, 'desc.get');
+assert.sameValue(obj.prop, 1001, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-495.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-495.js
new file mode 100644
index 0000000000..918c7134e9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-495.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-495
+description: >
+ ES5 Attributes - [[Set]] attribute of accessor property ([[Get]]
+ is a Function, [[Set]] is undefined, [[Enumerable]] is true,
+ [[Configurable]] is true) is undefined
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: true,
+ configurable: true
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(typeof desc.set, "undefined", 'typeof desc.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-496.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-496.js
new file mode 100644
index 0000000000..34c390b261
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-496.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-496
+description: >
+ ES5 Attributes - property ([[Get]] is a Function, [[Set]] is
+ undefined, [[Enumerable]] is true, [[Configurable]] is true) is
+ enumerable
+---*/
+
+var propertyFound = false;
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: true,
+ configurable: true
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+for (var p in obj) {
+ if (p === "prop") {
+ propertyFound = true;
+ break;
+ }
+}
+
+assert(propertyFound, 'Property not found');
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.enumerable, true, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-497.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-497.js
new file mode 100644
index 0000000000..940c9f151d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-497.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-497
+description: >
+ ES5 Attributes - property ([[Get]] is a Function, [[Set]] is
+ undefined, [[Enumerable]] is true, [[Configurable]] is true) is
+ deletable
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: true,
+ configurable: true
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+delete obj.prop;
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-498.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-498.js
new file mode 100644
index 0000000000..7e994758bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-498.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-498
+description: >
+ ES5 Attributes - success to update [[Get]] attribute of accessor
+ property ([[Get]] is a Function, [[Set]] is undefined,
+ [[Enumerable]] is true, [[Configurable]] is true) to different
+ value
+---*/
+
+var obj = {};
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: true,
+ configurable: true
+});
+
+var result1 = obj.prop === 1001;
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ get: undefined
+});
+
+var result2 = typeof obj.prop === "undefined";
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(result1, 'result1 !== true');
+assert(result2, 'result2 !== true');
+assert.sameValue(desc1.get, getFunc, 'desc1.get');
+assert.sameValue(typeof desc2.get, "undefined", 'typeof desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-499.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-499.js
new file mode 100644
index 0000000000..d25a75aadf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-499.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-499
+description: >
+ ES5 Attributes - success to update [[Set]] attribute of accessor
+ property ([[Get]] is a Function, [[Set]] is undefined,
+ [[Enumerable]] is true, [[Configurable]] is true) to different
+ value
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: true,
+ configurable: true
+});
+
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ set: setFunc
+});
+
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+obj.prop = "overrideData";
+
+assert.sameValue(typeof desc1.set, "undefined", 'typeof desc1.set');
+assert.sameValue(desc2.set, setFunc, 'desc2.set');
+assert.sameValue(verifySetFunc, "overrideData", 'verifySetFunc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-5.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-5.js
new file mode 100644
index 0000000000..e496ca8ccb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-5.js
@@ -0,0 +1,47 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Step 4 of defineProperty calls the [[DefineOwnProperty]] internal method
+ of O to define the property. Step 6 of [[DefineOwnProperty]] returns if
+ every field of desc also occurs in current and every field in desc has
+ the same value as current.
+es5id: 15.2.3.6-4-5
+description: >
+ Object.defineProperty is no-op if current and desc are the same
+ data desc
+---*/
+
+function sameDataDescriptorValues(d1, d2) {
+ return (d1.value === d2.value &&
+ d1.enumerable === d2.enumerable &&
+ d1.writable === d2.writable &&
+ d1.configurable === d2.configurable);
+}
+
+var o = {};
+
+// create a data valued property with the following attributes:
+// value: 101, enumerable: true, writable: true, configurable: true
+o["foo"] = 101;
+
+// query for, and save, the desc. A subsequent call to defineProperty
+// with the same desc should not disturb the property definition.
+var d1 = Object.getOwnPropertyDescriptor(o, "foo");
+
+// now, redefine the property with the same descriptor
+// the property defintion should not get disturbed.
+var desc = {
+ value: 101,
+ enumerable: true,
+ writable: true,
+ configurable: true
+};
+Object.defineProperty(o, "foo", desc);
+
+var d2 = Object.getOwnPropertyDescriptor(o, "foo");
+
+assert.sameValue(sameDataDescriptorValues(d1, d2), true, 'sameDataDescriptorValues(d1, d2)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-50.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-50.js
new file mode 100644
index 0000000000..f49f61a6c3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-50.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-50
+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: [propertyHelper.js]
+---*/
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-500.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-500.js
new file mode 100644
index 0000000000..ba380b5576
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-500.js
@@ -0,0 +1,49 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-500
+description: >
+ ES5 Attributes - success to update [[Enumerable]] attribute of
+ accessor property ([[Get]] is Function, [[Set]] is undefined,
+ [[Enumerable]] is true, [[Configurable]] is true) to different
+ value
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: true,
+ configurable: true
+});
+var result1 = false;
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p1 in obj) {
+ if (p1 === "prop") {
+ result1 = true;
+ }
+}
+
+Object.defineProperty(obj, "prop", {
+ enumerable: false
+});
+var result2 = false;
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p2 in obj) {
+ if (p2 === "prop") {
+ result2 = true;
+ }
+}
+
+assert(result1, 'result1 !== true');
+assert.sameValue(result2, false, 'result2');
+assert.sameValue(desc1.enumerable, true, 'desc1.enumerable');
+assert.sameValue(desc2.enumerable, false, 'desc2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-501.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-501.js
new file mode 100644
index 0000000000..7de38b5055
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-501.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-501
+description: >
+ ES5 Attributes - success to update [[Configurable]] attribute of
+ accessor property ([[Get]] is a Function, [[Set]] is undefined,
+ [[Enumerable]] is true, [[Configurable]] is true) to different
+ value
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: true,
+ configurable: true
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ configurable: false
+});
+
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(desc1.configurable, true);
+assert.sameValue(desc2.configurable, false);
+
+verifyNotWritable(obj, "prop");
+verifyNotConfigurable(obj, "prop");
+
+assert(obj.hasOwnProperty("prop"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-502.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-502.js
new file mode 100644
index 0000000000..211bf9ad56
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-502.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-502
+description: >
+ ES5 Attributes - success to update the accessor property ([[Get]]
+ is a Function, [[Set]] is undefined, [[Enumerable]] is true,
+ [[Configurable]] is true) to a data property
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: true,
+ configurable: true
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ value: 1001
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(desc1.hasOwnProperty("get"), 'desc1.hasOwnProperty("get") !== true');
+assert(desc2.hasOwnProperty("value"), 'desc2.hasOwnProperty("value") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-503.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-503.js
new file mode 100644
index 0000000000..cc69b7f31a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-503.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-503
+description: >
+ ES5 Attributes - [[Get]] attribute of accessor property ([[Get]]
+ is a Function, [[Set]] is undefined, [[Enumerable]] is true,
+ [[Configurable]] is false) is the expected function
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: true,
+ configurable: false
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.get, getFunc, 'desc.get');
+assert.sameValue(obj.prop, 1001, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-504.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-504.js
new file mode 100644
index 0000000000..e8eac02cab
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-504.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-504
+description: >
+ ES5 Attributes - [[Set]] attribute of accessor property ([[Get]]
+ is a Function, [[Set]] is undefined, [[Enumerable]] is true,
+ [[Configurable]] is false) is undefined
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: true,
+ configurable: false
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(typeof desc.set, "undefined", 'typeof desc.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-505.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-505.js
new file mode 100644
index 0000000000..b1fe46024e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-505.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-505
+description: >
+ ES5 Attributes - property ([[Get]] is a Function, [[Set]] is
+ undefined, [[Enumerable]] is true, [[Configurable]] is false) is
+ enumerable
+---*/
+
+var propertyFound = false;
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: true,
+ configurable: false
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+for (var p in obj) {
+ if (p === "prop") {
+ propertyFound = true;
+ break;
+ }
+}
+
+assert(propertyFound, 'Property not found');
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.enumerable, true, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-506.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-506.js
new file mode 100644
index 0000000000..8ad6ca3b7c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-506.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-506
+description: >
+ ES5 Attributes - property ([[Get]] is a Function, [[Set]] is
+ undefined, [[Enumerable]] is true, [[Configurable]] is false) is
+ undeletable
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: true,
+ configurable: false
+});
+
+assert(obj.hasOwnProperty("prop"));
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(desc.configurable, false);
+
+verifyNotConfigurable(obj, "prop");
+
+assert(obj.hasOwnProperty("prop"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-507.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-507.js
new file mode 100644
index 0000000000..d15be1da71
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-507.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-507
+description: >
+ ES5 Attributes - fail to update [[Get]] attribute of accessor
+ property ([[Get]] is a Function, [[Set]] is undefined,
+ [[Enumerable]] is true, [[Configurable]] is false) to different
+ value
+---*/
+
+var obj = {};
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: true,
+ configurable: false
+});
+
+var result1 = obj.prop === 1001;
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ get: undefined
+ });
+});
+var result2 = obj.prop === 1001;
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(result1, 'result1 !== true');
+assert(result2, 'result2 !== true');
+assert.sameValue(desc1.get, getFunc, 'desc1.get');
+assert.sameValue(desc2.get, getFunc, 'desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-508.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-508.js
new file mode 100644
index 0000000000..70b835ea7a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-508.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-508
+description: >
+ ES5 Attributes - fail to update [[Set]] attribute of accessor
+ property ([[Get]] is a Function, [[Set]] is undefined,
+ [[Enumerable]] is true, [[Configurable]] is false) to different
+ value
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: true,
+ configurable: false
+});
+
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ set: setFunc
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(typeof desc1.set, "undefined", 'typeof desc1.set');
+assert.sameValue(typeof desc2.set, "undefined", 'typeof desc2.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-509.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-509.js
new file mode 100644
index 0000000000..f1fef2a928
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-509.js
@@ -0,0 +1,50 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-509
+description: >
+ ES5 Attributes - fail to update [[Enumerable]] attribute of
+ accessor property ([[Get]] is a Function, [[Set]] is undefined,
+ [[Enumerable]] is true, [[Configurable]] is false) to different
+ value
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: true,
+ configurable: false
+});
+var result1 = false;
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p1 in obj) {
+ if (p1 === "prop") {
+ result1 = true;
+ }
+}
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ enumerable: false
+ });
+});
+var result2 = false;
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p2 in obj) {
+ if (p2 === "prop") {
+ result2 = true;
+ }
+}
+
+assert(result1, 'result1 !== true');
+assert(result2, 'result2 !== true');
+assert.sameValue(desc1.enumerable, true, 'desc1.enumerable');
+assert.sameValue(desc2.enumerable, true, 'desc2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-51.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-51.js
new file mode 100644
index 0000000000..989d71d164
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-51.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+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
+});
+
+verifyEqualTo(obj, "property", 1001);
+
+verifyNotWritable(obj, "property");
+
+verifyNotEnumerable(obj, "property");
+
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-510.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-510.js
new file mode 100644
index 0000000000..325f76e16c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-510.js
@@ -0,0 +1,47 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-510
+description: >
+ ES5 Attributes - fail to update [[Configurable]] attribute of
+ accessor property ([[Get]] is a Function, [[Set]] is undefined,
+ [[Enumerable]] is true, [[Configurable]] is false) to different
+ value
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: true,
+ configurable: false
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+try {
+ Object.defineProperty(obj, "prop", {
+ configurable: true
+ });
+
+ throw new Test262Error("Expected TypeError");
+} catch (e) {
+ assert(e instanceof TypeError);
+
+ var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+ assert.sameValue(desc1.configurable, false);
+ assert.sameValue(desc2.configurable, false);
+
+ verifyNotConfigurable(obj, "prop");
+
+ assert(obj.hasOwnProperty("prop"));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-511.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-511.js
new file mode 100644
index 0000000000..75032f7168
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-511.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-511
+description: >
+ ES5 Attributes - fail to update the accessor property ([[Get]] is
+ a Function, [[Set]] is undefined, [[Enumerable]] is true,
+ [[Configurable]] is false) to a data property
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: true,
+ configurable: false
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ value: 1001
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(desc1.hasOwnProperty("get"), 'desc1.hasOwnProperty("get") !== true');
+assert.sameValue(desc2.hasOwnProperty("value"), false, 'desc2.hasOwnProperty("value")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-512.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-512.js
new file mode 100644
index 0000000000..5f624b3b7a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-512.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-512
+description: >
+ ES5 Attributes - [[Get]] attribute of accessor property ([[Get]]
+ is a Function, [[Set]] is undefined, [[Enumerable]] is false,
+ [[Configurable]] is true) is the expected function
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: false,
+ configurable: true
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.get, getFunc, 'desc.get');
+assert.sameValue(obj.prop, 1001, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-513.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-513.js
new file mode 100644
index 0000000000..0645884c5d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-513.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-513
+description: >
+ ES5 Attributes - [[Set]] attribute of accessor property ([[Get]]
+ is a Function, [[Set]] is undefined, [[Enumerable]] is false,
+ [[Configurable]] is true) is undefined
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: false,
+ configurable: true
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(typeof desc.set, "undefined", 'typeof desc.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-514.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-514.js
new file mode 100644
index 0000000000..1c4ca0a01f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-514.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-514
+description: >
+ ES5 Attributes - property ([[Get]] is a Function, [[Set]] is
+ undefined, [[Enumerable]] is false, [[Configurable]] is true) is
+ non-enumerable
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: false,
+ configurable: true
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+for (var p in obj) {
+ assert.notSameValue(p, "prop", 'p');
+}
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-515.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-515.js
new file mode 100644
index 0000000000..7b40d7f6ee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-515.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-515
+description: >
+ ES5 Attributes - property ([[Get]] is a Function, [[Set]] is
+ undefined, [[Enumerable]] is false, [[Configurable]] is true) is
+ deletable
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: false,
+ configurable: true
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+delete obj.prop;
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-516.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-516.js
new file mode 100644
index 0000000000..626a28836d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-516.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-516
+description: >
+ ES5 Attributes - success to update [[Get]] attribute of accessor
+ property ([[Get]] is a Function, [[Set]] is undefined,
+ [[Enumerable]] is false, [[Configurable]] is true) to different
+ value
+---*/
+
+var obj = {};
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: false,
+ configurable: true
+});
+
+var result1 = obj.prop === 1001;
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ get: undefined
+});
+
+var result2 = typeof obj.prop === "undefined";
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(result1, 'result1 !== true');
+assert(result2, 'result2 !== true');
+assert.sameValue(desc1.get, getFunc, 'desc1.get');
+assert.sameValue(typeof desc2.get, "undefined", 'typeof desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-517.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-517.js
new file mode 100644
index 0000000000..3181e0c083
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-517.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-517
+description: >
+ ES5 Attributes - success to update [[Set]] attribute of accessor
+ property ([[Get]] is a Function, [[Set]] is undefined,
+ [[Enumerable]] is false, [[Configurable]] is true) to different
+ value
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: false,
+ configurable: true
+});
+
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+
+Object.defineProperty(obj, "prop", {
+ set: setFunc
+});
+
+obj.prop = "overrideData";
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(typeof desc1.set, "undefined", 'typeof desc1.set');
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc2.set, setFunc, 'desc2.set');
+assert.sameValue(verifySetFunc, "overrideData", 'verifySetFunc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-518.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-518.js
new file mode 100644
index 0000000000..f616aa5e18
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-518.js
@@ -0,0 +1,49 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-518
+description: >
+ ES5 Attributes - success to update [[Enumerable]] attribute of
+ accessor property ([[Get]] is a Function, [[Set]] is undefined,
+ [[Enumerable]] is false, [[Configurable]] is true) to different
+ value
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: false,
+ configurable: true
+});
+var result1 = false;
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p1 in obj) {
+ if (p1 === "prop") {
+ result1 = true;
+ }
+}
+
+Object.defineProperty(obj, "prop", {
+ enumerable: true
+});
+var result2 = false;
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p2 in obj) {
+ if (p2 === "prop") {
+ result2 = true;
+ }
+}
+
+assert.sameValue(result1, false, 'result1');
+assert(result2, 'result2 !== true');
+assert.sameValue(desc1.enumerable, false, 'desc1.enumerable');
+assert.sameValue(desc2.enumerable, true, 'desc2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-519.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-519.js
new file mode 100644
index 0000000000..60baf731ee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-519.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-519
+description: >
+ ES5 Attributes - success to update [[Configurable]] attribute of
+ accessor property ([[Get]] is a Function, [[Set]] is undefined,
+ [[Enumerable]] is false, [[Configurable]] is true) to different
+ value
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: false,
+ configurable: true
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ configurable: false
+});
+
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(desc1.configurable, true);
+assert.sameValue(desc2.configurable, false);
+
+verifyNotConfigurable(obj, "prop");
+
+assert(obj.hasOwnProperty("prop"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-52.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-52.js
new file mode 100644
index 0000000000..0d2ca8420a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-52.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-52
+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: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {});
+
+verifyEqualTo(obj, "property", undefined);
+
+verifyNotWritable(obj, "property");
+
+verifyNotEnumerable(obj, "property");
+
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-520.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-520.js
new file mode 100644
index 0000000000..94ae4a9ff9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-520.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-520
+description: >
+ ES5 Attributes - success to update the accessor property ([[Get]]
+ is a Function, [[Set]] is undefined, [[Enumerable]] is false,
+ [[Configurable]] is true) to a data property
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: false,
+ configurable: true
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ value: 1001
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(desc1.hasOwnProperty("get"), 'desc1.hasOwnProperty("get") !== true');
+assert(desc2.hasOwnProperty("value"), 'desc2.hasOwnProperty("value") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-521.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-521.js
new file mode 100644
index 0000000000..5594c922b9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-521.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-521
+description: >
+ ES5 Attributes - [[Get]] attribute of accessor property ([[Get]]
+ is a Function, [[Set]] is undefined, [[Enumerable]] is false,
+ [[Configurable]] is false) is the expected function
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: false,
+ configurable: false
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.get, getFunc, 'desc.get');
+assert.sameValue(obj.prop, 1001, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-522.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-522.js
new file mode 100644
index 0000000000..78a8f4ef45
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-522.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-522
+description: >
+ ES5 Attributes - [[Set]] attribute of accessor property ([[Get]]
+ is a Function, [[Set]] is undefined, [[Enumerable]] is false,
+ [[Configurable]] is false) is undefined
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: false,
+ configurable: false
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(typeof desc.set, "undefined", 'typeof desc.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-523.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-523.js
new file mode 100644
index 0000000000..f7f9481f39
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-523.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-523
+description: >
+ ES5 Attributes - property ([[Get]] is a Function, [[Set]] is
+ undefined, [[Enumerable]] is false, [[Configurable]] is false) is
+ non-enumerable
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: false,
+ configurable: false
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+for (var p in obj) {
+ assert.notSameValue(p, "prop", 'p');
+}
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-524.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-524.js
new file mode 100644
index 0000000000..aa6fe43c25
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-524.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-524
+description: >
+ ES5 Attributes - property ([[Get]] is a Function, [[Set]] is
+ undefined, [[Enumerable]] is false, [[Configurable]] is false) is
+ undeletable
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: false,
+ configurable: false
+});
+
+assert(obj.hasOwnProperty("prop"));
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(desc.configurable, false);
+
+verifyNotConfigurable(obj, "prop");
+
+assert(obj.hasOwnProperty("prop"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-525.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-525.js
new file mode 100644
index 0000000000..8fd9cb53a4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-525.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-525
+description: >
+ ES5 Attributes - fail to update [[Get]] attribute of accessor
+ property ([[Get]] is a Function, [[Set]] is undefined,
+ [[Enumerable]] is false, [[Configurable]] is false) to different
+ value
+---*/
+
+var obj = {};
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: false,
+ configurable: false
+});
+
+var result1 = obj.prop === 1001;
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ get: undefined
+ });
+});
+var result2 = obj.prop === 1001;
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(result1, 'result1 !== true');
+assert(result2, 'result2 !== true');
+assert.sameValue(desc1.get, getFunc, 'desc1.get');
+assert.sameValue(desc2.get, getFunc, 'desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-526.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-526.js
new file mode 100644
index 0000000000..0ae0120d5f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-526.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-526
+description: >
+ ES5 Attributes - fail to update [[Set]] attribute of accessor
+ property ([[Get]] is a Function, [[Set]] is undefined,
+ [[Enumerable]] is false, [[Configurable]] is false) to different
+ value
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: false,
+ configurable: false
+});
+
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ set: setFunc
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(typeof desc1.set, "undefined", 'typeof desc1.set');
+assert.sameValue(typeof desc2.set, "undefined", 'typeof desc2.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-527.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-527.js
new file mode 100644
index 0000000000..609fe03607
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-527.js
@@ -0,0 +1,50 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-527
+description: >
+ ES5 Attributes - fail to update [[Enumerable]] attribute of
+ accessor property ([[Get]] is a Function, [[Set]] is undefined,
+ [[Enumerable]] is false, [[Configurable]] is false) to different
+ value
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: false,
+ configurable: false
+});
+var result1 = false;
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p1 in obj) {
+ if (p1 === "prop") {
+ result1 = true;
+ }
+}
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ enumerable: true
+ });
+});
+var result2 = false;
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p2 in obj) {
+ if (p2 === "prop") {
+ result2 = true;
+ }
+}
+
+assert.sameValue(result1, false, 'result1');
+assert.sameValue(result2, false, 'result2');
+assert.sameValue(desc1.enumerable, false, 'desc1.enumerable');
+assert.sameValue(desc2.enumerable, false, 'desc2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-528.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-528.js
new file mode 100644
index 0000000000..b666822536
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-528.js
@@ -0,0 +1,47 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-528
+description: >
+ ES5 Attributes - fail to update [[Configurable]] attribute of
+ accessor property ([[Get]] is a Function, [[Set]] is undefined,
+ [[Enumerable]] is false, [[Configurable]] is false) to different
+ value
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: false,
+ configurable: false
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+try {
+ Object.defineProperty(obj, "prop", {
+ configurable: true
+ });
+
+ throw new Test262Error("Expected TypeError");
+} catch (e) {
+ assert(e instanceof TypeError);
+
+ var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+ assert.sameValue(desc1.configurable, false);
+ assert.sameValue(desc2.configurable, false);
+
+ verifyNotConfigurable(obj, "prop");
+
+ assert(obj.hasOwnProperty("prop"));
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-529.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-529.js
new file mode 100644
index 0000000000..15ef13d55e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-529.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-529
+description: >
+ ES5 Attributes - fail to update the accessor property ([[Get]] is
+ a Function, [[Set]] is undefined, [[Enumerable]] is false,
+ [[Configurable]] is false) to a data property
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: undefined,
+ enumerable: false,
+ configurable: false
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ value: 1001
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(desc1.hasOwnProperty("get"), 'desc1.hasOwnProperty("get") !== true');
+assert.sameValue(desc2.hasOwnProperty("value"), false, 'desc2.hasOwnProperty("value")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-53.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-53.js
new file mode 100644
index 0000000000..b8dd34d5ab
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-53.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-53
+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: [propertyHelper.js]
+---*/
+
+var obj = {};
+var setFunc = function(value) {
+ obj.setVerifyHelpProp = value;
+};
+
+Object.defineProperty(obj, "property", {
+ set: setFunc,
+ enumerable: true,
+ configurable: true
+});
+
+verifyWritable(obj, "property", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "property");
+
+verifyConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-530.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-530.js
new file mode 100644
index 0000000000..308414e971
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-530.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-530
+description: >
+ ES5 Attributes - [[Get]] attribute of accessor property ([[Get]]
+ is a Function, [[Set]] is a Function, [[Enumerable]] is true,
+ [[Configurable]] is true) is the expected function
+---*/
+
+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 propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.get, getFunc, 'desc.get');
+assert.sameValue(obj.prop, 1001, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-1.js
new file mode 100644
index 0000000000..167099fb52
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-1.js
@@ -0,0 +1,47 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-531-1
+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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-10.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-10.js
new file mode 100644
index 0000000000..50dbf751f4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-10.js
@@ -0,0 +1,49 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-531-10
+description: >
+ Object.defineProperty will update [[Get]] and [[Set]] attributes
+ of indexed accessor property 'P' successfully when
+ [[Configurable]] attribute is true, 'O' is an Object object
+ (8.12.9 step 11)
+includes: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-11.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-11.js
new file mode 100644
index 0000000000..d23dfcde09
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-11.js
@@ -0,0 +1,48 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-531-11
+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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-12.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-12.js
new file mode 100644
index 0000000000..05a7954bab
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-12.js
@@ -0,0 +1,50 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-531-12
+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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-15.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-15.js
new file mode 100644
index 0000000000..938b50e4c2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-15.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-531-15
+description: >
+ ES5 Attributes - Updating a named accessor property 'P' using
+ simple assignment is successful, 'A' is an Array object (8.12.5
+ step 5.b)
+---*/
+
+var obj = [];
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+var getFunc = function() {
+ return verifySetFunc;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: true,
+ configurable: true
+});
+
+obj.prop = "overrideData";
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.set, setFunc, 'desc.set');
+assert.sameValue(obj.prop, "overrideData", 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-16.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-16.js
new file mode 100644
index 0000000000..d690167d9f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-16.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-531-16
+description: >
+ ES5 Attributes - Updating an indexed accessor property 'P' using
+ simple assignment, 'O' is an Arguments object (8.12.5 step 5.b)
+---*/
+
+var obj = (function() {
+ return arguments;
+}());
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+var getFunc = function() {
+ return verifySetFunc;
+};
+
+Object.defineProperty(obj, "0", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: true,
+ configurable: true
+});
+
+obj[0] = "overrideData";
+var propertyDefineCorrect = obj.hasOwnProperty("0");
+var desc = Object.getOwnPropertyDescriptor(obj, "0");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.set, setFunc, 'desc.set');
+assert.sameValue(obj[0], "overrideData", 'obj[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-2.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-2.js
new file mode 100644
index 0000000000..6c459d0db2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-2.js
@@ -0,0 +1,49 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-531-2
+description: >
+ Object.defineProperty will update [[Get]] and [[Set]] attributes
+ of indexed accessor property 'P' successfully when
+ [[Configurable]] attribute is true, 'A' is an Array object (8.12.9
+ step 11)
+includes: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-3.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-3.js
new file mode 100644
index 0000000000..0dc6f76257
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-3.js
@@ -0,0 +1,50 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-531-3
+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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-6.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-6.js
new file mode 100644
index 0000000000..ffe9048f54
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-6.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-531-6
+description: >
+ ES5 Attributes - Updating an indexed accessor property 'P' without
+ [[Set]] using simple assignment is failed, 'A' is an Array object
+ (8.12.5 step 5.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = [];
+
+var verifySetFunc = "data";
+var getFunc = function() {
+ return verifySetFunc;
+};
+
+Object.defineProperty(obj, "0", {
+ get: getFunc,
+ enumerable: true,
+ configurable: true
+});
+
+verifyNotWritable(obj, "0");
+
+assert(obj.hasOwnProperty("0"));
+var desc = Object.getOwnPropertyDescriptor(obj, "0");
+
+assert.sameValue(typeof desc.set, "undefined");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-7.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-7.js
new file mode 100644
index 0000000000..4764a1c3f3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531-7.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-531-7
+description: >
+ ES5 Attributes - Updating a named accessor property 'P' without
+ [[Set]] using simple assignment is failed, 'O' is an Arguments
+ object (8.12.5 step 5.b)
+includes: [propertyHelper.js]
+---*/
+
+var obj = (function() {
+ return arguments;
+}());
+
+var verifySetFunc = "data";
+var getFunc = function() {
+ return verifySetFunc;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ enumerable: true,
+ configurable: true
+});
+
+assert(obj.hasOwnProperty("prop"));
+verifyNotWritable(obj, "prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(typeof desc.set, "undefined");
+assert.sameValue(obj.prop, "data");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531.js
new file mode 100644
index 0000000000..15691d7062
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-531.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-531
+description: >
+ ES5 Attributes - [[Set]] attribute of accessor property ([[Get]]
+ is a Function, [[Set]] is a Function, [[Enumerable]] is true,
+ [[Configurable]] is true) is the expected function
+---*/
+
+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
+});
+
+obj.prop = "overrideData";
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.set, setFunc, 'desc.set');
+assert.sameValue(verifySetFunc, "overrideData", 'verifySetFunc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-532.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-532.js
new file mode 100644
index 0000000000..d49c562b8a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-532.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-532
+description: >
+ ES5 Attributes - property ([[Get]] is a Function, [[Set]] is a
+ Function, [[Enumerable]] is true, [[Configurable]] is true) is
+ enumerable
+---*/
+
+var propertyFound = false;
+
+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 propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+for (var p in obj) {
+ if (p === "prop") {
+ propertyFound = true;
+ break;
+ }
+}
+
+assert(propertyFound, 'Property not found');
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.enumerable, true, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-533.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-533.js
new file mode 100644
index 0000000000..f7bedbaf67
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-533.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-533
+description: >
+ ES5 Attributes - property ([[Get]] is a Function, [[Set]] is a
+ Function, [[Enumerable]] is true, [[Configurable]] is true) is
+ deletable
+---*/
+
+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 propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+delete obj.prop;
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-534.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-534.js
new file mode 100644
index 0000000000..a7fa8e6466
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-534.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-534
+description: >
+ ES5 Attributes - success to update [[Get]] attribute of accessor
+ property ([[Get]] is a Function, [[Set]] is a Function,
+ [[Enumerable]] is true, [[Configurable]] is true) to different
+ value
+---*/
+
+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 result1 = obj.prop === 1001;
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ get: undefined
+});
+
+var result2 = typeof obj.prop === "undefined";
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(result1, 'result1 !== true');
+assert(result2, 'result2 !== true');
+assert.sameValue(desc1.get, getFunc, 'desc1.get');
+assert.sameValue(typeof desc2.get, "undefined", 'typeof desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-535.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-535.js
new file mode 100644
index 0000000000..453c4f2d78
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-535.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-535
+description: >
+ ES5 Attributes - success to update [[Set]] attribute of accessor
+ property ([[Get]] is a Function, [[Set]] is a Function,
+ [[Enumerable]] is true, [[Configurable]] is true) to different
+ value
+---*/
+
+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", {
+ set: undefined
+});
+
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(desc1.set, setFunc, 'desc1.set');
+assert.sameValue(typeof desc2.set, "undefined", 'typeof desc2.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-536.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-536.js
new file mode 100644
index 0000000000..fc1a97a80a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-536.js
@@ -0,0 +1,54 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-536
+description: >
+ ES5 Attributes - success to update [[Enumerable]] attribute of
+ accessor property ([[Get]] is a Function, [[Set]] is a Function,
+ [[Enumerable]] is true, [[Configurable]] is true) to different
+ value
+---*/
+
+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 result1 = false;
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p1 in obj) {
+ if (p1 === "prop") {
+ result1 = true;
+ }
+}
+
+Object.defineProperty(obj, "prop", {
+ enumerable: false
+});
+var result2 = false;
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p2 in obj) {
+ if (p2 === "prop") {
+ result2 = true;
+ }
+}
+
+assert(result1, 'result1 !== true');
+assert.sameValue(result2, false, 'result2');
+assert.sameValue(desc1.enumerable, true, 'desc1.enumerable');
+assert.sameValue(desc2.enumerable, false, 'desc2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-537.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-537.js
new file mode 100644
index 0000000000..e05ce8fecf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-537.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-537
+description: >
+ ES5 Attributes - success to update [[Configurable]] attribute of
+ accessor property ([[Get]] is a Function, [[Set]] is a Function,
+ [[Enumerable]] is true, [[Configurable]] is true) to different
+ value
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: true,
+ configurable: true
+});
+
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ configurable: false
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+verifyNotConfigurable(obj, "prop");
+assert.sameValue(desc1.configurable, true);
+assert.sameValue(desc2.configurable, false);
+assert(obj.hasOwnProperty("prop"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-538-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-538-1.js
new file mode 100644
index 0000000000..06dd0aa4b9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-538-1.js
@@ -0,0 +1,61 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-538-1
+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: [propertyHelper.js]
+---*/
+
+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")) {
+ throw new Test262Error('Expected desc1.hasOwnProperty("get") to be true, actually ' + desc1.hasOwnProperty("get"));
+}
+
+if (!desc2.hasOwnProperty("value")) {
+ throw new Test262Error('Expected desc2.hasOwnProperty("value") to be true, actually ' + desc2.hasOwnProperty("value"));
+}
+
+if (typeof desc2.get !== "undefined") {
+ throw new Test262Error('Expected typeof desc2.get === "undefined", actually ' + typeof desc2.get);
+}
+
+if (typeof desc2.set !== "undefined") {
+ throw new Test262Error('Expected typeof desc2.set === "undefined", actually ' + typeof desc2.set);
+}
+
+verifyEqualTo(obj, "0", 1001);
+
+verifyNotWritable(obj, "0");
+
+verifyEnumerable(obj, "0");
+
+verifyConfigurable(obj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-538-2.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-538-2.js
new file mode 100644
index 0000000000..c1a03d0ff9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-538-2.js
@@ -0,0 +1,63 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-538-2
+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: [propertyHelper.js]
+---*/
+
+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")) {
+ throw new Test262Error('Expected desc1.hasOwnProperty("get") to be true, actually ' + desc1.hasOwnProperty("get"));
+}
+
+if (!desc2.hasOwnProperty("value")) {
+ throw new Test262Error('Expected desc2.hasOwnProperty("value") to be true, actually ' + desc2.hasOwnProperty("value"));
+}
+
+if (typeof desc2.get !== "undefined") {
+ throw new Test262Error('Expected typeof desc2.get === "undefined" , actually ' + typeof desc2.get);
+}
+
+if (typeof desc2.set !== "undefined") {
+ throw new Test262Error('Expected typeof desc2.set === "undefined" , actually ' + typeof desc2.set);
+}
+
+verifyEqualTo(obj, "prop", 1001);
+
+verifyNotWritable(obj, "prop");
+
+verifyEnumerable(obj, "prop");
+
+verifyConfigurable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-538-5.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-538-5.js
new file mode 100644
index 0000000000..effdbc3676
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-538-5.js
@@ -0,0 +1,62 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-538-5
+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: [propertyHelper.js]
+---*/
+
+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")) {
+ throw new Test262Error('Expected desc1.hasOwnProperty("get") to be true, actually ' + desc1.hasOwnProperty("get"));
+}
+
+if (!desc2.hasOwnProperty("value")) {
+ throw new Test262Error('Expected desc2.hasOwnProperty("value") to be true, actually ' + desc2.hasOwnProperty("value"));
+}
+
+if (typeof desc2.get !== "undefined") {
+ throw new Test262Error('Expected typeof desc2.get === "undefined" , actually ' + typeof desc2.get);
+}
+
+if (typeof desc2.set !== "undefined") {
+ throw new Test262Error('Expected typeof desc2.set === "undefined" , actually ' + typeof desc2.set);
+}
+
+
+verifyEqualTo(obj, "prop", 1001);
+
+verifyNotWritable(obj, "prop");
+
+verifyEnumerable(obj, "prop");
+
+verifyConfigurable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-538-6.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-538-6.js
new file mode 100644
index 0000000000..4bfe9d32ee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-538-6.js
@@ -0,0 +1,63 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-538-6
+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: [propertyHelper.js]
+---*/
+
+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")) {
+ throw new Test262Error('Expected desc1.hasOwnProperty("get") to be true, actually ' + desc1.hasOwnProperty("get"));
+}
+
+if (!desc2.hasOwnProperty("value")) {
+ throw new Test262Error('Expected desc2.hasOwnProperty("value") to be true, actually ' + desc2.hasOwnProperty("value"));
+}
+
+if (typeof desc2.get !== "undefined") {
+ throw new Test262Error('Expected typeof desc2.get === "undefined" , actually ' + typeof desc2.get);
+}
+
+if (typeof desc2.set !== "undefined") {
+ throw new Test262Error('Expected typeof desc2.set === "undefined" , actually ' + typeof desc2.set);
+}
+
+verifyEqualTo(obj, "0", 1001);
+
+verifyNotWritable(obj, "0");
+
+verifyEnumerable(obj, "0");
+
+verifyConfigurable(obj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-538.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-538.js
new file mode 100644
index 0000000000..8943f5cff9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-538.js
@@ -0,0 +1,58 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-538
+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: [propertyHelper.js]
+---*/
+
+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")) {
+ throw new Test262Error('Expected desc1.hasOwnProperty("get") to be true, actually ' + desc1.hasOwnProperty("get"));
+}
+
+if (!desc2.hasOwnProperty("value")) {
+ throw new Test262Error('Expected desc2.hasOwnProperty("value") to be true, actually ' + desc2.hasOwnProperty("value"));
+}
+
+if (typeof desc2.get !== "undefined") {
+ throw new Test262Error('Expected typeof desc2.get === "undefined" , actually ' + typeof desc2.get);
+}
+
+
+verifyEqualTo(obj, "prop", 1001);
+
+verifyNotWritable(obj, "prop");
+
+verifyEnumerable(obj, "prop");
+
+verifyConfigurable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-539.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-539.js
new file mode 100644
index 0000000000..e744cd0716
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-539.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-539
+description: >
+ ES5 Attributes - [[Get]] attribute of accessor property ([[Get]]
+ is a Function, [[Set]] is a Function, [[Enumerable]] is true,
+ [[Configurable]] is false) is the expected function
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: true,
+ configurable: false
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.get, getFunc, 'desc.get');
+assert.sameValue(obj.prop, 1001, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-54.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-54.js
new file mode 100644
index 0000000000..34de6eff1d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-54.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-54
+description: >
+ Object.defineProperty - 'name' property doesn't exist in 'O', test
+ [[Set]] of 'name' property of 'Attributes' is set as undefined
+ value if absent in accessor descriptor 'desc' (8.12.9 step 4.b.i)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "property", {
+ get: function() {
+ return "property";
+ },
+ enumerable: false,
+ configurable: false
+});
+
+
+assert.sameValue(obj.property, "property");
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+assert.sameValue(typeof desc.set, "undefined");
+
+verifyNotEnumerable(obj, "property");
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-1.js
new file mode 100644
index 0000000000..ac2f8d5fb0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-1.js
@@ -0,0 +1,72 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-540-1
+description: >
+ Object.defineProperty fails to update [[Get]] and [[Set]]
+ 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: [propertyHelper.js]
+---*/
+
+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");
+
+ verifyNotEnumerable(obj, "property");
+
+ verifyNotConfigurable(obj, "property");
+}
+
+try {
+ Object.defineProperty(obj, "property", {
+ set: function(value) {
+ obj.verifySetFunction1 = value;
+ }
+ });
+} catch (e) {
+ if (!result) {
+ throw new Test262Error('Expected result to be true, actually ' + result);
+ }
+
+ verifyEqualTo(obj, "property", getFunc());
+
+ verifyWritable(obj, "property", "verifySetFunction");
+
+ verifyNotEnumerable(obj, "property");
+
+ verifyNotConfigurable(obj, "property");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-10.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-10.js
new file mode 100644
index 0000000000..5fd551084d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-10.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-540-10
+description: >
+ ES5 Attributes - Updating an indexed accessor property 'P' using
+ simple assignment is successful, 'O' is an Arguments object
+ (8.12.5 step 5.b)
+---*/
+
+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
+});
+
+obj[0] = "overrideData";
+var propertyDefineCorrect = obj.hasOwnProperty("0");
+var desc = Object.getOwnPropertyDescriptor(obj, "0");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.set, setFunc, 'desc.set');
+assert.sameValue(obj.verifySetFunc, "overrideData", 'obj.verifySetFunc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-2.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-2.js
new file mode 100644
index 0000000000..df61180433
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-2.js
@@ -0,0 +1,72 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-540-2
+description: >
+ Object.defineProperty fails to update [[Get]] and [[Set]]
+ 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: [propertyHelper.js]
+---*/
+
+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");
+
+ verifyNotEnumerable(obj, "0");
+
+ verifyNotConfigurable(obj, "0");
+}
+
+try {
+ Object.defineProperty(obj, "0", {
+ set: function(value) {
+ obj.verifySetFunction1 = value;
+ }
+ });
+} catch (e) {
+ if (!result) {
+ throw new Test262Error('Expected result to be true, actually ' + result);
+ }
+
+ verifyEqualTo(obj, "0", getFunc());
+
+ verifyWritable(obj, "0", "verifySetFunction");
+
+ verifyNotEnumerable(obj, "0");
+
+ verifyNotConfigurable(obj, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-3.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-3.js
new file mode 100644
index 0000000000..f7018700c9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-3.js
@@ -0,0 +1,74 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-540-3
+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: [propertyHelper.js]
+---*/
+
+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");
+
+ verifyNotConfigurable(obj, "property");
+}
+
+try {
+ Object.defineProperty(obj, "property", {
+ set: function(value) {
+ obj.verifySetFunction1 = value;
+ }
+ });
+} catch (e) {
+
+ if (!result) {
+ throw new Test262Error('Expected result to be true, actually ' + result);
+ }
+
+ verifyEqualTo(obj, "property", getFunc());
+
+ verifyWritable(obj, "property", "verifySetFunction");
+
+ verifyNotEnumerable(obj, "property");
+
+ verifyNotConfigurable(obj, "property");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-4.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-4.js
new file mode 100644
index 0000000000..d37bd35ae6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-4.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-540-4
+description: >
+ ES5 Attributes - Updating an indexed accessor property 'P' using
+ simple assignment is successful, 'A' is an Array object (8.12.5
+ step 5.b)
+---*/
+
+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
+});
+
+obj[0] = "overrideData";
+var propertyDefineCorrect = obj.hasOwnProperty("0");
+var desc = Object.getOwnPropertyDescriptor(obj, "0");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.set, setFunc, 'desc.set');
+assert.sameValue(obj.verifySetFunc, "overrideData", 'obj.verifySetFunc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-5.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-5.js
new file mode 100644
index 0000000000..a311c705b4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-5.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-540-5
+description: >
+ ES5 Attributes - Updating a named accessor property 'P' using
+ simple assignment is successful, 'O' is an Arguments object
+ (8.12.5 step 5.b)
+---*/
+
+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
+});
+
+obj.prop = "overrideData";
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.set, setFunc, 'desc.set');
+assert.sameValue(obj.verifySetFunc, "overrideData", 'obj.verifySetFunc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-6.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-6.js
new file mode 100644
index 0000000000..64cc3ff55f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-6.js
@@ -0,0 +1,74 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-540-6
+description: >
+ Object.defineProperty fails to update [[Get]] and [[Set]]
+ 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: [propertyHelper.js]
+---*/
+
+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");
+
+ verifyNotEnumerable(obj, "0");
+
+ verifyNotConfigurable(obj, "0");
+}
+
+try {
+ Object.defineProperty(obj, "0", {
+ set: function(value) {
+ obj.verifySetFunction1 = value;
+ }
+ });
+} catch (e) {
+ if (!result) {
+ throw new Test262Error('Expected result to be true, actually ' + result);
+ }
+
+ verifyEqualTo(obj, "0", getFunc());
+
+ verifyWritable(obj, "0", "verifySetFunction");
+
+ verifyNotEnumerable(obj, "0");
+
+ verifyNotConfigurable(obj, "0");
+
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-7.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-7.js
new file mode 100644
index 0000000000..bc90c7b983
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-7.js
@@ -0,0 +1,74 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-540-7
+description: >
+ Object.defineProperty fails to update [[Get]] and [[Set]]
+ 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: [propertyHelper.js]
+---*/
+
+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");
+
+ verifyNotConfigurable(obj, "prop");
+}
+
+try {
+ Object.defineProperty(obj, "prop", {
+ set: function(value) {
+ obj.verifySetFunction1 = value;
+ }
+ });
+} catch (e1) {
+ if (!result) {
+ throw new Test262Error('Expected result to be true, actually ' + result);
+ }
+
+
+ verifyEqualTo(obj, "prop", getFunc());
+
+ verifyWritable(obj, "prop", "verifySetFunction");
+
+ verifyNotEnumerable(obj, "prop");
+
+ verifyNotConfigurable(obj, "prop");
+
+
+ if (!(e1 instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e1);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-8.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-8.js
new file mode 100644
index 0000000000..26be4c5177
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-8.js
@@ -0,0 +1,74 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-540-8
+description: >
+ Object.defineProperty fails to update [[Get]] and [[Set]]
+ attributes of an indexed accessor property 'P' whose
+ [[Configurable]] attribute is false, 'O' is an Arguments object
+ (8.12.9 step 11.a)
+includes: [propertyHelper.js]
+---*/
+
+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");
+
+ verifyNotEnumerable(obj, "0");
+
+ verifyNotConfigurable(obj, "0");
+}
+
+try {
+ Object.defineProperty(obj, "0", {
+ set: function(value) {
+ obj.verifySetFunction1 = value;
+ }
+ });
+} catch (e) {
+ if (!result) {
+ throw new Test262Error('Expected result to be true, actually ' + result);
+ }
+
+ verifyEqualTo(obj, "0", getFunc());
+
+ verifyWritable(obj, "0", "verifySetFunction");
+
+ verifyNotEnumerable(obj, "0");
+
+ verifyNotConfigurable(obj, "0");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-9.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-9.js
new file mode 100644
index 0000000000..7bde4483d6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540-9.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-540-9
+description: >
+ ES5 Attributes - Updating a named accessor property 'P' using
+ simple assignment is successful, 'A' is an Array object (8.12.5
+ step 5.b)
+---*/
+
+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
+});
+
+obj.prop = "overrideData";
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.set, setFunc, 'desc.set');
+assert.sameValue(obj.verifySetFunc, "overrideData", 'obj.verifySetFunc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540.js
new file mode 100644
index 0000000000..9f6ea0441e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-540.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-540
+description: >
+ ES5 Attributes - [[Set]] attribute of accessor property ([[Get]]
+ is a Function, [[Set]] is a Function, [[Enumerable]] is true,
+ [[Configurable]] is false) is the expected function
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: true,
+ configurable: false
+});
+
+obj.prop = "overrideData";
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.set, setFunc, 'desc.set');
+assert.sameValue(verifySetFunc, "overrideData", 'verifySetFunc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-541.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-541.js
new file mode 100644
index 0000000000..8eb0d4877d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-541.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-541
+description: >
+ ES5 Attributes - property ([[Get]] is a Function, [[Set]] is a
+ Function, [[Enumerable]] is true, [[Configurable]] is false) is
+ enumerable
+---*/
+
+var propertyFound = false;
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: true,
+ configurable: false
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+for (var p in obj) {
+ if (p === "prop") {
+ propertyFound = true;
+ break;
+ }
+}
+
+assert(propertyFound, 'Property not found');
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.enumerable, true, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-542.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-542.js
new file mode 100644
index 0000000000..0768fd3034
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-542.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-542
+description: >
+ ES5 Attributes - property ([[Get]] is a Function, [[Set]] is a
+ Function, [[Enumerable]] is true, [[Configurable]] is false) is
+ undeletable
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: true,
+ configurable: false
+});
+
+assert(obj.hasOwnProperty("prop"));
+verifyNotConfigurable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-543.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-543.js
new file mode 100644
index 0000000000..08b470da3c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-543.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-543
+description: >
+ ES5 Attributes - fail to update [[Get]] attribute of accessor
+ property ([[Get]] is a Function, [[Set]] is a Function,
+ [[Enumerable]] is true, [[Configurable]] is false) to different
+ value
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: true,
+ configurable: false
+});
+
+var result1 = obj.prop === 1001;
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ get: undefined
+ });
+});
+var result2 = obj.prop === 1001;
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(result1, 'result1 !== true');
+assert(result2, 'result2 !== true');
+assert.sameValue(desc1.get, getFunc, 'desc1.get');
+assert.sameValue(desc2.get, getFunc, 'desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-544.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-544.js
new file mode 100644
index 0000000000..6a02e59d50
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-544.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-544
+description: >
+ ES5 Attributes - fail to update [[Set]] attribute of accessor
+ property ([[Get]] is a Function, [[Set]] is a Function,
+ [[Enumerable]] is true, [[Configurable]] is false) to different
+ value
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: true,
+ configurable: false
+});
+
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ set: undefined
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(desc1.set, setFunc, 'desc1.set');
+assert.sameValue(desc2.set, setFunc, 'desc2.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-545.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-545.js
new file mode 100644
index 0000000000..0d9594d068
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-545.js
@@ -0,0 +1,55 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-545
+description: >
+ ES5 Attributes - fail to update [[Enumerable]] attribute of
+ accessor property ([[Get]] is a Function, [[Set]] is a Function,
+ [[Enumerable]] is true, [[Configurable]] is false) to different
+ value
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: true,
+ configurable: false
+});
+var result1 = false;
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p1 in obj) {
+ if (p1 === "prop") {
+ result1 = true;
+ }
+}
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ enumerable: false
+ });
+});
+var result2 = false;
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p2 in obj) {
+ if (p2 === "prop") {
+ result2 = true;
+ }
+}
+
+assert(result1, 'result1 !== true');
+assert(result2, 'result2 !== true');
+assert.sameValue(desc1.enumerable, true, 'desc1.enumerable');
+assert.sameValue(desc2.enumerable, true, 'desc2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-546.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-546.js
new file mode 100644
index 0000000000..bd266dbcb3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-546.js
@@ -0,0 +1,49 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-546
+description: >
+ ES5 Attributes - fail to update [[Configurable]] attribute of
+ accessor property ([[Get]] is a Function, [[Set]] is a Function,
+ [[Enumerable]] is true, [[Configurable]] is false) to different
+ value
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: true,
+ configurable: false
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+try {
+ Object.defineProperty(obj, "prop", {
+ configurable: true
+ });
+
+ throw new Test262Error("Expected TypeError");
+} catch (e) {
+ assert(e instanceof TypeError);
+ assert.sameValue(desc1.configurable, false);
+
+ var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+ assert.sameValue(desc2.configurable, false);
+
+ verifyNotConfigurable(obj, "prop");
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-547-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-547-1.js
new file mode 100644
index 0000000000..ae003f7fdd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-547-1.js
@@ -0,0 +1,65 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-547-1
+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: [propertyHelper.js]
+---*/
+
+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
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ var desc2 = Object.getOwnPropertyDescriptor(obj, "0");
+
+ if (!desc1.hasOwnProperty("get")) {
+ throw new Test262Error('Expected desc1.hasOwnProperty("get") to be true, actually ' + desc1.hasOwnProperty("get"));
+ }
+
+ if (desc2.hasOwnProperty("value")) {
+ throw new Test262Error('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)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-547-2.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-547-2.js
new file mode 100644
index 0000000000..6b40da84ff
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-547-2.js
@@ -0,0 +1,67 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-547-2
+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: [propertyHelper.js]
+---*/
+
+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
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+ if (!desc1.hasOwnProperty("get")) {
+ throw new Test262Error('Expected desc1.hasOwnProperty("get") to be true, actually ' + desc1.hasOwnProperty("get"));
+ }
+
+ if (desc2.hasOwnProperty("value")) {
+ throw new Test262Error('Expected !desc2.hasOwnProperty("value") to be true, actually ' + !desc2.hasOwnProperty("value"));
+ }
+
+
+ verifyEqualTo(obj, "prop", getFunc());
+
+ verifyWritable(obj, "prop", "verifySetFunc");
+
+ verifyEnumerable(obj, "prop");
+
+ verifyNotConfigurable(obj, "prop");
+
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-547-3.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-547-3.js
new file mode 100644
index 0000000000..db6e0fdd62
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-547-3.js
@@ -0,0 +1,64 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-547-3
+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: [propertyHelper.js]
+---*/
+
+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
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+ if (!desc1.hasOwnProperty("get")) {
+ throw new Test262Error('Expected desc1.hasOwnProperty("get") to be true, actually ' + desc1.hasOwnProperty("get"));
+ }
+
+ if (desc2.hasOwnProperty("value")) {
+ throw new Test262Error('Expected !desc2.hasOwnProperty("value") to be true, actually ' + !desc2.hasOwnProperty("value"));
+ }
+
+
+ verifyEqualTo(obj, "prop", getFunc());
+
+ verifyWritable(obj, "prop", "verifySetFunc");
+
+ verifyEnumerable(obj, "prop");
+
+ verifyNotConfigurable(obj, "prop");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-547-4.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-547-4.js
new file mode 100644
index 0000000000..ffc954933e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-547-4.js
@@ -0,0 +1,65 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-547-4
+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: [propertyHelper.js]
+---*/
+
+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
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ var desc2 = Object.getOwnPropertyDescriptor(obj, "0");
+
+ if (!desc1.hasOwnProperty("get")) {
+ throw new Test262Error('Expected desc1.hasOwnProperty("get") to be true, actually ' + desc1.hasOwnProperty("get"));
+ }
+
+ if (desc2.hasOwnProperty("value")) {
+ throw new Test262Error('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)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-547.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-547.js
new file mode 100644
index 0000000000..dcb19f54a5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-547.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-547
+description: >
+ ES5 Attributes - fail to update the accessor property ([[Get]] is
+ a Function, [[Set]] is a Function, [[Enumerable]] is true,
+ [[Configurable]] is false) to a data property
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: true,
+ configurable: false
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ value: 1001
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(desc1.hasOwnProperty("get"), 'desc1.hasOwnProperty("get") !== true');
+assert.sameValue(desc2.hasOwnProperty("value"), false, 'desc2.hasOwnProperty("value")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-548.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-548.js
new file mode 100644
index 0000000000..11b2a79a51
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-548.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-548
+description: >
+ ES5 Attributes - [[Get]] attribute of accessor property ([[Get]]
+ is a Function, [[Set]] is a Function, [[Enumerable]] is false,
+ [[Configurable]] is true) is the expected function
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: false,
+ configurable: true
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.get, getFunc, 'desc.get');
+assert.sameValue(obj.prop, 1001, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-549.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-549.js
new file mode 100644
index 0000000000..629e2c352c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-549.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-549
+description: >
+ ES5 Attributes - [[Set]] attribute of accessor property ([[Get]]
+ is a Function, [[Set]] is a Function, [[Enumerable]] is false,
+ [[Configurable]] is true) is the expected function
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: false,
+ configurable: true
+});
+
+obj.prop = "overrideData";
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.set, setFunc, 'desc.set');
+assert.sameValue(verifySetFunc, "overrideData", 'verifySetFunc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-55.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-55.js
new file mode 100644
index 0000000000..ca020589dd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-55.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-55
+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: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var setFunc = function(value) {
+ obj.setVerifyHelpProp = value;
+};
+var getFunc = function() {
+ return 10;
+};
+
+Object.defineProperty(obj, "property", {
+ set: setFunc,
+ get: getFunc,
+ configurable: true
+});
+verifyEqualTo(obj, "property", getFunc());
+
+verifyWritable(obj, "property", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "property");
+
+verifyConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-550.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-550.js
new file mode 100644
index 0000000000..e85ee4d553
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-550.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-550
+description: >
+ ES5 Attributes - property ([[Get]] is a Function, [[Set]] is a
+ Function, [[Enumerable]] is false, [[Configurable]] is true) is
+ non-enumerable
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: false,
+ configurable: true
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+for (var p in obj) {
+ assert.notSameValue(p, "prop", 'p');
+}
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-551.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-551.js
new file mode 100644
index 0000000000..cec2e0d83f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-551.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-551
+description: >
+ ES5 Attributes - property ([[Get]] is a Function, [[Set]] is a
+ Function, [[Enumerable]] is false, [[Configurable]] is true) is
+ deletable
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: false,
+ configurable: true
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+delete obj.prop;
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-552.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-552.js
new file mode 100644
index 0000000000..55303c7bd7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-552.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-552
+description: >
+ ES5 Attributes - success to update [[Get]] attribute of accessor
+ property ([[Get]] is a Function, [[Set]] is a Function,
+ [[Enumerable]] is false, [[Configurable]] is true) to different
+ value
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: false,
+ configurable: true
+});
+
+var result1 = obj.prop === 1001;
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ get: undefined
+});
+
+var result2 = typeof obj.prop === "undefined";
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(result1, 'result1 !== true');
+assert(result2, 'result2 !== true');
+assert.sameValue(desc1.get, getFunc, 'desc1.get');
+assert.sameValue(typeof desc2.get, "undefined", 'typeof desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-553.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-553.js
new file mode 100644
index 0000000000..726c412524
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-553.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-553
+description: >
+ ES5 Attributes - success to update [[Set]] attribute of accessor
+ property ([[Get]] is a Function, [[Set]] is a Function,
+ [[Enumerable]] is false, [[Configurable]] is true) to different
+ value
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: false,
+ configurable: true
+});
+
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ set: undefined
+});
+
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(desc1.set, setFunc, 'desc1.set');
+assert.sameValue(typeof desc2.set, "undefined", 'typeof desc2.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-554.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-554.js
new file mode 100644
index 0000000000..cfc4cf2d80
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-554.js
@@ -0,0 +1,55 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-554
+description: >
+ ES5 Attributes - success to update [[Enumerable]] attribute of
+ accessor property ([[Get]] is a Function, [[Set]] is a Function,
+ [[Enumerable]] is false, [[Configurable]] is true) to different
+ value
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: false,
+ configurable: true
+});
+
+var result1 = false;
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p1 in obj) {
+ if (p1 === "prop") {
+ result1 = true;
+ }
+}
+
+Object.defineProperty(obj, "prop", {
+ enumerable: true
+});
+var result2 = false;
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p2 in obj) {
+ if (p2 === "prop") {
+ result2 = true;
+ }
+}
+
+assert.sameValue(result1, false, 'result1');
+assert(result2, 'result2 !== true');
+assert.sameValue(desc1.enumerable, false, 'desc1.enumerable');
+assert.sameValue(desc2.enumerable, true, 'desc2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-555.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-555.js
new file mode 100644
index 0000000000..96f0f78ea5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-555.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-555
+description: >
+ ES5 Attributes - success to update [[Configurable]] attribute of
+ accessor property ([[Get]] is a Function, [[Set]] is a Function,
+ [[Enumerable]] is false, [[Configurable]] is true) to different
+ value
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: false,
+ configurable: true
+});
+
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.sameValue(desc1.configurable, true);
+
+Object.defineProperty(obj, "prop", {
+ configurable: false
+});
+
+verifyNotConfigurable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-556.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-556.js
new file mode 100644
index 0000000000..ecfdcf0cc0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-556.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-556
+description: >
+ ES5 Attributes - success to update the accessor property ([[Get]]
+ is a Function, [[Set]] is a Function, [[Enumerable]] is false,
+ [[Configurable]] is true) to a data property
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: false,
+ configurable: true
+});
+
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+Object.defineProperty(obj, "prop", {
+ value: 1001
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(desc1.hasOwnProperty("get"), 'desc1.hasOwnProperty("get") !== true');
+assert(desc2.hasOwnProperty("value"), 'desc2.hasOwnProperty("value") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-557.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-557.js
new file mode 100644
index 0000000000..25d9fba3ae
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-557.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-557
+description: >
+ ES5 Attributes - [[Get]] attribute of accessor property ([[Get]]
+ is a Function, [[Set]] is a Function, [[Enumerable]] is false,
+ [[Configurable]] is false) is the expected function
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: false,
+ configurable: false
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.get, getFunc, 'desc.get');
+assert.sameValue(obj.prop, 1001, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-558.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-558.js
new file mode 100644
index 0000000000..d9626d1995
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-558.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-558
+description: >
+ ES5 Attributes - [[Set]] attribute of accessor property ([[Get]]
+ is a Function, [[Set]] is a Function, [[Enumerable]] is false,
+ [[Configurable]] is false) is the expected function
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: false,
+ configurable: false
+});
+
+obj.prop = "overrideData";
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.set, setFunc, 'desc.set');
+assert.sameValue(verifySetFunc, "overrideData", 'verifySetFunc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-559.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-559.js
new file mode 100644
index 0000000000..aae9e8e40e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-559.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-559
+description: >
+ ES5 Attributes - property ([[Get]] is a Function, [[Set]] is a
+ Function, [[Enumerable]] is false, [[Configurable]] is false) is
+ non-enumerable
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: false,
+ configurable: false
+});
+
+var propertyDefineCorrect = obj.hasOwnProperty("prop");
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+for (var p in obj) {
+ assert.notSameValue(p, "prop", 'p');
+}
+
+assert(propertyDefineCorrect, 'propertyDefineCorrect !== true');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-56.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-56.js
new file mode 100644
index 0000000000..c5ea0ffad5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-56.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-56
+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: [propertyHelper.js]
+---*/
+
+var obj = {};
+var setFunc = function(value) {
+ obj.setVerifyHelpProp = value;
+};
+var getFunc = function() {
+ return 10;
+};
+
+Object.defineProperty(obj, "property", {
+ set: setFunc,
+ get: getFunc,
+ enumerable: true
+});
+verifyEqualTo(obj, "property", getFunc());
+
+verifyWritable(obj, "property", "setVerifyHelpProp");
+
+verifyEnumerable(obj, "property");
+
+verifyNotConfigurable(obj, "property");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-560.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-560.js
new file mode 100644
index 0000000000..127e3d4d42
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-560.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-560
+description: >
+ ES5 Attributes - property ([[Get]] is a Function, [[Set]] is a
+ Function, [[Enumerable]] is false, [[Configurable]] is false) is
+ undeletable
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: false,
+ configurable: false
+});
+
+assert(obj.hasOwnProperty("prop"));
+verifyNotConfigurable(obj, "prop");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-561.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-561.js
new file mode 100644
index 0000000000..676338c4be
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-561.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-561
+description: >
+ ES5 Attributes - fail to update [[Get]] attribute of accessor
+ property ([[Get]] is a Function, [[Set]] is a Function,
+ [[Enumerable]] is false, [[Configurable]] is false) to different
+ value
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: false,
+ configurable: false
+});
+
+var result1 = obj.prop === 1001;
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ get: undefined
+ });
+});
+var result2 = obj.prop === 1001;
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(result1, 'result1 !== true');
+assert(result2, 'result2 !== true');
+assert.sameValue(desc1.get, getFunc, 'desc1.get');
+assert.sameValue(desc2.get, getFunc, 'desc2.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-562.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-562.js
new file mode 100644
index 0000000000..f68f4cda5e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-562.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-562
+description: >
+ ES5 Attributes - fail to update [[Set]] attribute of accessor
+ property ([[Get]] is a Function, [[Set]] is a Function,
+ [[Enumerable]] is false, [[Configurable]] is false) to different
+ value
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: false,
+ configurable: false
+});
+
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ set: undefined
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert.sameValue(desc1.set, setFunc, 'desc1.set');
+assert.sameValue(desc2.set, setFunc, 'desc2.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-563.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-563.js
new file mode 100644
index 0000000000..ac8907dba4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-563.js
@@ -0,0 +1,55 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-563
+description: >
+ ES5 Attributes - fail to update [[Enumerable]] attribute of
+ accessor property ([[Get]] is a Function, [[Set]] is a Function,
+ [[Enumerable]] is false, [[Configurable]] is false) to different
+ value
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: false,
+ configurable: false
+});
+var result1 = false;
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p1 in obj) {
+ if (p1 === "prop") {
+ result1 = true;
+ }
+}
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ enumerable: true
+ });
+});
+var result2 = false;
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+for (var p2 in obj) {
+ if (p2 === "prop") {
+ result2 = true;
+ }
+}
+
+assert.sameValue(result1, false, 'result1');
+assert.sameValue(result2, false, 'result2');
+assert.sameValue(desc1.enumerable, false, 'desc1.enumerable');
+assert.sameValue(desc2.enumerable, false, 'desc2.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-564.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-564.js
new file mode 100644
index 0000000000..b4d0e29416
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-564.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-564
+description: >
+ ES5 Attributes - fail to update [[Configurable]] attribute of
+ accessor property ([[Get]] is a Function, [[Set]] is a Function,
+ [[Enumerable]] is false, [[Configurable]] is false) to different
+ value
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: false,
+ configurable: false
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+try {
+ Object.defineProperty(obj, "prop", {
+ configurable: true
+ });
+
+ throw new Test262Error("Expected TypeError");
+} catch (e) {
+ assert(e instanceof TypeError);
+ assert.sameValue(desc1.configurable, false);
+ verifyNotConfigurable(obj, "prop");
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-565.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-565.js
new file mode 100644
index 0000000000..6b94355849
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-565.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-565
+description: >
+ ES5 Attributes - fail to update the accessor property ([[Get]] is
+ a Function, [[Set]] is a Function, [[Enumerable]] is false,
+ [[Configurable]] is false) to a data property
+---*/
+
+var obj = {};
+
+var getFunc = function() {
+ return 1001;
+};
+
+var verifySetFunc = "data";
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc,
+ set: setFunc,
+ enumerable: false,
+ configurable: false
+});
+var desc1 = Object.getOwnPropertyDescriptor(obj, "prop");
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, "prop", {
+ value: 1001
+ });
+});
+var desc2 = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(desc1.hasOwnProperty("get"), 'desc1.hasOwnProperty("get") !== true');
+assert.sameValue(desc2.hasOwnProperty("value"), false, 'desc2.hasOwnProperty("value")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-566.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-566.js
new file mode 100644
index 0000000000..05c97023f6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-566.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-566
+description: >
+ ES5 Attributes - [[Get]] attribute is a function which has zero
+ argument
+---*/
+
+var obj = {};
+var getFunc = function() {
+ return 2010;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc.get, getFunc, 'desc.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-567.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-567.js
new file mode 100644
index 0000000000..a93935c00e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-567.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-567
+description: >
+ ES5 Attributes - [[Get]] attribute is a function which has one
+ argument
+---*/
+
+var obj = {};
+var getFunc = function(arg1) {
+ return 2010;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc.get, getFunc, 'desc.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-568.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-568.js
new file mode 100644
index 0000000000..0cf2eaefcb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-568.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-568
+description: >
+ ES5 Attributes - [[Get]] attribute is a function which has two
+ arguments
+---*/
+
+var obj = {};
+var getFunc = function(arg1, arg2) {
+ return 2010;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(desc.get, getFunc, 'desc.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-569.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-569.js
new file mode 100644
index 0000000000..42c3a18254
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-569.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-569
+description: >
+ ES5 Attributes - [[Get]] attribute is a function which contains
+ global variable
+---*/
+
+var obj = {};
+var globalVariable = 20;
+var getFunc = function() {
+ globalVariable = 2010;
+ return globalVariable;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc
+});
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(desc.get, getFunc, 'desc.get');
+assert.sameValue(obj.prop, 2010, 'obj.prop');
+assert.sameValue(globalVariable, 2010, 'globalVariable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-57.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-57.js
new file mode 100644
index 0000000000..5ad316ca51
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-57.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-570.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-570.js
new file mode 100644
index 0000000000..84cb1ae3e7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-570.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-570
+description: >
+ ES5 Attributes - [[Get]] attribute is a function which doesn't
+ contains return statement
+---*/
+
+var obj = {};
+var verifyExecute = false;
+var getFunc = function() {
+ verifyExecute = true;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(desc.get, getFunc, 'desc.get');
+assert.sameValue(typeof obj.prop, "undefined", 'typeof obj.prop');
+assert(verifyExecute, 'verifyExecute !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-571.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-571.js
new file mode 100644
index 0000000000..f16afa3929
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-571.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-571
+description: >
+ ES5 Attributes - [[Get]] attribute is a function which involves
+ 'this' object into statement(s)
+---*/
+
+var obj = {
+ len: 2010
+};
+var getFunc = function() {
+ return this;
+};
+
+Object.defineProperty(obj, "prop", {
+ get: getFunc
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(obj.prop, obj, 'obj.prop');
+assert.sameValue(desc.get, getFunc, 'desc.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-572.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-572.js
new file mode 100644
index 0000000000..a5edb3f1c4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-572.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-572
+description: >
+ ES5 Attributes - [[Set]] attribute is a function which has zero
+ argument
+---*/
+
+var obj = {};
+
+var setFunc = function() {};
+
+Object.defineProperty(obj, "prop", {
+ set: setFunc
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(desc.set, setFunc, 'desc.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-573.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-573.js
new file mode 100644
index 0000000000..9815868d23
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-573.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-573
+description: >
+ ES5 Attributes - [[Set]] attribute is a function which has one
+ argument
+---*/
+
+var obj = {};
+
+var verifySetFunc = 20;
+var setFunc = function(value) {
+ verifySetFunc = value;
+};
+Object.defineProperty(obj, "prop", {
+ set: setFunc
+});
+obj.prop = 2010;
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(desc.set, setFunc, 'desc.set');
+assert.sameValue(verifySetFunc, 2010, 'verifySetFunc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-574.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-574.js
new file mode 100644
index 0000000000..7a402e76b1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-574.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-574
+description: >
+ ES5 Attributes - [[Set]] attribute is a function which has two
+ arguments
+---*/
+
+var obj = {};
+var firstArg = 12;
+var secondArg = 12;
+
+var setFunc = function(a, b) {
+ firstArg = a;
+ secondArg = b;
+};
+Object.defineProperty(obj, "prop", {
+ set: setFunc
+});
+obj.prop = 100;
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(desc.set, setFunc, 'desc.set');
+assert.sameValue(firstArg, 100, 'firstArg');
+assert.sameValue(typeof secondArg, "undefined", 'typeof secondArg');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-575.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-575.js
new file mode 100644
index 0000000000..b31aa4e181
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-575.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-575
+description: >
+ ES5 Attributes - [[Set]] attribute is a function which contains
+ global variable
+---*/
+
+var obj = {};
+var globalVariable = 20;
+var setFunc = function() {
+ globalVariable = 2010;
+};
+
+Object.defineProperty(obj, "prop", {
+ set: setFunc
+});
+obj.prop = 10;
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(desc.set, setFunc, 'desc.set');
+assert.sameValue(globalVariable, 2010, 'globalVariable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-576.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-576.js
new file mode 100644
index 0000000000..52bd9123d1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-576.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-576
+description: >
+ ES5 Attributes - [[Set]] attribute is a function which contains
+ return statement
+---*/
+
+var obj = {};
+
+var setFunc = function() {
+ return 2010;
+};
+
+Object.defineProperty(obj, "prop", {
+ set: setFunc
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(desc.set, setFunc, 'desc.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-577.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-577.js
new file mode 100644
index 0000000000..a55c79eca3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-577.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-577
+description: >
+ ES5 Attributes - [[Set]] attribute is a function which involves
+ 'this' object into statement(s)
+---*/
+
+var obj = {};
+
+var setFunc = function(value) {
+ this.len = value;
+};
+
+Object.defineProperty(obj, "prop", {
+ set: setFunc
+});
+obj.prop = 2010;
+
+var desc = Object.getOwnPropertyDescriptor(obj, "prop");
+
+assert(obj.hasOwnProperty("prop"), 'obj.hasOwnProperty("prop") !== true');
+assert.sameValue(desc.set, setFunc, 'desc.set');
+assert.sameValue(obj.len, 2010, 'obj.len');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-578.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-578.js
new file mode 100644
index 0000000000..358bb82cf3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-578.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-578
+description: >
+ ES5 Attributes - [[Get]] field of inherited property of
+ [[Prototype]] internal property is correct (String instance)
+---*/
+
+var data = "data";
+
+Object.defineProperty(String.prototype, "prop", {
+ get: function() {
+ return data;
+ },
+ set: function(value) {
+ data = value;
+ },
+ enumerable: true,
+ configurable: true
+});
+var strObj = new String();
+
+assert.sameValue(strObj.hasOwnProperty("prop"), false, 'strObj.hasOwnProperty("prop")');
+assert.sameValue(strObj.prop, "data", 'strObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-579.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-579.js
new file mode 100644
index 0000000000..9ef0b9c4ce
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-579.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-579
+description: >
+ ES5 Attributes - Success to add property into object (Array
+ instance)
+---*/
+
+var data = "data";
+
+Object.defineProperty(Array.prototype, "prop", {
+ get: function() {
+ return data;
+ },
+ set: function(value) {
+ data = value;
+ },
+ enumerable: true,
+ configurable: true
+});
+var arrObj = [];
+arrObj.prop = "myOwnProperty";
+
+assert.sameValue(arrObj.hasOwnProperty("prop"), false, 'arrObj.hasOwnProperty("prop")');
+assert.sameValue(arrObj.prop, "myOwnProperty", 'arrObj.prop');
+assert.sameValue(data, "myOwnProperty", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-58.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-58.js
new file mode 100644
index 0000000000..d561f384f6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-58.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-580.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-580.js
new file mode 100644
index 0000000000..0086d54c9a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-580.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-580
+description: >
+ ES5 Attributes - Inherited property is enumerable (Boolean
+ instance)
+---*/
+
+var data = "data";
+
+Object.defineProperty(Boolean.prototype, "prop", {
+ get: function() {
+ return data;
+ },
+ set: function(value) {
+ data = value;
+ },
+ enumerable: true,
+ configurable: true
+});
+var boolObj = new Boolean();
+var verifyEnumerable = false;
+for (var p in boolObj) {
+ if (p === "prop") {
+ verifyEnumerable = true;
+ }
+}
+
+assert.sameValue(boolObj.hasOwnProperty("prop"), false, 'boolObj.hasOwnProperty("prop")');
+assert(verifyEnumerable, 'verifyEnumerable !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-581.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-581.js
new file mode 100644
index 0000000000..fae2d10b5a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-581.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-581
+description: ES5 Attributes - Fail to add property into object (Number instance)
+includes: [propertyHelper.js]
+---*/
+
+var data = "data";
+
+Object.defineProperty(Number.prototype, "prop", {
+ get: function() {
+ return data;
+ },
+ enumerable: false,
+ configurable: true
+});
+var numObj = new Number();
+
+verifyNotWritable(numObj, "prop", "nocheck");
+
+assert(!numObj.hasOwnProperty("prop"));
+assert.sameValue(numObj.prop, "data");
+assert.sameValue(data, "data");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-582.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-582.js
new file mode 100644
index 0000000000..5981ca69d4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-582.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-582
+description: >
+ ES5 Attributes - Inherited property is non-enumerable (Function
+ instance)
+---*/
+
+var data = "data";
+
+Object.defineProperty(Function.prototype, "prop", {
+ get: function() {
+ return data;
+ },
+ enumerable: false,
+ configurable: true
+});
+var funObj = function() {};
+var verifyEnumerable = false;
+for (var p in funObj) {
+ if (p === "prop") {
+ verifyEnumerable = true;
+ }
+}
+
+assert.sameValue(funObj.hasOwnProperty("prop"), false, 'funObj.hasOwnProperty("prop")');
+assert.sameValue(verifyEnumerable, false, 'verifyEnumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-583.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-583.js
new file mode 100644
index 0000000000..699dd23cfd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-583.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-583
+description: >
+ ES5 Attributes - [[Get]] field of inherited property of
+ [[Prototype]] internal property is correct (Error Instance)
+---*/
+
+var data = "data";
+
+Object.defineProperty(Error.prototype, "prop", {
+ get: function() {
+ return data;
+ },
+ set: function(value) {
+ data = value;
+ },
+ enumerable: true,
+ configurable: true
+});
+var errObj = new Error();
+
+assert.sameValue(errObj.hasOwnProperty("prop"), false, 'errObj.hasOwnProperty("prop")');
+assert.sameValue(errObj.prop, "data", 'errObj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-584.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-584.js
new file mode 100644
index 0000000000..b9d9c07aa0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-584.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-584
+description: ES5 Attributes - Failed to add property into object (Date instance)
+---*/
+
+var data = "data";
+
+Object.defineProperty(Date.prototype, "prop", {
+ get: function() {
+ return data;
+ },
+ set: function(value) {
+ data = value;
+ },
+ enumerable: true,
+ configurable: true
+});
+var dateObj = new Date();
+dateObj.prop = "myOwnProperty";
+
+assert.sameValue(dateObj.hasOwnProperty("prop"), false, 'dateObj.hasOwnProperty("prop")');
+assert.sameValue(dateObj.prop, "myOwnProperty", 'dateObj.prop');
+assert.sameValue(data, "myOwnProperty", 'data');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-585.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-585.js
new file mode 100644
index 0000000000..1149bdf239
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-585.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-585
+description: ES5 Attributes - Inherited property is enumerable (RegExp instance)
+---*/
+
+var data = "data";
+
+Object.defineProperty(RegExp.prototype, "prop", {
+ get: function() {
+ return data;
+ },
+ set: function(value) {
+ data = value;
+ },
+ enumerable: true,
+ configurable: true
+});
+var regObj = new RegExp();
+var verifyEnumerable = false;
+for (var p in regObj) {
+ if (p === "prop") {
+ verifyEnumerable = true;
+ }
+}
+
+assert.sameValue(regObj.hasOwnProperty("prop"), false, 'regObj.hasOwnProperty("prop")');
+assert(verifyEnumerable, 'verifyEnumerable !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-586.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-586.js
new file mode 100644
index 0000000000..fb50b43e6a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-586.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-586
+description: >
+ ES5 Attributes - Fail to update value of property into of
+ [[Proptotype]] internal property (JSON)
+includes: [propertyHelper.js]
+---*/
+
+var data = "data";
+
+Object.defineProperty(Object.prototype, "prop", {
+ get: function() {
+ return data;
+ },
+ enumerable: false,
+ configurable: true
+});
+verifyNotWritable(JSON, "prop", "nocheck");
+
+assert(!JSON.hasOwnProperty("prop"));
+assert.sameValue(JSON.prop, "data");
+assert.sameValue(data, "data");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-587.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-587.js
new file mode 100644
index 0000000000..a91e8f24e7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-587.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-587
+description: ES5 Attributes - Inherited property is non-enumerable (Math)
+---*/
+
+var data = "data";
+
+Object.defineProperty(Object.prototype, "prop", {
+ get: function() {
+ return data;
+ },
+ enumerable: false,
+ configurable: true
+});
+var verifyEnumerable = false;
+for (var p in Math) {
+ if (p === "prop") {
+ verifyEnumerable = true;
+ }
+}
+
+assert.sameValue(Math.hasOwnProperty("prop"), false, 'Math.hasOwnProperty("prop")');
+assert.sameValue(verifyEnumerable, false, 'verifyEnumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-588.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-588.js
new file mode 100644
index 0000000000..d8b8f95674
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-588.js
@@ -0,0 +1,54 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-588
+description: >
+ ES5 Attributes - [[Get]] field of inherited property of
+ [[Prototype]] internal property is correct (Object.create)
+---*/
+
+var appointment = {};
+
+var data1 = 1001;
+Object.defineProperty(appointment, "startTime", {
+ get: function() {
+ return data1;
+ },
+ enumerable: true,
+ configurable: false
+});
+var data2 = "NAME";
+Object.defineProperty(appointment, "name", {
+ get: function() {
+ return data2;
+ },
+ set: function(value) {
+ data2 = value;
+ },
+ enumerable: true,
+ configurable: true
+});
+
+var meeting = Object.create(appointment);
+var data3 = "In-person meeting";
+Object.defineProperty(meeting, "conferenceCall", {
+ get: function() {
+ return data3;
+ },
+ enumerable: true,
+ configurable: false
+});
+
+var teamMeeting = Object.create(meeting);
+
+var hasOwnProperty = !teamMeeting.hasOwnProperty("name") &&
+ !teamMeeting.hasOwnProperty("startTime") &&
+ !teamMeeting.hasOwnProperty('conferenceCall');
+
+assert(hasOwnProperty, 'hasOwnProperty !== true');
+assert.sameValue(teamMeeting.name, "NAME", 'teamMeeting.name');
+assert.sameValue(teamMeeting.startTime, 1001, 'teamMeeting.startTime');
+assert.sameValue(teamMeeting.conferenceCall, "In-person meeting", 'teamMeeting.conferenceCall');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-589.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-589.js
new file mode 100644
index 0000000000..e5a319257b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-589.js
@@ -0,0 +1,64 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-589
+description: >
+ ES5 Attributes - Success to update value of property into of
+ [[Proptotype]] internal property (Object.create)
+---*/
+
+var appointment = {};
+
+var data1 = 1001;
+Object.defineProperty(appointment, "startTime", {
+ get: function() {
+ return data1;
+ },
+ set: function(value) {
+ data1 = value;
+ },
+ enumerable: true,
+ configurable: true
+});
+var data2 = "NAME";
+Object.defineProperty(appointment, "name", {
+ get: function() {
+ return data2;
+ },
+ set: function(value) {
+ data2 = value;
+ },
+ enumerable: true,
+ configurable: false
+});
+
+var meeting = Object.create(appointment);
+var data3 = "In-person meeting";
+Object.defineProperty(meeting, "conferenceCall", {
+ get: function() {
+ return data3;
+ },
+ set: function(value) {
+ data3 = value;
+ },
+ enumerable: true,
+ configurable: false
+});
+
+var teamMeeting = Object.create(meeting);
+teamMeeting.name = "Team Meeting";
+var dateObj = new Date("10/31/2010 08:00");
+teamMeeting.startTime = dateObj;
+teamMeeting.conferenceCall = "4255551212";
+
+var hasOwnProperty = !teamMeeting.hasOwnProperty("name") &&
+ !teamMeeting.hasOwnProperty("startTime") &&
+ !teamMeeting.hasOwnProperty('conferenceCall');
+
+assert(hasOwnProperty, 'hasOwnProperty !== true');
+assert.sameValue(teamMeeting.name, "Team Meeting", 'teamMeeting.name');
+assert.sameValue(teamMeeting.startTime, dateObj, 'teamMeeting.startTime');
+assert.sameValue(teamMeeting.conferenceCall, "4255551212", 'teamMeeting.conferenceCall');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-59.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-59.js
new file mode 100644
index 0000000000..903ac63326
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-59.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function getFunc() {
+ return 0;
+}
+
+function setFunc(value) {
+ obj.helpVerifySet = value;
+}
+
+Object.defineProperty(obj, "foo", {
+ get: getFunc,
+ set: setFunc
+});
+
+Object.defineProperty(obj, "foo", {});
+verifyEqualTo(obj, "foo", getFunc());
+
+verifyWritable(obj, "foo", "helpVerifySet");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-590.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-590.js
new file mode 100644
index 0000000000..cb49b9f3ec
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-590.js
@@ -0,0 +1,73 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-590
+description: ES5 Attributes - Inherited property is enumerable (Object.create)
+---*/
+
+var appointment = {};
+
+var data1 = 1001;
+Object.defineProperty(appointment, "startTime", {
+ get: function() {
+ return data1;
+ },
+ set: function(value) {
+ data1 = value;
+ },
+ enumerable: true,
+ configurable: true
+});
+var data2 = "NAME";
+Object.defineProperty(appointment, "name", {
+ get: function() {
+ return data2;
+ },
+ set: function(value) {
+ data2 = value;
+ },
+ enumerable: true,
+ configurable: false
+});
+
+var meeting = Object.create(appointment);
+var data3 = "In-person meeting";
+Object.defineProperty(meeting, "conferenceCall", {
+ get: function() {
+ return data3;
+ },
+ set: function(value) {
+ data3 = value;
+ },
+ enumerable: true,
+ configurable: false
+});
+
+var teamMeeting = Object.create(meeting);
+
+var verifyTimeProp = false;
+var verifyNameProp = false;
+var verifyCallProp = false;
+for (var p in teamMeeting) {
+ if (p === "startTime") {
+ verifyTimeProp = true;
+ }
+ if (p === "name") {
+ verifyNameProp = true;
+ }
+ if (p === "conferenceCall") {
+ verifyCallProp = true;
+ }
+}
+
+var hasOwnProperty = !teamMeeting.hasOwnProperty("name") &&
+ !teamMeeting.hasOwnProperty("startTime") &&
+ !teamMeeting.hasOwnProperty('conferenceCall');
+
+assert(hasOwnProperty, 'hasOwnProperty !== true');
+assert(verifyTimeProp, 'verifyTimeProp !== true');
+assert(verifyNameProp, 'verifyNameProp !== true');
+assert(verifyCallProp, 'verifyCallProp !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-591.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-591.js
new file mode 100644
index 0000000000..7fb8751e2e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-591.js
@@ -0,0 +1,75 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-591
+description: >
+ ES5 Attributes - Fail to update value of property of
+ [[Proptotype]] internal property (Object.create)
+includes: [propertyHelper.js]
+---*/
+
+var appointment = {};
+
+var data1 = 1001;
+Object.defineProperty(appointment, "startTime", {
+ get: function() {
+ return data1;
+ },
+ enumerable: false,
+ configurable: false
+});
+var data2 = "NAME";
+Object.defineProperty(appointment, "name", {
+ get: function() {
+ return data2;
+ },
+ enumerable: false,
+ configurable: true
+});
+
+var meeting = Object.create(appointment);
+var data3 = "In-person meeting";
+Object.defineProperty(meeting, "conferenceCall", {
+ get: function() {
+ return data3;
+ },
+ enumerable: false,
+ configurable: false
+});
+
+var teamMeeting = Object.create(meeting);
+
+verifyNotWritable(teamMeeting, "name", "nocheck");
+verifyNotWritable(teamMeeting, "startTime", "nocheck");
+verifyNotWritable(teamMeeting, "conferenceCall", "nocheck");
+
+try {
+ teamMeeting.name = "IE Team Meeting";
+} catch (e) {
+ assert(e instanceof TypeError);
+}
+
+try {
+ var dateObj = new Date("10/31/2010 08:00");
+ teamMeeting.startTime = dateObj;
+} catch (e) {
+ assert(e instanceof TypeError);
+}
+
+try {
+ teamMeeting.conferenceCall = "4255551212";
+} catch (e) {
+ assert(e instanceof TypeError);
+}
+
+
+assert(!teamMeeting.hasOwnProperty("name"));
+assert(!teamMeeting.hasOwnProperty("startTime"));
+assert(!teamMeeting.hasOwnProperty('conferenceCall'));
+
+assert.sameValue(teamMeeting.name, "NAME");
+assert.sameValue(teamMeeting.startTime, 1001);
+assert.sameValue(teamMeeting.conferenceCall, "In-person meeting");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-592.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-592.js
new file mode 100644
index 0000000000..d5840aea14
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-592.js
@@ -0,0 +1,66 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-592
+description: >
+ ES5 Attributes - Inherited property is non-enumerable
+ (Object.create)
+---*/
+
+var appointment = {};
+
+var data1 = 1001;
+Object.defineProperty(appointment, "startTime", {
+ get: function() {
+ return data1;
+ },
+ enumerable: false,
+ configurable: true
+});
+var data2 = "NAME";
+Object.defineProperty(appointment, "name", {
+ get: function() {
+ return data2;
+ },
+ enumerable: false,
+ configurable: false
+});
+
+var meeting = Object.create(appointment);
+var data3 = "In-person meeting";
+Object.defineProperty(meeting, "conferenceCall", {
+ get: function() {
+ return data3;
+ },
+ enumerable: false,
+ configurable: true
+});
+
+var teamMeeting = Object.create(meeting);
+
+var verifyTimeProp = false;
+var verifyNameProp = false;
+var verifyCallProp = false;
+for (var p in teamMeeting) {
+ if (p === "startTime") {
+ verifyTimeProp = true;
+ }
+ if (p === "name") {
+ verifyNameProp = true;
+ }
+ if (p === "conferenceCall") {
+ verifyCallProp = true;
+ }
+}
+
+var hasOwnProperty = !teamMeeting.hasOwnProperty("name") &&
+ !teamMeeting.hasOwnProperty("startTime") &&
+ !teamMeeting.hasOwnProperty('conferenceCall');
+
+assert(hasOwnProperty, 'hasOwnProperty !== true');
+assert.sameValue(verifyTimeProp, false, 'verifyTimeProp');
+assert.sameValue(verifyNameProp, false, 'verifyNameProp');
+assert.sameValue(verifyCallProp, false, 'verifyCallProp');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-593.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-593.js
new file mode 100644
index 0000000000..7c85bed474
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-593.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-593
+description: >
+ ES5 Attributes - [[Get]] field of inherited property of
+ [[Prototype]] internal property is correct
+ (Function.prototype.bind)
+---*/
+
+var foo = function() {};
+var data = "data";
+
+Object.defineProperty(Function.prototype, "prop", {
+ get: function() {
+ return data;
+ },
+ set: function(value) {
+ data = value;
+ },
+ enumerable: true,
+ configurable: true
+});
+
+var obj = foo.bind({});
+
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+assert.sameValue(obj.prop, data, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-594.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-594.js
new file mode 100644
index 0000000000..57b81e70e5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-594.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-594
+description: >
+ ES5 Attributes - Success to update value of property into of
+ [[Proptotype]] internal property (Function.prototype.bind)
+---*/
+
+var foo = function() {};
+var data = "data";
+
+Object.defineProperty(Function.prototype, "prop", {
+ get: function() {
+ return data;
+ },
+ set: function(value) {
+ data = value;
+ },
+ enumerable: true,
+ configurable: true
+});
+
+var obj = foo.bind({});
+obj.prop = "overrideData";
+
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+assert.sameValue(obj.prop, "overrideData", 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-595.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-595.js
new file mode 100644
index 0000000000..5df8b4da09
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-595.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-595
+description: >
+ ES5 Attributes - Inherited property is enumerable
+ (Function.prototype.bind)
+---*/
+
+var foo = function() {};
+var data = "data";
+
+Object.defineProperty(Function.prototype, "prop", {
+ get: function() {
+ return data;
+ },
+ set: function(value) {
+ data = value;
+ },
+ enumerable: true,
+ configurable: true
+});
+
+var obj = foo.bind({});
+
+var verifyEnumerable = false;
+for (var p in obj) {
+ if (p === "prop") {
+ verifyEnumerable = true;
+ }
+}
+
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+assert(verifyEnumerable, 'verifyEnumerable !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-596.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-596.js
new file mode 100644
index 0000000000..f875674657
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-596.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-596
+description: >
+ ES5 Attributes - Fail to update value of property into of
+ [[Proptotype]] internal property (Function.prototype.bind)
+includes: [propertyHelper.js]
+---*/
+
+var foo = function() {};
+var data = "data";
+
+Object.defineProperty(Function.prototype, "prop", {
+ get: function() {
+ return data;
+ },
+ enumerable: false,
+ configurable: true
+});
+
+var obj = foo.bind({});
+
+assert(!obj.hasOwnProperty("prop"));
+verifyNotWritable(obj, "prop", "nocheck");
+assert.sameValue(obj.prop, "data");;
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-597.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-597.js
new file mode 100644
index 0000000000..135bcecf9c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-597.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-597
+description: >
+ ES5 Attributes - Inherited property is non-enumerable
+ (Function.prototype.bind)
+---*/
+
+var foo = function() {};
+var data = "data";
+
+Object.defineProperty(Function.prototype, "prop", {
+ get: function() {
+ return data;
+ },
+ enumerable: false,
+ configurable: true
+});
+
+var obj = foo.bind({});
+
+var verifyEnumerable = false;
+for (var p in obj) {
+ if (p === "prop") {
+ verifyEnumerable = true;
+ }
+}
+
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+assert.sameValue(verifyEnumerable, false, 'verifyEnumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-598.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-598.js
new file mode 100644
index 0000000000..bd8b55eae2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-598.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-598
+description: >
+ ES5 Attributes - all attributes in Object.getPrototypeOf are
+ correct
+includes: [propertyHelper.js]
+---*/
+
+verifyProperty(Object, "getPrototypeOf", {
+ writable: true,
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-599.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-599.js
new file mode 100644
index 0000000000..1c388fe221
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-599.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-599
+description: >
+ ES5 Attributes - all attributes in Object.getOwnPropertyDescriptor
+ are correct
+includes: [propertyHelper.js]
+---*/
+
+verifyProperty(Object, "getOwnPropertyDescriptor", {
+ writable: true,
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-6.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-6.js
new file mode 100644
index 0000000000..ac7627a639
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-6.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Step 4 of defineProperty calls the [[DefineOwnProperty]] internal method
+ of O to define the property. Step 6 of [[DefineOwnProperty]] returns if
+ every field of desc also occurs in current and every field in desc has
+ the same value as current.
+es5id: 15.2.3.6-4-6
+description: >
+ Object.defineProperty is no-op if current and desc are the same
+ accessor desc
+---*/
+
+function sameAccessorDescriptorValues(d1, d2) {
+ return (d1.get == d2.get &&
+ d1.enumerable == d2.enumerable &&
+ d1.configurable == d2.configurable);
+}
+
+var o = {};
+
+// create an accessor property with the following attributes:
+// enumerable: true, configurable: true
+var desc = {
+ get: function() {},
+ enumerable: true,
+ configurable: true
+};
+
+Object.defineProperty(o, "foo", desc);
+
+// query for, and save, the desc. A subsequent call to defineProperty
+// with the same desc should not disturb the property definition.
+var d1 = Object.getOwnPropertyDescriptor(o, "foo");
+
+// now, redefine the property with the same descriptor
+// the property defintion should not get disturbed.
+Object.defineProperty(o, "foo", desc);
+
+var d2 = Object.getOwnPropertyDescriptor(o, "foo");
+
+assert.sameValue(sameAccessorDescriptorValues(d1, d2), true, 'sameAccessorDescriptorValues(d1, d2)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-60.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-60.js
new file mode 100644
index 0000000000..bb14e77bed
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-60.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-600.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-600.js
new file mode 100644
index 0000000000..fccdb4ed06
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-600.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-600
+description: >
+ ES5 Attributes - all attributes in Object.getOwnPropertyNames are
+ correct
+includes: [propertyHelper.js]
+---*/
+
+verifyProperty(Object, "getOwnPropertyNames", {
+ writable: true,
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-601.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-601.js
new file mode 100644
index 0000000000..ebb199e657
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-601.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-601
+description: ES5 Attributes - all attributes in Object.create are correct
+includes: [propertyHelper.js]
+---*/
+
+verifyProperty(Object, "getPrototypeOf", {
+ writable: true,
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-602.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-602.js
new file mode 100644
index 0000000000..341be624a0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-602.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-602
+description: >
+ ES5 Attributes - all attributes in Object.defineProperty are
+ correct
+includes: [propertyHelper.js]
+---*/
+
+verifyProperty(Object, "defineProperty", {
+ writable: true,
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-603.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-603.js
new file mode 100644
index 0000000000..7a37c11746
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-603.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-603
+description: >
+ ES5 Attributes - all attributes in Object.defineProperties are
+ correct
+includes: [propertyHelper.js]
+---*/
+
+verifyProperty(Object, "defineProperties", {
+ writable: true,
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-604.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-604.js
new file mode 100644
index 0000000000..c3b1567828
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-604.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-604
+description: ES5 Attributes - all attributes in Object.seal are correct
+includes: [propertyHelper.js]
+---*/
+
+verifyProperty(Object, "seal", {
+ writable: true,
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-605.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-605.js
new file mode 100644
index 0000000000..5ad929ddc5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-605.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-605
+description: ES5 Attributes - all attributes in Object.freeze are correct
+includes: [propertyHelper.js]
+---*/
+
+verifyProperty(Object, "freeze", {
+ writable: true,
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-606.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-606.js
new file mode 100644
index 0000000000..984a13e886
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-606.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-606
+description: >
+ ES5 Attributes - all attributes in Object.preventExtensions are
+ correct
+includes: [propertyHelper.js]
+---*/
+
+verifyProperty(Object, "preventExtensions", {
+ writable: true,
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-607.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-607.js
new file mode 100644
index 0000000000..6310643147
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-607.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-607
+description: ES5 Attributes - all attributes in Object.isSealed are correct
+includes: [propertyHelper.js]
+---*/
+
+verifyProperty(Object, "isSealed", {
+ writable: true,
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-608.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-608.js
new file mode 100644
index 0000000000..4abcbf78a5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-608.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-608
+description: ES5 Attributes - all attributes in Object.isFrozen are correct
+includes: [propertyHelper.js]
+---*/
+
+verifyProperty(Object, "isFrozen", {
+ writable: true,
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-609.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-609.js
new file mode 100644
index 0000000000..9c35a503b5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-609.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-609
+description: ES5 Attributes - all attributes in Object.isExtensible are correct
+includes: [propertyHelper.js]
+---*/
+
+verifyProperty(Object, "isExtensible", {
+ writable: true,
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-61.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-61.js
new file mode 100644
index 0000000000..a59d8e6098
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-61.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-61
+description: >
+ Object.defineProperty - both desc.value and name.value are
+ undefined (8.12.9 step 6)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-610.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-610.js
new file mode 100644
index 0000000000..6a2e387804
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-610.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-610
+description: ES5 Attributes - all attributes in Object.keys are correct
+includes: [propertyHelper.js]
+---*/
+
+verifyProperty(Object, "keys", {
+ writable: true,
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-611.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-611.js
new file mode 100644
index 0000000000..19c0ef715c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-611.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-611
+description: >
+ ES5 Attributes - all attributes in Function.prototype.bind are
+ correct
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Function.prototype, "bind");
+
+var propertyAreCorrect = (desc.writable === true && desc.enumerable === false && desc.configurable === true);
+
+var temp = Function.prototype.bind;
+
+Function.prototype.bind = "2010";
+
+var isWritable = (Function.prototype.bind === "2010");
+
+var isEnumerable = false;
+
+for (var prop in Function.prototype) {
+ if (prop === "bind") {
+ isEnumerable = true;
+ }
+}
+
+delete Function.prototype.bind;
+
+var isConfigurable = !Function.prototype.hasOwnProperty("bind");
+
+assert(propertyAreCorrect, 'propertyAreCorrect !== true');
+assert(isWritable, 'isWritable !== true');
+assert.sameValue(isEnumerable, false, 'isEnumerable');
+assert(isConfigurable, 'isConfigurable !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-612.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-612.js
new file mode 100644
index 0000000000..e33d81a9c2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-612.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-612
+description: >
+ ES5 Attributes - all attributes in Array.prototype.indexOf are
+ correct
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "indexOf");
+
+var propertyAreCorrect = (desc.writable === true && desc.enumerable === false && desc.configurable === true);
+
+var temp = Array.prototype.indexOf;
+
+Array.prototype.indexOf = "2010";
+
+var isWritable = (Array.prototype.indexOf === "2010");
+
+var isEnumerable = false;
+
+for (var prop in Array.prototype) {
+ if (prop === "indexOf") {
+ isEnumerable = true;
+ }
+}
+
+delete Array.prototype.indexOf;
+
+var isConfigurable = !Array.prototype.hasOwnProperty("indexOf");
+
+assert(propertyAreCorrect, 'propertyAreCorrect !== true');
+assert(isWritable, 'isWritable !== true');
+assert.sameValue(isEnumerable, false, 'isEnumerable');
+assert(isConfigurable, 'isConfigurable !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-613.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-613.js
new file mode 100644
index 0000000000..162333109f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-613.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-613
+description: ES5 Attributes - all attributes in Object.lastIndexOf are correct
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "lastIndexOf");
+
+var propertyAreCorrect = (desc.writable === true && desc.enumerable === false && desc.configurable === true);
+
+var temp = Array.prototype.lastIndexOf;
+
+Array.prototype.lastIndexOf = "2010";
+
+var isWritable = (Array.prototype.lastIndexOf === "2010");
+
+var isEnumerable = false;
+
+for (var prop in Array.prototype) {
+ if (prop === "lastIndexOf") {
+ isEnumerable = true;
+ }
+}
+
+delete Array.prototype.lastIndexOf;
+
+var isConfigurable = !Array.prototype.hasOwnProperty("lastIndexOf");
+
+assert(propertyAreCorrect, 'propertyAreCorrect !== true');
+assert(isWritable, 'isWritable !== true');
+assert.sameValue(isEnumerable, false, 'isEnumerable');
+assert(isConfigurable, 'isConfigurable !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-614.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-614.js
new file mode 100644
index 0000000000..368a3b8977
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-614.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-614
+description: >
+ ES5 Attributes - all attributes in Array.prototype.every are
+ correct
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "every");
+
+var propertyAreCorrect = (desc.writable === true && desc.enumerable === false && desc.configurable === true);
+
+var temp = Array.prototype.every;
+
+Array.prototype.every = "2010";
+
+var isWritable = (Array.prototype.every === "2010");
+
+var isEnumerable = false;
+
+for (var prop in Array.prototype) {
+ if (prop === "every") {
+ isEnumerable = true;
+ }
+}
+
+delete Array.prototype.every;
+
+var isConfigurable = !Array.prototype.hasOwnProperty("every");
+
+assert(propertyAreCorrect, 'propertyAreCorrect !== true');
+assert(isWritable, 'isWritable !== true');
+assert.sameValue(isEnumerable, false, 'isEnumerable');
+assert(isConfigurable, 'isConfigurable !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-615.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-615.js
new file mode 100644
index 0000000000..c4deed0cd6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-615.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-615
+description: ES5 Attributes - all attributes in Array.prototype.some are correct
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "some");
+
+var propertyAreCorrect = (desc.writable === true && desc.enumerable === false && desc.configurable === true);
+
+var temp = Array.prototype.some;
+
+Array.prototype.some = "2010";
+
+var isWritable = (Array.prototype.some === "2010");
+
+var isEnumerable = false;
+
+for (var prop in Array.prototype) {
+ if (prop === "some") {
+ isEnumerable = true;
+ }
+}
+
+delete Array.prototype.some;
+
+var isConfigurable = !Array.prototype.hasOwnProperty("some");
+
+assert(propertyAreCorrect, 'propertyAreCorrect !== true');
+assert(isWritable, 'isWritable !== true');
+assert.sameValue(isEnumerable, false, 'isEnumerable');
+assert(isConfigurable, 'isConfigurable !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-616.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-616.js
new file mode 100644
index 0000000000..d5547bda86
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-616.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-616
+description: >
+ ES5 Attributes - all attributes in Array.prototype.forEach are
+ correct
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "forEach");
+
+var propertyAreCorrect = (desc.writable === true && desc.enumerable === false && desc.configurable === true);
+
+var temp = Array.prototype.forEach;
+
+Array.prototype.forEach = "2010";
+
+var isWritable = (Array.prototype.forEach === "2010");
+
+var isEnumerable = false;
+
+for (var prop in Array.prototype) {
+ if (prop === "forEach") {
+ isEnumerable = true;
+ }
+}
+
+delete Array.prototype.forEach;
+
+var isConfigurable = !Array.prototype.hasOwnProperty("forEach");
+
+assert(propertyAreCorrect, 'propertyAreCorrect !== true');
+assert(isWritable, 'isWritable !== true');
+assert.sameValue(isEnumerable, false, 'isEnumerable');
+assert(isConfigurable, 'isConfigurable !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-617.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-617.js
new file mode 100644
index 0000000000..0d18438ceb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-617.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-617
+description: ES5 Attributes - all attributes in Array.prototype.map are correct
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "map");
+
+var propertyAreCorrect = (desc.writable === true && desc.enumerable === false && desc.configurable === true);
+
+var temp = Array.prototype.map;
+
+Array.prototype.map = "2010";
+
+var isWritable = (Array.prototype.map === "2010");
+
+var isEnumerable = false;
+
+for (var prop in Array.prototype) {
+ if (prop === "map") {
+ isEnumerable = true;
+ }
+}
+
+delete Array.prototype.map;
+
+var isConfigurable = !Array.prototype.hasOwnProperty("map");
+
+assert(propertyAreCorrect, 'propertyAreCorrect !== true');
+assert(isWritable, 'isWritable !== true');
+assert.sameValue(isEnumerable, false, 'isEnumerable');
+assert(isConfigurable, 'isConfigurable !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-618.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-618.js
new file mode 100644
index 0000000000..3e21462908
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-618.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-618
+description: >
+ ES5 Attributes - all attributes in Array.prototype.filter are
+ correct
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "filter");
+
+var propertyAreCorrect = (desc.writable === true && desc.enumerable === false && desc.configurable === true);
+
+var temp = Array.prototype.filter;
+
+Array.prototype.filter = "2010";
+
+var isWritable = (Array.prototype.filter === "2010");
+
+var isEnumerable = false;
+
+for (var prop in Array.prototype) {
+ if (prop === "filter") {
+ isEnumerable = true;
+ }
+}
+
+delete Array.prototype.filter;
+
+var isConfigurable = !Array.prototype.hasOwnProperty("filter");
+
+assert(propertyAreCorrect, 'propertyAreCorrect !== true');
+assert(isWritable, 'isWritable !== true');
+assert.sameValue(isEnumerable, false, 'isEnumerable');
+assert(isConfigurable, 'isConfigurable !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-619.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-619.js
new file mode 100644
index 0000000000..746209ea13
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-619.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-619
+description: >
+ ES5 Attributes - all attributes in Array.prototype.reduce are
+ correct
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "reduce");
+
+var propertyAreCorrect = (desc.writable === true && desc.enumerable === false && desc.configurable === true);
+
+var temp = Array.prototype.reduce;
+
+Array.prototype.reduce = "2010";
+
+var isWritable = (Array.prototype.reduce === "2010");
+
+var isEnumerable = false;
+
+for (var prop in Array.prototype) {
+ if (prop === "reduce") {
+ isEnumerable = true;
+ }
+}
+
+delete Array.prototype.reduce;
+
+var isConfigurable = !Array.prototype.hasOwnProperty("reduce");
+
+assert(propertyAreCorrect, 'propertyAreCorrect !== true');
+assert(isWritable, 'isWritable !== true');
+assert.sameValue(isEnumerable, false, 'isEnumerable');
+assert(isConfigurable, 'isConfigurable !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-62.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-62.js
new file mode 100644
index 0000000000..f16d18a98b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-62.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-62
+description: >
+ Object.defineProperty - both desc.value and name.value are null
+ (8.12.9 step 6)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-620.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-620.js
new file mode 100644
index 0000000000..6ce2dbb7ce
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-620.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-620
+description: >
+ ES5 Attributes - all attributes in Array.prototype.reduceRight are
+ correct
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "reduceRight");
+
+var propertyAreCorrect = (desc.writable === true && desc.enumerable === false && desc.configurable === true);
+
+var temp = Array.prototype.reduceRight;
+
+Array.prototype.reduceRight = "2010";
+
+var isWritable = (Array.prototype.reduceRight === "2010");
+
+var isEnumerable = false;
+
+for (var prop in Array.prototype) {
+ if (prop === "reduceRight") {
+ isEnumerable = true;
+ }
+}
+
+delete Array.prototype.reduceRight;
+
+var isConfigurable = !Array.prototype.hasOwnProperty("reduceRight");
+
+assert(propertyAreCorrect, 'propertyAreCorrect !== true');
+assert(isWritable, 'isWritable !== true');
+assert.sameValue(isEnumerable, false, 'isEnumerable');
+assert(isConfigurable, 'isConfigurable !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-621.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-621.js
new file mode 100644
index 0000000000..5e00e1db4f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-621.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-621
+description: >
+ ES5 Attributes - all attributes in String.prototype.trim are
+ correct
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(String.prototype, "trim");
+
+var propertyAreCorrect = (desc.writable === true && desc.enumerable === false && desc.configurable === true);
+
+var temp = String.prototype.trim;
+
+String.prototype.trim = "2010";
+
+var isWritable = (String.prototype.trim === "2010");
+
+var isEnumerable = false;
+
+for (var prop in String.prototype) {
+ if (prop === "trim") {
+ isEnumerable = true;
+ }
+}
+
+delete String.prototype.trim;
+
+var isConfigurable = !String.prototype.hasOwnProperty("trim");
+
+assert(propertyAreCorrect, 'propertyAreCorrect !== true');
+assert(isWritable, 'isWritable !== true');
+assert.sameValue(isEnumerable, false, 'isEnumerable');
+assert(isConfigurable, 'isConfigurable !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-622.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-622.js
new file mode 100644
index 0000000000..db59aba810
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-622.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-622
+description: ES5 Attributes - all attributes in Date.now are correct
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date, "now");
+
+var propertyAreCorrect = (desc.writable === true && desc.enumerable === false && desc.configurable === true);
+
+var temp = Date.now;
+
+Date.now = "2010";
+
+var isWritable = (Date.now === "2010");
+
+var isEnumerable = false;
+
+for (var prop in Date) {
+ if (prop === "now") {
+ isEnumerable = true;
+ }
+}
+
+delete Date.now;
+
+var isConfigurable = !Date.hasOwnProperty("now");
+
+assert(propertyAreCorrect, 'propertyAreCorrect !== true');
+assert(isWritable, 'isWritable !== true');
+assert.sameValue(isEnumerable, false, 'isEnumerable');
+assert(isConfigurable, 'isConfigurable !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-623.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-623.js
new file mode 100644
index 0000000000..a5c94f29b7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-623.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-623
+description: >
+ ES5 Attributes - all attributes in Date.prototype.toISOString are
+ correct
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "toISOString");
+
+var propertyAreCorrect = (desc.writable === true && desc.enumerable === false && desc.configurable === true);
+
+var temp = Date.prototype.toISOString;
+
+Date.prototype.toISOString = "2010";
+
+var isWritable = (Date.prototype.toISOString === "2010");
+
+var isEnumerable = false;
+
+for (var prop in Date.prototype) {
+ if (prop === "toISOString") {
+ isEnumerable = true;
+ }
+}
+
+delete Date.prototype.toISOString;
+
+var isConfigurable = !Date.prototype.hasOwnProperty("toISOString");
+
+assert(propertyAreCorrect, 'propertyAreCorrect !== true');
+assert(isWritable, 'isWritable !== true');
+assert.sameValue(isEnumerable, false, 'isEnumerable');
+assert(isConfigurable, 'isConfigurable !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-624.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-624.js
new file mode 100644
index 0000000000..4774991788
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-624.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-624
+description: >
+ ES5 Attributes - all attributes in Date.prototype.toJSON are
+ correct
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "toJSON");
+
+var propertyAreCorrect = (desc.writable === true && desc.enumerable === false && desc.configurable === true);
+
+var temp = Date.prototype.toJSON;
+
+Date.prototype.toJSON = "2010";
+
+var isWritable = (Date.prototype.toJSON === "2010");
+
+var isEnumerable = false;
+
+for (var prop in Date.prototype) {
+ if (prop === "toJSON") {
+ isEnumerable = true;
+ }
+}
+
+delete Date.prototype.toJSON;
+
+var isConfigurable = !Date.prototype.hasOwnProperty("toJSON");
+
+assert(propertyAreCorrect, 'propertyAreCorrect !== true');
+assert(isWritable, 'isWritable !== true');
+assert.sameValue(isEnumerable, false, 'isEnumerable');
+assert(isConfigurable, 'isConfigurable !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-625gs.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-625gs.js
new file mode 100644
index 0000000000..683458e946
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-625gs.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-625gs
+description: >
+ Globally declared variable should take precedence over
+ Object.prototype property of the same name
+---*/
+
+Object.defineProperty(Object.prototype,
+ "prop",
+ {
+ value: 1001,
+ writable: false,
+ enumerable: false,
+ configurable: false
+ }
+);
+var prop = 1002;
+
+if (!(this.hasOwnProperty("prop") && prop === 1002)) {
+ throw "this.prop should take precedence over Object.prototype.prop";
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-63.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-63.js
new file mode 100644
index 0000000000..feaf556cef
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-63.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-63
+description: >
+ Object.defineProperty - both desc.value and name.value are NaN
+ (8.12.9 step 6)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: NaN
+});
+
+Object.defineProperty(obj, "foo", {
+ value: NaN
+});
+
+assert.sameValue(obj.foo, NaN);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-64.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-64.js
new file mode 100644
index 0000000000..d627e8a13f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-64.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-64
+description: >
+ Object.defineProperty - desc.value = +0 and name.value = -0
+ (8.12.9 step 6)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: -0
+});
+
+try {
+ Object.defineProperty(obj, "foo", {
+ value: +0
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+
+ verifyEqualTo(obj, "foo", -0);
+
+ verifyNotWritable(obj, "foo");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-65.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-65.js
new file mode 100644
index 0000000000..ed2ac2cc12
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-65.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-65
+description: >
+ Object.defineProperty - desc.value = -0 and name.value = +0
+ (8.12.9 step 6)
+includes: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: +0
+});
+
+try {
+ Object.defineProperty(obj, "foo", {
+ value: -0
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "foo", +0);
+
+ verifyNotWritable(obj, "foo");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-66.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-66.js
new file mode 100644
index 0000000000..87fe39bdbd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-66.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-67.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-67.js
new file mode 100644
index 0000000000..6778b65e76
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-67.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-67
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-68.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-68.js
new file mode 100644
index 0000000000..f3f74ca0b1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-68.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-69.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-69.js
new file mode 100644
index 0000000000..39244aa40a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-69.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-7.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-7.js
new file mode 100644
index 0000000000..5bc108b476
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-7.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Step 4 of defineProperty calls the [[DefineOwnProperty]] internal method
+ of O to define the property. Step 7a of [[DefineOwnProperty]] rejects if
+ current.[[Configurable]] is false and desc.[[Configurable]] is true.
+es5id: 15.2.3.6-4-7
+description: >
+ Object.defineProperty throws TypeError when changing
+ [[Configurable]] from false to true
+---*/
+
+var o = {};
+
+// create a data valued property; all other attributes default to false.
+var d1 = {
+ value: 101,
+ configurable: false
+};
+Object.defineProperty(o, "foo", d1);
+
+var desc = {
+ value: 101,
+ configurable: true
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(o, "foo", desc);
+});
+// the property should remain unchanged.
+var d2 = Object.getOwnPropertyDescriptor(o, "foo");
+assert.sameValue(d2.value, 101, 'd2.value');
+assert.sameValue(d2.configurable, false, 'd2.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-70.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-70.js
new file mode 100644
index 0000000000..24d4977637
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-70.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-71.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-71.js
new file mode 100644
index 0000000000..c12aa123b1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-71.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+var obj1 = {
+ length: 10
+};
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-72.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-72.js
new file mode 100644
index 0000000000..36c4fe3a34
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-72.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+var obj1 = {
+ length: 10
+};
+obj.foo = obj1; // default value of attributes: writable: true, configurable: true, enumerable: true
+
+var obj2 = {
+ length: 20
+};
+
+Object.defineProperty(obj, "foo", {
+ value: obj2
+});
+verifyEqualTo(obj, "foo", obj2);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-73.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-73.js
new file mode 100644
index 0000000000..e003f7060f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-73.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-74.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-74.js
new file mode 100644
index 0000000000..735ff9e36d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-74.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-75.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-75.js
new file mode 100644
index 0000000000..ffb8fa59fc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-75.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function getFunc() {
+ return 10;
+}
+
+function setFunc(value) {
+ obj.helpVerifySet = value;
+}
+
+Object.defineProperty(obj, "foo", {
+ get: getFunc,
+ set: setFunc
+});
+
+Object.defineProperty(obj, "foo", {
+ get: getFunc
+});
+verifyEqualTo(obj, "foo", getFunc());
+
+verifyWritable(obj, "foo", "helpVerifySet");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-76.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-76.js
new file mode 100644
index 0000000000..91a011f019
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-76.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function getFunc1() {
+ return 10;
+}
+
+function setFunc1(value) {
+ obj.helpVerifySet = value;
+}
+
+Object.defineProperty(obj, "foo", {
+ get: getFunc1,
+ set: setFunc1,
+ configurable: true
+});
+
+function getFunc2() {
+ return 20;
+}
+
+Object.defineProperty(obj, "foo", {
+ get: getFunc2
+});
+verifyEqualTo(obj, "foo", getFunc2());
+
+verifyWritable(obj, "foo", "helpVerifySet");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-77.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-77.js
new file mode 100644
index 0000000000..11813c0338
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-77.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function setFunc(value) {
+ obj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(obj, "foo", {
+ set: setFunc
+});
+
+Object.defineProperty(obj, "foo", {
+ set: setFunc
+});
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-78.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-78.js
new file mode 100644
index 0000000000..9ffdeb435b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-78.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function setFunc1() {}
+
+Object.defineProperty(obj, "foo", {
+ set: setFunc1,
+ configurable: true
+});
+
+function setFunc2(value) {
+ obj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(obj, "foo", {
+ set: setFunc2
+});
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-79.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-79.js
new file mode 100644
index 0000000000..0295f90eef
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-79.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-8.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-8.js
new file mode 100644
index 0000000000..42f3d2045c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-8.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Step 4 of defineProperty calls the [[DefineOwnProperty]] internal method
+ of O to define the property. Step 7b of [[DefineOwnProperty]] rejects if
+ current.[[Enumerable]] and desc.[[Enumerable]] are the boolean negations
+ of each other.
+es5id: 15.2.3.6-4-8
+description: >
+ Object.defineProperty throws TypeError when changing
+ [[Enumerable]] from false to true on non-configurable data
+ properties
+---*/
+
+var o = {};
+
+// create a data valued property; all other attributes default to false.
+var d1 = {
+ value: 101,
+ enumerable: false,
+ configurable: false
+};
+Object.defineProperty(o, "foo", d1);
+
+// now, setting enumerable to true should fail, since [[Configurable]]
+// on the original property will be false.
+var desc = {
+ value: 101,
+ enumerable: true
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(o, "foo", desc);
+});
+// the property should remain unchanged.
+var d2 = Object.getOwnPropertyDescriptor(o, "foo");
+assert.sameValue(d2.value, 101, 'd2.value');
+assert.sameValue(d2.enumerable, false, 'd2.enumerable');
+assert.sameValue(d2.configurable, false, 'd2.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-80.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-80.js
new file mode 100644
index 0000000000..06c6f05859
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-80.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-81.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-81.js
new file mode 100644
index 0000000000..bb04cb882d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-81.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-1.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-1.js
new file mode 100644
index 0000000000..b2a9b4b8ae
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-1.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-82-1
+description: >
+ Object.defineProperty - Update [[Enumerable]] attribute of 'name'
+ property to false successfully when [[Enumerable]] and
+ [[Configurable]] attributes of 'name' property are true, the
+ 'desc' is a generic descriptor which only contains [[Enumerable]]
+ attribute as false, 'name' property is a data property (8.12.9
+ step 8)
+includes: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-10.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-10.js
new file mode 100644
index 0000000000..4c2395e14d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-10.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-82-10
+description: >
+ Object.defineProperty - Update [[Configurable]] attribute of
+ 'name' property to false successfully when [[Enumerable]] and
+ [[Configurable]] attributes of 'name' property are true, the
+ '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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-11.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-11.js
new file mode 100644
index 0000000000..0fefd5de68
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-11.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-82-11
+description: >
+ Object.defineProperty - Update [[Enumerable]] and [[Configurable]]
+ attributes of 'name' property to false successfully when
+ [[Enumerable]] and [[Configurable]] attributes of 'name' property
+ 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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-12.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-12.js
new file mode 100644
index 0000000000..ba8dd041b1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-12.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-82-12
+description: >
+ Object.defineProperty - Update [[Enumerable]] attributes of 'name'
+ property to true successfully when [[Enumerable]] attribute of
+ 'name' is false and [[Configurable]] attribute of 'name' is true,
+ 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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-13.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-13.js
new file mode 100644
index 0000000000..4e954f0939
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-13.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-82-13
+description: >
+ Object.defineProperty - Update [[Enumerable]] attribute of 'name'
+ property to false successfully when [[Enumerable]] and
+ [[Configurable]] attributes of 'name' property are true, the
+ '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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-14.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-14.js
new file mode 100644
index 0000000000..b91f538d57
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-14.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-82-14
+description: >
+ Object.defineProperty - Update [[Enumerable]] attribute of 'name'
+ property to false successfully when [[Enumerable]] and
+ [[Configurable]] attributes of 'name' property are true, the
+ '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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-15.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-15.js
new file mode 100644
index 0000000000..5a88b4781c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-15.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-82-15
+description: >
+ Object.defineProperty - Update [[Configurable]] attribute of
+ 'name' property to false successfully when [[Configurable]]
+ 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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "0", {
+ value: 1001,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+
+Object.defineProperty(obj, "0", {
+ configurable: false
+});
+
+verifyEqualTo(obj, "0", 1001);
+
+verifyWritable(obj, "0");
+
+verifyEnumerable(obj, "0");
+
+verifyNotConfigurable(obj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-16.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-16.js
new file mode 100644
index 0000000000..fe07c56e74
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-16.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-82-16
+description: >
+ Object.defineProperty - Update [[Configurable]] attribute of
+ 'name' property to false successfully when [[Enumerable]] and
+ [[Configurable]] attributes of 'name' property are true, the
+ '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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-17.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-17.js
new file mode 100644
index 0000000000..de43ae8048
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-17.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-82-17
+description: >
+ Object.defineProperty - Update [[Enumerable]] and [[Configurable]]
+ attributes of 'name' property to false successfully when
+ [[Enumerable]] and [[Configurable]] attributes of 'name' property
+ 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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-18.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-18.js
new file mode 100644
index 0000000000..30b44c922c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-18.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-82-18
+description: >
+ Object.defineProperty - Update [[Enumerable]] attribute of 'name'
+ property to true successfully when [[Enumerable]] attribute of
+ 'name' is false and [[Configurable]] attribute of 'name' is true,
+ 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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "0", {
+ value: 1001,
+ writable: true,
+ enumerable: false,
+ configurable: true
+});
+
+Object.defineProperty(obj, "0", {
+ enumerable: true
+});
+
+verifyEqualTo(obj, "0", 1001);
+
+verifyWritable(obj, "0");
+
+verifyEnumerable(obj, "0");
+
+verifyConfigurable(obj, "0");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-19.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-19.js
new file mode 100644
index 0000000000..b8776f7da0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-19.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-82-19
+description: >
+ Object.defineProperty - Update [[Enumerable]] attribute of 'name'
+ property to false successfully when [[Enumerable]] and
+ [[Configurable]] attributes of 'name' property are true, the
+ '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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-2.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-2.js
new file mode 100644
index 0000000000..e5093aeec7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-2.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-82-2
+description: >
+ Object.defineProperty - Update [[Enumerable]] attribute of 'name'
+ property to false successfully when [[Enumerable]] and
+ [[Configurable]] attributes of 'name' property are true, the
+ '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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-20.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-20.js
new file mode 100644
index 0000000000..4b4ee70a99
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-20.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-82-20
+description: >
+ Object.defineProperty - Update [[Enumerable]] attribute of 'name'
+ property to false successfully when [[Enumerable]] and
+ [[Configurable]] attributes of 'name' property are true, the
+ '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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-21.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-21.js
new file mode 100644
index 0000000000..f4d984ef54
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-21.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-82-21
+description: >
+ Object.defineProperty - Update [[Configurable]] attribute of
+ 'name' property to false successfully when [[Enumerable]] and
+ [[Configurable]] attributes of 'name' property are true, the
+ '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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-22.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-22.js
new file mode 100644
index 0000000000..4df84cf130
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-22.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-82-22
+description: >
+ Object.defineProperty - Update [[Configurable]] attribute of
+ 'name' property to false successfully when [[Enumerable]] and
+ [[Configurable]] attributes of 'name' property are true, the
+ '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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-23.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-23.js
new file mode 100644
index 0000000000..a313d8ed02
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-23.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-82-23
+description: >
+ Object.defineProperty - Update [[Enumerable]] and [[Configurable]]
+ attributes of 'name' property to false successfully when
+ [[Enumerable]] and [[Configurable]] attributes of 'name' property
+ 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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-24.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-24.js
new file mode 100644
index 0000000000..fd2e6d537b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-24.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-82-24
+description: >
+ Object.defineProperty - Update [[Enumerable]] attributes of 'name'
+ property to true successfully when [[Enumerable]] attribute of
+ 'name' is false and [[Configurable]] attribute of 'name' is true,
+ 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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-3.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-3.js
new file mode 100644
index 0000000000..f031e54a38
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-3.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-82-3
+description: >
+ Object.defineProperty - Update [[Configurable]] attribute of
+ 'name' property to false successfully when [[Configurable]]
+ 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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 1001,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+
+Object.defineProperty(obj, "foo", {
+ configurable: false
+});
+
+verifyEqualTo(obj, "foo", 1001);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-4.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-4.js
new file mode 100644
index 0000000000..9e6bd3600a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-4.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-82-4
+description: >
+ Object.defineProperty - Update [[Configurable]] attribute of
+ 'name' property to false successfully when [[Enumerable]] and
+ [[Configurable]] attributes of 'name' property are true, the
+ '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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-5.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-5.js
new file mode 100644
index 0000000000..d0dae554c5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-5.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-82-5
+description: >
+ Object.defineProperty - Update [[Enumerable]] and [[Configurable]]
+ attributes of 'name' property to false successfully when
+ [[Enumerable]] and [[Configurable]] attributes of 'name' property
+ 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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-6.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-6.js
new file mode 100644
index 0000000000..265df4a1bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-6.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-82-6
+description: >
+ Object.defineProperty - Update [[Enumerable]] attribute of 'name'
+ property to true successfully when [[Enumerable]] attribute of
+ 'name' is false and [[Configurable]] attribute of 'name' is true,
+ 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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 1001,
+ writable: true,
+ enumerable: false,
+ configurable: true
+});
+
+Object.defineProperty(obj, "foo", {
+ enumerable: true
+});
+
+verifyEqualTo(obj, "foo", 1001);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-7.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-7.js
new file mode 100644
index 0000000000..72e6355d42
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-7.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-82-7
+description: >
+ Object.defineProperty - Update [[Enumerable]] attribute of 'name'
+ property to false successfully when [[Enumerable]] and
+ [[Configurable]] attributes of 'name' property are true, the
+ '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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-8.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-8.js
new file mode 100644
index 0000000000..1238652846
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-8.js
@@ -0,0 +1,45 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-82-8
+description: >
+ Object.defineProperty - Update [[Enumerable]] attribute of 'name'
+ property to false successfully when [[Enumerable]] and
+ [[Configurable]] attributes of 'name' property are true, the
+ '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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-9.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-9.js
new file mode 100644
index 0000000000..7f7b8b7a1d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82-9.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-82-9
+description: >
+ Object.defineProperty - Update [[Configurable]] attribute of
+ 'name' property to false successfully when [[Enumerable]] and
+ [[Configurable]] attributes of 'name' property are true, the
+ 'desc' is a generic descriptor which only contains
+ [[Configurable]] attribute as false, 'name' property is an
+ accessor property (8.12.9 step 8)
+includes: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82.js
new file mode 100644
index 0000000000..f80c1afff1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-82.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-83.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-83.js
new file mode 100644
index 0000000000..c9fb22b3d7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-83.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-83
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: undefined,
+ writable: false,
+ configurable: false
+});
+
+Object.defineProperty(obj, "foo", {
+ value: undefined,
+ writable: false,
+ configurable: false
+});
+verifyEqualTo(obj, "foo", undefined);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-84.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-84.js
new file mode 100644
index 0000000000..fdb49395ee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-84.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-84
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: null,
+ writable: false,
+ configurable: false
+});
+
+Object.defineProperty(obj, "foo", {
+ value: null,
+ writable: false,
+ configurable: false
+});
+verifyEqualTo(obj, "foo", null);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-85.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-85.js
new file mode 100644
index 0000000000..882a018143
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-85.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-85
+description: >
+ Object.defineProperty will not throw TypeError if
+ name.configurable = false, name.writable = false, name.value = NaN
+ and desc.value = NaN (8.12.9 step 10.a.ii.1)
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: NaN,
+ writable: false,
+ configurable: false
+});
+
+Object.defineProperty(obj, "foo", {
+ value: NaN,
+ writable: false,
+ configurable: false
+});
+
+assert.sameValue(obj.foo, NaN);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-86.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-86.js
new file mode 100644
index 0000000000..1bf35f3460
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-86.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-86
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: -0,
+ writable: false,
+ configurable: false
+});
+
+try {
+ Object.defineProperty(obj, "foo", {
+ value: +0
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "foo", -0);
+
+ verifyNotWritable(obj, "foo");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-87.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-87.js
new file mode 100644
index 0000000000..cbf3421f4e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-87.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-87
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: +0,
+ writable: false,
+ configurable: false
+});
+
+try {
+ Object.defineProperty(obj, "foo", {
+ value: -0
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "foo", +0);
+
+ verifyNotWritable(obj, "foo");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-88.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-88.js
new file mode 100644
index 0000000000..27b56ee337
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-88.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-88
+description: >
+ Object.defineProperty will not throw TypeError when
+ 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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 100,
+ writable: false,
+ configurable: false
+});
+
+Object.defineProperty(obj, "foo", {
+ value: 100
+});
+verifyEqualTo(obj, "foo", 100);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-89.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-89.js
new file mode 100644
index 0000000000..a8b3ba707f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-89.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-89
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 10,
+ writable: false,
+ configurable: false
+});
+
+try {
+ Object.defineProperty(obj, "foo", {
+ value: 20
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "foo", 10);
+
+ verifyNotWritable(obj, "foo");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-9.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-9.js
new file mode 100644
index 0000000000..82bc4ff57c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-9.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Step 4 of defineProperty calls the [[DefineOwnProperty]] internal method
+ of O to define the property. Step 7b of [[DefineOwnProperty]] rejects if
+ current.[[Enumerable]] and desc.[[Enumerable]] are the boolean negations
+ of each other.
+es5id: 15.2.3.6-4-9
+description: >
+ Object.defineProperty throws TypeError when changing
+ [[Enumerable]] from true to false on non-configurable data
+ properties
+---*/
+
+var o = {};
+
+// create a data valued property with [[Enumerable]] explicitly set to true;
+// all other attributes default to false.
+var d1 = {
+ value: 101,
+ enumerable: true,
+ configurable: false
+};
+Object.defineProperty(o, "foo", d1);
+
+// now, setting enumerable to false should fail, since [[Configurable]]
+// on the original property will be false.
+var desc = {
+ value: 101,
+ enumerable: false
+};
+assert.throws(TypeError, function() {
+ Object.defineProperty(o, "foo", desc);
+});
+// the property should remain unchanged.
+var d2 = Object.getOwnPropertyDescriptor(o, "foo");
+assert.sameValue(d2.value, 101, 'd2.value');
+assert.sameValue(d2.enumerable, true, 'd2.enumerable');
+assert.sameValue(d2.configurable, false, 'd2.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-90.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-90.js
new file mode 100644
index 0000000000..07438a7406
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-90.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-90
+description: >
+ Object.defineProperty will not throw TypeError when
+ 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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: "abcd",
+ writable: false,
+ configurable: false
+});
+
+Object.defineProperty(obj, "foo", {
+ value: "abcd"
+});
+verifyEqualTo(obj, "foo", "abcd");
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-91.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-91.js
new file mode 100644
index 0000000000..665ae48b79
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-91.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-91
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: "abcd",
+ writable: false,
+ configurable: false
+});
+
+try {
+ Object.defineProperty(obj, "foo", {
+ value: "fghj"
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "foo", "abcd");
+
+ verifyNotWritable(obj, "foo");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-92.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-92.js
new file mode 100644
index 0000000000..780ad68e54
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-92.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-92
+description: >
+ Object.defineProperty will not throw TypeError when
+ 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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: false,
+ writable: false,
+ configurable: false
+});
+
+Object.defineProperty(obj, "foo", {
+ value: false
+});
+verifyEqualTo(obj, "foo", false);
+
+verifyNotWritable(obj, "foo");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-93.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-93.js
new file mode 100644
index 0000000000..27113a056f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-93.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-93
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: false,
+ writable: false,
+ configurable: false
+});
+
+try {
+ Object.defineProperty(obj, "foo", {
+ value: true
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "foo", false);
+
+ verifyNotWritable(obj, "foo");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-94.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-94.js
new file mode 100644
index 0000000000..6a3a90950d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-94.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-94
+description: >
+ Object.defineProperty will not throw TypeError when
+ 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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+var obj1 = {
+ length: 10
+};
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-95.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-95.js
new file mode 100644
index 0000000000..9590be199b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-95.js
@@ -0,0 +1,51 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-95
+description: >
+ Object.defineProperty will throw TypeError when name.configurable
+ = 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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+var obj1 = {
+ length: 10
+};
+
+Object.defineProperty(obj, "foo", {
+ value: obj1,
+ writable: false,
+ configurable: false
+});
+
+var obj2 = {
+ length: 20
+};
+
+try {
+ Object.defineProperty(obj, "foo", {
+ value: obj2
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "foo", obj1);
+
+ verifyNotWritable(obj, "foo");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-96.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-96.js
new file mode 100644
index 0000000000..6cc17c467e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-96.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-96
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function setFunc(value) {
+ obj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(obj, "foo", {
+ set: setFunc,
+ configurable: false
+});
+
+Object.defineProperty(obj, "foo", {
+ set: setFunc
+});
+verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+verifyNotEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-97.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-97.js
new file mode 100644
index 0000000000..6e3d07a24b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-97.js
@@ -0,0 +1,46 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-97
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function getFunc() {
+ return "property";
+}
+
+Object.defineProperty(obj, "property", {
+ get: getFunc,
+ configurable: false
+});
+
+try {
+ Object.defineProperty(obj, "property", {
+ get: getFunc,
+ set: function() {},
+ configurable: false
+ });
+
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyEqualTo(obj, "property", getFunc());
+
+ verifyNotEnumerable(obj, "property");
+
+ verifyNotConfigurable(obj, "property");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-98.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-98.js
new file mode 100644
index 0000000000..0b54b241d5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-98.js
@@ -0,0 +1,42 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-98
+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: [propertyHelper.js]
+---*/
+
+
+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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-99.js b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-99.js
new file mode 100644
index 0000000000..bc8efa7208
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/15.2.3.6-4-99.js
@@ -0,0 +1,48 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6-4-99
+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: [propertyHelper.js]
+---*/
+
+
+var obj = {};
+
+function setFunc(value) {
+ obj.setVerifyHelpProp = value;
+}
+
+Object.defineProperty(obj, "foo", {
+ set: setFunc,
+ configurable: false
+});
+
+function getFunc() {
+ return 10;
+}
+
+try {
+ Object.defineProperty(obj, "foo", {
+ get: getFunc,
+ set: setFunc
+ });
+ throw new Test262Error("Expected an exception.");
+} catch (e) {
+ verifyWritable(obj, "foo", "setVerifyHelpProp");
+
+ verifyNotEnumerable(obj, "foo");
+
+ verifyNotConfigurable(obj, "foo");
+
+ if (!(e instanceof TypeError)) {
+ throw new Test262Error("Expected TypeError, got " + e);
+ }
+
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/8.12.9-9-b-i_1.js b/js/src/tests/test262/built-ins/Object/defineProperty/8.12.9-9-b-i_1.js
new file mode 100644
index 0000000000..83670f1a5e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/8.12.9-9-b-i_1.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.9-9-b-i_1
+description: >
+ Redefine a configurable data property to be an accessor property
+ on a newly non-extensible object
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo",
+{
+ value: "hello",
+ configurable: true
+});
+Object.preventExtensions(o);
+Object.defineProperty(o, "foo", {
+ get: function() {
+ return 5;
+ }
+});
+
+var fooDescrip = Object.getOwnPropertyDescriptor(o, "foo");
+
+assert.sameValue(o.foo, 5, 'o.foo');
+assert(fooDescrip.get !== undefined, 'fooDescrip.get!==undefined !== true');
+assert.sameValue(fooDescrip.set, undefined, 'fooDescrip.set');
+assert.sameValue(fooDescrip.value, undefined, 'fooDescrip.value');
+assert.sameValue(fooDescrip.configurable, true, 'fooDescrip.configurable');
+assert.sameValue(fooDescrip.enumerable, false, 'fooDescrip.enumerable');
+assert.sameValue(fooDescrip.writable, undefined, 'fooDescrip.writable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/8.12.9-9-b-i_2.js b/js/src/tests/test262/built-ins/Object/defineProperty/8.12.9-9-b-i_2.js
new file mode 100644
index 0000000000..143c79bf64
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/8.12.9-9-b-i_2.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.9-9-b-i_2
+description: >
+ Redefine a configurable data property to be an accessor property
+ on a newly non-extensible object
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo",
+{
+ value: "hello",
+ configurable: true,
+ enumerable: true,
+ writable: true
+});
+Object.preventExtensions(o);
+Object.defineProperty(o, "foo", {
+ get: function() {
+ return 5;
+ }
+});
+
+var fooDescrip = Object.getOwnPropertyDescriptor(o, "foo");
+
+assert.sameValue(o.foo, 5, 'o.foo');
+assert(fooDescrip.get !== undefined, 'fooDescrip.get!==undefined !== true');
+assert.sameValue(fooDescrip.set, undefined, 'fooDescrip.set');
+assert.sameValue(fooDescrip.value, undefined, 'fooDescrip.value');
+assert.sameValue(fooDescrip.configurable, true, 'fooDescrip.configurable');
+assert.sameValue(fooDescrip.enumerable, true, 'fooDescrip.enumerable');
+assert.sameValue(fooDescrip.writable, undefined, 'fooDescrip.writable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/8.12.9-9-c-i_1.js b/js/src/tests/test262/built-ins/Object/defineProperty/8.12.9-9-c-i_1.js
new file mode 100644
index 0000000000..bae31d5774
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/8.12.9-9-c-i_1.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.9-9-c-i_1
+description: >
+ Redefine a configurable accessor property to be a data property on
+ a non-extensible object
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo",
+{
+ get: function() {
+ return 5;
+ },
+ configurable: true
+});
+Object.preventExtensions(o);
+Object.defineProperty(o, "foo", {
+ value: "hello"
+});
+
+var fooDescrip = Object.getOwnPropertyDescriptor(o, "foo");
+
+assert.sameValue(o.foo, "hello", 'o.foo');
+assert.sameValue(fooDescrip.get, undefined, 'fooDescrip.get');
+assert.sameValue(fooDescrip.set, undefined, 'fooDescrip.set');
+assert.sameValue(fooDescrip.value, "hello", 'fooDescrip.value');
+assert.sameValue(fooDescrip.configurable, true, 'fooDescrip.configurable');
+assert.sameValue(fooDescrip.enumerable, false, 'fooDescrip.enumerable');
+assert.sameValue(fooDescrip.writable, false, 'fooDescrip.writable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/8.12.9-9-c-i_2.js b/js/src/tests/test262/built-ins/Object/defineProperty/8.12.9-9-c-i_2.js
new file mode 100644
index 0000000000..76eb3119b6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/8.12.9-9-c-i_2.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.9-9-c-i_2
+description: >
+ Redefine a configurable accessor property to be a data property on
+ a non-extensible object
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo",
+{
+ get: function() {
+ return 5;
+ },
+ configurable: true
+});
+Object.preventExtensions(o);
+Object.defineProperty(o, "foo",
+{
+ value: "hello",
+ writable: true
+});
+
+var fooDescrip = Object.getOwnPropertyDescriptor(o, "foo");
+
+assert.sameValue(o.foo, "hello", 'o.foo');
+assert.sameValue(fooDescrip.get, undefined, 'fooDescrip.get');
+assert.sameValue(fooDescrip.set, undefined, 'fooDescrip.set');
+assert.sameValue(fooDescrip.value, "hello", 'fooDescrip.value');
+assert.sameValue(fooDescrip.configurable, true, 'fooDescrip.configurable');
+assert.sameValue(fooDescrip.enumerable, false, 'fooDescrip.enumerable');
+assert.sameValue(fooDescrip.writable, true, 'fooDescrip.writable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/S15.2.3.6_A1.js b/js/src/tests/test262/built-ins/Object/defineProperty/S15.2.3.6_A1.js
new file mode 100644
index 0000000000..e57b9345ff
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/S15.2.3.6_A1.js
@@ -0,0 +1,38 @@
+// Copyright 2011 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ If a particular API exists (document.createElement, as happens to
+ exist in a browser environment), check if the form objects it makes
+ obey the constraints that even host objects must obey. In this
+ case, that if defineProperty seems to have successfully installed a
+ non-configurable getter, that it is still there.
+es5id: 15.2.3.6_A1
+description: Do getters on HTMLFormElements disappear?
+---*/
+
+function getter() {
+ return 'gotten';
+}
+
+if (typeof document !== 'undefined' &&
+ typeof document.createElement === 'function') {
+ var f = document.createElement("form");
+ var refused = false;
+ try {
+ Object.defineProperty(f, 'foo', {
+ get: getter,
+ set: void 0
+ });
+ } catch (err) {
+ // A host object may refuse to install the getter
+ refused = true;
+ }
+ if (!refused) {
+ var desc = Object.getOwnPropertyDescriptor(f, 'foo');
+ assert.sameValue(desc.get, getter, 'The value of desc.get is expected to equal the value of getter');
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/S15.2.3.6_A2.js b/js/src/tests/test262/built-ins/Object/defineProperty/S15.2.3.6_A2.js
new file mode 100644
index 0000000000..ea75252e6d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/S15.2.3.6_A2.js
@@ -0,0 +1,26 @@
+// Copyright 2011 Google Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.6_A2
+description: >
+ Checks if an inherited accessor property appears to be an own
+ property.
+---*/
+
+var base = {};
+var derived = Object.create(base);
+
+function getter() {
+ return 'gotten';
+}
+Object.defineProperty(base, 'foo', {
+ get: getter
+});
+
+assert(
+ !derived.hasOwnProperty('foo'),
+ 'The value of !derived.hasOwnProperty("foo") is expected to be true'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/browser.js b/js/src/tests/test262/built-ins/Object/defineProperty/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/name.js b/js/src/tests/test262/built-ins/Object/defineProperty/name.js
new file mode 100644
index 0000000000..93e3066236
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/name.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 19.1.2.4
+description: >
+ Object.defineProperty.name is "defineProperty".
+info: |
+ Object.defineProperty ( O, P, Attributes )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.defineProperty.name, "defineProperty");
+
+verifyNotEnumerable(Object.defineProperty, "name");
+verifyNotWritable(Object.defineProperty, "name");
+verifyConfigurable(Object.defineProperty, "name");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/defineProperty/not-a-constructor.js
new file mode 100644
index 0000000000..8c49a7085c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.defineProperty does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(Object.defineProperty),
+ false,
+ 'isConstructor(Object.defineProperty) must return false'
+);
+
+assert.throws(TypeError, () => {
+ new Object.defineProperty({}, '', {});
+}, '`new Object.defineProperty({}, \'\', {})` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-bigint.js b/js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-bigint.js
new file mode 100644
index 0000000000..d9b55b268f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-bigint.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.defineproperty
+description: >
+ Property description must be an object (bigint)
+info: |
+ Object.defineProperty ( O, P, Attributes )
+
+ ...
+ Let desc be ? ToPropertyDescriptor(Attributes).
+ ...
+
+ ToPropertyDescriptor ( Obj )
+
+ If Type(Obj) is not Object, throw a TypeError exception.
+ ...
+features: [BigInt]
+---*/
+
+assert.throws(TypeError, () => {
+ Object.defineProperty({}, 'a', 0n);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-false.js b/js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-false.js
new file mode 100644
index 0000000000..801a934006
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-false.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.defineproperty
+description: >
+ Property description must be an object (false)
+info: |
+ ObjectDefineProperties ( O, Properties )
+
+ ...
+ For each element nextKey of keys, do
+ Let propDesc be ? props.[[GetOwnProperty]](nextKey).
+ If propDesc is not undefined and propDesc.[[Enumerable]] is true, then
+ Let descObj be ? Get(props, nextKey).
+ Let desc be ? ToPropertyDescriptor(descObj).
+ ...
+
+ ToPropertyDescriptor ( Obj )
+
+ If Type(Obj) is not Object, throw a TypeError exception.
+ ...
+---*/
+
+assert.throws(TypeError, () => {
+ Object.defineProperty({}, 'a', false);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-null.js b/js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-null.js
new file mode 100644
index 0000000000..21daf0d268
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-null.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.defineproperty
+description: >
+ Property description must be an object (null)
+info: |
+ ObjectDefineProperties ( O, Properties )
+
+ ...
+ For each element nextKey of keys, do
+ Let propDesc be ? props.[[GetOwnProperty]](nextKey).
+ If propDesc is not undefined and propDesc.[[Enumerable]] is true, then
+ Let descObj be ? Get(props, nextKey).
+ Let desc be ? ToPropertyDescriptor(descObj).
+ ...
+
+ ToPropertyDescriptor ( Obj )
+
+ If Type(Obj) is not Object, throw a TypeError exception.
+ ...
+---*/
+
+assert.throws(TypeError, () => {
+ Object.defineProperty({}, 'a', null);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-number.js b/js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-number.js
new file mode 100644
index 0000000000..f9339187d0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-number.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.defineproperty
+description: >
+ Property description must be an object (number)
+info: |
+ ObjectDefineProperties ( O, Properties )
+
+ ...
+ For each element nextKey of keys, do
+ Let propDesc be ? props.[[GetOwnProperty]](nextKey).
+ If propDesc is not undefined and propDesc.[[Enumerable]] is true, then
+ Let descObj be ? Get(props, nextKey).
+ Let desc be ? ToPropertyDescriptor(descObj).
+ ...
+
+ ToPropertyDescriptor ( Obj )
+
+ If Type(Obj) is not Object, throw a TypeError exception.
+ ...
+---*/
+
+assert.throws(TypeError, () => {
+ Object.defineProperty({}, 'a', 1);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-string.js b/js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-string.js
new file mode 100644
index 0000000000..953c60f41f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-string.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.defineproperty
+description: >
+ Property description must be an object (string)
+info: |
+ ObjectDefineProperties ( O, Properties )
+
+ ...
+ For each element nextKey of keys, do
+ Let propDesc be ? props.[[GetOwnProperty]](nextKey).
+ If propDesc is not undefined and propDesc.[[Enumerable]] is true, then
+ Let descObj be ? Get(props, nextKey).
+ Let desc be ? ToPropertyDescriptor(descObj).
+ ...
+
+ ToPropertyDescriptor ( Obj )
+
+ If Type(Obj) is not Object, throw a TypeError exception.
+ ...
+---*/
+
+assert.throws(TypeError, () => {
+ Object.defineProperty({}, 'a', '');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-symbol.js b/js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-symbol.js
new file mode 100644
index 0000000000..b1c491dd56
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-symbol.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.defineproperty
+description: >
+ Property description must be an object (symbol)
+info: |
+ ObjectDefineProperties ( O, Properties )
+
+ ...
+ For each element nextKey of keys, do
+ Let propDesc be ? props.[[GetOwnProperty]](nextKey).
+ If propDesc is not undefined and propDesc.[[Enumerable]] is true, then
+ Let descObj be ? Get(props, nextKey).
+ Let desc be ? ToPropertyDescriptor(descObj).
+ ...
+
+ ToPropertyDescriptor ( Obj )
+
+ If Type(Obj) is not Object, throw a TypeError exception.
+ ...
+features: [Symbol]
+---*/
+
+assert.throws(TypeError, () => {
+ Object.defineProperty({}, 'a', Symbol());
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-true.js b/js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-true.js
new file mode 100644
index 0000000000..7c96153db7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-true.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.defineproperty
+description: >
+ Property description must be an object (true)
+info: |
+ ObjectDefineProperties ( O, Properties )
+
+ ...
+ For each element nextKey of keys, do
+ Let propDesc be ? props.[[GetOwnProperty]](nextKey).
+ If propDesc is not undefined and propDesc.[[Enumerable]] is true, then
+ Let descObj be ? Get(props, nextKey).
+ Let desc be ? ToPropertyDescriptor(descObj).
+ ...
+
+ ToPropertyDescriptor ( Obj )
+
+ If Type(Obj) is not Object, throw a TypeError exception.
+ ...
+---*/
+
+assert.throws(TypeError, () => {
+ Object.defineProperty({}, 'a', true);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-undefined.js b/js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-undefined.js
new file mode 100644
index 0000000000..8dc081ebd3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/property-description-must-be-an-object-not-undefined.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.defineproperty
+description: >
+ Property description must be an object (undefined)
+info: |
+ ObjectDefineProperties ( O, Properties )
+
+ ...
+ For each element nextKey of keys, do
+ Let propDesc be ? props.[[GetOwnProperty]](nextKey).
+ If propDesc is not undefined and propDesc.[[Enumerable]] is true, then
+ Let descObj be ? Get(props, nextKey).
+ Let desc be ? ToPropertyDescriptor(descObj).
+ ...
+
+ ToPropertyDescriptor ( Obj )
+
+ If Type(Obj) is not Object, throw a TypeError exception.
+ ...
+---*/
+
+assert.throws(TypeError, () => {
+ Object.defineProperty({}, 'a', undefined);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/redefine-length-with-various-values-and-configurable-true.js b/js/src/tests/test262/built-ins/Object/defineProperty/redefine-length-with-various-values-and-configurable-true.js
new file mode 100644
index 0000000000..efb7dcf9be
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/redefine-length-with-various-values-and-configurable-true.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-array-exotic-objects-defineownproperty-p-desc
+description: >
+ Redefining "length" to `configurable: true` throws a TypeError exception
+info: |
+ ArraySetLength ( A, Desc )
+
+ ValidateAndApplyPropertyDescriptor ( O, P, extensible, Desc, current )
+---*/
+
+let a = [1];
+
+assert.throws(TypeError, () => {
+ Object.defineProperty(a, "length", {
+ configurable: true
+ });
+});
+assert.throws(TypeError, () => {
+ Object.defineProperty(a, "length", {
+ value: 1,
+ configurable: true
+ });
+});
+assert.throws(TypeError, () => {
+ Object.defineProperty(a, "length", {
+ value: 2,
+ configurable: true
+ });
+});
+assert.throws(TypeError, () => {
+ Object.defineProperty(a, "length", {
+ value: 3,
+ configurable: true
+ });
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/shell.js b/js/src/tests/test262/built-ins/Object/defineProperty/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/symbol-data-property-configurable.js b/js/src/tests/test262/built-ins/Object/defineProperty/symbol-data-property-configurable.js
new file mode 100644
index 0000000000..b0b381fb8f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/symbol-data-property-configurable.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2013 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.4
+description: >
+ Symbol used as property for configurable data property definition
+features: [Symbol]
+includes: [propertyHelper.js]
+---*/
+var sym = Symbol();
+var obj = {};
+
+
+Object.defineProperty(obj, sym, {
+ value: 1,
+ configurable: true
+});
+
+assert.sameValue(sym in obj, true, "The result of `sym in obj` is `true`");
+verifyProperty(obj, sym, {
+ value: 1,
+ configurable: true,
+ writable: false,
+ enumerable: false,
+});
+
+assert.sameValue(
+ Object.prototype.propertyIsEnumerable.call(obj, sym),
+ false,
+ "`Object.prototype.propertyIsEnumerable.call(obj, sym)` returns `false`"
+);
+
+assert.sameValue(delete obj[sym], true, "The result of `delete obj[sym]` is `true`");
+
+assert.sameValue(
+ Object.getOwnPropertyDescriptor(obj, sym),
+ undefined,
+ "`Object.getOwnPropertyDescriptor(obj, sym)` returns `undefined`"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/symbol-data-property-default-non-strict.js b/js/src/tests/test262/built-ins/Object/defineProperty/symbol-data-property-default-non-strict.js
new file mode 100644
index 0000000000..ce9d9cc91f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/symbol-data-property-default-non-strict.js
@@ -0,0 +1,45 @@
+// Copyright (C) 2013 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.4
+description: >
+ Symbol used as property for property definition
+flags: [noStrict]
+features: [Symbol]
+includes: [propertyHelper.js]
+---*/
+var sym = Symbol();
+var obj = {};
+
+
+Object.defineProperty(obj, sym, {
+ value: 1,
+});
+
+assert.sameValue(sym in obj, true, "The result of `sym in obj` is `true`");
+verifyProperty(obj, sym, {
+ value: 1,
+ configurable: false,
+ writable: false,
+ enumerable: false,
+});
+
+assert.sameValue(
+ Object.prototype.propertyIsEnumerable.call(obj, sym),
+ false,
+ "`Object.prototype.propertyIsEnumerable.call(obj, sym)` returns `false`"
+);
+
+assert.sameValue(delete obj[sym], false, "The result of `delete obj[sym]` is `false`");
+
+assert.notSameValue(
+ Object.getOwnPropertyDescriptor(obj, sym),
+ undefined,
+ "`Object.getOwnPropertyDescriptor(obj, sym)` does not return `undefined`"
+);
+
+obj[sym] = 2;
+
+assert.sameValue(obj[sym], 1, "The value of `obj[sym]` is `1`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/symbol-data-property-default-strict-strict.js b/js/src/tests/test262/built-ins/Object/defineProperty/symbol-data-property-default-strict-strict.js
new file mode 100644
index 0000000000..9e6e7a4b81
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/symbol-data-property-default-strict-strict.js
@@ -0,0 +1,50 @@
+'use strict';
+// Copyright (C) 2013 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.4
+description: >
+ Symbol used as property for default data property definition
+flags: [onlyStrict]
+features: [Symbol]
+includes: [propertyHelper.js]
+---*/
+var sym = Symbol();
+var obj = {};
+
+
+Object.defineProperty(obj, sym, {
+ value: 1,
+});
+
+assert.sameValue(sym in obj, true, "The result of `sym in obj` is `true`");
+verifyProperty(obj, sym, {
+ value: 1,
+ configurable: false,
+ writable: false,
+ enumerable: false,
+});
+
+assert.sameValue(
+ Object.prototype.propertyIsEnumerable.call(obj, sym),
+ false,
+ "`Object.prototype.propertyIsEnumerable.call(obj, sym)` returns `false`"
+);
+
+assert.throws(TypeError, function() {
+ delete obj[sym];
+});
+
+assert.notSameValue(
+ Object.getOwnPropertyDescriptor(obj, sym),
+ undefined,
+ "`Object.getOwnPropertyDescriptor(obj, sym)` does not return `undefined`"
+);
+
+assert.throws(TypeError, function() {
+ obj[sym] = 2;
+});
+
+assert.sameValue(obj[sym], 1, "The value of `obj[sym]` is `1`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/defineProperty/symbol-data-property-writable.js b/js/src/tests/test262/built-ins/Object/defineProperty/symbol-data-property-writable.js
new file mode 100644
index 0000000000..1d8436bf15
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/defineProperty/symbol-data-property-writable.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2013 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.4
+description: >
+ Symbol used as property for writable data property definition
+features: [Symbol]
+includes: [propertyHelper.js]
+---*/
+var sym = Symbol();
+var obj = {};
+
+
+Object.defineProperty(obj, sym, {
+ value: 1,
+ writable: true
+});
+
+assert.sameValue(sym in obj, true, "The result of `sym in obj` is `true`");
+verifyProperty(obj, sym, {
+ value: 1,
+ configurable: false,
+ writable: true,
+ enumerable: false,
+});
+
+assert.sameValue(
+ Object.prototype.propertyIsEnumerable.call(obj, sym),
+ false,
+ "`Object.prototype.propertyIsEnumerable.call(obj, sym)` returns `false`"
+);
+
+obj[sym] = 2;
+
+assert.sameValue(obj[sym], 2, "The value of `obj[sym]` is `2`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/entries/browser.js b/js/src/tests/test262/built-ins/Object/entries/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/entries/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/entries/exception-during-enumeration.js b/js/src/tests/test262/built-ins/Object/entries/exception-during-enumeration.js
new file mode 100644
index 0000000000..ae746122f7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/entries/exception-during-enumeration.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.entries
+description: Object.entries should terminate if getting a value throws an exception
+author: Jordan Harband
+---*/
+
+var trappedKey = {
+ get a() {
+ throw new RangeError('This error should be re-thrown');
+ },
+ get b() {
+ throw new Test262Error('Should not try to get the second element');
+ }
+};
+
+assert.throws(RangeError, function() {
+ Object.entries(trappedKey);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/entries/exception-not-object-coercible.js b/js/src/tests/test262/built-ins/Object/entries/exception-not-object-coercible.js
new file mode 100644
index 0000000000..6efcfa500c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/entries/exception-not-object-coercible.js
@@ -0,0 +1,18 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.entries
+description: Object.entries should fail if given a null or undefined value
+author: Jordan Harband
+---*/
+
+assert.throws(TypeError, function() {
+ Object.entries(null);
+});
+
+assert.throws(TypeError, function() {
+ Object.entries(undefined);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/entries/function-length.js b/js/src/tests/test262/built-ins/Object/entries/function-length.js
new file mode 100644
index 0000000000..6510ac12b6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/entries/function-length.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.entries
+description: Object.entries should have length 1
+author: Jordan Harband
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.entries.length, 1, 'Expected Object.entries.length to be 1');
+
+verifyNotEnumerable(Object.entries, 'length');
+verifyNotWritable(Object.entries, 'length');
+verifyConfigurable(Object.entries, 'length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/entries/function-name.js b/js/src/tests/test262/built-ins/Object/entries/function-name.js
new file mode 100644
index 0000000000..ddc50048d8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/entries/function-name.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.entries
+description: Object.entries should have name property with value 'entries'
+author: Jordan Harband
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(
+ Object.entries.name,
+ 'entries',
+ 'Expected Object.entries.name to be "entries"'
+);
+
+verifyNotEnumerable(Object.entries, 'name');
+verifyNotWritable(Object.entries, 'name');
+verifyConfigurable(Object.entries, 'name');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/entries/function-property-descriptor.js b/js/src/tests/test262/built-ins/Object/entries/function-property-descriptor.js
new file mode 100644
index 0000000000..a1ed98ba44
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/entries/function-property-descriptor.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.entries
+description: Object.entries should be writable, non-enumerable, and configurable
+author: Jordan Harband
+includes: [propertyHelper.js]
+---*/
+
+verifyNotEnumerable(Object, 'entries');
+verifyWritable(Object, 'entries');
+verifyConfigurable(Object, 'entries');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/entries/getter-adding-key.js b/js/src/tests/test262/built-ins/Object/entries/getter-adding-key.js
new file mode 100644
index 0000000000..0da05996f8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/entries/getter-adding-key.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.entries
+description: Object.entries does not see a new element added by a getter that is hit during iteration
+author: Jordan Harband
+---*/
+
+var bAddsC = {
+ a: 'A',
+ get b() {
+ this.c = 'C';
+ return 'B';
+ }
+};
+
+var result = Object.entries(bAddsC);
+
+assert.sameValue(Array.isArray(result), true, 'result is an array');
+assert.sameValue(result.length, 2, 'result has 2 items');
+
+assert.sameValue(Array.isArray(result[0]), true, 'first entry is an array');
+assert.sameValue(Array.isArray(result[1]), true, 'second entry is an array');
+
+assert.sameValue(result[0][0], 'a', 'first entry has key "a"');
+assert.sameValue(result[0][1], 'A', 'first entry has value "A"');
+assert.sameValue(result[1][0], 'b', 'second entry has key "b"');
+assert.sameValue(result[1][1], 'B', 'second entry has value "B"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/entries/getter-making-future-key-nonenumerable.js b/js/src/tests/test262/built-ins/Object/entries/getter-making-future-key-nonenumerable.js
new file mode 100644
index 0000000000..0438bfbc05
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/entries/getter-making-future-key-nonenumerable.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.entries
+description: Object.entries does not see an element made non-enumerable by a getter that is hit during iteration
+author: Jordan Harband
+---*/
+
+var bDeletesC = {
+ a: 'A',
+ get b() {
+ Object.defineProperty(this, 'c', {
+ enumerable: false
+ });
+ return 'B';
+ },
+ c: 'C'
+};
+
+var result = Object.entries(bDeletesC);
+
+assert.sameValue(Array.isArray(result), true, 'result is an array');
+assert.sameValue(result.length, 2, 'result has 2 items');
+
+assert.sameValue(Array.isArray(result[0]), true, 'first entry is an array');
+assert.sameValue(Array.isArray(result[1]), true, 'second entry is an array');
+
+assert.sameValue(result[0][0], 'a', 'first entry has key "a"');
+assert.sameValue(result[0][1], 'A', 'first entry has value "A"');
+assert.sameValue(result[1][0], 'b', 'second entry has key "b"');
+assert.sameValue(result[1][1], 'B', 'second entry has value "B"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/entries/getter-removing-future-key.js b/js/src/tests/test262/built-ins/Object/entries/getter-removing-future-key.js
new file mode 100644
index 0000000000..71ecc6cb67
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/entries/getter-removing-future-key.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.entries
+description: Object.entries does not see an element removed by a getter that is hit during iteration
+author: Jordan Harband
+---*/
+
+var bDeletesC = {
+ a: 'A',
+ get b() {
+ delete this.c;
+ return 'B';
+ },
+ c: 'C'
+};
+
+var result = Object.entries(bDeletesC);
+
+assert.sameValue(Array.isArray(result), true, 'result is an array');
+assert.sameValue(result.length, 2, 'result has 2 items');
+
+assert.sameValue(Array.isArray(result[0]), true, 'first entry is an array');
+assert.sameValue(Array.isArray(result[1]), true, 'second entry is an array');
+
+assert.sameValue(result[0][0], 'a', 'first entry has key "a"');
+assert.sameValue(result[0][1], 'A', 'first entry has value "A"');
+assert.sameValue(result[1][0], 'b', 'second entry has key "b"');
+assert.sameValue(result[1][1], 'B', 'second entry has value "B"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/entries/inherited-properties-omitted.js b/js/src/tests/test262/built-ins/Object/entries/inherited-properties-omitted.js
new file mode 100644
index 0000000000..1a609f9899
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/entries/inherited-properties-omitted.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.entries
+description: Object.entries does not see inherited properties.
+author: Jordan Harband
+---*/
+
+var F = function G() {};
+F.prototype.a = {};
+F.prototype.b = {};
+
+var f = new F();
+f.b = {}; // shadow the prototype
+f.c = {}; // solely an own property
+
+var result = Object.entries(f);
+
+assert.sameValue(Array.isArray(result), true, 'result is an array');
+assert.sameValue(result.length, 2, 'result has 2 items');
+
+assert.sameValue(Array.isArray(result[0]), true, 'first entry is an array');
+assert.sameValue(Array.isArray(result[1]), true, 'second entry is an array');
+
+assert.sameValue(result[0][0], 'b', 'first entry has key "b"');
+assert.sameValue(result[0][1], f.b, 'first entry has value f.b');
+assert.sameValue(result[1][0], 'c', 'second entry has key "c"');
+assert.sameValue(result[1][1], f.c, 'second entry has value f.c');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/entries/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/entries/not-a-constructor.js
new file mode 100644
index 0000000000..cab5f1d2e6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/entries/not-a-constructor.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.entries does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(isConstructor(Object.entries), false, 'isConstructor(Object.entries) must return false');
+
+assert.throws(TypeError, () => {
+ new Object.entries({});
+}, '`new Object.entries({})` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/entries/observable-operations.js b/js/src/tests/test262/built-ins/Object/entries/observable-operations.js
new file mode 100644
index 0000000000..bf7ad86bf6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/entries/observable-operations.js
@@ -0,0 +1,46 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.entries
+description: Object.entries should perform observable operations in the correct order
+author: Jordan Harband
+features: [Proxy]
+includes: [proxyTrapsHelper.js]
+---*/
+
+var log = "";
+var object = {
+ a: 0,
+ b: 0,
+ c: 0
+};
+var handler = allowProxyTraps({
+ get: function(target, propertyKey, receiver) {
+ assert.sameValue(target, object, "get target");
+ assert.sameValue(receiver, proxy, "get receiver");
+ log += "|get:" + propertyKey;
+ return target[propertyKey];
+ },
+ getOwnPropertyDescriptor: function(target, propertyKey) {
+ assert.sameValue(target, object, "getOwnPropertyDescriptor");
+ log += "|getOwnPropertyDescriptor:" + propertyKey;
+ return Object.getOwnPropertyDescriptor(target, propertyKey);
+ },
+ ownKeys: function(target) {
+ assert.sameValue(target, object, "ownKeys");
+ log += "|ownKeys";
+ return Object.getOwnPropertyNames(target);
+ }
+});
+var check = allowProxyTraps({
+ get: function(target, propertyKey, receiver) {
+ assert(propertyKey in target, "handler check: " + propertyKey);
+ return target[propertyKey];
+ }
+});
+var proxy = new Proxy(object, new Proxy(handler, check));
+var result = Object.entries(proxy);
+assert.sameValue(log, "|ownKeys|getOwnPropertyDescriptor:a|get:a|getOwnPropertyDescriptor:b|get:b|getOwnPropertyDescriptor:c|get:c", log);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/entries/order-after-define-property-with-function.js b/js/src/tests/test262/built-ins/Object/entries/order-after-define-property-with-function.js
new file mode 100644
index 0000000000..f7e40bc7c3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/entries/order-after-define-property-with-function.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.entries
+description: >
+ Property names are returned in ascending chronological order of creation
+ that is unaffected by [[DefineOwnProperty]].
+info: |
+ Object.entries ( O )
+
+ [...]
+ 2. Let nameList be ? EnumerableOwnPropertyNames(obj, key+value).
+ 3. Return CreateArrayFromList(nameList).
+
+ EnumerableOwnPropertyNames ( O, kind )
+
+ [...]
+ 2. Let ownKeys be ? O.[[OwnPropertyKeys]]().
+ [...]
+
+ OrdinaryOwnPropertyKeys ( O )
+
+ [...]
+ 3. For each own property key P of O that is a String but is not an array index,
+ in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ [...]
+ 5. Return keys.
+features: [arrow-function]
+includes: [compareArray.js]
+---*/
+
+var fn = () => {};
+fn.a = 1;
+Object.defineProperty(fn, "name", {enumerable: true});
+var fnKeys = Object.entries(fn).map(e => e[0]);
+assert.compareArray(fnKeys, ["name", "a"]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/entries/order-after-define-property.js b/js/src/tests/test262/built-ins/Object/entries/order-after-define-property.js
new file mode 100644
index 0000000000..e36e8f2df0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/entries/order-after-define-property.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.entries
+description: >
+ Property names are returned in ascending chronological order of creation
+ that is unaffected by [[DefineOwnProperty]].
+info: |
+ Object.entries ( O )
+
+ [...]
+ 2. Let nameList be ? EnumerableOwnPropertyNames(obj, key+value).
+ 3. Return CreateArrayFromList(nameList).
+
+ EnumerableOwnPropertyNames ( O, kind )
+
+ [...]
+ 2. Let ownKeys be ? O.[[OwnPropertyKeys]]().
+ [...]
+
+ OrdinaryOwnPropertyKeys ( O )
+
+ [...]
+ 3. For each own property key P of O that is a String but is not an array index,
+ in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ [...]
+ 5. Return keys.
+includes: [compareArray.js]
+---*/
+
+var obj = {};
+obj.a = 1;
+obj.b = 2;
+Object.defineProperty(obj, "a", {writable: false});
+var objKeys = Object.entries(obj).map(e => e[0]);
+assert.compareArray(objKeys, ["a", "b"]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/entries/primitive-booleans.js b/js/src/tests/test262/built-ins/Object/entries/primitive-booleans.js
new file mode 100644
index 0000000000..c1e74354bf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/entries/primitive-booleans.js
@@ -0,0 +1,20 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.entries
+description: Object.entries accepts boolean primitives.
+author: Jordan Harband
+---*/
+
+var trueResult = Object.entries(true);
+
+assert.sameValue(Array.isArray(trueResult), true, 'trueResult is an array');
+assert.sameValue(trueResult.length, 0, 'trueResult has 0 items');
+
+var falseResult = Object.entries(false);
+
+assert.sameValue(Array.isArray(falseResult), true, 'falseResult is an array');
+assert.sameValue(falseResult.length, 0, 'falseResult has 0 items');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/entries/primitive-numbers.js b/js/src/tests/test262/built-ins/Object/entries/primitive-numbers.js
new file mode 100644
index 0000000000..651d23436a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/entries/primitive-numbers.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.entries
+description: Object.entries accepts number primitives.
+author: Jordan Harband
+---*/
+
+assert.sameValue(Object.entries(0).length, 0, '0 has zero entries');
+assert.sameValue(Object.entries(-0).length, 0, '-0 has zero entries');
+assert.sameValue(Object.entries(Infinity).length, 0, 'Infinity has zero entries');
+assert.sameValue(Object.entries(-Infinity).length, 0, '-Infinity has zero entries');
+assert.sameValue(Object.entries(NaN).length, 0, 'NaN has zero entries');
+assert.sameValue(Object.entries(Math.PI).length, 0, 'Math.PI has zero entries');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/entries/primitive-strings.js b/js/src/tests/test262/built-ins/Object/entries/primitive-strings.js
new file mode 100644
index 0000000000..4368581531
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/entries/primitive-strings.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.entries
+description: Object.entries accepts string primitives.
+author: Jordan Harband
+---*/
+
+var result = Object.entries('abc');
+
+assert.sameValue(Array.isArray(result), true, 'result is an array');
+assert.sameValue(result.length, 3, 'result has 3 items');
+
+assert.sameValue(result[0][0], '0', 'first entry has key "0"');
+assert.sameValue(result[0][1], 'a', 'first entry has value "a"');
+assert.sameValue(result[1][0], '1', 'second entry has key "1"');
+assert.sameValue(result[1][1], 'b', 'second entry has value "b"');
+assert.sameValue(result[2][0], '2', 'third entry has key "2"');
+assert.sameValue(result[2][1], 'c', 'third entry has value "c"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/entries/primitive-symbols.js b/js/src/tests/test262/built-ins/Object/entries/primitive-symbols.js
new file mode 100644
index 0000000000..975fed35c1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/entries/primitive-symbols.js
@@ -0,0 +1,16 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.entries
+description: Object.entries accepts Symbol primitives.
+author: Jordan Harband
+features: [Symbol]
+---*/
+
+var result = Object.entries(Symbol());
+
+assert.sameValue(Array.isArray(result), true, 'result is an array');
+assert.sameValue(result.length, 0, 'result has 0 items');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/entries/return-order.js b/js/src/tests/test262/built-ins/Object/entries/return-order.js
new file mode 100644
index 0000000000..a52ef36b0e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/entries/return-order.js
@@ -0,0 +1,43 @@
+// Copyright 2019 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.entries
+description: Object.entries enumeration order
+features: [for-in-order]
+includes: [compareArray.js]
+---*/
+
+var o = {
+ p1: 'p1',
+ p2: 'p2',
+ p3: 'p3',
+};
+
+// This getter will be triggered during enumeration, but the property it adds should not be enumerated.
+Object.defineProperty(o, 'add', {
+ enumerable: true,
+ get: function () {
+ o.extra = 'extra';
+ return 'add';
+ }
+});
+
+o.p4 = 'p4';
+
+o[2] = '2';
+o[0] = '0';
+o[1] = '1';
+
+delete o.p1;
+delete o.p3;
+o.p1 = 'p1';
+
+
+var actual = Object.entries(o).map(function(e) { return e[0]; });
+
+var expected = ['0', '1', '2', 'p2', 'add', 'p4', 'p1'];
+
+assert.compareArray(actual, expected);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/entries/shell.js b/js/src/tests/test262/built-ins/Object/entries/shell.js
new file mode 100644
index 0000000000..bc72493f03
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/entries/shell.js
@@ -0,0 +1,33 @@
+// GENERATED, DO NOT EDIT
+// file: proxyTrapsHelper.js
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: |
+ Used to assert the correctness of object behavior in the presence
+ and context of Proxy objects.
+defines: [allowProxyTraps]
+---*/
+
+function allowProxyTraps(overrides) {
+ function throwTest262Error(msg) {
+ return function () { throw new Test262Error(msg); };
+ }
+ if (!overrides) { overrides = {}; }
+ return {
+ getPrototypeOf: overrides.getPrototypeOf || throwTest262Error('[[GetPrototypeOf]] trap called'),
+ setPrototypeOf: overrides.setPrototypeOf || throwTest262Error('[[SetPrototypeOf]] trap called'),
+ isExtensible: overrides.isExtensible || throwTest262Error('[[IsExtensible]] trap called'),
+ preventExtensions: overrides.preventExtensions || throwTest262Error('[[PreventExtensions]] trap called'),
+ getOwnPropertyDescriptor: overrides.getOwnPropertyDescriptor || throwTest262Error('[[GetOwnProperty]] trap called'),
+ has: overrides.has || throwTest262Error('[[HasProperty]] trap called'),
+ get: overrides.get || throwTest262Error('[[Get]] trap called'),
+ set: overrides.set || throwTest262Error('[[Set]] trap called'),
+ deleteProperty: overrides.deleteProperty || throwTest262Error('[[Delete]] trap called'),
+ defineProperty: overrides.defineProperty || throwTest262Error('[[DefineOwnProperty]] trap called'),
+ enumerate: throwTest262Error('[[Enumerate]] trap called: this trap has been removed'),
+ ownKeys: overrides.ownKeys || throwTest262Error('[[OwnPropertyKeys]] trap called'),
+ apply: overrides.apply || throwTest262Error('[[Call]] trap called'),
+ construct: overrides.construct || throwTest262Error('[[Construct]] trap called')
+ };
+}
diff --git a/js/src/tests/test262/built-ins/Object/entries/symbols-omitted.js b/js/src/tests/test262/built-ins/Object/entries/symbols-omitted.js
new file mode 100644
index 0000000000..b69feeff35
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/entries/symbols-omitted.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.entries
+description: Object.entries does not include Symbol keys.
+author: Jordan Harband
+features: [Symbol]
+---*/
+
+var value = {};
+var enumSym = Symbol('enum');
+var nonEnumSym = Symbol('nonenum');
+var symValue = Symbol('value');
+
+var obj = {
+ key: symValue
+};
+obj[enumSym] = value;
+Object.defineProperty(obj, nonEnumSym, {
+ enumerable: false,
+ value: value
+});
+
+var result = Object.entries(obj);
+
+assert.sameValue(Array.isArray(result), true, 'result is an array');
+assert.sameValue(result.length, 1, 'result has 1 item');
+
+assert.sameValue(Array.isArray(result[0]), true, 'first entry is an array');
+
+assert.sameValue(result[0][0], 'key', 'first entry has key "key"');
+assert.sameValue(result[0][1], symValue, 'first entry has value `symValue`');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/entries/tamper-with-global-object.js b/js/src/tests/test262/built-ins/Object/entries/tamper-with-global-object.js
new file mode 100644
index 0000000000..150a4bf754
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/entries/tamper-with-global-object.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.entries
+description: >
+ Object.entries should not have its behavior impacted by modifications to the global property Object
+author: Jordan Harband
+---*/
+
+function fakeObject() {
+ throw new Test262Error('The overriden version of Object was called!');
+}
+fakeObject.entries = Object.entries;
+
+var global = Function('return this;')();
+global.Object = fakeObject;
+
+assert.sameValue(Object, fakeObject, 'Sanity check failed: could not modify the global Object');
+assert.sameValue(Object.entries(1).length, 0, 'Expected number primitive to have zero entries');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/entries/tamper-with-object-keys.js b/js/src/tests/test262/built-ins/Object/entries/tamper-with-object-keys.js
new file mode 100644
index 0000000000..31dc24ee57
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/entries/tamper-with-object-keys.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.entries
+description: >
+ Object.entries should not have its behavior impacted by modifications to Object.keys
+author: Jordan Harband
+---*/
+
+function fakeObjectKeys() {
+ throw new Test262Error('The overriden version of Object.keys was called!');
+}
+
+Object.keys = fakeObjectKeys;
+
+assert.sameValue(Object.keys, fakeObjectKeys, 'Sanity check failed: could not modify the global Object.keys');
+assert.sameValue(Object.entries({
+ a: 1
+}).length, 1, 'Expected object with 1 key to have 1 entry');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-0-1.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-0-1.js
new file mode 100644
index 0000000000..13824be466
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-0-1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-0-1
+description: Object.freeze must exist as a function
+---*/
+
+var f = Object.freeze;
+
+assert.sameValue(typeof(f), "function", 'typeof(f)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-0-2.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-0-2.js
new file mode 100644
index 0000000000..7d1a9d3f4e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-0-2.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-0-2
+description: Object.freeze must exist as a function taking 1 parameter
+---*/
+
+assert.sameValue(Object.freeze.length, 1, 'Object.freeze.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-1-1.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-1-1.js
new file mode 100644
index 0000000000..418c1eedf4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-1-1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-1-1
+description: >
+ Object.freeze does not throw TypeError if type of first param is
+ undefined
+---*/
+
+Object.freeze(undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-1-2.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-1-2.js
new file mode 100644
index 0000000000..98997a2183
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-1-2.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-1-2
+description: >
+ Object.freeze does not throw TypeError if type of first param is
+ null
+---*/
+
+Object.freeze(null);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-1-3.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-1-3.js
new file mode 100644
index 0000000000..39945d1f8e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-1-3.js
@@ -0,0 +1,14 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-1-3
+description: >
+ Object.freeze does not throw TypeError if type of first param is
+ boolean primitive
+---*/
+
+Object.freeze(false);
+Object.freeze(true);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-1-4.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-1-4.js
new file mode 100644
index 0000000000..4ba634df2e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-1-4.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-1-4
+description: >
+ Object.freeze does not throw TypeError if type of first param is
+ string primitive
+---*/
+
+Object.freeze("abc");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-1.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-1.js
new file mode 100644
index 0000000000..d5ebef77a6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-1
+description: >
+ Object.freeze does not throw TypeError if type of first param is
+ not Object
+---*/
+
+Object.freeze(0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-1.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-1.js
new file mode 100644
index 0000000000..f3bd2576e4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-1.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-1
+description: >
+ Object.freeze - extensible of 'O' is set as false even if 'O' has
+ no own property
+---*/
+
+var obj = {};
+
+Object.freeze(obj);
+
+assert.sameValue(Object.isExtensible(obj), false, 'Object.isExtensible(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-2.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-2.js
new file mode 100644
index 0000000000..2568b42bcb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-2.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-2
+description: Object.freeze - inherited data properties are not frozen
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "Father", {
+ value: 10,
+ configurable: true
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var child = new Con();
+Object.freeze(child);
+
+var beforeDeleted = proto.hasOwnProperty("Father");
+delete proto.Father;
+var afterDeleted = proto.hasOwnProperty("Father");
+
+assert(beforeDeleted, 'beforeDeleted !== true');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-3.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-3.js
new file mode 100644
index 0000000000..b319a9f7ba
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-3.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-3
+description: Object.freeze - inherited accessor properties are not frozen
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "Father", {
+ get: function() {
+ return 10;
+ },
+ configurable: true
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var child = new Con();
+Object.freeze(child);
+
+var beforeDeleted = proto.hasOwnProperty("Father");
+delete proto.Father;
+var afterDeleted = proto.hasOwnProperty("Father");
+
+assert(beforeDeleted, 'beforeDeleted !== true');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-4.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-4.js
new file mode 100644
index 0000000000..d1c0131160
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-4.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-4
+description: Object.freeze - Non-enumerable own properties of 'O' are frozen
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 10,
+ enumerable: false,
+ configurable: true
+});
+
+Object.freeze(obj);
+
+assert(obj.hasOwnProperty("foo"));
+verifyNotWritable(obj, "foo");
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-1.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-1.js
new file mode 100644
index 0000000000..a03d148d17
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-1.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-a-1
+description: Object.freeze - 'P' is own data property
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+obj.foo = 10; // default [[Configurable]] attribute value of foo: true
+
+Object.freeze(obj);
+
+verifyNotWritable(obj, "foo");
+verifyNotConfigurable(obj, "foo");
+
+assert.sameValue(obj.foo, 10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-10.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-10.js
new file mode 100644
index 0000000000..ac66e48f32
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-10.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-a-10
+description: >
+ Object.freeze - 'P' is own named property of an Array object that
+ uses Object's [[GetOwnProperty]]
+includes: [propertyHelper.js]
+---*/
+
+var arrObj = [];
+
+arrObj.foo = 10; // default [[Configurable]] attribute value of foo: true
+
+Object.freeze(arrObj);
+
+verifyNotWritable(arrObj, "foo");
+verifyNotConfigurable(arrObj, "foo");
+
+assert.sameValue(arrObj.foo, 10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-11.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-11.js
new file mode 100644
index 0000000000..b9db664525
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-11.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-a-11
+description: >
+ Object.freeze - 'P' is own index property of the Arguments object
+ that implements its own [[GetOwnProperty]]
+includes: [propertyHelper.js]
+---*/
+
+
+// default [[Configurable]] attribute value of "0": true
+var argObj = (function() {
+ return arguments;
+}(1, 2, 3));
+
+Object.freeze(argObj);
+
+var desc = Object.getOwnPropertyDescriptor(argObj, "0");
+
+verifyNotWritable(argObj, "0");
+verifyNotConfigurable(argObj, "0");
+assert.sameValue(argObj[0], 1);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-12.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-12.js
new file mode 100644
index 0000000000..1eb5dbbc11
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-12.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-a-12
+description: >
+ Object.freeze - 'P' is own index property of a String object that
+ implements its own [[GetOwnProperty]]
+includes: [propertyHelper.js]
+---*/
+
+
+// default [[Configurable]] attribute value of "0": true
+var strObj = new String("abc");
+
+Object.freeze(strObj);
+
+verifyNotWritable(strObj, "0");
+verifyNotConfigurable(strObj, "0");
+
+assert.sameValue(strObj[0], "a");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-13.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-13.js
new file mode 100644
index 0000000000..c4d1fa96be
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-13.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-a-13
+description: Object.freeze - 'P' is own index property of the Object
+includes: [propertyHelper.js]
+---*/
+
+
+// default [[Configurable]] attribute value of "0": true
+var obj = {
+ 0: 0,
+ 1: 1,
+ length: 2
+};
+
+Object.freeze(obj);
+
+verifyNotWritable(obj, "0");
+verifyNotConfigurable(obj, "0");
+
+assert.sameValue(obj[0], 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-14.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-14.js
new file mode 100644
index 0000000000..eecc860739
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-14.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-a-14
+description: >
+ Object.freeze - 'P' is own index property of an Array object that
+ uses Object's [[GetOwnProperty]]
+includes: [propertyHelper.js]
+---*/
+
+// default [[Configurable]] attribute value of "0": true
+var arrObj = [0, 1, 2];
+
+Object.freeze(arrObj);
+
+verifyNotWritable(arrObj, "0");
+verifyNotConfigurable(arrObj, "0");
+assert.sameValue(arrObj[0], 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-2.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-2.js
new file mode 100644
index 0000000000..3bf26de301
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-2.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-a-2
+description: >
+ Object.freeze - 'P' is own data property that overrides an
+ inherited data property
+includes: [propertyHelper.js]
+---*/
+
+
+var proto = {
+ foo: 0
+}; // default [[Configurable]] attribute value of foo: true
+
+var Con = function() {};
+Con.prototype = proto;
+
+var child = new Con();
+
+child.foo = 10; // default [[Configurable]] attribute value of foo: true
+
+Object.freeze(child);
+
+verifyNotWritable(child, "foo");
+verifyNotConfigurable(child, "foo");
+
+assert.sameValue(child.foo, 10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-3.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-3.js
new file mode 100644
index 0000000000..9e70497f78
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-3.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-a-3
+description: >
+ Object.freeze - 'P' is own data property that overrides an
+ inherited accessor property
+includes: [propertyHelper.js]
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "foo", {
+ get: function() {
+ return 0;
+ },
+ configurable: true
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var child = new Con();
+Object.defineProperty(child, "foo", {
+ value: 10,
+ configurable: true
+});
+
+Object.freeze(child);
+
+verifyNotWritable(child, "foo");
+verifyNotConfigurable(child, "foo");
+assert.sameValue(child.foo, 10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-4.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-4.js
new file mode 100644
index 0000000000..acdfed7f01
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-4.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-a-4
+description: Object.freeze - 'P' is own accessor property
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ get: function() {
+ return 10;
+ },
+ configurable: true
+});
+
+Object.freeze(obj);
+
+verifyNotConfigurable(obj, "foo");
+assert.sameValue(obj.foo, 10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-5.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-5.js
new file mode 100644
index 0000000000..00ff5bfc63
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-5.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-a-5
+description: >
+ Object.freeze - 'P' is own accessor property that overrides an
+ inherited data property
+includes: [propertyHelper.js]
+---*/
+
+
+var proto = {};
+
+proto.foo = 0; // default [[Configurable]] attribute value of foo: true
+
+var Con = function() {};
+Con.prototype = proto;
+
+var child = new Con();
+
+Object.defineProperty(child, "foo", {
+ get: function() {
+ return 10;
+ },
+ configurable: true
+});
+
+Object.freeze(child);
+
+verifyNotConfigurable(child, "foo");
+assert.sameValue(child.foo, 10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-6.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-6.js
new file mode 100644
index 0000000000..163d0a951e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-6.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-a-6
+description: >
+ Object.freeze - 'P' is own accessor property that overrides an
+ inherited accessor property
+includes: [propertyHelper.js]
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "foo", {
+ get: function() {
+ return 0;
+ },
+ configurable: true
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var child = new Con();
+
+Object.defineProperty(child, "foo", {
+ get: function() {
+ return 10;
+ },
+ configurable: true
+});
+
+Object.freeze(child);
+
+verifyNotConfigurable(child, "foo");
+assert.sameValue(child.foo, 10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-7.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-7.js
new file mode 100644
index 0000000000..c8de353b20
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-7.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-a-7
+description: >
+ Object.freeze - 'P' is own named property of an Arguments object
+ that implements its own [[GetOwnProperty]]
+includes: [propertyHelper.js]
+---*/
+
+var argObj = (function() {
+ return arguments;
+}());
+
+argObj.foo = 10; // default [[Configurable]] attribute value of foo: true
+
+Object.freeze(argObj);
+
+verifyNotWritable(argObj, "foo");
+verifyNotConfigurable(argObj, "foo");
+assert.sameValue(argObj.foo, 10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-8.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-8.js
new file mode 100644
index 0000000000..f930bdee5f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-8.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-a-8
+description: >
+ Object.freeze - 'P' is own named property of the String object
+ that implements its own [[GetOwnProperty]]
+includes: [propertyHelper.js]
+---*/
+
+var strObj = new String("abc");
+
+strObj.foo = 10; // default [[Configurable]] attribute value of foo: true
+
+Object.freeze(strObj);
+
+verifyNotWritable(strObj, "foo");
+verifyNotConfigurable(strObj, "foo");
+assert.sameValue(strObj.foo, 10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-9.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-9.js
new file mode 100644
index 0000000000..2d2c722646
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-a-9.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-a-9
+description: >
+ Object.freeze - 'P' is own property of the Function object that
+ uses Object's [[GetOwnProperty]]
+includes: [propertyHelper.js]
+---*/
+
+var funObj = function() {};
+
+funObj.foo = 10; // default [[Configurable]] attribute value of foo: true
+
+Object.freeze(funObj);
+
+verifyNotWritable(funObj, "foo");
+verifyNotConfigurable(funObj, "foo");
+
+assert.sameValue(funObj.foo, 10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-b-i-1.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-b-i-1.js
new file mode 100644
index 0000000000..4c6c953c7b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-b-i-1.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+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: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 10,
+ writable: true,
+ enumerable: true,
+ configurable: false
+});
+
+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) {
+ throw new Test262Error('Expected desc.writable === false, actually ' + desc.writable);
+}
+
+if (desc.configurable !== false) {
+ throw new Test262Error('Expected desc.configurable === false, actually ' + desc.configurable);
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-b-i-2.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-b-i-2.js
new file mode 100644
index 0000000000..2d8a00a53b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-b-i-2.js
@@ -0,0 +1,66 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-b-i-2
+description: >
+ Object.freeze - The [[Wrtiable]] attribute of all own data
+ property of 'O' is set to false while other attributes are
+ unchanged
+includes: [propertyHelper.js]
+---*/
+
+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) {
+ throw new Test262Error('Expected desc1.configurable === false, actually ' + desc1.configurable);
+}
+
+if (desc1.writable !== false) {
+ throw new Test262Error('Expected desc1.writable === false, actually ' + desc1.writable);
+}
+
+if (desc2.configurable !== false) {
+ throw new Test262Error('Expected desc2.configurable === false, actually ' + desc2.configurable);
+}
+
+if (desc2.writable !== false) {
+ throw new Test262Error('Expected desc2.writable === false, actually ' + desc2.writable);
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-c-1.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-c-1.js
new file mode 100644
index 0000000000..219519195c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-c-1.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-c-1
+description: >
+ Object.freeze - The [[Configurable]] attribute of own data
+ property of 'O' is set to false while other attributes are
+ unchanged
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: true
+});
+
+Object.freeze(obj);
+
+var desc = Object.getOwnPropertyDescriptor(obj, "foo");
+
+if (desc.configurable !== false) {
+ throw new Test262Error("Expected desc.configurable to be false, actually " + desc.configurable);
+}
+if (desc.writable !== false) {
+ throw new Test262Error("Expected desc.writable to be false, actually " + desc.writable);
+}
+
+verifyEqualTo(obj, "foo", 10);
+
+verifyNotWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-c-2.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-c-2.js
new file mode 100644
index 0000000000..af0797a00d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-c-2.js
@@ -0,0 +1,47 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-c-2
+description: >
+ Object.freeze - The [[Configurable]] attribute of own accessor
+ property of 'O' is set to false while other attributes are
+ unchanged
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+function get_func() {
+ return 10;
+}
+
+var set_funcCalled = false;
+
+function set_func() {
+ set_funcCalled = true;
+}
+
+Object.defineProperty(obj, "foo", {
+ get: get_func,
+ set: set_func,
+ enumerable: true,
+ configurable: true
+});
+
+Object.freeze(obj);
+
+assert(obj.hasOwnProperty("foo"));
+verifyNotConfigurable(obj, "foo");
+
+assert.sameValue(obj.foo, 10);
+
+obj.foo = 12;
+assert(set_funcCalled);
+
+verifyEnumerable(obj, "foo");
+
+var desc = Object.getOwnPropertyDescriptor(obj, "foo");
+assert.sameValue(desc.configurable, false);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-c-3.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-c-3.js
new file mode 100644
index 0000000000..24be086754
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-c-3.js
@@ -0,0 +1,70 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-c-3
+description: >
+ Object.freeze - The [[Configurable]] attribute of all own data
+ property of 'O' is set to false while other attributes are
+ unchanged
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+var resultSetFun = false;
+
+Object.defineProperty(obj, "foo1", {
+ value: 10,
+ writable: false,
+ enumerable: true,
+ configurable: true
+});
+
+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);
+
+verifyNotConfigurable(obj, "foo2");
+verifyEqualTo(obj, "foo2", 10);
+
+obj.foo2 = 12;
+if (!resultSetFun) {
+ throw new Test262Error('Expected obj["foo2"] set() to be called, but was not.');
+}
+
+if (!isEnumerable(obj, "foo2")) {
+ throw new Test262Error('Expected obj["foo2"] to be enumerable.');
+}
+
+var desc1 = Object.getOwnPropertyDescriptor(obj, "foo1");
+if (desc1.configurable || desc1.writable) {
+ throw new Test262Error('Expected obj["foo1"] to be non-writable, non-configurable; actually ' + JSON.stringify(desc1));
+}
+
+var desc2 = Object.getOwnPropertyDescriptor(obj, "foo2");
+if (desc2.configurable || desc2.writable) {
+ throw new Test262Error('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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-c-4.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-c-4.js
new file mode 100644
index 0000000000..49390cbf84
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-c-4.js
@@ -0,0 +1,68 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-c-4
+description: >
+ Object.freeze - all own properties of 'O' are not writable and not
+ configurable
+includes: [propertyHelper.js]
+---*/
+
+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) {
+ throw new Test262Error('Expected obj["foo2"] set() to be called, but was not.');
+}
+
+verifyEnumerable(obj, "foo2");
+
+var desc1 = Object.getOwnPropertyDescriptor(obj, "foo1");
+if (desc1.configurable || desc1.writable) {
+ throw new Test262Error('Expected obj["foo1"] to be non-writable, non-configurable; actually ' + JSON.stringify(desc1));
+}
+
+var desc2 = Object.getOwnPropertyDescriptor(obj, "foo2");
+if (desc2.configurable || desc2.writable) {
+ throw new Test262Error('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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-1.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-1.js
new file mode 100644
index 0000000000..c4f2659e2e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-1.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-d-1
+description: Object.freeze - 'O' is a Function object
+---*/
+
+var funObj = function() {};
+
+Object.freeze(funObj);
+
+assert(Object.isFrozen(funObj), 'Object.isFrozen(funObj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-2.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-2.js
new file mode 100644
index 0000000000..1bf24a57b8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-2.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-d-2
+description: Object.freeze - 'O' is an Array object
+---*/
+
+var arrObj = [0, 1];
+
+Object.freeze(arrObj);
+
+assert(Object.isFrozen(arrObj), 'Object.isFrozen(arrObj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-3.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-3.js
new file mode 100644
index 0000000000..ba368c60c3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-3.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-d-3
+description: Object.freeze - 'O' is a String object
+---*/
+
+var strObj = new String("a");
+
+Object.freeze(strObj);
+
+assert(Object.isFrozen(strObj), 'Object.isFrozen(strObj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-4.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-4.js
new file mode 100644
index 0000000000..de82e4228d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-4.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-d-4
+description: Object.freeze - 'O' is a Boolean object
+---*/
+
+var boolObj = new Boolean(false);
+
+Object.freeze(boolObj);
+
+assert(Object.isFrozen(boolObj), 'Object.isFrozen(boolObj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-5.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-5.js
new file mode 100644
index 0000000000..82f44bc68f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-5.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-d-5
+description: Object.freeze - 'O' is a Number object
+---*/
+
+var numObj = new Number(3);
+
+Object.freeze(numObj);
+
+assert(Object.isFrozen(numObj), 'Object.isFrozen(numObj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-6.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-6.js
new file mode 100644
index 0000000000..1578c057a2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-6.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-d-6
+description: Object.freeze - 'O' is a Date object
+---*/
+
+var dateObj = new Date();
+
+Object.freeze(dateObj);
+
+assert(Object.isFrozen(dateObj), 'Object.isFrozen(dateObj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-7.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-7.js
new file mode 100644
index 0000000000..2665520211
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-7.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-d-7
+description: Object.freeze - 'O' is a RegExp object
+---*/
+
+var regObj = new RegExp();
+
+Object.freeze(regObj);
+
+assert(Object.isFrozen(regObj), 'Object.isFrozen(regObj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-8.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-8.js
new file mode 100644
index 0000000000..aaf3b8f901
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-8.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-d-8
+description: Object.freeze - 'O' is an Error object
+---*/
+
+var errObj = new SyntaxError();
+
+Object.freeze(errObj);
+
+assert(Object.isFrozen(errObj), 'Object.isFrozen(errObj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-9.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-9.js
new file mode 100644
index 0000000000..62cf0f48e5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-2-d-9.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-2-d-9
+description: Object.freeze - 'O' is the Arguments object
+---*/
+
+var argObj = (function() {
+ return arguments;
+}());
+
+Object.freeze(argObj);
+
+assert(Object.isFrozen(argObj), 'Object.isFrozen(argObj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-3-1.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-3-1.js
new file mode 100644
index 0000000000..262adea1c2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-3-1.js
@@ -0,0 +1,14 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-3-1
+description: Object.freeze - returned object is not extensible
+---*/
+
+var obj = {};
+Object.freeze(obj);
+
+assert.sameValue(Object.isExtensible(obj), false, 'Object.isExtensible(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-4-1.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-4-1.js
new file mode 100644
index 0000000000..32cf02a38f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-4-1.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-4-1
+description: Object.freeze - 'O' is sealed already
+---*/
+
+var obj = {};
+
+obj.foo = 10; // default value of attributes: writable: true, enumerable: true
+
+Object.seal(obj);
+
+Object.freeze(obj);
+
+assert(Object.isFrozen(obj), 'Object.isFrozen(obj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-4-2.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-4-2.js
new file mode 100644
index 0000000000..c58b336b8b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-4-2.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-4-2
+description: Object.freeze - 'O' is frozen already
+---*/
+
+var obj = {};
+
+obj.foo = 10; // default value of attributes: writable: true, enumerable: true
+
+Object.freeze(obj);
+
+Object.freeze(obj);
+
+assert(Object.isFrozen(obj), 'Object.isFrozen(obj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-4-3.js b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-4-3.js
new file mode 100644
index 0000000000..e6341d163d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/15.2.3.9-4-3.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.9-4-3
+description: Object.freeze - the extensions of 'O' is prevented already
+---*/
+
+var obj = {};
+
+obj.foo = 10; // default value of attributes: writable: true, enumerable: true
+
+Object.preventExtensions(obj);
+
+Object.freeze(obj);
+
+assert(Object.isFrozen(obj), 'Object.isFrozen(obj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/abrupt-completion.js b/js/src/tests/test262/built-ins/Object/freeze/abrupt-completion.js
new file mode 100644
index 0000000000..fe2dc37215
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/abrupt-completion.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.freeze
+description: >
+ O.[[PreventExtensions]]() returns abrupt completion.
+info: |
+ Object.freeze ( O )
+
+ ...
+ 2. Let status be ? SetIntegrityLevel(O, frozen).
+
+ SetIntegrityLevel ( O, level )
+
+ ...
+ 3. Let status be ? O.[[PreventExtensions]]().
+features: [Proxy]
+---*/
+
+var p = new Proxy({}, {
+ preventExtensions: function() {
+ throw new Test262Error();
+ },
+});
+
+assert.throws(Test262Error, function() {
+ Object.freeze(p);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/browser.js b/js/src/tests/test262/built-ins/Object/freeze/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/freeze/frozen-object-contains-symbol-properties-non-strict.js b/js/src/tests/test262/built-ins/Object/freeze/frozen-object-contains-symbol-properties-non-strict.js
new file mode 100644
index 0000000000..c8992cca64
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/frozen-object-contains-symbol-properties-non-strict.js
@@ -0,0 +1,18 @@
+// Copyright (C) 2013 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.5
+description: >
+ Frozen object contains symbol properties.
+flags: [noStrict]
+features: [Symbol]
+---*/
+var sym = Symbol();
+var obj = {};
+obj[sym] = 1;
+Object.freeze(obj);
+obj[sym] = 2;
+assert.sameValue(obj[sym], 1, "The value of `obj[sym]` is `1`");
+assert.sameValue(delete obj[sym], false, "`delete obj[sym]` is `false`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/frozen-object-contains-symbol-properties-strict-strict.js b/js/src/tests/test262/built-ins/Object/freeze/frozen-object-contains-symbol-properties-strict-strict.js
new file mode 100644
index 0000000000..a94217e219
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/frozen-object-contains-symbol-properties-strict-strict.js
@@ -0,0 +1,20 @@
+'use strict';
+// Copyright (C) 2013 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.5
+description: >
+ Frozen object contains symbol properties.
+flags: [onlyStrict]
+features: [Symbol]
+---*/
+var sym = Symbol("66");
+var obj = {};
+obj[sym] = 1;
+Object.freeze(obj);
+
+assert.throws(TypeError, function() {
+ obj[sym] = 2;
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/name.js b/js/src/tests/test262/built-ins/Object/freeze/name.js
new file mode 100644
index 0000000000..1881d15751
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/name.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 19.1.2.5
+description: >
+ Object.freeze.name is "freeze".
+info: |
+ Object.freeze ( O )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.freeze.name, "freeze");
+
+verifyNotEnumerable(Object.freeze, "name");
+verifyNotWritable(Object.freeze, "name");
+verifyConfigurable(Object.freeze, "name");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/freeze/not-a-constructor.js
new file mode 100644
index 0000000000..6d928f4f11
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/not-a-constructor.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.freeze does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(isConstructor(Object.freeze), false, 'isConstructor(Object.freeze) must return false');
+
+assert.throws(TypeError, () => {
+ new Object.freeze({});
+}, '`new Object.freeze({})` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/proxy-no-ownkeys-returned-keys-order.js b/js/src/tests/test262/built-ins/Object/freeze/proxy-no-ownkeys-returned-keys-order.js
new file mode 100644
index 0000000000..98af5d3c33
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/proxy-no-ownkeys-returned-keys-order.js
@@ -0,0 +1,57 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.freeze
+description: >
+ If Proxy "ownKeys" trap is missing, keys are sorted by type in ascending
+ chronological order.
+info: |
+ SetIntegrityLevel ( O, level )
+
+ [...]
+ 5. Let keys be ? O.[[OwnPropertyKeys]]().
+ 6. If level is sealed, then
+ [...]
+ 7. Else,
+ a. Assert: level is frozen.
+ b. For each element k of keys, do
+ i. Let currentDesc be ? O.[[GetOwnProperty]](k).
+
+ [[OwnPropertyKeys]] ( )
+
+ [...]
+ 6. If trap is undefined, then
+ a. Return ? target.[[OwnPropertyKeys]]().
+
+ OrdinaryOwnPropertyKeys ( O )
+
+ [...]
+ 3. For each own property key P of O such that Type(P) is String and P is
+ not an array index, in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 4. For each own property key P of O such that Type(P) is Symbol,
+ in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 5. Return keys.
+features: [Proxy, Symbol, Reflect]
+includes: [compareArray.js]
+---*/
+
+var target = {};
+var sym = Symbol();
+target[sym] = 1;
+target.foo = 2;
+target[0] = 3;
+
+var getOwnKeys = [];
+var proxy = new Proxy(target, {
+ getOwnPropertyDescriptor: function(target, key) {
+ getOwnKeys.push(key);
+ return Reflect.getOwnPropertyDescriptor(target, key);
+ },
+});
+
+Object.freeze(proxy);
+assert.compareArray(getOwnKeys, ["0", "foo", sym]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/proxy-with-defineProperty-handler.js b/js/src/tests/test262/built-ins/Object/freeze/proxy-with-defineProperty-handler.js
new file mode 100644
index 0000000000..733ed267e4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/proxy-with-defineProperty-handler.js
@@ -0,0 +1,52 @@
+// Copyright (C) 2021 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.freeze
+description: >
+ [[DefineOwnProperty]] is called with partial descriptor with only [[Configurable]] and
+ [[Writable]] (for data properties only) fields present.
+info: |
+ SetIntegrityLevel ( O, level )
+
+ [...]
+ 5. Let keys be ? O.[[OwnPropertyKeys]]().
+ [...]
+ 7. Else,
+ a. Assert: level is frozen.
+ b. For each element k of keys, do
+ i. Let currentDesc be ? O.[[GetOwnProperty]](k).
+ ii. If currentDesc is not undefined, then
+ 1. If IsAccessorDescriptor(currentDesc) is true, then
+ a. Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ 2. Else,
+ a. Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ 3. Perform ? DefinePropertyOrThrow(O, k, desc).
+features: [Symbol, Proxy, Reflect]
+---*/
+
+var sym = Symbol();
+var seenDescriptors = {};
+var proxy = new Proxy({
+ [sym]: 1,
+ get foo() {},
+ set foo(_v) {},
+}, {
+ defineProperty: function(target, key, descriptor) {
+ seenDescriptors[key] = descriptor;
+ return Reflect.defineProperty(target, key, descriptor);
+ },
+});
+
+Object.freeze(proxy);
+
+assert.sameValue(seenDescriptors[sym].value, undefined, "value");
+assert.sameValue(seenDescriptors[sym].writable, false, "writable");
+assert.sameValue(seenDescriptors[sym].enumerable, undefined, "enumerable");
+assert.sameValue(seenDescriptors[sym].configurable, false, "configurable");
+
+assert.sameValue(seenDescriptors.foo.get, undefined, "get");
+assert.sameValue(seenDescriptors.foo.set, undefined, "set");
+assert.sameValue(seenDescriptors.foo.enumerable, undefined, "enumerable");
+assert.sameValue(seenDescriptors.foo.configurable, false, "configurable");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/freeze/shell.js b/js/src/tests/test262/built-ins/Object/freeze/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/freeze/throws-when-false.js b/js/src/tests/test262/built-ins/Object/freeze/throws-when-false.js
new file mode 100644
index 0000000000..ce2e5ae626
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/freeze/throws-when-false.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2019 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.freeze
+description: >
+ Object.freeze throws if SetIntegrityLevel(O, frozen) returns false.
+info: |
+ Object.freeze ( O )
+ ...
+ 2. Let status be ? SetIntegrityLevel(O, frozen).
+ 3. If status is false, throw a TypeError exception.
+
+ SetIntegrityLevel ( O, level )
+ ...
+ 3. Let status be ? O.[[PreventExtensions]]().
+ 4. If status is false, return false.
+---*/
+
+const p = new Proxy({}, {
+ preventExtensions() {
+ return false;
+ },
+});
+
+assert.throws(TypeError, () => {
+ Object.freeze(p);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/browser.js b/js/src/tests/test262/built-ins/Object/fromEntries/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/empty-iterable.js b/js/src/tests/test262/built-ins/Object/fromEntries/empty-iterable.js
new file mode 100644
index 0000000000..12dce89cac
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/empty-iterable.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2018 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.fromentries
+description: When given an empty list, makes an empty object.
+info: |
+ Object.fromEntries ( iterable )
+
+ ...
+ 4. Let stepsDefine be the algorithm steps defined in CreateDataPropertyOnObject Functions.
+ 5. Let adder be CreateBuiltinFunction(stepsDefine, « »).
+ 6. Return ? AddEntriesFromIterable(obj, iterable, adder).
+
+features: [Object.fromEntries]
+---*/
+
+var result = Object.fromEntries([]);
+assert.sameValue(Object.keys(result).length, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/evaluation-order.js b/js/src/tests/test262/built-ins/Object/fromEntries/evaluation-order.js
new file mode 100644
index 0000000000..30677d6897
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/evaluation-order.js
@@ -0,0 +1,84 @@
+// Copyright (C) 2018 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.fromentries
+description: Evaluation order is iterator.next(), get '0', get '1', toPropertyKey, repeat.
+info: |
+ Object.fromEntries ( iterable )
+
+ ...
+ 4. Let stepsDefine be the algorithm steps defined in CreateDataPropertyOnObject Functions.
+ 5. Let adder be CreateBuiltinFunction(stepsDefine, « »).
+ 6. Return ? AddEntriesFromIterable(obj, iterable, adder).
+
+includes: [compareArray.js]
+features: [Symbol.iterator, Object.fromEntries]
+---*/
+
+var effects = [];
+
+function makeEntry(label) {
+ return {
+ get '0'() {
+ effects.push('access property "0" of ' + label + ' entry');
+ return {
+ toString: function() {
+ effects.push('toString of ' + label + ' key');
+ return label + ' key';
+ },
+ };
+ },
+ get '1'() {
+ effects.push('access property "1" of ' + label + ' entry');
+ return label + ' value';
+ },
+ };
+}
+
+var iterable = {
+ [Symbol.iterator]: function() {
+ effects.push('get Symbol.iterator');
+ var count = 0;
+ return {
+ next: function() {
+ effects.push('next ' + count);
+ if (count === 0) {
+ ++count;
+ return {
+ done: false,
+ value: makeEntry('first', 'first key', 'first value'),
+ };
+ } else if (count === 1) {
+ ++count;
+ return {
+ done: false,
+ value: makeEntry('second', 'second key', 'second value'),
+ };
+ } else {
+ return {
+ done: true,
+ };
+ }
+ },
+ };
+ },
+};
+
+var result = Object.fromEntries(iterable);
+assert.compareArray(effects, [
+ 'get Symbol.iterator',
+ 'next 0',
+ 'access property "0" of first entry',
+ 'access property "1" of first entry',
+ 'toString of first key',
+ 'next 1',
+ 'access property "0" of second entry',
+ 'access property "1" of second entry',
+ 'toString of second key',
+ 'next 2',
+], 'Object.fromEntries evaluation order');
+assert.sameValue(result['first key'], 'first value');
+assert.sameValue(result['second key'], 'second value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/iterator-closed-for-null-entry.js b/js/src/tests/test262/built-ins/Object/fromEntries/iterator-closed-for-null-entry.js
new file mode 100644
index 0000000000..96afcb3735
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/iterator-closed-for-null-entry.js
@@ -0,0 +1,59 @@
+// Copyright (C) 2018 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.fromentries
+description: Closes iterators when they return entries which are null.
+info: |
+ Object.fromEntries ( iterable )
+
+ ...
+ 4. Let stepsDefine be the algorithm steps defined in CreateDataPropertyOnObject Functions.
+ 5. Let adder be CreateBuiltinFunction(stepsDefine, « »).
+ 6. Return ? AddEntriesFromIterable(obj, iterable, adder).
+
+ AddEntriesFromIterable ( target, iterable, adder )
+
+ ...
+ 4. Repeat,
+ ...
+ d. If Type(nextItem) is not Object, then
+ i. Let error be ThrowCompletion(a newly created TypeError object).
+ ii. Return ? IteratorClose(iteratorRecord, error).
+
+features: [Symbol.iterator, Object.fromEntries]
+---*/
+
+var returned = false;
+var iterable = {
+ [Symbol.iterator]: function() {
+ var advanced = false;
+ return {
+ next: function() {
+ if (advanced) {
+ throw new Test262Error('should only advance once');
+ }
+ advanced = true;
+ return {
+ done: false,
+ value: null,
+ };
+ },
+ return: function() {
+ if (returned) {
+ throw new Test262Error('should only return once');
+ }
+ returned = true;
+ },
+ };
+ },
+};
+
+assert.sameValue(typeof Object.fromEntries, 'function');
+assert.throws(TypeError, function() {
+ Object.fromEntries(iterable);
+});
+
+assert(returned, 'iterator should be closed when entry is null');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/iterator-closed-for-string-entry.js b/js/src/tests/test262/built-ins/Object/fromEntries/iterator-closed-for-string-entry.js
new file mode 100644
index 0000000000..4f9639ac4a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/iterator-closed-for-string-entry.js
@@ -0,0 +1,59 @@
+// Copyright (C) 2018 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.fromentries
+description: Closes iterators when they return entries which are strings.
+info: |
+ Object.fromEntries ( iterable )
+
+ ...
+ 4. Let stepsDefine be the algorithm steps defined in CreateDataPropertyOnObject Functions.
+ 5. Let adder be CreateBuiltinFunction(stepsDefine, « »).
+ 6. Return ? AddEntriesFromIterable(obj, iterable, adder).
+
+ AddEntriesFromIterable ( target, iterable, adder )
+
+ ...
+ 4. Repeat,
+ ...
+ d. If Type(nextItem) is not Object, then
+ i. Let error be ThrowCompletion(a newly created TypeError object).
+ ii. Return ? IteratorClose(iteratorRecord, error).
+
+features: [Symbol.iterator, Object.fromEntries]
+---*/
+
+var returned = false;
+var iterable = {
+ [Symbol.iterator]: function() {
+ var advanced = false;
+ return {
+ next: function() {
+ if (advanced) {
+ throw new Test262Error('should only advance once');
+ }
+ advanced = true;
+ return {
+ done: false,
+ value: 'ab',
+ };
+ },
+ return: function() {
+ if (returned) {
+ throw new Test262Error('should only return once');
+ }
+ returned = true;
+ },
+ };
+ },
+};
+
+assert.sameValue(typeof Object.fromEntries, 'function');
+assert.throws(TypeError, function() {
+ Object.fromEntries(iterable);
+});
+
+assert(returned, 'iterator should be closed when entry is a string');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/iterator-closed-for-throwing-entry-key-accessor.js b/js/src/tests/test262/built-ins/Object/fromEntries/iterator-closed-for-throwing-entry-key-accessor.js
new file mode 100644
index 0000000000..c1b9e01880
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/iterator-closed-for-throwing-entry-key-accessor.js
@@ -0,0 +1,63 @@
+// Copyright (C) 2018 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.fromentries
+description: Closes iterators when accessing an entry's key throws.
+info: |
+ Object.fromEntries ( iterable )
+
+ ...
+ 4. Let stepsDefine be the algorithm steps defined in CreateDataPropertyOnObject Functions.
+ 5. Let adder be CreateBuiltinFunction(stepsDefine, « »).
+ 6. Return ? AddEntriesFromIterable(obj, iterable, adder).
+
+ AddEntriesFromIterable ( target, iterable, adder )
+
+ ...
+ 4. Repeat,
+ ...
+ e. Let k be Get(nextItem, "0").
+ f. If k is an abrupt completion, return ? IteratorClose(iteratorRecord, k).
+
+features: [Symbol.iterator, Object.fromEntries]
+---*/
+
+function DummyError() {}
+
+var returned = false;
+var iterable = {
+ [Symbol.iterator]: function() {
+ var advanced = false;
+ return {
+ next: function() {
+ if (advanced) {
+ throw new Test262Error('should only advance once');
+ }
+ advanced = true;
+ return {
+ done: false,
+ value: {
+ get '0'() {
+ throw new DummyError();
+ },
+ },
+ };
+ },
+ return: function() {
+ if (returned) {
+ throw new Test262Error('should only return once');
+ }
+ returned = true;
+ },
+ };
+ },
+};
+
+assert.throws(DummyError, function() {
+ Object.fromEntries(iterable);
+});
+
+assert(returned, 'iterator should be closed when entry property access throws');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/iterator-closed-for-throwing-entry-key-tostring.js b/js/src/tests/test262/built-ins/Object/fromEntries/iterator-closed-for-throwing-entry-key-tostring.js
new file mode 100644
index 0000000000..95b0e004bd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/iterator-closed-for-throwing-entry-key-tostring.js
@@ -0,0 +1,65 @@
+// Copyright (C) 2018 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.fromentries
+description: Closes iterators when toString on a key throws.
+info: |
+ Object.fromEntries ( iterable )
+
+ ...
+ 4. Let stepsDefine be the algorithm steps defined in CreateDataPropertyOnObject Functions.
+ 5. Let adder be CreateBuiltinFunction(stepsDefine, « »).
+ 6. Return ? AddEntriesFromIterable(obj, iterable, adder).
+
+ AddEntriesFromIterable ( target, iterable, adder )
+
+ ...
+ 4. Repeat,
+ ...
+ e. Let k be Get(nextItem, "0").
+ f. If k is an abrupt completion, return ? IteratorClose(iteratorRecord, k).
+
+features: [Symbol.iterator, Object.fromEntries]
+---*/
+
+function DummyError() {}
+
+var returned = false;
+var iterable = {
+ [Symbol.iterator]: function() {
+ var advanced = false;
+ return {
+ next: function() {
+ if (advanced) {
+ throw new Test262Error('should only advance once');
+ }
+ advanced = true;
+ return {
+ done: false,
+ value: {
+ 0: {
+ toString: function() {
+ throw new DummyError();
+ },
+ },
+ },
+ };
+ },
+ return: function() {
+ if (returned) {
+ throw new Test262Error('should only return once');
+ }
+ returned = true;
+ },
+ };
+ },
+};
+
+assert.throws(DummyError, function() {
+ Object.fromEntries(iterable);
+});
+
+assert(returned, 'iterator should be closed when key toString throws');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/iterator-closed-for-throwing-entry-value-accessor.js b/js/src/tests/test262/built-ins/Object/fromEntries/iterator-closed-for-throwing-entry-value-accessor.js
new file mode 100644
index 0000000000..3fc60197b7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/iterator-closed-for-throwing-entry-value-accessor.js
@@ -0,0 +1,66 @@
+// Copyright (C) 2018 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.fromentries
+description: Closes iterators when accessing an entry's value throws.
+info: |
+ Object.fromEntries ( iterable )
+
+ ...
+ 4. Let stepsDefine be the algorithm steps defined in CreateDataPropertyOnObject Functions.
+ 5. Let adder be CreateBuiltinFunction(stepsDefine, « »).
+ 6. Return ? AddEntriesFromIterable(obj, iterable, adder).
+
+ AddEntriesFromIterable ( target, iterable, adder )
+
+ ...
+ 4. Repeat,
+ ...
+ g. Let v be Get(nextItem, "1").
+ h. If v is an abrupt completion, return ? IteratorClose(iteratorRecord, v).
+
+features: [Symbol.iterator, Object.fromEntries]
+---*/
+
+function DummyError() {}
+
+var returned = false;
+var iterable = {
+ [Symbol.iterator]: function() {
+ var advanced = false;
+ return {
+ next: function() {
+ if (advanced) {
+ throw new Test262Error('should only advance once');
+ }
+ advanced = true;
+ return {
+ done: false,
+ value: {
+ get '0'() {
+ return 'key';
+ },
+ get '1'() {
+ throw new DummyError();
+ },
+ },
+ };
+ },
+ return: function() {
+ if (returned) {
+ throw new Test262Error('should only return once');
+ }
+ returned = true;
+ },
+ };
+ },
+};
+
+assert.throws(DummyError, function() {
+ Object.fromEntries(iterable);
+});
+
+assert(returned, 'iterator should be closed when entry value property access throws');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/iterator-not-closed-for-next-returning-non-object.js b/js/src/tests/test262/built-ins/Object/fromEntries/iterator-not-closed-for-next-returning-non-object.js
new file mode 100644
index 0000000000..e4d37f5190
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/iterator-not-closed-for-next-returning-non-object.js
@@ -0,0 +1,53 @@
+// Copyright (C) 2018 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.fromentries
+description: Does not close iterators with a `next` method which returns a non-object.
+info: |
+ Object.fromEntries ( iterable )
+
+ ...
+ 4. Let stepsDefine be the algorithm steps defined in CreateDataPropertyOnObject Functions.
+ 5. Let adder be CreateBuiltinFunction(stepsDefine, « »).
+ 6. Return ? AddEntriesFromIterable(obj, iterable, adder).
+
+ AddEntriesFromIterable ( target, iterable, adder )
+
+ ...
+ 4. Repeat,
+ a. Let next be ? IteratorStep(iteratorRecord).
+
+
+ IteratorStep ( iteratorRecord )
+
+ 1. Let result be ? IteratorNext(iteratorRecord).
+
+
+ IteratorNext ( iteratorRecord [ , value ] )
+
+ ...
+ 3. If Type(result) is not Object, throw a TypeError exception.
+
+features: [Symbol.iterator, Object.fromEntries]
+---*/
+
+var iterable = {
+ [Symbol.iterator]: function() {
+ return {
+ next: function() {
+ return null;
+ },
+ return: function() {
+ throw new Test262Error('should not call return');
+ },
+ };
+ },
+};
+
+assert.sameValue(typeof Object.fromEntries, 'function');
+assert.throws(TypeError, function() {
+ Object.fromEntries(iterable);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/iterator-not-closed-for-throwing-done-accessor.js b/js/src/tests/test262/built-ins/Object/fromEntries/iterator-not-closed-for-throwing-done-accessor.js
new file mode 100644
index 0000000000..c88e496f85
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/iterator-not-closed-for-throwing-done-accessor.js
@@ -0,0 +1,59 @@
+// Copyright (C) 2018 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.fromentries
+description: Does not close iterators with a `done` accessor which throws.
+info: |
+ Object.fromEntries ( iterable )
+
+ ...
+ 4. Let stepsDefine be the algorithm steps defined in CreateDataPropertyOnObject Functions.
+ 5. Let adder be CreateBuiltinFunction(stepsDefine, « »).
+ 6. Return ? AddEntriesFromIterable(obj, iterable, adder).
+
+ AddEntriesFromIterable ( target, iterable, adder )
+
+ ...
+ 4. Repeat,
+ a. Let next be ? IteratorStep(iteratorRecord).
+
+
+ IteratorStep ( iteratorRecord )
+
+ 1. Let result be ? IteratorNext(iteratorRecord).
+
+
+ IteratorNext ( iteratorRecord [ , value ] )
+
+ ...
+ 3. If Type(result) is not Object, throw a TypeError exception.
+
+features: [Symbol.iterator, Object.fromEntries]
+---*/
+
+function DummyError() {}
+
+var returned = false;
+var iterable = {
+ [Symbol.iterator]: function() {
+ return {
+ next: function() {
+ return {
+ get done() {
+ throw new DummyError();
+ },
+ };
+ },
+ return: function() {
+ throw new Test262Error('should not call return');
+ },
+ };
+ },
+};
+
+assert.throws(DummyError, function() {
+ Object.fromEntries(iterable);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/iterator-not-closed-for-throwing-next.js b/js/src/tests/test262/built-ins/Object/fromEntries/iterator-not-closed-for-throwing-next.js
new file mode 100644
index 0000000000..386e4afc7c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/iterator-not-closed-for-throwing-next.js
@@ -0,0 +1,54 @@
+// Copyright (C) 2018 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.fromentries
+description: Does not close iterators with a `next` method which throws.
+info: |
+ Object.fromEntries ( iterable )
+
+ ...
+ 4. Let stepsDefine be the algorithm steps defined in CreateDataPropertyOnObject Functions.
+ 5. Let adder be CreateBuiltinFunction(stepsDefine, « »).
+ 6. Return ? AddEntriesFromIterable(obj, iterable, adder).
+
+ AddEntriesFromIterable ( target, iterable, adder )
+
+ ...
+ 4. Repeat,
+ a. Let next be ? IteratorStep(iteratorRecord).
+
+
+ IteratorStep ( iteratorRecord )
+
+ 1. Let result be ? IteratorNext(iteratorRecord).
+
+
+ IteratorNext ( iteratorRecord [ , value ] )
+
+ ...
+ 3. If Type(result) is not Object, throw a TypeError exception.
+
+features: [Symbol.iterator, Object.fromEntries]
+---*/
+
+function DummyError() {}
+
+var iterable = {
+ [Symbol.iterator]: function() {
+ return {
+ next: function() {
+ throw new DummyError();
+ },
+ return: function() {
+ throw new Test262Error('should not call return');
+ },
+ };
+ },
+};
+
+assert.throws(DummyError, function() {
+ Object.fromEntries(iterable);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/iterator-not-closed-for-uncallable-next.js b/js/src/tests/test262/built-ins/Object/fromEntries/iterator-not-closed-for-uncallable-next.js
new file mode 100644
index 0000000000..2d13a95735
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/iterator-not-closed-for-uncallable-next.js
@@ -0,0 +1,44 @@
+// Copyright (C) 2018 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.fromentries
+description: Does not close iterators with an uncallable `next` property.
+info: |
+ Object.fromEntries ( iterable )
+
+ ...
+ 4. Let stepsDefine be the algorithm steps defined in CreateDataPropertyOnObject Functions.
+ 5. Let adder be CreateBuiltinFunction(stepsDefine, « »).
+ 6. Return ? AddEntriesFromIterable(obj, iterable, adder).
+
+ AddEntriesFromIterable ( target, iterable, adder )
+
+ ...
+ 4. Repeat,
+ a. Let next be ? IteratorStep(iteratorRecord).
+
+
+ IteratorStep ( iteratorRecord )
+
+ 1. Let result be ? IteratorNext(iteratorRecord).
+features: [Symbol.iterator, Object.fromEntries]
+---*/
+
+var iterable = {
+ [Symbol.iterator]: function() {
+ return {
+ next: null,
+ return: function() {
+ throw new Test262Error('should not call return');
+ },
+ };
+ },
+};
+
+assert.sameValue(typeof Object.fromEntries, 'function');
+assert.throws(TypeError, function() {
+ Object.fromEntries(iterable);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/key-order.js b/js/src/tests/test262/built-ins/Object/fromEntries/key-order.js
new file mode 100644
index 0000000000..1a97611c13
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/key-order.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2018 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Key enumeration order of result objects matches the order of entries in the iterable.
+esid: sec-object.fromentries
+includes: [compareArray.js]
+features: [Object.fromEntries]
+---*/
+
+var entries = [
+ ['z', 1],
+ ['y', 2],
+ ['x', 3],
+ ['y', 4],
+];
+
+var result = Object.fromEntries(entries);
+assert.sameValue(result.z, 1);
+assert.sameValue(result.y, 4);
+assert.sameValue(result.x, 3);
+assert.compareArray(Object.getOwnPropertyNames(result), ['z', 'y', 'x']);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/length.js b/js/src/tests/test262/built-ins/Object/fromEntries/length.js
new file mode 100644
index 0000000000..c510253b67
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/length.js
@@ -0,0 +1,18 @@
+// Copyright (C) 2018 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.fromEntries.length is 1.
+esid: sec-object.fromentries
+includes: [propertyHelper.js]
+features: [Object.fromEntries]
+---*/
+
+verifyProperty(Object.fromEntries, "length", {
+ value: 1,
+ enumerable: false,
+ writable: false,
+ configurable: true
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/name.js b/js/src/tests/test262/built-ins/Object/fromEntries/name.js
new file mode 100644
index 0000000000..221c5a0e72
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/name.js
@@ -0,0 +1,18 @@
+// Copyright (C) 2018 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.fromEntries.name is "fromEntries".
+esid: sec-object.fromentries
+includes: [propertyHelper.js]
+features: [Object.fromEntries]
+---*/
+
+verifyProperty(Object.fromEntries, "name", {
+ value: "fromEntries",
+ enumerable: false,
+ writable: false,
+ configurable: true
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/fromEntries/not-a-constructor.js
new file mode 100644
index 0000000000..d63a99663e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/not-a-constructor.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.fromEntries does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, Object.fromEntries, arrow-function]
+---*/
+
+assert.sameValue(isConstructor(Object.fromEntries), false, 'isConstructor(Object.fromEntries) must return false');
+
+assert.throws(TypeError, () => {
+ new Object.fromEntries([]);
+}, '`new Object.fromEntries([])` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/prototype.js b/js/src/tests/test262/built-ins/Object/fromEntries/prototype.js
new file mode 100644
index 0000000000..13d02c7193
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/prototype.js
@@ -0,0 +1,13 @@
+// Copyright (C) 2018 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Created objects inherit from Object.prototype.
+esid: sec-object.fromentries
+features: [Object.fromEntries]
+---*/
+
+var result = Object.fromEntries([]);
+assert.sameValue(Object.getPrototypeOf(result), Object.prototype);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/requires-argument.js b/js/src/tests/test262/built-ins/Object/fromEntries/requires-argument.js
new file mode 100644
index 0000000000..60f9c325d3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/requires-argument.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2018 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.fromentries
+description: Throws when called without an argument.
+info: |
+ Object.fromEntries ( iterable )
+
+ 1. Perform ? RequireObjectCoercible(iterable).
+ ...
+
+features: [Object.fromEntries]
+---*/
+
+assert.sameValue(typeof Object.fromEntries, 'function');
+assert.throws(TypeError, function() {
+ Object.fromEntries();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/shell.js b/js/src/tests/test262/built-ins/Object/fromEntries/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/simple-properties.js b/js/src/tests/test262/built-ins/Object/fromEntries/simple-properties.js
new file mode 100644
index 0000000000..431556a966
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/simple-properties.js
@@ -0,0 +1,18 @@
+// Copyright (C) 2018 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Creates data properties which are enumerable, writable, and configurable.
+esid: sec-object.fromentries
+includes: [propertyHelper.js]
+features: [Object.fromEntries]
+---*/
+
+var result = Object.fromEntries([['key', 'value']]);
+verifyProperty(result, "key", {
+ enumerable: true,
+ writable: true,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/string-entry-object-succeeds.js b/js/src/tests/test262/built-ins/Object/fromEntries/string-entry-object-succeeds.js
new file mode 100644
index 0000000000..3f6d86b103
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/string-entry-object-succeeds.js
@@ -0,0 +1,13 @@
+// Copyright (C) 2018 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Succeeds when an entry object is a boxed string.
+esid: sec-object.fromentries
+features: [Object.fromEntries]
+---*/
+
+var result = Object.fromEntries([Object('ab')]);
+assert.sameValue(result['a'], 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/string-entry-primitive-throws.js b/js/src/tests/test262/built-ins/Object/fromEntries/string-entry-primitive-throws.js
new file mode 100644
index 0000000000..3bb9999363
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/string-entry-primitive-throws.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2018 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Throws when an entry object is a primitive string.
+esid: sec-object.fromentries
+features: [Object.fromEntries]
+---*/
+
+assert.sameValue(typeof Object.fromEntries, 'function');
+assert.throws(TypeError, function() {
+ Object.fromEntries(['ab']);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/string-entry-string-object-succeeds.js b/js/src/tests/test262/built-ins/Object/fromEntries/string-entry-string-object-succeeds.js
new file mode 100644
index 0000000000..91ec49b4b3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/string-entry-string-object-succeeds.js
@@ -0,0 +1,13 @@
+// Copyright (C) 2018 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Succeeds when an entry object is a boxed string.
+esid: sec-object.fromentries
+features: [Object.fromEntries]
+---*/
+
+var result = Object.fromEntries([new String('ab')]);
+assert.sameValue(result['a'], 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/supports-symbols.js b/js/src/tests/test262/built-ins/Object/fromEntries/supports-symbols.js
new file mode 100644
index 0000000000..0d30f04c35
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/supports-symbols.js
@@ -0,0 +1,14 @@
+// Copyright (C) 2018 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Allows symbol keys.
+esid: sec-object.fromentries
+features: [Symbol, Object.fromEntries]
+---*/
+
+var key = Symbol();
+var result = Object.fromEntries([[key, 'value']]);
+assert.sameValue(result[key], 'value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/to-property-key.js b/js/src/tests/test262/built-ins/Object/fromEntries/to-property-key.js
new file mode 100644
index 0000000000..539e052848
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/to-property-key.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2018 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Coerces keys to strings using ToPropertyKey.
+esid: sec-object.fromentries
+features: [Symbol.toPrimitive, Object.fromEntries]
+---*/
+
+var key = {
+ [Symbol.toPrimitive]: function(hint) {
+ assert.sameValue(hint, 'string');
+ return 'key';
+ },
+};
+var result = Object.fromEntries([[key, 'value']]);
+assert.sameValue(result.key, 'value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/uses-define-semantics.js b/js/src/tests/test262/built-ins/Object/fromEntries/uses-define-semantics.js
new file mode 100644
index 0000000000..ae34cf564f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/uses-define-semantics.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2018 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Uses [[DefineOwnProperty]] rather than [[Set]].
+esid: sec-object.fromentries
+features: [Object.fromEntries]
+---*/
+
+Object.defineProperty(Object.prototype, 'property', {
+ get: function() {
+ throw new Test262Error('should not trigger getter on Object.prototype');
+ },
+ set: function() {
+ throw new Test262Error('should not trigger setter on Object.prototype');
+ },
+});
+
+var result = Object.fromEntries([['property', 'value']]);
+assert.sameValue(result['property'], 'value', '');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/fromEntries/uses-keys-not-iterator.js b/js/src/tests/test262/built-ins/Object/fromEntries/uses-keys-not-iterator.js
new file mode 100644
index 0000000000..d9ec46e54b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/fromEntries/uses-keys-not-iterator.js
@@ -0,0 +1,50 @@
+// Copyright (C) 2018 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Reads properties rather than iterating.
+esid: sec-object.fromentries
+features: [Symbol.iterator, Object.fromEntries]
+---*/
+
+var iterable = {
+ [Symbol.iterator]: function() {
+ var count = 0;
+ return {
+ next: function() {
+ if (count === 0) {
+ ++count;
+ return {
+ done: false,
+ value: {
+ '0': 'first key',
+ '1': 'first value',
+ get [Symbol.iterator]() {
+ throw new Test262Error('Object.fromEntries should not access Symbol.iterator on entry objects');
+ },
+ },
+ };
+ } else if (count === 1) {
+ ++count;
+ Array.prototype[Symbol.iterator] = function() {
+ throw new Test262Error('Object.fromEntries should not access Symbol.iterator on entry arrays');
+ };
+ return {
+ done: false,
+ value: ['second key', 'second value'],
+ };
+ } else {
+ return {
+ done: true,
+ };
+ }
+ },
+ };
+ },
+};
+
+var result = Object.fromEntries(iterable);
+assert.sameValue(result['first key'], 'first value');
+assert.sameValue(result['second key'], 'second value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-0-1.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-0-1.js
new file mode 100644
index 0000000000..6091f471a4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-0-1.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-0-1
+description: Object.getOwnPropertyDescriptor must exist as a function
+---*/
+
+assert.sameValue(typeof(Object.getOwnPropertyDescriptor), "function", 'typeof(Object.getOwnPropertyDescriptor)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-1-1.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-1-1.js
new file mode 100644
index 0000000000..1fe7292fba
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-1-1.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-1-1
+description: >
+ Object.getOwnPropertyDescriptor - TypeError is thrown when first
+ param is undefined
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.getOwnPropertyDescriptor(undefined, "foo");
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-1-2.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-1-2.js
new file mode 100644
index 0000000000..49c5986967
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-1-2.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-1-2
+description: >
+ Object.getOwnPropertyDescriptor - TypeError is thrown when first
+ param is null
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.getOwnPropertyDescriptor(null, "foo");
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-1-3.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-1-3.js
new file mode 100644
index 0000000000..9c1a71ea16
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-1-3.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-1-3
+description: >
+ Object.getOwnPropertyDescriptor - TypeError is not thrown when
+ first param is a boolean
+---*/
+
+Object.getOwnPropertyDescriptor(true, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-1-4.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-1-4.js
new file mode 100644
index 0000000000..ce1207add0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-1-4.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-1-4
+description: >
+ Object.getOwnPropertyDescriptor - TypeError is not thrown when
+ first param is a number
+---*/
+
+Object.getOwnPropertyDescriptor(-2, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-1.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-1.js
new file mode 100644
index 0000000000..edbc28c1f2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-1
+description: >
+ Object.getOwnPropertyDescriptor does not throw TypeError if type
+ of first param is not Object
+---*/
+
+Object.getOwnPropertyDescriptor(0, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-1.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-1.js
new file mode 100644
index 0000000000..4d376c7b0e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-1.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-1
+description: >
+ Object.getOwnPropertyDescriptor returns undefined for undefined
+ property name
+---*/
+
+var o = {};
+var desc = Object.getOwnPropertyDescriptor(o, undefined);
+
+assert.sameValue(desc, undefined, 'desc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-10.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-10.js
new file mode 100644
index 0000000000..81440d3ab9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-10.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-10
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a number that
+ converts to a string (value is -0)
+---*/
+
+var obj = {
+ "0": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, -0);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-11.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-11.js
new file mode 100644
index 0000000000..4f10fab55c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-11.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-11
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a number that
+ converts to a string (value is positive number)
+---*/
+
+var obj = {
+ "30": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, 30);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-12.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-12.js
new file mode 100644
index 0000000000..196c480ebf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-12.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-12
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a number that
+ converts to a string (value is negative number)
+---*/
+
+var obj = {
+ "-20": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, -20);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-13.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-13.js
new file mode 100644
index 0000000000..0756f566f7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-13.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-13
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a number that
+ converts to a string (value is Infinity)
+---*/
+
+var obj = {
+ "Infinity": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, Infinity);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-14.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-14.js
new file mode 100644
index 0000000000..2cc0fe0c40
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-14.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-14
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a number that
+ converts to a string (value is +Infinity)
+---*/
+
+var obj = {
+ "Infinity": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, +Infinity);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-15.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-15.js
new file mode 100644
index 0000000000..b343454f39
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-15.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-15
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a number that
+ converts to a string (value is -Infinity)
+---*/
+
+var obj = {
+ "-Infinity": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, -Infinity);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-16.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-16.js
new file mode 100644
index 0000000000..0b0bc12125
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-16.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-16
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a number that
+ converts to a string (value is 1(following 20 zeros))
+---*/
+
+var obj = {
+ "100000000000000000000": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, 100000000000000000000);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-17.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-17.js
new file mode 100644
index 0000000000..5836df517e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-17.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-17
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a number that
+ converts to a string (value is 1(following 21 zeros))
+---*/
+
+var obj = {
+ "1e+21": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, 1000000000000000000000);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-18.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-18.js
new file mode 100644
index 0000000000..b469d21f6e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-18.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-18
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a number that
+ converts to a string (value is 1(following 22 zeros))
+---*/
+
+var obj = {
+ "1e+22": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, 10000000000000000000000);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-19.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-19.js
new file mode 100644
index 0000000000..6a8b57697f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-19.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-19
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a number that
+ converts to a string (value is 1e+20)
+---*/
+
+var obj = {
+ "100000000000000000000": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, 1e+20);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-2.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-2.js
new file mode 100644
index 0000000000..5d9be7493f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-2.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-2
+description: >
+ Object.getOwnPropertyDescriptor returns undefined for null
+ property name
+---*/
+
+var o = {};
+var desc = Object.getOwnPropertyDescriptor(o, null);
+
+assert.sameValue(desc, undefined, 'desc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-20.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-20.js
new file mode 100644
index 0000000000..ae1c23563e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-20.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-20
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a number that
+ converts to string (value is 1e+21)
+---*/
+
+var obj = {
+ "1e+21": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, 1e+21);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-21.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-21.js
new file mode 100644
index 0000000000..74c02b3ec3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-21.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-21
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a number that
+ converts to a string (value is 1e+22)
+---*/
+
+var obj = {
+ "1e+22": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, 1e+22);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-22.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-22.js
new file mode 100644
index 0000000000..a2c3f604e5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-22.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-22
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a number that
+ converts to a string (value is 0.000001)
+---*/
+
+var obj = {
+ "0.000001": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, 0.000001);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-23.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-23.js
new file mode 100644
index 0000000000..5abd621976
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-23.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-23
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a number that
+ converts to a string (value is 0.0000001)
+---*/
+
+var obj = {
+ "1e-7": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, 0.0000001);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-24.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-24.js
new file mode 100644
index 0000000000..aa61ce49de
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-24.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-24
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a number that
+ converts to a string (value is 0.00000001)
+---*/
+
+var obj = {
+ "1e-8": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, 0.00000001);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-25.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-25.js
new file mode 100644
index 0000000000..c0f72251f0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-25.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-25
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a number that
+ converts to a string (value is 1e-7)
+---*/
+
+var obj = {
+ "1e-7": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, 1e-7);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-26.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-26.js
new file mode 100644
index 0000000000..eee9c091a5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-26.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-26
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a number that
+ converts to a string (value is 1e-6)
+---*/
+
+var obj = {
+ "0.000001": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, 1e-6);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-27.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-27.js
new file mode 100644
index 0000000000..f6da9abf3b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-27.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-27
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a number that
+ converts to a string (value is 1e-5)
+---*/
+
+var obj = {
+ "0.00001": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, 1e-5);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-28.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-28.js
new file mode 100644
index 0000000000..97861576ce
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-28.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-28
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is an integer that
+ converts to a string (value is 123)
+---*/
+
+var obj = {
+ "123": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, 123);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-29.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-29.js
new file mode 100644
index 0000000000..9202529dac
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-29.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-29
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a decimal that
+ converts to a string (value is 123.456)
+---*/
+
+var obj = {
+ "123.456": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, 123.456);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-3.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-3.js
new file mode 100644
index 0000000000..f7c513f5c1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-3.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-3
+description: Object.getOwnPropertyDescriptor - argument 'P' is undefined
+---*/
+
+var obj = {
+ "undefined": 1
+};
+
+var desc1 = Object.getOwnPropertyDescriptor(obj, undefined);
+var desc2 = Object.getOwnPropertyDescriptor(obj, "undefined");
+
+assert.sameValue(desc1.value, 1, 'desc1.value');
+assert.sameValue(desc2.value, 1, 'desc2.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-30.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-30.js
new file mode 100644
index 0000000000..571529c5ff
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-30.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-30
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a number that
+ converts to a string (value is 100000000000000000000.123)
+---*/
+
+var obj = {
+ "100000000000000000000": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, 100000000000000000000.123);
+
+assert(typeof desc !== "undefined", 'typeof desc !== "undefined" !== true');
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-31.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-31.js
new file mode 100644
index 0000000000..fea8aa1bff
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-31.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-31
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a number that
+ converts to a string (value is 123.1234567)
+---*/
+
+var obj = {
+ "123.1234567": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, 123.1234567);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-32.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-32.js
new file mode 100644
index 0000000000..dd4bb41db1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-32.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-32
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is applied to an
+ empty string
+---*/
+
+var obj = {
+ "": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, "");
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-33.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-33.js
new file mode 100644
index 0000000000..2a943b3cc0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-33.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-33
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is applied to
+ string 'AB \cd'
+---*/
+
+var obj = {
+ "AB\n\\cd": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, "AB\n\\cd");
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-34.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-34.js
new file mode 100644
index 0000000000..d57672e12a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-34.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-34
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is applied to
+ string 'undefined'
+---*/
+
+var obj = {
+ "undefined": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, "undefined");
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-35.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-35.js
new file mode 100644
index 0000000000..40be1fa769
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-35.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-35
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is applied to
+ string 'null'
+---*/
+
+var obj = {
+ "null": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, "null");
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-36.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-36.js
new file mode 100644
index 0000000000..490b8afeef
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-36.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-36
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is applied to
+ string '123���¦�cd'
+---*/
+
+var obj = {
+ "123���¦�cd": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, "123���¦�cd");
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-37.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-37.js
new file mode 100644
index 0000000000..83525bfc98
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-37.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-37
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is applied to
+ string '1'
+---*/
+
+var obj = {
+ "1": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, 1);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-38.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-38.js
new file mode 100644
index 0000000000..88ff048cfe
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-38.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-38
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is an array that
+ converts to a string
+---*/
+
+var obj = {
+ "1": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, [1]);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-39.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-39.js
new file mode 100644
index 0000000000..431183133e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-39.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-39
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a String Object
+ that converts to a string
+---*/
+
+var obj = {
+ "Hello": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, new String("Hello"));
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-4.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-4.js
new file mode 100644
index 0000000000..dc74899485
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-4.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-4
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is null that
+ converts to string 'null'
+---*/
+
+var obj = {
+ "null": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, null);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-40.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-40.js
new file mode 100644
index 0000000000..81f25c487b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-40.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-40
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a Boolean Object
+ that converts to a string
+---*/
+
+var obj = {
+ "true": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, new Boolean(true));
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-41.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-41.js
new file mode 100644
index 0000000000..76e27bca11
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-41.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-41
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a Number Object
+ that converts to a string
+---*/
+
+var obj = {
+ "123": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, new Number(123));
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-42.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-42.js
new file mode 100644
index 0000000000..5f1503f0e9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-42.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-42
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is an object which
+ has an own toString method
+---*/
+
+var obj = {
+ "abc": 1
+};
+
+var ownProp = {
+ toString: function() {
+ return "abc";
+ }
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, ownProp);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-43.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-43.js
new file mode 100644
index 0000000000..1ae725bc0f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-43.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-43
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is an object which
+ has an own valueOf method
+---*/
+
+var obj = {
+ "[object Object]": 1,
+ "abc": 2
+};
+
+var ownProp = {
+ valueOf: function() {
+ return "abc";
+ }
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, ownProp);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-44.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-44.js
new file mode 100644
index 0000000000..5d4ce6f369
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-44.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-44
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is an object that
+ has an own toString method that returns an object and toValue
+ method that returns a primitive value
+---*/
+
+var obj = {
+ "abc": 1
+};
+var valueOfAccessed = false;
+var toStringAccessed = false;
+
+var ownProp = {
+ toString: function() {
+ toStringAccessed = true;
+ return {};
+ },
+ valueOf: function() {
+ valueOfAccessed = true;
+ return "abc";
+ }
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, ownProp);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+assert(valueOfAccessed, 'valueOfAccessed !== true');
+assert(toStringAccessed, 'toStringAccessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-45.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-45.js
new file mode 100644
index 0000000000..cb7c995a5a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-45.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-45
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is an object which
+ has an own toString and valueOf method
+---*/
+
+var obj = {
+ "bbq": 1,
+ "abc": 2
+};
+var valueOfAccessed = false;
+
+var ownProp = {
+ toString: function() {
+ return "bbq";
+ },
+ valueOf: function() {
+ valueOfAccessed = true;
+ return "abc";
+ }
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, ownProp);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+assert.sameValue(valueOfAccessed, false, 'valueOfAccessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-46.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-46.js
new file mode 100644
index 0000000000..2e587155d7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-46.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-46
+description: >
+ Object.getOwnPropertyDescriptor - TypeError exception was thrown
+ when 'P' is an object that both toString and valueOf wouldn't
+ return primitive value
+---*/
+
+var obj = {
+ "1": 1
+};
+var toStringAccessed = false;
+var valueOfAccessed = false;
+
+var ownProp = {
+ toString: function() {
+ toStringAccessed = true;
+ return [1];
+ },
+ valueOf: function() {
+ valueOfAccessed = true;
+ return [1];
+ }
+};
+assert.throws(TypeError, function() {
+ Object.getOwnPropertyDescriptor(obj, ownProp);
+});
+assert(toStringAccessed, 'toStringAccessed !== true');
+assert(valueOfAccessed, 'valueOfAccessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-47.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-47.js
new file mode 100644
index 0000000000..65ecda5c36
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-47.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-47
+description: >
+ Object.getOwnPropertyDescriptor - uses inherited toString method
+ when 'P' is an object with an own valueOf and inherited toString
+ methods
+---*/
+
+var proto = {};
+var valueOfAccessed = false;
+var toStringAccessed = false;
+
+proto.toString = function() {
+ toStringAccessed = true;
+ return "test";
+};
+
+var Con = function() {};
+Con.prototype = proto;
+
+var child = new Con();
+child.valueOf = function() {
+ valueOfAccessed = true;
+ return "10";
+};
+var obj = {
+ "10": "length1",
+ "test": "length2"
+};
+var desc = Object.getOwnPropertyDescriptor(obj, child);
+
+assert.sameValue(desc.value, "length2", 'desc.value');
+assert(toStringAccessed, 'toStringAccessed !== true');
+assert.sameValue(valueOfAccessed, false, 'valueOfAccessed');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-5.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-5.js
new file mode 100644
index 0000000000..c77b4d2ee5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-5.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-5
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a boolean whose
+ value is false
+---*/
+
+var obj = {
+ "false": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, false);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-6.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-6.js
new file mode 100644
index 0000000000..c38d44d18b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-6.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-6
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a boolean whose
+ value is true
+---*/
+
+var obj = {
+ "true": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, true);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-7.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-7.js
new file mode 100644
index 0000000000..36e7fb876c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-7.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-7
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a number that
+ converts to a string (value is NaN)
+---*/
+
+var obj = {
+ "NaN": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, NaN);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-8.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-8.js
new file mode 100644
index 0000000000..539ba7663f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-8.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-8
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a number that
+ converts to a string (value is 0)
+---*/
+
+var obj = {
+ "0": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, 0);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-9.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-9.js
new file mode 100644
index 0000000000..fd11e10ef8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-2-9.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-2-9
+description: >
+ Object.getOwnPropertyDescriptor - argument 'P' is a number that
+ converts to a string (value is +0)
+---*/
+
+var obj = {
+ "0": 1
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, +0);
+
+assert.sameValue(desc.value, 1, 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-1.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-1.js
new file mode 100644
index 0000000000..385747f7c0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-1.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-3-1
+description: Object.getOwnPropertyDescriptor - 'P' is own data property
+---*/
+
+var obj = {
+ property: "ownDataProperty"
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+assert.sameValue(desc.value, "ownDataProperty", 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-10.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-10.js
new file mode 100644
index 0000000000..43b8b47d6c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-10.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-3-10
+description: Object.getOwnPropertyDescriptor - 'P' is not an existing property
+---*/
+
+var obj = {
+ property: "ownDataProperty"
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, "propertyNonExist");
+
+assert.sameValue(typeof desc, "undefined", 'typeof desc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-13.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-13.js
new file mode 100644
index 0000000000..40ceee22bf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-13.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-3-13
+description: >
+ Object.getOwnPropertyDescriptor applied to the Arguments object
+ which implements its own property get method
+---*/
+
+var arg = (function() {
+ return arguments;
+}("ownProperty", true));
+
+var desc = Object.getOwnPropertyDescriptor(arg, "0");
+
+assert.sameValue(desc.value, "ownProperty", 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, true, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-14.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-14.js
new file mode 100644
index 0000000000..0a61a13e32
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-14.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-3-14
+description: >
+ Object.getOwnPropertyDescriptor applied to a String object which
+ implements its own property get method
+---*/
+
+var str = new String("123");
+
+var desc = Object.getOwnPropertyDescriptor(str, "2");
+
+assert.sameValue(desc.value, "3", 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-15.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-15.js
new file mode 100644
index 0000000000..468d4ba89b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-15.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-3-15
+description: >
+ Object.getOwnPropertyDescriptor applied to a Function object which
+ implements its own property get method
+---*/
+
+var obj = function(a, b) {
+ return a + b;
+};
+obj[1] = "ownProperty";
+
+var desc = Object.getOwnPropertyDescriptor(obj, "1");
+
+assert.sameValue(desc.value, "ownProperty", 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-2.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-2.js
new file mode 100644
index 0000000000..ea142dbd38
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-2.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-3-2
+description: Object.getOwnPropertyDescriptor - 'P' is inherited data property
+---*/
+
+var proto = {
+ property: "inheritedDataProperty"
+};
+
+var Con = function() {};
+Con.ptototype = proto;
+
+var child = new Con();
+
+var desc = Object.getOwnPropertyDescriptor(child, "property");
+
+assert.sameValue(typeof desc, "undefined", 'typeof desc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-3.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-3.js
new file mode 100644
index 0000000000..c45d530e17
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-3.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-3-3
+description: >
+ Object.getOwnPropertyDescriptor - 'P' is own data property that
+ overrides an inherited data property
+---*/
+
+var proto = {
+ property: "inheritedDataProperty"
+};
+
+var Con = function() {};
+Con.ptototype = proto;
+
+var child = new Con();
+child.property = "ownDataProperty";
+
+var desc = Object.getOwnPropertyDescriptor(child, "property");
+
+assert.sameValue(desc.value, "ownDataProperty", 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-4.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-4.js
new file mode 100644
index 0000000000..8edd7ff28b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-4.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-3-4
+description: >
+ Object.getOwnPropertyDescriptor - 'P' is own data property that
+ overrides an inherited accessor property
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "property", {
+ get: function() {
+ return "inheritedDataProperty";
+ },
+ configurable: true
+});
+
+var Con = function() {};
+Con.ptototype = proto;
+
+var child = new Con();
+Object.defineProperty(child, "property", {
+ value: "ownDataProperty",
+ configurable: true
+});
+
+var desc = Object.getOwnPropertyDescriptor(child, "property");
+
+assert.sameValue(desc.value, "ownDataProperty", 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-5.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-5.js
new file mode 100644
index 0000000000..3fcadce9c4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-5.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-3-5
+description: Object.getOwnPropertyDescriptor - 'P' is own accessor property
+---*/
+
+var obj = {};
+var fun = function() {
+ return "ownAccessorProperty";
+};
+Object.defineProperty(obj, "property", {
+ get: fun,
+ configurable: true
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+assert.sameValue(desc.get, fun, 'desc.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-6.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-6.js
new file mode 100644
index 0000000000..de4edf499c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-6.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-3-6
+description: >
+ Object.getOwnPropertyDescriptor - 'P' is inherited accessor
+ property
+---*/
+
+var proto = {};
+var fun = function() {
+ return "ownAccessorProperty";
+};
+Object.defineProperty(proto, "property", {
+ get: fun,
+ configurable: true
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var child = new Con();
+
+var desc = Object.getOwnPropertyDescriptor(child, "property");
+
+assert.sameValue(typeof desc, "undefined", 'typeof desc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-7.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-7.js
new file mode 100644
index 0000000000..6836cad0dc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-7.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-3-7
+description: >
+ Object.getOwnPropertyDescriptor - 'P' is own accessor property
+ that overrides an inherited data property
+---*/
+
+var proto = {
+ property: "inheritedDataProperty"
+};
+
+var Con = function() {};
+Con.ptototype = proto;
+
+var child = new Con();
+var fun = function() {
+ return "ownAccessorProperty";
+};
+Object.defineProperty(child, "property", {
+ get: fun,
+ configurable: true
+});
+
+var desc = Object.getOwnPropertyDescriptor(child, "property");
+
+assert.sameValue(desc.get, fun, 'desc.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-8.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-8.js
new file mode 100644
index 0000000000..c6951d4809
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-8.js
@@ -0,0 +1,35 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-3-8
+description: >
+ Object.getOwnPropertyDescriptor - 'P' is own accessor property
+ that overrides an inherited accessor property
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "property", {
+ get: function() {
+ return "inheritedAccessorProperty";
+ },
+ configurable: true
+});
+
+var Con = function() {};
+Con.ptototype = proto;
+
+var child = new Con();
+var fun = function() {
+ return "ownAccessorProperty";
+};
+Object.defineProperty(child, "property", {
+ get: fun,
+ configurable: true
+});
+
+var desc = Object.getOwnPropertyDescriptor(child, "property");
+
+assert.sameValue(desc.get, fun, 'desc.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-9.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-9.js
new file mode 100644
index 0000000000..b3680f148d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-3-9.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-3-9
+description: >
+ Object.getOwnPropertyDescriptor - 'P' is own accessor property
+ without a get function
+---*/
+
+var obj = {};
+var fun = function() {};
+Object.defineProperty(obj, "property", {
+ set: fun,
+ configurable: true
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+assert.sameValue(desc.set, fun, 'desc.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-1.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-1.js
new file mode 100644
index 0000000000..5f21de35e7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-1.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-1
+description: >
+ Object.getOwnPropertyDescriptor returns an object representing a
+ data desc for valid data valued properties
+---*/
+
+var o = {};
+o["foo"] = 101;
+
+var desc = Object.getOwnPropertyDescriptor(o, "foo");
+
+assert.sameValue(desc.value, 101, 'desc.value');
+assert.sameValue(desc.enumerable, true, 'desc.enumerable');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty("get"), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty("set"), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-10.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-10.js
new file mode 100644
index 0000000000..8439d72ef8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-10.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-10
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Global.decodeURIComponent)
+---*/
+
+var global = this;
+var desc = Object.getOwnPropertyDescriptor(global, "decodeURIComponent");
+
+assert.sameValue(desc.value, global.decodeURIComponent, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-100.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-100.js
new file mode 100644
index 0000000000..e9c359d5d1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-100.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-100
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Math.atan2)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "atan2");
+
+assert.sameValue(desc.value, Math.atan2, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-101.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-101.js
new file mode 100644
index 0000000000..dc8a1d939c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-101.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-101
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Math.ceil)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "ceil");
+
+assert.sameValue(desc.value, Math.ceil, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-102.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-102.js
new file mode 100644
index 0000000000..c0d7aca3bf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-102.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-102
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Math.cos)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "cos");
+
+assert.sameValue(desc.value, Math.cos, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-103.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-103.js
new file mode 100644
index 0000000000..384f0f8eb0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-103.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-103
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Math.exp)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "exp");
+
+assert.sameValue(desc.value, Math.exp, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-104.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-104.js
new file mode 100644
index 0000000000..c256ec6070
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-104.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-104
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Math.floor)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "floor");
+
+assert.sameValue(desc.value, Math.floor, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-105.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-105.js
new file mode 100644
index 0000000000..47c1896ac3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-105.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-105
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Math.log)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "log");
+
+assert.sameValue(desc.value, Math.log, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-106.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-106.js
new file mode 100644
index 0000000000..17bad02229
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-106.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-106
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Math.max)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "max");
+
+assert.sameValue(desc.value, Math.max, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-107.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-107.js
new file mode 100644
index 0000000000..7a305faba3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-107.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-107
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Math.min)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "min");
+
+assert.sameValue(desc.value, Math.min, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-108.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-108.js
new file mode 100644
index 0000000000..90049e3f74
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-108.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-108
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Math.pow)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "pow");
+
+assert.sameValue(desc.value, Math.pow, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-109.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-109.js
new file mode 100644
index 0000000000..adf204a422
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-109.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-109
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Math.random)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "random");
+
+assert.sameValue(desc.value, Math.random, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-11.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-11.js
new file mode 100644
index 0000000000..ceb49ccceb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-11.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-11
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Global.encodeURIComponent)
+---*/
+
+var global = this;
+var desc = Object.getOwnPropertyDescriptor(global, "encodeURIComponent");
+
+assert.sameValue(desc.value, global.encodeURIComponent, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-110.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-110.js
new file mode 100644
index 0000000000..444913e562
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-110.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-110
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Math.round)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "round");
+
+assert.sameValue(desc.value, Math.round, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-111.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-111.js
new file mode 100644
index 0000000000..66d9956e4a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-111.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-111
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Math.sin)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "sin");
+
+assert.sameValue(desc.value, Math.sin, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-112.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-112.js
new file mode 100644
index 0000000000..dc60ff68e1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-112.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-112
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Math.sqrt)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "sqrt");
+
+assert.sameValue(desc.value, Math.sqrt, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-113.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-113.js
new file mode 100644
index 0000000000..30d96025b2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-113.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-113
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Math.tan)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "tan");
+
+assert.sameValue(desc.value, Math.tan, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-114.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-114.js
new file mode 100644
index 0000000000..5b79aed297
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-114.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-114
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.parse)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date, "parse");
+
+assert.sameValue(desc.value, Date.parse, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-115.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-115.js
new file mode 100644
index 0000000000..4f7fdd1122
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-115.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-115
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.UTC)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date, "UTC");
+
+assert.sameValue(desc.value, Date.UTC, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-116.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-116.js
new file mode 100644
index 0000000000..73296e71ef
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-116.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-116
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.constructor)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "constructor");
+
+assert.sameValue(desc.value, Date.prototype.constructor, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-117.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-117.js
new file mode 100644
index 0000000000..5656ddf03e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-117.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-117
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.getTime)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "getTime");
+
+assert.sameValue(desc.value, Date.prototype.getTime, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-118.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-118.js
new file mode 100644
index 0000000000..3fac9bdf0b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-118.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-118
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.getTimezoneOffset)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "getTimezoneOffset");
+
+assert.sameValue(desc.value, Date.prototype.getTimezoneOffset, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-120.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-120.js
new file mode 100644
index 0000000000..1fa31bca5e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-120.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-120
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.getFullYear)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "getFullYear");
+
+assert.sameValue(desc.value, Date.prototype.getFullYear, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-121.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-121.js
new file mode 100644
index 0000000000..ae3aa23335
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-121.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-121
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.getMonth)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "getMonth");
+
+assert.sameValue(desc.value, Date.prototype.getMonth, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-122.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-122.js
new file mode 100644
index 0000000000..cad2e05a1a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-122.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-122
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.getDate)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "getDate");
+
+assert.sameValue(desc.value, Date.prototype.getDate, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-123.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-123.js
new file mode 100644
index 0000000000..bd6d6ee2d6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-123.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-123
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.getDay)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "getDay");
+
+assert.sameValue(desc.value, Date.prototype.getDay, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-124.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-124.js
new file mode 100644
index 0000000000..8f0f754d76
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-124.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-124
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.getHours)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "getHours");
+
+assert.sameValue(desc.value, Date.prototype.getHours, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-125.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-125.js
new file mode 100644
index 0000000000..2c70b28424
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-125.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-125
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.getMinutes)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "getMinutes");
+
+assert.sameValue(desc.value, Date.prototype.getMinutes, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-126.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-126.js
new file mode 100644
index 0000000000..e87c8c0c0e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-126.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-126
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.getSeconds)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "getSeconds");
+
+assert.sameValue(desc.value, Date.prototype.getSeconds, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-127.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-127.js
new file mode 100644
index 0000000000..3a7c5be874
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-127.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-127
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.getMilliseconds)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "getMilliseconds");
+
+assert.sameValue(desc.value, Date.prototype.getMilliseconds, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-128.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-128.js
new file mode 100644
index 0000000000..3a418f79ff
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-128.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-128
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.getUTCFullYear)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "getUTCFullYear");
+
+assert.sameValue(desc.value, Date.prototype.getUTCFullYear, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-129.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-129.js
new file mode 100644
index 0000000000..0890ec0fba
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-129.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-129
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.getUTCMonth)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "getUTCMonth");
+
+assert.sameValue(desc.value, Date.prototype.getUTCMonth, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-130.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-130.js
new file mode 100644
index 0000000000..7f84067ea8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-130.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-130
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.getUTCDate)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "getUTCDate");
+
+assert.sameValue(desc.value, Date.prototype.getUTCDate, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-131.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-131.js
new file mode 100644
index 0000000000..556ffa437c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-131.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-131
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.getUTCDay)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "getUTCDay");
+
+assert.sameValue(desc.value, Date.prototype.getUTCDay, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-132.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-132.js
new file mode 100644
index 0000000000..b406bfeb42
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-132.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-132
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.getUTCHours)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "getUTCHours");
+
+assert.sameValue(desc.value, Date.prototype.getUTCHours, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-133.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-133.js
new file mode 100644
index 0000000000..c35dac5d6e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-133.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-133
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.getUTCMinutes)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "getUTCMinutes");
+
+assert.sameValue(desc.value, Date.prototype.getUTCMinutes, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-134.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-134.js
new file mode 100644
index 0000000000..f14314b739
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-134.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-134
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.getUTCSeconds)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "getUTCSeconds");
+
+assert.sameValue(desc.value, Date.prototype.getUTCSeconds, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-135.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-135.js
new file mode 100644
index 0000000000..475a3a661d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-135.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-135
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.getUTCMilliseconds)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "getUTCMilliseconds");
+
+assert.sameValue(desc.value, Date.prototype.getUTCMilliseconds, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-136.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-136.js
new file mode 100644
index 0000000000..8fc7bd5e6a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-136.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-136
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.setTime)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "setTime");
+
+assert.sameValue(desc.value, Date.prototype.setTime, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-138.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-138.js
new file mode 100644
index 0000000000..462da4ce31
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-138.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-138
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.setFullYear)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "setFullYear");
+
+assert.sameValue(desc.value, Date.prototype.setFullYear, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-139.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-139.js
new file mode 100644
index 0000000000..f8db714857
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-139.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-139
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.setMonth)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "setMonth");
+
+assert.sameValue(desc.value, Date.prototype.setMonth, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-14.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-14.js
new file mode 100644
index 0000000000..51b97ffdcf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-14.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-14
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Object.getPrototypeOf)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Object, "getPrototypeOf");
+
+assert.sameValue(desc.value, Object.getPrototypeOf, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-140.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-140.js
new file mode 100644
index 0000000000..7bb449b89b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-140.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-140
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.setDate)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "setDate");
+
+assert.sameValue(desc.value, Date.prototype.setDate, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-141.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-141.js
new file mode 100644
index 0000000000..1af8ee104a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-141.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-141
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.setHours)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "setHours");
+
+assert.sameValue(desc.value, Date.prototype.setHours, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-142.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-142.js
new file mode 100644
index 0000000000..b389c484e0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-142.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-142
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.setMinutes)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "setMinutes");
+
+assert.sameValue(desc.value, Date.prototype.setMinutes, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-143.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-143.js
new file mode 100644
index 0000000000..7fe0b638d7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-143.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-143
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.setSeconds)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "setSeconds");
+
+assert.sameValue(desc.value, Date.prototype.setSeconds, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-144.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-144.js
new file mode 100644
index 0000000000..88535c90b4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-144.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-144
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.setMilliseconds)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "setMilliseconds");
+
+assert.sameValue(desc.value, Date.prototype.setMilliseconds, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-145.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-145.js
new file mode 100644
index 0000000000..824a344fe7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-145.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-145
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.setUTCFullYear)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "setUTCFullYear");
+
+assert.sameValue(desc.value, Date.prototype.setUTCFullYear, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-146.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-146.js
new file mode 100644
index 0000000000..8465599caa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-146.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-146
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.setUTCMonth)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "setUTCMonth");
+
+assert.sameValue(desc.value, Date.prototype.setUTCMonth, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-147.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-147.js
new file mode 100644
index 0000000000..fadf6b695d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-147.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-147
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.setUTCDate)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "setUTCDate");
+
+assert.sameValue(desc.value, Date.prototype.setUTCDate, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-148.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-148.js
new file mode 100644
index 0000000000..3b8b135407
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-148.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-148
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.setUTCHours)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "setUTCHours");
+
+assert.sameValue(desc.value, Date.prototype.setUTCHours, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-149.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-149.js
new file mode 100644
index 0000000000..8e533ddcfc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-149.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-149
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.setUTCMinutes)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "setUTCMinutes");
+
+assert.sameValue(desc.value, Date.prototype.setUTCMinutes, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-15.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-15.js
new file mode 100644
index 0000000000..c3f42af5c6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-15.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-15
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Object.getOwnPropertyDescriptor)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Object, "getOwnPropertyDescriptor");
+
+assert.sameValue(desc.value, Object.getOwnPropertyDescriptor, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-150.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-150.js
new file mode 100644
index 0000000000..d6b5b1b16c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-150.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-150
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.setUTCSeconds)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "setUTCSeconds");
+
+assert.sameValue(desc.value, Date.prototype.setUTCSeconds, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-151.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-151.js
new file mode 100644
index 0000000000..b7df94de1e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-151.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-151
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.setUTCMilliseconds)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "setUTCMilliseconds");
+
+assert.sameValue(desc.value, Date.prototype.setUTCMilliseconds, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-152.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-152.js
new file mode 100644
index 0000000000..449868c46c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-152.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-152
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.toLocaleString)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "toLocaleString");
+
+assert.sameValue(desc.value, Date.prototype.toLocaleString, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-153.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-153.js
new file mode 100644
index 0000000000..6099cf51c8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-153.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-153
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.toString)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "toString");
+
+assert.sameValue(desc.value, Date.prototype.toString, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-154.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-154.js
new file mode 100644
index 0000000000..e2d54ce6ae
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-154.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-154
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.toUTCString)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "toUTCString");
+
+assert.sameValue(desc.value, Date.prototype.toUTCString, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-156.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-156.js
new file mode 100644
index 0000000000..65c2f65295
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-156.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-156
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.toTimeString)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "toTimeString");
+
+assert.sameValue(desc.value, Date.prototype.toTimeString, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-157.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-157.js
new file mode 100644
index 0000000000..5d5162937b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-157.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-157
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.toDateString)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "toDateString");
+
+assert.sameValue(desc.value, Date.prototype.toDateString, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-158.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-158.js
new file mode 100644
index 0000000000..f11af2a897
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-158.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-158
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.toLocaleDateString)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "toLocaleDateString");
+
+assert.sameValue(desc.value, Date.prototype.toLocaleDateString, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-159.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-159.js
new file mode 100644
index 0000000000..c136a866d1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-159.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-159
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.toLocaleTimeString)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "toLocaleTimeString");
+
+assert.sameValue(desc.value, Date.prototype.toLocaleTimeString, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-16.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-16.js
new file mode 100644
index 0000000000..fa5e3c0c71
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-16.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-16
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Object.getOwnPropertyNames)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Object, "getOwnPropertyNames");
+
+assert.sameValue(desc.value, Object.getOwnPropertyNames, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-160.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-160.js
new file mode 100644
index 0000000000..8d7d787884
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-160.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-160
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.valueOf)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "valueOf");
+
+assert.sameValue(desc.value, Date.prototype.valueOf, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-161.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-161.js
new file mode 100644
index 0000000000..d56afdb5d3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-161.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-161
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.toISOString)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "toISOString");
+
+assert.sameValue(desc.value, Date.prototype.toISOString, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-162.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-162.js
new file mode 100644
index 0000000000..cba39e7d76
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-162.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-162
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Date.prototype.toJSON)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date.prototype, "toJSON");
+
+assert.sameValue(desc.value, Date.prototype.toJSON, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-163.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-163.js
new file mode 100644
index 0000000000..4dee6e6084
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-163.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-163
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (RegExp.prototype.constructor)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, "constructor");
+
+assert.sameValue(desc.value, RegExp.prototype.constructor, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-165.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-165.js
new file mode 100644
index 0000000000..bb3a204f5d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-165.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-165
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (RegExp.prototype.exec)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, "exec");
+
+assert.sameValue(desc.value, RegExp.prototype.exec, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-166.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-166.js
new file mode 100644
index 0000000000..e0bc70ad6a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-166.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-166
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (RegExp.prototype.test)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, "test");
+
+assert.sameValue(desc.value, RegExp.prototype.test, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-167.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-167.js
new file mode 100644
index 0000000000..26d6ce08ef
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-167.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-167
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (RegExp.prototype.toString)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, "toString");
+
+assert.sameValue(desc.value, RegExp.prototype.toString, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-168.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-168.js
new file mode 100644
index 0000000000..e0fe3f5569
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-168.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-168
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Error.prototype.constructor)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Error.prototype, "constructor");
+
+assert.sameValue(desc.value, Error.prototype.constructor, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-169.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-169.js
new file mode 100644
index 0000000000..f39abbf685
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-169.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-169
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Error.prototype.toString)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Error.prototype, "toString");
+
+assert.sameValue(desc.value, Error.prototype.toString, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-17.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-17.js
new file mode 100644
index 0000000000..4fd4086351
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-17.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-17
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Object.create)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Object, "create");
+
+assert.sameValue(desc.value, Object.create, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-170.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-170.js
new file mode 100644
index 0000000000..f73e6d8836
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-170.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-170
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (EvalError.prototype.constructor)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(EvalError.prototype, "constructor");
+
+assert.sameValue(desc.value, EvalError.prototype.constructor, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-171.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-171.js
new file mode 100644
index 0000000000..c89f306a5e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-171.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-171
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (RangeError.prototype.constructor)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RangeError.prototype, "constructor");
+
+assert.sameValue(desc.value, RangeError.prototype.constructor, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-172.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-172.js
new file mode 100644
index 0000000000..7214589979
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-172.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-172
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (ReferenceError.prototype.constructor)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(ReferenceError.prototype, "constructor");
+
+assert.sameValue(desc.value, ReferenceError.prototype.constructor, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-173.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-173.js
new file mode 100644
index 0000000000..9c711a2cbf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-173.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-173
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (SyntaxError.prototype.constructor)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(SyntaxError.prototype, "constructor");
+
+assert.sameValue(desc.value, SyntaxError.prototype.constructor, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-174.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-174.js
new file mode 100644
index 0000000000..70176f98ca
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-174.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-174
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (TypeError.prototype.constructor)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(TypeError.prototype, "constructor");
+
+assert.sameValue(desc.value, TypeError.prototype.constructor, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-175.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-175.js
new file mode 100644
index 0000000000..b630d0ebaf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-175.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-175
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (URIError.prototype.constructor)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(URIError.prototype, "constructor");
+
+assert.sameValue(desc.value, URIError.prototype.constructor, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-176.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-176.js
new file mode 100644
index 0000000000..11bee0214d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-176.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-176
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (JSON.stringify)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(JSON, "stringify");
+
+assert.sameValue(desc.value, JSON.stringify, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-177.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-177.js
new file mode 100644
index 0000000000..f79a9ae10f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-177.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-177
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (JSON.parse)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(JSON, "parse");
+
+assert.sameValue(desc.value, JSON.parse, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-178.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-178.js
new file mode 100644
index 0000000000..f7d1b280df
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-178.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-178
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (Global.NaN)
+---*/
+
+// in non-strict mode, 'this' is bound to the global object.
+var desc = Object.getOwnPropertyDescriptor(this, "NaN");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-179.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-179.js
new file mode 100644
index 0000000000..ea0205e24f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-179.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-179
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (Global.Infinity)
+---*/
+
+// in non-strict mode, 'this' is bound to the global object.
+var desc = Object.getOwnPropertyDescriptor(this, "Infinity");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-18.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-18.js
new file mode 100644
index 0000000000..7f658bbd3d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-18.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-18
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Object.defineProperty)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Object, "defineProperty");
+
+assert.sameValue(desc.value, Object.defineProperty, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-180.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-180.js
new file mode 100644
index 0000000000..c12a0b7d51
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-180.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-180
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (Global.undefined)
+---*/
+
+// in non-strict mode, 'this' is bound to the global object.
+var desc = Object.getOwnPropertyDescriptor(this, "undefined");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-182.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-182.js
new file mode 100644
index 0000000000..425a5102bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-182.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-182
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (Object.prototype)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Object, "prototype");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-183.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-183.js
new file mode 100644
index 0000000000..3b89d372f2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-183.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-183
+description: >
+ Object.getOwnPropertyDescriptor returns undefined for non-existent
+ property (arguments_1) on built-in object (Function)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Function, "arguments_1");
+
+assert.sameValue(desc, undefined, 'desc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-184.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-184.js
new file mode 100644
index 0000000000..b70872ab7c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-184.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-184
+description: >
+ Object.getOwnPropertyDescriptor returns undefined for non-existent
+ property (caller) on built-in object (Math)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "caller");
+
+assert.sameValue(desc, undefined, 'desc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-185.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-185.js
new file mode 100644
index 0000000000..605f20c296
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-185.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-185
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (Function.prototype)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Function, "prototype");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-186.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-186.js
new file mode 100644
index 0000000000..7b107ec576
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-186.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-186
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for properties
+ on built-ins (Function.length)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Function, "length");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-187.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-187.js
new file mode 100644
index 0000000000..cc6f4d5995
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-187.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-187
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for properties
+ on built-ins (Function (instance).length)
+---*/
+
+var f = Function('return 42;');
+
+var desc = Object.getOwnPropertyDescriptor(f, "length");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-188.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-188.js
new file mode 100644
index 0000000000..3adfe4f2de
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-188.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-188
+description: >
+ Object.getOwnPropertyDescriptor returns undefined for non-existent
+ properties on built-ins (Function (instance).name)
+---*/
+
+var f = Function('return 42;');
+var desc = Object.getOwnPropertyDescriptor(f, "functionNameHopefullyDoesNotExist");
+
+assert.sameValue(desc, undefined, 'desc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-189.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-189.js
new file mode 100644
index 0000000000..006e3aa3b7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-189.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-189
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (Array.prototype)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array, "prototype");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-19.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-19.js
new file mode 100644
index 0000000000..a1fbbf2921
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-19.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-19
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Object.defineProperties)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Object, "defineProperties");
+
+assert.sameValue(desc.value, Object.defineProperties, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-190.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-190.js
new file mode 100644
index 0000000000..d4ee6e7174
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-190.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-190
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (String.prototype)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(String, "prototype");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-191.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-191.js
new file mode 100644
index 0000000000..3ae8370e84
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-191.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-191
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for properties
+ on built-ins (String.length)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(String, "length");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-192.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-192.js
new file mode 100644
index 0000000000..b49bf24e36
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-192.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-192
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (String (instance).length)
+---*/
+
+var s = new String("abc");
+var desc = Object.getOwnPropertyDescriptor(s, "length");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-193.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-193.js
new file mode 100644
index 0000000000..e2a7e7d55a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-193.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-193
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (Boolean.prototype)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Boolean, "prototype");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-194.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-194.js
new file mode 100644
index 0000000000..c9519b940b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-194.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-194
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for properties
+ on built-ins (Boolean.length)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Boolean, "length");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-195.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-195.js
new file mode 100644
index 0000000000..7f43128117
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-195.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-195
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (Number.prototype)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Number, "prototype");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-196.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-196.js
new file mode 100644
index 0000000000..27d1f48734
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-196.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-196
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (Number.MAX_VALUE)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Number, "MAX_VALUE");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-197.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-197.js
new file mode 100644
index 0000000000..7bddeadb33
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-197.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-197
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (Number.MIN_VALUE)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Number, "MIN_VALUE");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-198.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-198.js
new file mode 100644
index 0000000000..0d07b3f85d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-198.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-198
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (Number.NaN)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Number, "NaN");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-199.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-199.js
new file mode 100644
index 0000000000..d3c9bdab65
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-199.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-199
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (Number.NEGATIVE_INFINITY)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Number, "NEGATIVE_INFINITY");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-2.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-2.js
new file mode 100644
index 0000000000..ba30aa8857
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-2.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-2
+description: >
+ Object.getOwnPropertyDescriptor returns undefined for non-existent
+ properties
+---*/
+
+var o = {};
+
+var desc = Object.getOwnPropertyDescriptor(o, "foo");
+
+assert.sameValue(desc, undefined, 'desc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-20.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-20.js
new file mode 100644
index 0000000000..3d713c9579
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-20.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-20
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Object.seal)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Object, "seal");
+
+assert.sameValue(desc.value, Object.seal, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-200.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-200.js
new file mode 100644
index 0000000000..1c91baad5f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-200.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-200
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (Number.POSITIVE_INFINITY)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Number, "POSITIVE_INFINITY");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-201.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-201.js
new file mode 100644
index 0000000000..fdb7e7f990
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-201.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-201
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for properties
+ on built-ins (Number.length)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Number, "length");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-202.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-202.js
new file mode 100644
index 0000000000..bc15a7bad2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-202.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-202
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (Math.E)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "E");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-203.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-203.js
new file mode 100644
index 0000000000..810f1b4240
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-203.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-203
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (Math.LN10)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "LN10");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-204.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-204.js
new file mode 100644
index 0000000000..095a19ffa7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-204.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-204
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (Math.LN2)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "LN2");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-205.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-205.js
new file mode 100644
index 0000000000..b3e2729f82
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-205.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-205
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (Math.LOG2E)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "LOG2E");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-206.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-206.js
new file mode 100644
index 0000000000..e32f662d76
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-206.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-206
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (Math.LOG10E)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "LOG10E");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-207.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-207.js
new file mode 100644
index 0000000000..926f1a47e3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-207.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-207
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (Math.PI)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "PI");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-208.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-208.js
new file mode 100644
index 0000000000..130b691b24
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-208.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-208
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (Math.SQRT1_2)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "SQRT1_2");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-209.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-209.js
new file mode 100644
index 0000000000..e8e1ce2593
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-209.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-209
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (Math.SQRT2)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "SQRT2");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-21.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-21.js
new file mode 100644
index 0000000000..372af5925c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-21.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-21
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Object.freeze)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Object, "freeze");
+
+assert.sameValue(desc.value, Object.freeze, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-210.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-210.js
new file mode 100644
index 0000000000..6627fbc6d9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-210.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-210
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (Date.prototype)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Date, "prototype");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-211.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-211.js
new file mode 100644
index 0000000000..c2c318e9da
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-211.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-211
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (RegExp.prototype)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp, "prototype");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-212.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-212.js
new file mode 100644
index 0000000000..db63609de5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-212.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-212
+description: >
+ Object.getOwnPropertyDescriptor returns accessor desc for
+ accessors on built-ins (RegExp.prototype.source)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, "source");
+
+assert.sameValue(desc.hasOwnProperty('writable'), false, 'desc.hasOwnProperty("writable")');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+assert.sameValue(typeof desc.get, 'function', 'typeof desc.get');
+assert.sameValue(desc.set, undefined, 'desc.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-213.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-213.js
new file mode 100644
index 0000000000..7ab60020d1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-213.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-213
+description: >
+ Object.getOwnPropertyDescriptor returns accessor desc for
+ accessors on built-ins (RegExp.prototype.global)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, "global");
+
+assert.sameValue(desc.hasOwnProperty('writable'), false, 'desc.hasOwnProperty("writable")');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+assert.sameValue(typeof desc.get, 'function', 'typeof desc.get');
+assert.sameValue(desc.set, undefined, 'desc.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-214.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-214.js
new file mode 100644
index 0000000000..f31934c5a8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-214.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-214
+description: >
+ Object.getOwnPropertyDescriptor returns accessor desc for
+ accessors on built-ins (RegExp.prototype.ignoreCase)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, "ignoreCase");
+
+assert.sameValue(desc.hasOwnProperty('writable'), false, 'desc.hasOwnProperty("writable")');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+assert.sameValue(typeof desc.get, 'function', 'typeof desc.get');
+assert.sameValue(desc.set, undefined, 'desc.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-215.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-215.js
new file mode 100644
index 0000000000..c8ad302670
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-215.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-215
+description: >
+ Object.getOwnPropertyDescriptor returns accessor desc for
+ accessors on built-ins (RegExp.prototype.multiline)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RegExp.prototype, "multiline");
+
+assert.sameValue(desc.hasOwnProperty('writable'), false, 'desc.hasOwnProperty("writable")');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+assert.sameValue(typeof desc.get, 'function', 'typeof desc.get');
+assert.sameValue(desc.set, undefined, 'desc.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-216.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-216.js
new file mode 100644
index 0000000000..f47ac73c46
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-216.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-216
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (Error.prototype)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Error, "prototype");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-217.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-217.js
new file mode 100644
index 0000000000..3cc770a3a6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-217.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-217
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (EvalError.prototype)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(EvalError, "prototype");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-218.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-218.js
new file mode 100644
index 0000000000..9e7dfdd289
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-218.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-218
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (RangeError.prototype)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(RangeError, "prototype");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-219.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-219.js
new file mode 100644
index 0000000000..af360b7283
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-219.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-219
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (ReferenceError.prototype)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(ReferenceError, "prototype");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-22.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-22.js
new file mode 100644
index 0000000000..f16ab1db74
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-22.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-22
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Object.preventExtensions)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Object, "preventExtensions");
+
+assert.sameValue(desc.value, Object.preventExtensions, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-220.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-220.js
new file mode 100644
index 0000000000..3eae72714a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-220.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-220
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (SyntaxError.prototype)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(SyntaxError, "prototype");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-221.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-221.js
new file mode 100644
index 0000000000..6dff9d1a2c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-221.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-221
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (TypeError.prototype)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(TypeError, "prototype");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-222.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-222.js
new file mode 100644
index 0000000000..bc0f7da6a4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-222.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-222
+description: >
+ Object.getOwnPropertyDescriptor returns data desc (all false) for
+ properties on built-ins (URIError.prototype)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(URIError, "prototype");
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+assert.sameValue(desc.hasOwnProperty('get'), false, 'desc.hasOwnProperty("get")');
+assert.sameValue(desc.hasOwnProperty('set'), false, 'desc.hasOwnProperty("set")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-223.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-223.js
new file mode 100644
index 0000000000..2bd0041cfd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-223.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-223
+description: >
+ Object.getOwnPropertyDescriptor - ensure that 'value' property of
+ returned object is data property with correct 'value' attribute
+---*/
+
+var obj = {
+ "property": "ownDataProperty"
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+assert.sameValue(desc.value, "ownDataProperty", 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-224.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-224.js
new file mode 100644
index 0000000000..eb31a99398
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-224.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-224
+description: >
+ Object.getOwnPropertyDescriptor - ensure that 'value' property of
+ returned object is data property with correct 'writable' attribute
+---*/
+
+var obj = {
+ "property": "ownDataProperty"
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+desc.value = "overwriteDataProperty";
+
+assert.sameValue(desc.value, "overwriteDataProperty", 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-225.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-225.js
new file mode 100644
index 0000000000..84f15fb669
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-225.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-225
+description: >
+ Object.getOwnPropertyDescriptor - ensure that 'value' property of
+ returned object is data property with correct 'enumerable'
+ attribute
+---*/
+
+var obj = {
+ "property": "ownDataProperty"
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+var accessed = false;
+
+for (var prop in desc) {
+ if (prop === "value") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-226.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-226.js
new file mode 100644
index 0000000000..4751c5ff0e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-226.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-226
+description: >
+ Object.getOwnPropertyDescriptor - ensure that 'value' property of
+ returned object is data property with correct 'configurable'
+ attribute
+---*/
+
+var obj = {
+ "property": "ownDataProperty"
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+var propDefined = "value" in desc;
+
+delete desc.value;
+var propDeleted = "value" in desc;
+
+assert(propDefined, 'propDefined !== true');
+assert.sameValue(propDeleted, false, 'propDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-227.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-227.js
new file mode 100644
index 0000000000..7fc5895443
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-227.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-227
+description: >
+ Object.getOwnPropertyDescriptor - ensure that 'writable' property
+ of returned object is data property with correct 'value' attribute
+---*/
+
+var obj = {
+ "property": "ownDataProperty"
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+assert.sameValue(desc.writable, true, 'desc.writable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-228.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-228.js
new file mode 100644
index 0000000000..c7b9b74cc9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-228.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-228
+description: >
+ Object.getOwnPropertyDescriptor - ensure that 'writable' property
+ of returned object is data property with correct 'writable'
+ attribute
+---*/
+
+var obj = {
+ "property": "ownDataProperty"
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+desc.writable = "overwriteDataProperty";
+
+assert.sameValue(desc.writable, "overwriteDataProperty", 'desc.writable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-229.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-229.js
new file mode 100644
index 0000000000..bf14d985f1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-229.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-229
+description: >
+ Object.getOwnPropertyDescriptor - ensure that 'writable' property
+ of returned object is data property with correct 'enumerable'
+ attribute
+---*/
+
+var obj = {
+ "property": "ownDataProperty"
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+var accessed = false;
+
+for (var props in desc) {
+ if (props === "writable") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-23.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-23.js
new file mode 100644
index 0000000000..ce5420d4d0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-23.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-23
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Object.isSealed)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Object, "isSealed");
+
+assert.sameValue(desc.value, Object.isSealed, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-230.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-230.js
new file mode 100644
index 0000000000..bd177ef9cc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-230.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-230
+description: >
+ Object.getOwnPropertyDescriptor - ensure that 'writable' property
+ of returned object is data property with correct 'configurable'
+ attribute
+---*/
+
+var obj = {
+ "property": "ownDataProperty"
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+var propDefined = ("writable" in desc);
+
+delete desc.writable;
+var propDeleted = "writable" in desc;
+
+assert(propDefined, 'propDefined !== true');
+assert.sameValue(propDeleted, false, 'propDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-231.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-231.js
new file mode 100644
index 0000000000..1b29bf914c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-231.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-231
+description: >
+ Object.getOwnPropertyDescriptor - ensure that 'enumerable'
+ property of returned object is data property with correct 'value'
+ attribute
+---*/
+
+var obj = {
+ "property": "ownDataProperty"
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+assert.sameValue(desc.enumerable, true, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-232.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-232.js
new file mode 100644
index 0000000000..5638dba1ea
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-232.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-232
+description: >
+ Object.getOwnPropertyDescriptor - ensure that 'enumerable'
+ property of returned object is data property with correct
+ 'writable' attribute
+---*/
+
+var obj = {
+ "property": "ownDataProperty"
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+desc.enumerable = "overwriteDataProperty";
+
+assert.sameValue(desc.enumerable, "overwriteDataProperty", 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-233.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-233.js
new file mode 100644
index 0000000000..a0a304e8fc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-233.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-233
+description: >
+ Object.getOwnPropertyDescriptor - ensure that 'enumerable'
+ property of returned object is data property with correct
+ 'enumerable' attribute
+---*/
+
+var obj = {
+ "property": "ownDataProperty"
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+var accessed = false;
+
+for (var props in desc) {
+ if (props === "enumerable") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-234.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-234.js
new file mode 100644
index 0000000000..8df4878d91
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-234.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-234
+description: >
+ Object.getOwnPropertyDescriptor - ensure that 'enumerable'
+ property of returned object is data property with correct
+ 'configurable' attribute
+---*/
+
+var obj = {
+ "property": "ownDataProperty"
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+var propDefined = "enumerable" in desc;
+
+delete desc.enumerable;
+var propDeleted = "enumerable" in desc;
+
+assert(propDefined, 'propDefined !== true');
+assert.sameValue(propDeleted, false, 'propDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-235.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-235.js
new file mode 100644
index 0000000000..e4b48f40d1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-235.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-235
+description: >
+ Object.getOwnPropertyDescriptor - ensure that 'configurable'
+ property of returned object is data property with correct 'value'
+ attribute
+---*/
+
+var obj = {
+ "property": "ownDataProperty"
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-236.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-236.js
new file mode 100644
index 0000000000..f6b87d663d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-236.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-236
+description: >
+ Object.getOwnPropertyDescriptor - ensure that 'configurable'
+ property of returned object is data property with correct
+ 'writable' attribute
+---*/
+
+var obj = {
+ "property": "ownDataProperty"
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+desc.writable = "overwriteDataProperty";
+
+assert.sameValue(desc.writable, "overwriteDataProperty", 'desc.writable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-237.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-237.js
new file mode 100644
index 0000000000..0c435d80cc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-237.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-237
+description: >
+ Object.getOwnPropertyDescriptor - ensure that 'configurable'
+ property of returned object is data property with correct
+ 'enumerable' attribute
+---*/
+
+var obj = {
+ "property": "ownDataProperty"
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+var accessed = false;
+
+for (var prop in desc) {
+ if (prop === "configurable") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-238.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-238.js
new file mode 100644
index 0000000000..73d89c7085
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-238.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-238
+description: >
+ Object.getOwnPropertyDescriptor - ensure that 'configurable'
+ property of returned object is data property with correct
+ 'configurable' attribute
+---*/
+
+var obj = {
+ "property": "ownDataProperty"
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+var propDefined = "configurable" in desc;
+
+delete desc.configurable;
+var propDeleted = "configurable" in desc;
+
+assert(propDefined, 'propDefined !== true');
+assert.sameValue(propDeleted, false, 'propDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-239.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-239.js
new file mode 100644
index 0000000000..30acb61693
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-239.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-239
+description: >
+ Object.getOwnPropertyDescriptor - ensure that 'get' property of
+ returned object is data property with correct 'value' attribute
+---*/
+
+var obj = {};
+var fun = function() {
+ return "ownDataProperty";
+};
+Object.defineProperty(obj, "property", {
+ get: fun,
+ configurable: true
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+assert.sameValue(desc.get, fun, 'desc.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-24.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-24.js
new file mode 100644
index 0000000000..7ae3aef657
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-24.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-24
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Object.isFrozen)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Object, "isFrozen");
+
+assert.sameValue(desc.value, Object.isFrozen, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-240.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-240.js
new file mode 100644
index 0000000000..a46946486a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-240.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-240
+description: >
+ Object.getOwnPropertyDescriptor - ensure that 'get' property of
+ returned object is data property with correct 'writable' attribute
+---*/
+
+var obj = {};
+var fun = function() {
+ return "ownGetProperty";
+};
+Object.defineProperty(obj, "property", {
+ get: fun,
+ configurable: true
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+desc.get = "overwriteGetProperty";
+
+assert.sameValue(desc.get, "overwriteGetProperty", 'desc.get');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-241.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-241.js
new file mode 100644
index 0000000000..ca68c85bb4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-241.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-241
+description: >
+ Object.getOwnPropertyDescriptor - ensure that 'get' property of
+ returned object is data property with correct 'enumerable'
+ attribute
+---*/
+
+var obj = {};
+var fun = function() {
+ return "ownDataProperty";
+};
+Object.defineProperty(obj, "property", {
+ get: fun,
+ configurable: true
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+var accessed = false;
+
+for (var prop in desc) {
+ if (prop === "get") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-242.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-242.js
new file mode 100644
index 0000000000..b467d098d3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-242.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-242
+description: >
+ Object.getOwnPropertyDescriptor - ensure that 'get' property of
+ returned object is data property with correct 'configurable'
+ attribute
+---*/
+
+var obj = {};
+var fun = function() {
+ return "ownDataProperty";
+};
+Object.defineProperty(obj, "property", {
+ get: fun,
+ configurable: true
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+var propDefined = "get" in desc;
+
+delete desc.get;
+var propDeleted = "get" in desc;
+
+assert(propDefined, 'propDefined !== true');
+assert.sameValue(propDeleted, false, 'propDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-243.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-243.js
new file mode 100644
index 0000000000..087133ab6e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-243.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-243
+description: >
+ Object.getOwnPropertyDescriptor - ensure that 'set' property of
+ returned object is data property with correct 'value' attribute
+---*/
+
+var obj = {};
+var fun = function() {
+ return "ownSetProperty";
+};
+Object.defineProperty(obj, "property", {
+ set: fun,
+ configurable: true
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+assert.sameValue(desc.set, fun, 'desc.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-244.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-244.js
new file mode 100644
index 0000000000..062e117262
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-244.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-244
+description: >
+ Object.getOwnPropertyDescriptor - ensure that 'set' property of
+ returned object is data property with correct 'writable' attribute
+---*/
+
+var obj = {};
+var fun = function() {
+ return "ownSetProperty";
+};
+Object.defineProperty(obj, "property", {
+ set: fun,
+ configurable: true
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+desc.set = "overwriteSetProperty";
+
+assert.sameValue(desc.set, "overwriteSetProperty", 'desc.set');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-245.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-245.js
new file mode 100644
index 0000000000..0b78b68e16
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-245.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-245
+description: >
+ Object.getOwnPropertyDescriptor - ensure that 'set' property of
+ returned object is data property with correct 'enumerable'
+ attribute
+---*/
+
+var obj = {};
+var fun = function() {
+ return "ownSetProperty";
+};
+Object.defineProperty(obj, "property", {
+ set: fun,
+ configurable: true
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+var accessed = false;
+
+for (var prop in desc) {
+ if (prop === "set") {
+ accessed = true;
+ }
+}
+
+assert(accessed, 'accessed !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-246.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-246.js
new file mode 100644
index 0000000000..410c27ac8a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-246.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-246
+description: >
+ Object.getOwnPropertyDescriptor - ensure that 'set' property of
+ returned object is data property with correct 'configurable'
+ attribute
+---*/
+
+var obj = {};
+var fun = function() {
+ return "ownSetProperty";
+};
+Object.defineProperty(obj, "property", {
+ set: fun,
+ configurable: true
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+var propDefined = "set" in desc;
+
+delete desc.set;
+var propDeleted = "set" in desc;
+
+assert(propDefined, 'propDefined !== true');
+assert.sameValue(propDeleted, false, 'propDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-247.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-247.js
new file mode 100644
index 0000000000..0021504dd1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-247.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-247
+description: >
+ Object.getOwnPropertyDescriptor - returned value is an instance of
+ object
+---*/
+
+var obj = {
+ "property": 100
+};
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+assert(desc instanceof Object, 'desc instanceof Object !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-248.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-248.js
new file mode 100644
index 0000000000..fc2aeef3e5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-248.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-248
+description: >
+ Object.getOwnPropertyDescriptor - returned object contains the
+ property 'value' if the value of property 'value' is not
+ explicitly specified when defined by Object.defineProperty
+---*/
+
+var obj = {};
+Object.defineProperty(obj, "property", {
+ writable: true,
+ configurable: true
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+assert("value" in desc, '"value" in desc !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-249.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-249.js
new file mode 100644
index 0000000000..95524c4c88
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-249.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-249
+description: >
+ Object.getOwnPropertyDescriptor - returned object contains the
+ property 'set' if the value of property 'set' is not explicitly
+ specified when defined by Object.defineProperty.
+---*/
+
+var obj = {};
+Object.defineProperty(obj, "property", {
+ get: function() {},
+ configurable: true
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+assert("set" in desc, '"set" in desc !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-25.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-25.js
new file mode 100644
index 0000000000..ca213ff477
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-25.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-25
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Object.isExtensible)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Object, "isExtensible");
+
+assert.sameValue(desc.value, Object.isExtensible, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-250.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-250.js
new file mode 100644
index 0000000000..a56f525cf0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-250.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-250
+description: >
+ Object.getOwnPropertyDescriptor - returned object contains the
+ property 'get' if the value of property 'get' is not explicitly
+ specified when defined by Object.defineProperty.
+---*/
+
+var obj = {};
+Object.defineProperty(obj, "property", {
+ set: function() {},
+ configurable: true
+});
+
+var desc = Object.getOwnPropertyDescriptor(obj, "property");
+
+assert("get" in desc, '"get" in desc !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-26.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-26.js
new file mode 100644
index 0000000000..866ad4b1b4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-26.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-26
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Object.keys)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Object, "keys");
+
+assert.sameValue(desc.value, Object.keys, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-27.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-27.js
new file mode 100644
index 0000000000..1627606565
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-27.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-27
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Object.prototype.constructor)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Object.prototype, "constructor");
+
+assert.sameValue(desc.value, Object.prototype.constructor, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-28.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-28.js
new file mode 100644
index 0000000000..bc1720d501
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-28.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-28
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Object.prototype.toString)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Object.prototype, "toString");
+
+assert.sameValue(desc.value, Object.prototype.toString, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-29.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-29.js
new file mode 100644
index 0000000000..34a582dd2b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-29.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-29
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Object.prototype.valueOf)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Object.prototype, "valueOf");
+
+assert.sameValue(desc.value, Object.prototype.valueOf, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-3.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-3.js
new file mode 100644
index 0000000000..665fedeb26
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-3.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-3
+description: >
+ Object.getOwnPropertyDescriptor returns an object representing an
+ accessor desc for valid accessor properties
+---*/
+
+var o = {};
+
+// dummy getter
+var getter = function() {
+ return 1;
+}
+var d = {
+ get: getter
+};
+
+Object.defineProperty(o, "foo", d);
+
+var desc = Object.getOwnPropertyDescriptor(o, "foo");
+
+assert.sameValue(desc.get, getter, 'desc.get');
+assert.sameValue(desc.set, undefined, 'desc.set');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-30.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-30.js
new file mode 100644
index 0000000000..335bb6ed51
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-30.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-30
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Object.prototype.isPrototypeOf)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Object.prototype, "isPrototypeOf");
+
+assert.sameValue(desc.value, Object.prototype.isPrototypeOf, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-31.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-31.js
new file mode 100644
index 0000000000..9d31bbb873
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-31.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-31
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Object.prototype.hasOwnProperty)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Object.prototype, "hasOwnProperty");
+
+assert.sameValue(desc.value, Object.prototype.hasOwnProperty, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-32.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-32.js
new file mode 100644
index 0000000000..efab129600
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-32.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-32
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Object.prototype.propertyIsEnumerable)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Object.prototype, "propertyIsEnumerable");
+
+assert.sameValue(desc.value, Object.prototype.propertyIsEnumerable, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-33.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-33.js
new file mode 100644
index 0000000000..fab259eea9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-33.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-33
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Object.prototype.toLocaleString)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Object.prototype, "toLocaleString");
+
+assert.sameValue(desc.value, Object.prototype.toLocaleString, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-34.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-34.js
new file mode 100644
index 0000000000..f1cd3d8a6e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-34.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-34
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Function.prototype.constructor)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Function.prototype, "constructor");
+
+assert.sameValue(desc.value, Function.prototype.constructor, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-35.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-35.js
new file mode 100644
index 0000000000..11c1377559
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-35.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-35
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Function.prototype.toString)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Function.prototype, "toString");
+
+assert.sameValue(desc.value, Function.prototype.toString, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-36.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-36.js
new file mode 100644
index 0000000000..c5f07a8cc0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-36.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-36
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Function.prototype.apply)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Function.prototype, "apply");
+
+assert.sameValue(desc.value, Function.prototype.apply, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-37.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-37.js
new file mode 100644
index 0000000000..97b2e4d5f7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-37.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-37
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Function.prototype.call)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Function.prototype, "call");
+
+assert.sameValue(desc.value, Function.prototype.call, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-38.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-38.js
new file mode 100644
index 0000000000..9a98a1e682
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-38.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-38
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Function.prototype.bind)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Function.prototype, "bind");
+
+assert.sameValue(desc.value, Function.prototype.bind, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-39.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-39.js
new file mode 100644
index 0000000000..07ed450b26
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-39.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-39
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Array.prototype.constructor)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "constructor");
+
+assert.sameValue(desc.value, Array.prototype.constructor, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-4.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-4.js
new file mode 100644
index 0000000000..6236cb3129
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-4.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-4
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Global.eval)
+---*/
+
+var global = this;
+var desc = Object.getOwnPropertyDescriptor(global, "eval");
+
+assert.sameValue(desc.value, global.eval, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-40.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-40.js
new file mode 100644
index 0000000000..6e8ebfded0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-40.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-40
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Array.prototype.concat)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "concat");
+
+assert.sameValue(desc.value, Array.prototype.concat, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-41.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-41.js
new file mode 100644
index 0000000000..262643ef51
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-41.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-41
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Array.prototype.join)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "join");
+
+assert.sameValue(desc.value, Array.prototype.join, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-42.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-42.js
new file mode 100644
index 0000000000..a26ce340df
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-42.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-42
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Array.prototype.reverse)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "reverse");
+
+assert.sameValue(desc.value, Array.prototype.reverse, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-43.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-43.js
new file mode 100644
index 0000000000..76b806cb2a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-43.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-43
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Array.prototype.slice)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "slice");
+
+assert.sameValue(desc.value, Array.prototype.slice, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-44.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-44.js
new file mode 100644
index 0000000000..a451a8ba28
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-44.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-44
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Array.prototype.sort)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "sort");
+
+assert.sameValue(desc.value, Array.prototype.sort, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-45.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-45.js
new file mode 100644
index 0000000000..ba97991bf8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-45.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-45
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Array.prototype.toString)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "toString");
+
+assert.sameValue(desc.value, Array.prototype.toString, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-46.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-46.js
new file mode 100644
index 0000000000..cdc116c826
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-46.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-46
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Array.prototype.push)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "push");
+
+assert.sameValue(desc.value, Array.prototype.push, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-47.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-47.js
new file mode 100644
index 0000000000..f22030ba6e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-47.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-47
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Array.prototype.pop)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "pop");
+
+assert.sameValue(desc.value, Array.prototype.pop, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-48.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-48.js
new file mode 100644
index 0000000000..d09e40394b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-48.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-48
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Array.prototype.shift)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "shift");
+
+assert.sameValue(desc.value, Array.prototype.shift, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-49.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-49.js
new file mode 100644
index 0000000000..d6aa49706f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-49.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-49
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Array.prototype.unshift)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "unshift");
+
+assert.sameValue(desc.value, Array.prototype.unshift, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-5.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-5.js
new file mode 100644
index 0000000000..6e26629d3d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-5.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-5
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Global.parseInt)
+---*/
+
+var global = this;
+var desc = Object.getOwnPropertyDescriptor(global, "parseInt");
+
+assert.sameValue(desc.value, global.parseInt, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-50.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-50.js
new file mode 100644
index 0000000000..688471b9dd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-50.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-50
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Array.prototype.splice)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "splice");
+
+assert.sameValue(desc.value, Array.prototype.splice, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-51.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-51.js
new file mode 100644
index 0000000000..860edfc307
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-51.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-51
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Array.prototype.toLocaleString)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "toLocaleString");
+
+assert.sameValue(desc.value, Array.prototype.toLocaleString, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-52.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-52.js
new file mode 100644
index 0000000000..415f360499
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-52.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-52
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Array.prototype.indexOf)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "indexOf");
+
+assert.sameValue(desc.value, Array.prototype.indexOf, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-53.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-53.js
new file mode 100644
index 0000000000..0b13425630
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-53.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-53
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Array.prototype.lastIndexOf)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "lastIndexOf");
+
+assert.sameValue(desc.value, Array.prototype.lastIndexOf, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-54.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-54.js
new file mode 100644
index 0000000000..43fb34a02a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-54.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-54
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Array.prototype.every)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "every");
+
+assert.sameValue(desc.value, Array.prototype.every, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-55.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-55.js
new file mode 100644
index 0000000000..e5b699c4fc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-55.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-55
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Array.prototype.some)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "some");
+
+assert.sameValue(desc.value, Array.prototype.some, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-56.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-56.js
new file mode 100644
index 0000000000..e8d73ca12e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-56.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-56
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Array.prototype.forEach)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "forEach");
+
+assert.sameValue(desc.value, Array.prototype.forEach, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-57.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-57.js
new file mode 100644
index 0000000000..76b1657d15
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-57.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-57
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Array.prototype.map)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "map");
+
+assert.sameValue(desc.value, Array.prototype.map, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-58.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-58.js
new file mode 100644
index 0000000000..fdf25934b7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-58.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-58
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Array.prototype.filter)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "filter");
+
+assert.sameValue(desc.value, Array.prototype.filter, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-59.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-59.js
new file mode 100644
index 0000000000..9e783f9198
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-59.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-59
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Array.prototype.reduce)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "reduce");
+
+assert.sameValue(desc.value, Array.prototype.reduce, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-6.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-6.js
new file mode 100644
index 0000000000..e8c156452b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-6.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-6
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Global.parseFloat)
+---*/
+
+var global = this;
+var desc = Object.getOwnPropertyDescriptor(global, "parseFloat");
+
+assert.sameValue(desc.value, global.parseFloat, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-60.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-60.js
new file mode 100644
index 0000000000..a6a9ef79ba
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-60.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-60
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Array.prototype.reduceRight)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Array.prototype, "reduceRight");
+
+assert.sameValue(desc.value, Array.prototype.reduceRight, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-61.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-61.js
new file mode 100644
index 0000000000..6c476afb0a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-61.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-61
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (String.fromCharCode)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(String, "fromCharCode");
+
+assert.sameValue(desc.value, String.fromCharCode, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-62.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-62.js
new file mode 100644
index 0000000000..1833ef4ecb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-62.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-62
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (String.prototype.constructor)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(String.prototype, "constructor");
+
+assert.sameValue(desc.value, String.prototype.constructor, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-63.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-63.js
new file mode 100644
index 0000000000..aba9c72151
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-63.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-63
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (String.prototype.charAt)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(String.prototype, "charAt");
+
+assert.sameValue(desc.value, String.prototype.charAt, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-64.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-64.js
new file mode 100644
index 0000000000..bdbe8f1489
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-64.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-64
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (String.prototype.charCodeAt)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(String.prototype, "charCodeAt");
+
+assert.sameValue(desc.value, String.prototype.charCodeAt, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-65.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-65.js
new file mode 100644
index 0000000000..1ea1692892
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-65.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-65
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (String.prototype.concat)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(String.prototype, "concat");
+
+assert.sameValue(desc.value, String.prototype.concat, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-66.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-66.js
new file mode 100644
index 0000000000..b227e759af
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-66.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-66
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (String.prototype.indexOf)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(String.prototype, "indexOf");
+
+assert.sameValue(desc.value, String.prototype.indexOf, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-67.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-67.js
new file mode 100644
index 0000000000..be42df3691
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-67.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-67
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (String.prototype.lastIndexOf)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(String.prototype, "lastIndexOf");
+
+assert.sameValue(desc.value, String.prototype.lastIndexOf, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-68.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-68.js
new file mode 100644
index 0000000000..1f86913651
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-68.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-68
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (String.prototype.match)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(String.prototype, "match");
+
+assert.sameValue(desc.value, String.prototype.match, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-69.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-69.js
new file mode 100644
index 0000000000..24b6448499
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-69.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-69
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (String.prototype.replace)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(String.prototype, "replace");
+
+assert.sameValue(desc.value, String.prototype.replace, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-7.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-7.js
new file mode 100644
index 0000000000..b94227b295
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-7.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-7
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Global.isNaN)
+---*/
+
+var global = this;
+var desc = Object.getOwnPropertyDescriptor(global, "isNaN");
+
+assert.sameValue(desc.value, global.isNaN, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-70.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-70.js
new file mode 100644
index 0000000000..c7a7af9a14
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-70.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-70
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (String.prototype.search)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(String.prototype, "search");
+
+assert.sameValue(desc.value, String.prototype.search, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-71.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-71.js
new file mode 100644
index 0000000000..48dc039f25
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-71.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-71
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (String.prototype.slice)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(String.prototype, "slice");
+
+assert.sameValue(desc.value, String.prototype.slice, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-72.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-72.js
new file mode 100644
index 0000000000..30f8f837c8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-72.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-72
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (String.prototype.split)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(String.prototype, "split");
+
+assert.sameValue(desc.value, String.prototype.split, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-73.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-73.js
new file mode 100644
index 0000000000..a39309e25c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-73.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-73
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (String.prototype.substring)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(String.prototype, "substring");
+
+assert.sameValue(desc.value, String.prototype.substring, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-75.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-75.js
new file mode 100644
index 0000000000..e7dc9d491b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-75.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-75
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (String.prototype.toLowerCase)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(String.prototype, "toLowerCase");
+
+assert.sameValue(desc.value, String.prototype.toLowerCase, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-76.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-76.js
new file mode 100644
index 0000000000..15287a82d8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-76.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-76
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (String.prototype.toString)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(String.prototype, "toString");
+
+assert.sameValue(desc.value, String.prototype.toString, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-77.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-77.js
new file mode 100644
index 0000000000..f77e8a409f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-77.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-77
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (String.prototype.toUpperCase)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(String.prototype, "toUpperCase");
+
+assert.sameValue(desc.value, String.prototype.toUpperCase, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-78.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-78.js
new file mode 100644
index 0000000000..59a3cff252
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-78.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-78
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (String.prototype.valueOf)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(String.prototype, "valueOf");
+
+assert.sameValue(desc.value, String.prototype.valueOf, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-79.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-79.js
new file mode 100644
index 0000000000..952cef2fd8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-79.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-79
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (String.prototype.toLocaleLowerCase)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(String.prototype, "toLocaleLowerCase");
+
+assert.sameValue(desc.value, String.prototype.toLocaleLowerCase, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-8.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-8.js
new file mode 100644
index 0000000000..d1735d1160
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-8.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-8
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Global.isFinite)
+---*/
+
+var global = this;
+var desc = Object.getOwnPropertyDescriptor(global, "isFinite");
+
+assert.sameValue(desc.value, global.isFinite, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-80.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-80.js
new file mode 100644
index 0000000000..60f04f718a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-80.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-80
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (String.prototype.toLocaleUpperCase)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(String.prototype, "toLocaleUpperCase");
+
+assert.sameValue(desc.value, String.prototype.toLocaleUpperCase, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-81.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-81.js
new file mode 100644
index 0000000000..3407ac9acd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-81.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-81
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (String.prototype.localeCompare)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(String.prototype, "localeCompare");
+
+assert.sameValue(desc.value, String.prototype.localeCompare, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-82.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-82.js
new file mode 100644
index 0000000000..02ee971728
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-82.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-82
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (String.prototype.trim)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(String.prototype, "trim");
+
+assert.sameValue(desc.value, String.prototype.trim, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-84.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-84.js
new file mode 100644
index 0000000000..f8838a37e7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-84.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-84
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Boolean.prototype.constructor)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Boolean.prototype, "constructor");
+
+assert.sameValue(desc.value, Boolean.prototype.constructor, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-85.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-85.js
new file mode 100644
index 0000000000..87db392c26
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-85.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-85
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Boolean.prototype.toString)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Boolean.prototype, "toString");
+
+assert.sameValue(desc.value, Boolean.prototype.toString, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-86.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-86.js
new file mode 100644
index 0000000000..1a975b833c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-86.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-86
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Boolean.prototype.valueOf)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Boolean.prototype, "valueOf");
+
+assert.sameValue(desc.value, Boolean.prototype.valueOf, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-88.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-88.js
new file mode 100644
index 0000000000..953b4a72b0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-88.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-88
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Number.prototype.constructor)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Number.prototype, "constructor");
+
+assert.sameValue(desc.value, Number.prototype.constructor, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-89.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-89.js
new file mode 100644
index 0000000000..209c97b996
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-89.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-89
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Number.prototype.toString)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Number.prototype, "toString");
+
+assert.sameValue(desc.value, Number.prototype.toString, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-9.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-9.js
new file mode 100644
index 0000000000..cc8d7dc3ff
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-9.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-9
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Global.decodeURI)
+---*/
+
+var global = this;
+var desc = Object.getOwnPropertyDescriptor(global, "decodeURI");
+
+assert.sameValue(desc.value, global.decodeURI, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-90.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-90.js
new file mode 100644
index 0000000000..2cc25ecc4d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-90.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-90
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Number.prototype.toLocaleString)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Number.prototype, "toLocaleString");
+
+assert.sameValue(desc.value, Number.prototype.toLocaleString, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-91.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-91.js
new file mode 100644
index 0000000000..3786fa4adb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-91.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-91
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Number.prototype.toFixed)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Number.prototype, "toFixed");
+
+assert.sameValue(desc.value, Number.prototype.toFixed, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-92.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-92.js
new file mode 100644
index 0000000000..e67bd4bc1d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-92.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-92
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Number.prototype.toExponential)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Number.prototype, "toExponential");
+
+assert.sameValue(desc.value, Number.prototype.toExponential, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-93.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-93.js
new file mode 100644
index 0000000000..79bfae84cb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-93.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-93
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Number.prototype.toPrecision)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Number.prototype, "toPrecision");
+
+assert.sameValue(desc.value, Number.prototype.toPrecision, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-94.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-94.js
new file mode 100644
index 0000000000..f1d73c25f6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-94.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-94
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Number.prototype.valueOf)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Number.prototype, "valueOf");
+
+assert.sameValue(desc.value, Number.prototype.valueOf, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-96.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-96.js
new file mode 100644
index 0000000000..244ce85c31
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-96.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-96
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Math.abs)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "abs");
+
+assert.sameValue(desc.value, Math.abs, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-97.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-97.js
new file mode 100644
index 0000000000..ee57711a7d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-97.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-97
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Math.acos)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "acos");
+
+assert.sameValue(desc.value, Math.acos, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-98.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-98.js
new file mode 100644
index 0000000000..6c9a049b70
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-98.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-98
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Math.asin)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "asin");
+
+assert.sameValue(desc.value, Math.asin, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-99.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-99.js
new file mode 100644
index 0000000000..7e707675af
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-99.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.3-4-99
+description: >
+ Object.getOwnPropertyDescriptor returns data desc for functions on
+ built-ins (Math.atan)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Math, "atan");
+
+assert.sameValue(desc.value, Math.atan, 'desc.value');
+assert.sameValue(desc.writable, true, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/browser.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/length.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/length.js
new file mode 100644
index 0000000000..4db7e7e00f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/length.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.getownpropertydescriptor
+description: >
+ Object.getOwnPropertyDescriptor.length is 2.
+info: |
+ Object.getOwnPropertyDescriptor ( O, P )
+
+ ECMAScript Standard Built-in Objects
+
+ Every built-in function object, including constructors, has a "length" property whose
+ value is an integer. Unless otherwise specified, this value is equal to the largest
+ number of named arguments shown in the subclause headings for the function description.
+
+ Unless otherwise specified, the "length" property of a built-in function object has
+ the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+verifyProperty(Object.getOwnPropertyDescriptor, "length", {
+ value: 2,
+ writable: false,
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/name.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/name.js
new file mode 100644
index 0000000000..8752810f81
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/name.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 19.1.2.6
+description: >
+ Object.getOwnPropertyDescriptor.name is "getOwnPropertyDescriptor".
+info: |
+ Object.getOwnPropertyDescriptor ( O, P )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.getOwnPropertyDescriptor.name, "getOwnPropertyDescriptor");
+
+verifyNotEnumerable(Object.getOwnPropertyDescriptor, "name");
+verifyNotWritable(Object.getOwnPropertyDescriptor, "name");
+verifyConfigurable(Object.getOwnPropertyDescriptor, "name");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/not-a-constructor.js
new file mode 100644
index 0000000000..af851726d6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.getOwnPropertyDescriptor does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(Object.getOwnPropertyDescriptor),
+ false,
+ 'isConstructor(Object.getOwnPropertyDescriptor) must return false'
+);
+
+assert.throws(TypeError, () => {
+ new Object.getOwnPropertyDescriptor({}, '');
+}, '`new Object.getOwnPropertyDescriptor({}, \'\')` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/primitive-string.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/primitive-string.js
new file mode 100644
index 0000000000..930438eb75
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/primitive-string.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.getownpropertydescriptor
+description: >
+ String primitive as first argument is coerced to object.
+info: |
+ Object.getOwnPropertyDescriptor ( O, P )
+
+ 1. Let obj be ? ToObject(O).
+ [...]
+ 3. Let desc be ? obj.[[GetOwnProperty]](key).
+ 4. Return FromPropertyDescriptor(desc).
+
+ String Exotic Objects
+
+ String exotic objects always have a data property named "length" whose value is the number
+ of code unit elements in the encapsulated String value. Both the code unit data properties
+ and the "length" property are non-writable and non-configurable.
+---*/
+
+assert.sameValue(Object.getOwnPropertyDescriptor('', '0'), undefined);
+
+var indexDesc = Object.getOwnPropertyDescriptor('foo', '0');
+
+assert.sameValue(indexDesc.value, 'f', '[[Value]]');
+assert.sameValue(indexDesc.writable, false, '[[Writable]]');
+assert.sameValue(indexDesc.enumerable, true, '[[Enumerable]]');
+assert.sameValue(indexDesc.configurable, false, '[[Configurable]]');
+
+var lengthDesc = Object.getOwnPropertyDescriptor('foo', 'length');
+
+assert.sameValue(lengthDesc.value, 3, '[[Value]]');
+assert.sameValue(lengthDesc.writable, false, '[[Writable]]');
+assert.sameValue(lengthDesc.enumerable, false, '[[Enumerable]]');
+assert.sameValue(lengthDesc.configurable, false, '[[Configurable]]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/primitive-symbol.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/primitive-symbol.js
new file mode 100644
index 0000000000..c166aadc56
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/primitive-symbol.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.getownpropertydescriptor
+description: >
+ Symbol primitive as first argument is coerced to object.
+info: |
+ Object.getOwnPropertyDescriptor ( O, P )
+
+ 1. Let obj be ? ToObject(O).
+ [...]
+ 3. Let desc be ? obj.[[GetOwnProperty]](key).
+ 4. Return FromPropertyDescriptor(desc).
+
+ Properties of Symbol Instances
+
+ Symbol instances are ordinary objects that inherit properties from the Symbol prototype object.
+ Symbol instances have a [[SymbolData]] internal slot.
+ The [[SymbolData]] internal slot is the Symbol value represented by this Symbol object.
+features: [Symbol]
+---*/
+
+assert.sameValue(Object.getOwnPropertyDescriptor(Symbol(), 'foo'), undefined);
+assert.sameValue(Object.getOwnPropertyDescriptor(Symbol('foo'), 'description'), undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/shell.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptor/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/browser.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/exception-not-object-coercible.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/exception-not-object-coercible.js
new file mode 100644
index 0000000000..4dbc6672d3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/exception-not-object-coercible.js
@@ -0,0 +1,18 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors should fail if given a null or undefined value
+esid: sec-object.getownpropertydescriptors
+author: Jordan Harband
+---*/
+
+assert.throws(TypeError, function() {
+ Object.getOwnPropertyDescriptors(null);
+});
+
+assert.throws(TypeError, function() {
+ Object.getOwnPropertyDescriptors(undefined);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/function-length.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/function-length.js
new file mode 100644
index 0000000000..8c1746ba9c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/function-length.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors should have length 1
+esid: sec-object.getownpropertydescriptors
+author: Jordan Harband
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.getOwnPropertyDescriptors.length, 1, 'Expected Object.getOwnPropertyDescriptors.length to be 1');
+
+verifyNotEnumerable(Object.getOwnPropertyDescriptors, 'length');
+verifyNotWritable(Object.getOwnPropertyDescriptors, 'length');
+verifyConfigurable(Object.getOwnPropertyDescriptors, 'length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/function-name.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/function-name.js
new file mode 100644
index 0000000000..7037128d72
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/function-name.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors should have name property with value 'getOwnPropertyDescriptors'
+esid: sec-object.getownpropertydescriptors
+author: Jordan Harband
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(
+ Object.getOwnPropertyDescriptors.name,
+ 'getOwnPropertyDescriptors',
+ 'Expected Object.getOwnPropertyDescriptors.name to be "getOwnPropertyDescriptors"'
+);
+
+verifyNotEnumerable(Object.getOwnPropertyDescriptors, 'name');
+verifyNotWritable(Object.getOwnPropertyDescriptors, 'name');
+verifyConfigurable(Object.getOwnPropertyDescriptors, 'name');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/function-property-descriptor.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/function-property-descriptor.js
new file mode 100644
index 0000000000..2182f1234b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/function-property-descriptor.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors should be writable, non-enumerable, and configurable
+esid: sec-object.getownpropertydescriptors
+author: Jordan Harband
+includes: [propertyHelper.js]
+---*/
+
+verifyNotEnumerable(Object, 'getOwnPropertyDescriptors');
+verifyWritable(Object, 'getOwnPropertyDescriptors');
+verifyConfigurable(Object, 'getOwnPropertyDescriptors');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/inherited-properties-omitted.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/inherited-properties-omitted.js
new file mode 100644
index 0000000000..68dc936d86
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/inherited-properties-omitted.js
@@ -0,0 +1,45 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors does not see inherited properties.
+esid: sec-object.getownpropertydescriptors
+author: Jordan Harband
+---*/
+
+var F = function() {};
+F.prototype.a = {};
+F.prototype.b = {};
+
+var f = new F();
+var bValue = {};
+f.b = bValue; // shadow the prototype
+Object.defineProperty(f, 'c', {
+ enumerable: false,
+ configurable: true,
+ writable: false,
+ value: {}
+}); // solely an own property
+
+var result = Object.getOwnPropertyDescriptors(f);
+
+assert.sameValue(!!result.b, true, 'b has a descriptor');
+assert.sameValue(!!result.c, true, 'c has a descriptor');
+
+assert.sameValue(result.b.enumerable, true, 'b is enumerable');
+assert.sameValue(result.b.configurable, true, 'b is configurable');
+assert.sameValue(result.b.writable, true, 'b is writable');
+assert.sameValue(result.b.value, bValue, 'b’s value is `bValue`');
+
+assert.sameValue(result.c.enumerable, false, 'c is enumerable');
+assert.sameValue(result.c.configurable, true, 'c is configurable');
+assert.sameValue(result.c.writable, false, 'c is writable');
+assert.sameValue(result.c.value, f.c, 'c’s value is `f.c`');
+
+assert.sameValue(
+ Object.keys(result).length,
+ 2,
+ 'result has same number of own property names as f'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/normal-object.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/normal-object.js
new file mode 100644
index 0000000000..44faa13b10
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/normal-object.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors should produce a normal object inheriting from Object.prototype
+esid: sec-object.getownpropertydescriptors
+author: Jordan Harband
+---*/
+
+assert.sameValue(
+ Object.getPrototypeOf(Object.getOwnPropertyDescriptors({})),
+ Object.prototype
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/not-a-constructor.js
new file mode 100644
index 0000000000..3d03780e66
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.getOwnPropertyDescriptors does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(Object.getOwnPropertyDescriptors),
+ false,
+ 'isConstructor(Object.getOwnPropertyDescriptors) must return false'
+);
+
+assert.throws(TypeError, () => {
+ new Object.getOwnPropertyDescriptors({});
+}, '`new Object.getOwnPropertyDescriptors({})` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/observable-operations.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/observable-operations.js
new file mode 100644
index 0000000000..20074b01e9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/observable-operations.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors should perform observable operations in the correct order
+esid: sec-object.getownpropertydescriptors
+author: Jordan Harband
+features: [Proxy]
+includes: [proxyTrapsHelper.js]
+---*/
+
+var log = "";
+var object = {
+ a: 0,
+ b: 0,
+ c: 0
+};
+var handler = allowProxyTraps({
+ getOwnPropertyDescriptor: function(target, propertyKey) {
+ assert.sameValue(target, object, "getOwnPropertyDescriptor");
+ log += "|getOwnPropertyDescriptor:" + propertyKey;
+ return Object.getOwnPropertyDescriptor(target, propertyKey);
+ },
+ ownKeys: function(target) {
+ assert.sameValue(target, object, "ownKeys");
+ log += "|ownKeys";
+ return Object.getOwnPropertyNames(target);
+ }
+});
+var check = allowProxyTraps({
+ get: function(target, propertyKey, receiver) {
+ assert(propertyKey in target, "handler check: " + propertyKey);
+ return target[propertyKey];
+ }
+});
+var proxy = new Proxy(object, new Proxy(handler, check));
+var result = Object.getOwnPropertyDescriptors(proxy);
+assert.sameValue(log, "|ownKeys|getOwnPropertyDescriptor:a|getOwnPropertyDescriptor:b|getOwnPropertyDescriptor:c", 'log');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/order-after-define-property.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/order-after-define-property.js
new file mode 100644
index 0000000000..336d47a3ca
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/order-after-define-property.js
@@ -0,0 +1,50 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.getownpropertydescriptors
+description: >
+ Property names are returned in ascending chronological order of creation
+ that is unaffected by [[DefineOwnProperty]].
+info: |
+ Object.getOwnPropertyDescriptors ( O )
+
+ [...]
+ 2. Let ownKeys be ? obj.[[OwnPropertyKeys]]().
+ 3. Let descriptors be ! OrdinaryObjectCreate(%Object.prototype%).
+ 4. For each element key of ownKeys in List order, do
+ [...]
+ c. If descriptor is not undefined,
+ perform ! CreateDataPropertyOrThrow(descriptors, key, descriptor).
+ 5. Return descriptors.
+
+ OrdinaryOwnPropertyKeys ( O )
+
+ [...]
+ 3. For each own property key P of O that is a String but is not an array index,
+ in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 4. For each own property key P of O that is a Symbol, in ascending
+ chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 5. Return keys.
+features: [Symbol, Reflect]
+includes: [compareArray.js]
+---*/
+
+var obj = {};
+var symA = Symbol("a");
+var symB = Symbol("b");
+obj[symA] = 1;
+obj[symB] = 2;
+Object.defineProperty(obj, symA, {configurable: false});
+var objDescs = Object.getOwnPropertyDescriptors(obj);
+assert.compareArray(Reflect.ownKeys(objDescs), [symA, symB]);
+
+var re = /(?:)/g;
+re.a = 1;
+Object.defineProperty(re, "lastIndex", {value: 2});
+var reDescs = Object.getOwnPropertyDescriptors(re);
+assert.compareArray(Reflect.ownKeys(reDescs), ["lastIndex", "a"]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-booleans.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-booleans.js
new file mode 100644
index 0000000000..32ddcc0f99
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-booleans.js
@@ -0,0 +1,18 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors accepts boolean primitives.
+esid: sec-object.getownpropertydescriptors
+author: Jordan Harband
+---*/
+
+var trueResult = Object.getOwnPropertyDescriptors(true);
+
+assert.sameValue(Object.keys(trueResult).length, 0, 'trueResult has 0 items');
+
+var falseResult = Object.getOwnPropertyDescriptors(false);
+
+assert.sameValue(Object.keys(falseResult).length, 0, 'falseResult has 0 items');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-numbers.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-numbers.js
new file mode 100644
index 0000000000..5dbdf62524
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-numbers.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors accepts number primitives.
+esid: sec-object.getownpropertydescriptors
+author: Jordan Harband
+---*/
+
+assert.sameValue(Object.keys(Object.getOwnPropertyDescriptors(0)).length, 0, '0 has zero descriptors');
+assert.sameValue(Object.keys(Object.getOwnPropertyDescriptors(-0)).length, 0, '-0 has zero descriptors');
+assert.sameValue(Object.keys(Object.getOwnPropertyDescriptors(Infinity)).length, 0, 'Infinity has zero descriptors');
+assert.sameValue(Object.keys(Object.getOwnPropertyDescriptors(-Infinity)).length, 0, '-Infinity has zero descriptors');
+assert.sameValue(Object.keys(Object.getOwnPropertyDescriptors(NaN)).length, 0, 'NaN has zero descriptors');
+assert.sameValue(Object.keys(Object.getOwnPropertyDescriptors(Math.PI)).length, 0, 'Math.PI has zero descriptors');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-strings.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-strings.js
new file mode 100644
index 0000000000..a17d1d9102
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-strings.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors accepts string primitives.
+esid: sec-object.getownpropertydescriptors
+author: Jordan Harband
+---*/
+
+var result = Object.getOwnPropertyDescriptors('abc');
+
+assert.sameValue(Object.keys(result).length, 4, 'string has 4 descriptors');
+
+assert.sameValue(result.length.configurable, false, 'length is not configurable');
+assert.sameValue(result.length.enumerable, false, 'length is not enumerable');
+assert.sameValue(result.length.writable, false, 'length is not writable');
+assert.sameValue(result.length.value, 3, 'length is 3');
+
+assert.sameValue(result[0].configurable, false, 'index 0 is not configurable');
+assert.sameValue(result[0].enumerable, true, 'index 0 is enumerable');
+assert.sameValue(result[0].writable, false, 'index 0 is not writable');
+assert.sameValue(result[0].value, 'a', 'index 0 is "a"');
+
+assert.sameValue(result[1].configurable, false, 'index 1 is not configurable');
+assert.sameValue(result[1].enumerable, true, 'index 1 is enumerable');
+assert.sameValue(result[1].writable, false, 'index 1 is not writable');
+assert.sameValue(result[1].value, 'b', 'index 1 is "b"');
+
+assert.sameValue(result[2].configurable, false, 'index 2 is not configurable');
+assert.sameValue(result[2].enumerable, true, 'index 2 is enumerable');
+assert.sameValue(result[2].writable, false, 'index 2 is not writable');
+assert.sameValue(result[2].value, 'c', 'index 2 is "c"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-symbols.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-symbols.js
new file mode 100644
index 0000000000..56c1ed54ad
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/primitive-symbols.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors accepts Symbol primitives.
+esid: sec-object.getownpropertydescriptors
+author: Jordan Harband
+features: [Symbol]
+---*/
+
+var result = Object.getOwnPropertyDescriptors(Symbol());
+
+assert.sameValue(Object.keys(result).length, 0, 'symbol primitive has no descriptors');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/proxy-no-ownkeys-returned-keys-order.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/proxy-no-ownkeys-returned-keys-order.js
new file mode 100644
index 0000000000..7ae003b27b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/proxy-no-ownkeys-returned-keys-order.js
@@ -0,0 +1,53 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.getownpropertydescriptors
+description: >
+ If Proxy "ownKeys" trap is missing, keys are sorted by type in ascending
+ chronological order.
+info: |
+ Object.getOwnPropertyDescriptors ( O )
+
+ [...]
+ 2. Let ownKeys be ? obj.[[OwnPropertyKeys]]().
+ [...]
+ 4. For each element key of ownKeys in List order, do
+ a. Let desc be ? obj.[[GetOwnProperty]](key).
+
+ [[OwnPropertyKeys]] ( )
+
+ [...]
+ 6. If trap is undefined, then
+ a. Return ? target.[[OwnPropertyKeys]]().
+
+ OrdinaryOwnPropertyKeys ( O )
+
+ [...]
+ 3. For each own property key P of O such that Type(P) is String and P is
+ not an array index, in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 4. For each own property key P of O such that Type(P) is Symbol,
+ in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 5. Return keys.
+features: [Proxy, Symbol]
+includes: [compareArray.js]
+---*/
+
+var target = {};
+var sym = Symbol();
+target[sym] = 1;
+target.foo = 2;
+target[0] = 3;
+
+var getOwnKeys = [];
+var proxy = new Proxy(target, {
+ getOwnPropertyDescriptor: function(_target, key) {
+ getOwnKeys.push(key);
+ },
+});
+
+Object.getOwnPropertyDescriptors(proxy);
+assert.compareArray(getOwnKeys, ["0", "foo", sym]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/proxy-undefined-descriptor.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/proxy-undefined-descriptor.js
new file mode 100644
index 0000000000..a00b10470c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/proxy-undefined-descriptor.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors should filter out undefined OwnPropertyDescriptors
+esid: sec-object.getownpropertydescriptors
+author: Jordan Harband
+features: [Proxy]
+includes: [proxyTrapsHelper.js]
+---*/
+
+var key = "a";
+var ownKeys = [key];
+var badProxyHandlers = allowProxyTraps({
+ getOwnPropertyDescriptor: function() {},
+ ownKeys: function() {
+ return ownKeys;
+ }
+});
+var proxy = new Proxy({}, badProxyHandlers);
+
+var keys = Reflect.ownKeys(proxy);
+assert.notSameValue(keys, ownKeys, 'Object.keys returns a new Array');
+assert.sameValue(Array.isArray(keys), true, 'Object.keys returns an Array');
+assert.sameValue(keys.length, ownKeys.length, 'keys and ownKeys have the same length');
+assert.sameValue(keys[0], ownKeys[0], 'keys and ownKeys have the same contents');
+
+var descriptor = Object.getOwnPropertyDescriptor(proxy, key);
+assert.sameValue(descriptor, undefined, "Descriptor matches result of [[GetOwnPropertyDescriptor]] trap");
+
+var result = Object.getOwnPropertyDescriptors(proxy);
+assert.sameValue(key in result, false, "key is not present in result");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/shell.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/shell.js
new file mode 100644
index 0000000000..bc72493f03
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/shell.js
@@ -0,0 +1,33 @@
+// GENERATED, DO NOT EDIT
+// file: proxyTrapsHelper.js
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: |
+ Used to assert the correctness of object behavior in the presence
+ and context of Proxy objects.
+defines: [allowProxyTraps]
+---*/
+
+function allowProxyTraps(overrides) {
+ function throwTest262Error(msg) {
+ return function () { throw new Test262Error(msg); };
+ }
+ if (!overrides) { overrides = {}; }
+ return {
+ getPrototypeOf: overrides.getPrototypeOf || throwTest262Error('[[GetPrototypeOf]] trap called'),
+ setPrototypeOf: overrides.setPrototypeOf || throwTest262Error('[[SetPrototypeOf]] trap called'),
+ isExtensible: overrides.isExtensible || throwTest262Error('[[IsExtensible]] trap called'),
+ preventExtensions: overrides.preventExtensions || throwTest262Error('[[PreventExtensions]] trap called'),
+ getOwnPropertyDescriptor: overrides.getOwnPropertyDescriptor || throwTest262Error('[[GetOwnProperty]] trap called'),
+ has: overrides.has || throwTest262Error('[[HasProperty]] trap called'),
+ get: overrides.get || throwTest262Error('[[Get]] trap called'),
+ set: overrides.set || throwTest262Error('[[Set]] trap called'),
+ deleteProperty: overrides.deleteProperty || throwTest262Error('[[Delete]] trap called'),
+ defineProperty: overrides.defineProperty || throwTest262Error('[[DefineOwnProperty]] trap called'),
+ enumerate: throwTest262Error('[[Enumerate]] trap called: this trap has been removed'),
+ ownKeys: overrides.ownKeys || throwTest262Error('[[OwnPropertyKeys]] trap called'),
+ apply: overrides.apply || throwTest262Error('[[Call]] trap called'),
+ construct: overrides.construct || throwTest262Error('[[Construct]] trap called')
+ };
+}
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/symbols-included.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/symbols-included.js
new file mode 100644
index 0000000000..8b5fe011fc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/symbols-included.js
@@ -0,0 +1,47 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.getOwnPropertyDescriptors includes Symbol keys.
+esid: sec-object.getownpropertydescriptors
+author: Jordan Harband
+features: [Symbol]
+---*/
+
+var value = {};
+var enumSym = Symbol('enum');
+var nonEnumSym = Symbol('nonenum');
+var symValue = Symbol('value');
+
+var obj = {
+ key: symValue
+};
+obj[enumSym] = value;
+Object.defineProperty(obj, nonEnumSym, {
+ writable: true,
+ enumerable: false,
+ configurable: true,
+ value: value
+});
+
+var result = Object.getOwnPropertyDescriptors(obj);
+
+assert.sameValue(Object.keys(result).length, 1, 'obj has 1 string-keyed descriptor');
+assert.sameValue(Object.getOwnPropertySymbols(result).length, 2, 'obj has 2 symbol-keyed descriptors');
+
+assert.sameValue(result.key.configurable, true, 'result.key is configurable');
+assert.sameValue(result.key.enumerable, true, 'result.key is enumerable');
+assert.sameValue(result.key.writable, true, 'result.key is writable');
+assert.sameValue(result.key.value, symValue, 'result.key has value symValue');
+
+assert.sameValue(result[enumSym].configurable, true, 'result[enumSym] is configurable');
+assert.sameValue(result[enumSym].enumerable, true, 'result[enumSym] is enumerable');
+assert.sameValue(result[enumSym].writable, true, 'result[enumSym] is writable');
+assert.sameValue(result[enumSym].value, value, 'result[enumSym] has value `value`');
+
+assert.sameValue(result[nonEnumSym].configurable, true, 'result[nonEnumSym] is configurable');
+assert.sameValue(result[nonEnumSym].enumerable, false, 'result[nonEnumSym] is not enumerable');
+assert.sameValue(result[nonEnumSym].writable, true, 'result[nonEnumSym] is writable');
+assert.sameValue(result[nonEnumSym].value, value, 'result[nonEnumSym] has value `value`');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/tamper-with-global-object.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/tamper-with-global-object.js
new file mode 100644
index 0000000000..b3abe012aa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/tamper-with-global-object.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Object.getOwnPropertyDescriptors should not have its behavior impacted by modifications to the global property Object
+esid: sec-object.getownpropertydescriptors
+author: Jordan Harband
+---*/
+
+function fakeObject() {
+ throw new Test262Error('The overriden version of Object was called!');
+}
+fakeObject.getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors;
+fakeObject.keys = Object.keys;
+
+var global = this;
+global.Object = fakeObject;
+
+assert.sameValue(Object, fakeObject, 'Sanity check failed: could not modify the global Object');
+assert.sameValue(Object.keys(Object.getOwnPropertyDescriptors('a')).length, 2, 'Expected string primitive to have 2 descriptors');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/tamper-with-object-keys.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/tamper-with-object-keys.js
new file mode 100644
index 0000000000..57b63193ab
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyDescriptors/tamper-with-object-keys.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Object.getOwnPropertyDescriptors should not have its behavior impacted by modifications to Object.getOwnPropertyDescriptor
+esid: sec-object.getownpropertydescriptors
+author: Jordan Harband
+---*/
+
+function fakeObjectGetOwnPropertyDescriptor() {
+ throw new Test262Error('The overriden version of Object.getOwnPropertyDescriptor was called!');
+}
+Object.getOwnPropertyDescriptor = fakeObjectGetOwnPropertyDescriptor;
+
+assert.sameValue(
+ Object.getOwnPropertyDescriptor,
+ fakeObjectGetOwnPropertyDescriptor,
+ 'Sanity check failed: could not modify the global Object.getOwnPropertyDescriptor'
+);
+
+assert.sameValue(Object.keys(Object.getOwnPropertyDescriptors({
+ a: 1
+})).length, 1, 'Expected object with 1 key to have 1 descriptor');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-0-1.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-0-1.js
new file mode 100644
index 0000000000..39afec9007
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-0-1.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-0-1
+description: Object.getOwnPropertyNames must exist as a function
+---*/
+
+assert.sameValue(typeof(Object.getOwnPropertyNames), "function", 'typeof(Object.getOwnPropertyNames)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-0-2.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-0-2.js
new file mode 100644
index 0000000000..a3c2840381
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-0-2.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-0-2
+description: >
+ Object.getOwnPropertyNames must exist as a function taking 1
+ parameter
+---*/
+
+assert.sameValue(Object.getOwnPropertyNames.length, 1, 'Object.getOwnPropertyNames.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-1-2.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-1-2.js
new file mode 100644
index 0000000000..8a55376ed4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-1-2.js
@@ -0,0 +1,14 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-1-2
+description: Object.getOwnPropertyNames throws TypeError if 'O' is undefined
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.getOwnPropertyNames(undefined);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-1-3.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-1-3.js
new file mode 100644
index 0000000000..6b4a1410a9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-1-3.js
@@ -0,0 +1,14 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-1-3
+description: Object.getOwnPropertyNames throws TypeError if 'O' is null
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.getOwnPropertyNames(null);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-1-4.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-1-4.js
new file mode 100644
index 0000000000..d56ea4b702
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-1-4.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-1-4
+description: >
+ Object.getOwnPropertyNames does not throw TypeError if 'O' is a
+ boolean
+---*/
+
+Object.getOwnPropertyNames(true);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-1-5.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-1-5.js
new file mode 100644
index 0000000000..f830ebe3e2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-1-5.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-1-5
+description: >
+ Object.getOwnPropertyNames does not throw TypeError if 'O' is a
+ string
+---*/
+
+Object.getOwnPropertyNames("abc");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-1.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-1.js
new file mode 100644
index 0000000000..7da9dbbaba
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-1
+description: >
+ Object.getOwnPropertyNames does not throw TypeError if type of
+ first param is not Object
+---*/
+
+Object.getOwnPropertyNames(0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-2-1.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-2-1.js
new file mode 100644
index 0000000000..3e1bf71ffa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-2-1.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-2-1
+description: >
+ Object.getOwnPropertyNames - returned array is an array according
+ to Array.isArray
+---*/
+
+var obj = {};
+var result = Object.getOwnPropertyNames(obj);
+
+assert(Array.isArray(result), 'Array.isArray(result) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-2-2.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-2-2.js
new file mode 100644
index 0000000000..18ad55b732
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-2-2.js
@@ -0,0 +1,14 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-2-2
+description: Object.getOwnPropertyNames - returned array is an instance of Array
+---*/
+
+var obj = {};
+var result = Object.getOwnPropertyNames(obj);
+
+assert(result instanceof Array, 'result instanceof Array !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-2-3.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-2-3.js
new file mode 100644
index 0000000000..b47f219245
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-2-3.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-2-3
+description: >
+ Object.getOwnPropertyNames - length of returned array is
+ initialized to 0
+---*/
+
+var obj = {};
+var result = Object.getOwnPropertyNames(obj);
+
+assert.sameValue(result.length, 0, 'result.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-2-4.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-2-4.js
new file mode 100644
index 0000000000..5b1c233efa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-2-4.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-2-4
+description: >
+ Object.getOwnPropertyNames - returned array is the standard
+ built-in constructor
+---*/
+
+var oldArray = Array;
+Array = function() {
+ throw new Error("invoke customer defined Array!");
+};
+
+var obj = {};
+
+var result = Object.getOwnPropertyNames(obj);
+
+assert.sameValue(Object.prototype.toString.call(result), "[object Array]", 'Object.prototype.toString.call(result)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-3-1.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-3-1.js
new file mode 100644
index 0000000000..7e6f562502
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-3-1.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-3-1
+description: >
+ Object.getOwnPropertyNames - elements of the returned array start
+ from index 0
+---*/
+
+var obj = {
+ prop1: 1001
+};
+
+var arr = Object.getOwnPropertyNames(obj);
+
+assert(arr.hasOwnProperty(0), 'arr.hasOwnProperty(0) !== true');
+assert.sameValue(arr[0], "prop1", 'arr[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-1.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-1.js
new file mode 100644
index 0000000000..a0a57a3728
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-1.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-4-1
+description: Object.getOwnPropertyNames returns array of property names (Global)
+---*/
+
+var result = Object.getOwnPropertyNames(this);
+var expResult = ["NaN", "Infinity", "undefined", "eval", "parseInt", "parseFloat", "isNaN", "isFinite", "decodeURI", "decodeURIComponent", "encodeURI", "encodeURIComponent", "Object", "Function", "Array", "String", "Boolean", "Number", "Date", "Date", "RegExp", "Error", "EvalError", "RangeError", "ReferenceError", "SyntaxError", "TypeError", "URIError", "Math", "JSON"];
+
+var result1 = {};
+for (var p in result) {
+ result1[result[p]] = true;
+}
+
+for (var p1 in expResult) {
+ assert(result1[expResult[p1]], 'result1[expResult[p1]] !== true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-2.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-2.js
new file mode 100644
index 0000000000..2870645c46
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-2.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-4-2
+description: Object.getOwnPropertyNames returns array of property names (Object)
+---*/
+
+var result = Object.getOwnPropertyNames(Object);
+
+assert(result.indexOf("getPrototypeOf") > -1, "getPrototypeOf");
+assert(result.indexOf("getOwnPropertyDescriptor") > -1, "getOwnPropertyDescriptor");
+assert(result.indexOf("getOwnPropertyNames") > -1, "getOwnPropertyNames");
+assert(result.indexOf("create") > -1, "create");
+assert(result.indexOf("defineProperty") > -1, "defineProperty");
+assert(result.indexOf("defineProperties") > -1, "defineProperties");
+assert(result.indexOf("seal") > -1, "seal");
+assert(result.indexOf("freeze") > -1, "freeze");
+assert(result.indexOf("preventExtensions") > -1, "preventExtensions");
+assert(result.indexOf("isSealed") > -1, "isSealed");
+assert(result.indexOf("isFrozen") > -1, "isFrozen");
+assert(result.indexOf("isExtensible") > -1, "isExtensible");
+assert(result.indexOf("keys") > -1, "keys");
+assert(result.indexOf("prototype") > -1, "prototype");
+assert(result.indexOf("length") > -1, "length");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-36.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-36.js
new file mode 100644
index 0000000000..d93719c7ba
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-36.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-4-36
+description: >
+ Object.getOwnPropertyNames - inherited data properties are not
+ pushed into the returned array
+---*/
+
+var proto = {
+ "parent": "parent"
+};
+
+var Con = function() {};
+Con.prototype = proto;
+
+var child = new Con();
+
+var result = Object.getOwnPropertyNames(child);
+
+for (var p in result) {
+ assert.notSameValue(result[p], "parent", 'result[p]');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-37.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-37.js
new file mode 100644
index 0000000000..a5901e3f26
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-37.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-4-37
+description: >
+ Object.getOwnPropertyNames - inherited accessor properties are not
+ pushed into the returned array
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "parent", {
+ get: function() {
+ return "parent";
+ },
+ configurable: true
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var child = new Con();
+
+var result = Object.getOwnPropertyNames(child);
+
+for (var p in result) {
+ assert.notSameValue(result[p], "parent", 'result[p]');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-38.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-38.js
new file mode 100644
index 0000000000..de2274173f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-38.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-4-38
+description: >
+ Object.getOwnPropertyNames - own data properties are pushed into
+ the returned array
+---*/
+
+var obj = {
+ "a": "a"
+};
+
+var result = Object.getOwnPropertyNames(obj);
+
+assert.sameValue(result[0], "a", 'result[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-39.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-39.js
new file mode 100644
index 0000000000..681b07a3da
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-39.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-4-39
+description: >
+ Object.getOwnPropertyNames - own accessor properties are pushed
+ into the returned array
+---*/
+
+var obj = {};
+Object.defineProperty(obj, "a", {
+ get: function() {
+ return "a";
+ },
+ configurable: true
+});
+
+var result = Object.getOwnPropertyNames(obj);
+
+assert.sameValue(result[0], "a", 'result[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-40.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-40.js
new file mode 100644
index 0000000000..c57effcf8c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-40.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-4-40
+description: >
+ Object.getOwnPropertyNames - inherited data property of String
+ object 'O' is not pushed into the returned array
+---*/
+
+var str = new String("abc");
+
+String.prototype.protoProperty = "protoString";
+
+var result = Object.getOwnPropertyNames(str);
+
+for (var p in result) {
+ assert.notSameValue(result[p], "protoProperty", 'result[p]');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-41.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-41.js
new file mode 100644
index 0000000000..bb0c8fb0d5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-41.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-4-41
+description: >
+ Object.getOwnPropertyNames - inherited accessor property of String
+ object 'O' is not pushed into the returned array
+---*/
+
+var str = new String("abc");
+
+Object.defineProperty(String.prototype, "protoProperty", {
+ get: function() {
+ return "protoString";
+ },
+ configurable: true
+});
+
+var result = Object.getOwnPropertyNames(str);
+
+for (var p in result) {
+ assert.notSameValue(result[p], "protoProperty", 'result[p]');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-42.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-42.js
new file mode 100644
index 0000000000..c89f56d2f9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-42.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-4-42
+description: >
+ Object.getOwnPropertyNames - own data property of String object
+ 'O' is pushed into the returned array
+---*/
+
+var propertyFound = false;
+
+var str = new String("abc");
+
+Object.defineProperty(str, "ownProperty", {
+ value: "ownString",
+ configurable: true
+});
+
+var result = Object.getOwnPropertyNames(str);
+
+for (var p in result) {
+ if (result[p] === "ownProperty") {
+ propertyFound = true;
+ break;
+ }
+}
+
+assert(propertyFound, 'Property not found');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-43.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-43.js
new file mode 100644
index 0000000000..81354318e2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-43.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-4-43
+description: >
+ Object.getOwnPropertyNames - own accessor property of String
+ object 'O' is pushed into the returned array
+---*/
+
+var propertyFound = false;
+
+var str = new String("abc");
+
+Object.defineProperty(str, "ownProperty", {
+ get: function() {
+ return "ownString";
+ },
+ configurable: true
+});
+
+var result = Object.getOwnPropertyNames(str);
+
+for (var p in result) {
+ if (result[p] === "ownProperty") {
+ propertyFound = true;
+ break;
+ }
+}
+
+assert(propertyFound, 'Property not found');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-44.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-44.js
new file mode 100644
index 0000000000..5aaccf652c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-44.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-4-44
+description: >
+ Object.getOwnPropertyNames - own index properties of String object
+ are pushed into the returned Array
+includes: [compareArray.js]
+---*/
+
+var str = new String("abc");
+str[5] = "de";
+
+assert.compareArray(Object.getOwnPropertyNames(str), ["0", "1", "2", "5", "length"]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-45.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-45.js
new file mode 100644
index 0000000000..44f7db4b82
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-45.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-4-45
+description: >
+ Object.getOwnPropertyNames - inherited data property of Array
+ object 'O' is not pushed into the returned array.
+---*/
+
+var arr = [0, 1, 2];
+
+Array.prototype.protoProperty = "protoArray";
+
+var result = Object.getOwnPropertyNames(arr);
+
+for (var p in result) {
+ assert.notSameValue(result[p], "protoProperty", 'result[p]');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-46.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-46.js
new file mode 100644
index 0000000000..6cf340270a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-46.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-4-46
+description: >
+ Object.getOwnPropertyNames - inherited accessor property of Array
+ object 'O' is not pushed into the returned array.
+---*/
+
+var arr = [0, 1, 2];
+
+Object.defineProperty(Array.prototype, "protoProperty", {
+ get: function() {
+ return "protoArray";
+ },
+ configurable: true
+});
+
+var result = Object.getOwnPropertyNames(arr);
+
+for (var p in result) {
+ assert.notSameValue(result[p], "protoProperty", 'result[p]');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-47.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-47.js
new file mode 100644
index 0000000000..26c2b53a98
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-47.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-4-47
+description: >
+ Object.getOwnPropertyNames - own data property of Array object 'O'
+ is pushed into the returned array
+---*/
+
+var propertyFound = false;
+
+var arr = [0, 1, 2];
+arr.ownProperty = "ownArray";
+
+var result = Object.getOwnPropertyNames(arr);
+
+for (var p in result) {
+ if (result[p] === "ownProperty") {
+ propertyFound = true;
+ break;
+ }
+}
+
+assert(propertyFound, 'Property not found');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-48.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-48.js
new file mode 100644
index 0000000000..d2a9542b25
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-48.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-4-48
+description: >
+ Object.getOwnPropertyNames - own accessor property of Array object
+ 'O' is pushed into the returned array.
+---*/
+
+var propertyFound = false;
+
+var arr = [0, 1, 2];
+
+Object.defineProperty(arr, "ownProperty", {
+ get: function() {
+ return "ownArray";
+ },
+ configurable: true
+});
+
+var result = Object.getOwnPropertyNames(arr);
+
+for (var p in result) {
+ if (result[p] === "ownProperty") {
+ propertyFound = true;
+ break;
+ }
+}
+
+assert(propertyFound, 'Property not found');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-49.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-49.js
new file mode 100644
index 0000000000..d8f23995c6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-49.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-4-49
+description: >
+ Object.getOwnPropertyNames - own index properties of Array objcect
+ are pushed into the returned Array
+includes: [compareArray.js]
+---*/
+
+var arr = [0, 1, 2];
+assert.compareArray(Object.getOwnPropertyNames(arr), ["0", "1", "2", "length"]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-50.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-50.js
new file mode 100644
index 0000000000..e410daee67
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-50.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-4-50
+description: >
+ Object.getOwnPropertyNames - non-enumerable own property of 'O' is
+ pushed into the returned Array
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "nonEnumerableProp", {
+ value: 10,
+ enumerable: false,
+ configurable: true
+});
+
+var result = Object.getOwnPropertyNames(obj);
+
+assert.sameValue(result[0], "nonEnumerableProp", 'result[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-b-1.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-b-1.js
new file mode 100644
index 0000000000..c75480cbfc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-b-1.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-4-b-1
+description: >
+ Object.getOwnPropertyNames - descriptor of resultant array is all
+ true
+---*/
+
+var obj = new Object();
+obj.x = 1;
+obj.y = 2;
+var result = Object.getOwnPropertyNames(obj);
+var desc = Object.getOwnPropertyDescriptor(result, "0");
+
+assert.sameValue(desc.enumerable, true, 'desc.enumerable');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+assert.sameValue(desc.writable, true, 'desc.writable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-b-2.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-b-2.js
new file mode 100644
index 0000000000..4317af80fc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-b-2.js
@@ -0,0 +1,40 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-4-b-2
+description: >
+ Object.getOwnPropertyNames - all own properties are pushed into
+ the returned array
+includes: [compareArray.js]
+---*/
+
+var obj = {
+ "a": "a"
+};
+
+Object.defineProperty(obj, "b", {
+ get: function() {
+ return "b";
+ },
+ enumerable: false,
+ configurable: true
+});
+
+Object.defineProperty(obj, "c", {
+ get: function() {
+ return "c";
+ },
+ enumerable: true,
+ configurable: true
+});
+
+Object.defineProperty(obj, "d", {
+ value: "d",
+ enumerable: false,
+ configurable: true
+});
+
+assert.compareArray(Object.getOwnPropertyNames(obj), ["a", "b", "c", "d"]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-b-3.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-b-3.js
new file mode 100644
index 0000000000..d03ba0945a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-b-3.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-4-b-3
+description: >
+ Object.getOwnPropertyNames - own property named empty('') is
+ pushed into the returned array
+---*/
+
+var propertyFound = false;
+
+var obj = {
+ "": "empty"
+};
+
+var result = Object.getOwnPropertyNames(obj);
+
+for (var p in result) {
+ if (result[p] === "") {
+ propertyFound = true;
+ break;
+ }
+}
+
+assert(propertyFound, 'Property not found');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-b-4.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-b-4.js
new file mode 100644
index 0000000000..237dd11959
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-b-4.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-4-b-4
+description: >
+ Object.getOwnPropertyNames - elements of the returned array are
+ writable
+---*/
+
+var obj = {
+ "a": "a"
+};
+
+var result = Object.getOwnPropertyNames(obj);
+
+var beforeOverride = (result[0] === "a");
+result[0] = "b";
+var afterOverride = (result[0] === "b");
+
+assert(beforeOverride, 'beforeOverride !== true');
+assert(afterOverride, 'afterOverride !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-b-5.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-b-5.js
new file mode 100644
index 0000000000..e7931c5940
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-b-5.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-4-b-5
+description: >
+ Object.getOwnPropertyNames - elements of the returned array are
+ enumerable
+---*/
+
+var propertyFound = false;
+
+var obj = {
+ "a": "a"
+};
+
+var result = Object.getOwnPropertyNames(obj);
+
+for (var p in result) {
+ if (result[p] === "a") {
+ propertyFound = true;
+ break;
+ }
+}
+
+assert(propertyFound, 'Property not found');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-b-6.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-b-6.js
new file mode 100644
index 0000000000..c958718539
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/15.2.3.4-4-b-6.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.4-4-b-6
+description: >
+ Object.getOwnPropertyNames - elements of the returned array are
+ configurable
+---*/
+
+var obj = {
+ "a": "a"
+};
+
+var result = Object.getOwnPropertyNames(obj);
+
+var beforeDeleted = (result.hasOwnProperty("0"));
+delete result[0];
+var afterDeleted = (result.hasOwnProperty("0"));
+
+assert(beforeDeleted, 'beforeDeleted !== true');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/S15.2.3.4_A1_T1.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/S15.2.3.4_A1_T1.js
new file mode 100644
index 0000000000..c683929cbb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/S15.2.3.4_A1_T1.js
@@ -0,0 +1,22 @@
+// Copyright 2011 Google, Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Object.getOwnProperties and Object.prototype.hasOwnProperty should
+ agree on what the own properties are.
+es5id: 15.2.3.4_A1_T1
+description: >
+ Check that all the own property names reported by
+ Object.getOwnPropertyNames on a strict function are names that
+ hasOwnProperty agrees are own properties.
+---*/
+
+function foo() {}
+
+var names = Object.getOwnPropertyNames(foo);
+for (var i = 0, len = names.length; i < len; i++) {
+ assert(!!foo.hasOwnProperty(names[i]), 'The value of !!foo.hasOwnProperty(names[i]) is expected to be true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/browser.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/name.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/name.js
new file mode 100644
index 0000000000..9ed3603700
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/name.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 19.1.2.7
+description: >
+ Object.getOwnPropertyNames.name is "getOwnPropertyNames".
+info: |
+ Object.getOwnPropertyNames ( O )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.getOwnPropertyNames.name, "getOwnPropertyNames");
+
+verifyNotEnumerable(Object.getOwnPropertyNames, "name");
+verifyNotWritable(Object.getOwnPropertyNames, "name");
+verifyConfigurable(Object.getOwnPropertyNames, "name");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/non-object-argument-invalid.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/non-object-argument-invalid.js
new file mode 100644
index 0000000000..9f31f06545
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/non-object-argument-invalid.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.getownpropertynames
+description: >
+ Object.getOwnPropertyNames called with an invalid non-object value
+info: |
+ GetOwnPropertyKeys ( O, type )
+
+ Let obj be ? ToObject(O).
+ Let keys be ? obj.[[OwnPropertyKeys]]().
+ Let nameList be a new empty List.
+ For each element nextKey of keys, do
+ If Type(nextKey) is Symbol and type is symbol or Type(nextKey) is String and type is string, then
+ Append nextKey as the last element of nameList.
+ Return CreateArrayFromList(nameList).
+
+features: [Symbol]
+---*/
+
+let count = 0;
+
+assert.throws(TypeError, () => {
+ count++;
+ Object.getOwnPropertyNames(undefined);
+}, '`Object.getOwnPropertyNames(undefined)` throws TypeError');
+
+assert.throws(TypeError, () => {
+ count++;
+ Object.getOwnPropertyNames(null);
+}, '`Object.getOwnPropertyNames(null)` throws TypeError');
+
+assert.sameValue(count, 2, 'The value of `count` is 2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/non-object-argument-valid.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/non-object-argument-valid.js
new file mode 100644
index 0000000000..93e8001262
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/non-object-argument-valid.js
@@ -0,0 +1,47 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.getownpropertynames
+description: >
+ Object.getOwnPropertyNames called with a valid non-object value
+info: |
+ GetOwnPropertyKeys ( O, type )
+
+ Let obj be ? ToObject(O).
+ Let keys be ? obj.[[OwnPropertyKeys]]().
+ Let nameList be a new empty List.
+ For each element nextKey of keys, do
+ If Type(nextKey) is Symbol and type is symbol or Type(nextKey) is String and type is string, then
+ Append nextKey as the last element of nameList.
+ Return CreateArrayFromList(nameList).
+
+features: [Symbol]
+includes: [compareArray.js]
+---*/
+
+assert.compareArray(
+ Object.getOwnPropertyNames(true), [],
+ 'Object.getOwnPropertyNames(true) must return []'
+);
+assert.compareArray(
+ Object.getOwnPropertyNames(false), [],
+ 'Object.getOwnPropertyNames(false) must return []'
+);
+assert.compareArray(
+ Object.getOwnPropertyNames(1), [],
+ 'Object.getOwnPropertyNames(1) must return []'
+);
+assert.compareArray(
+ Object.getOwnPropertyNames(0), [],
+ 'Object.getOwnPropertyNames(0) must return []'
+);
+assert.compareArray(
+ Object.getOwnPropertyNames(""), ["length"],
+ 'Object.getOwnPropertyNames("") must return ["length"]'
+);
+assert.compareArray(
+ Object.getOwnPropertyNames(Symbol()), [],
+ 'Object.getOwnPropertyNames(Symbol()) must return []'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/not-a-constructor.js
new file mode 100644
index 0000000000..70a205d5a4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.getOwnPropertyNames does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(Object.getOwnPropertyNames),
+ false,
+ 'isConstructor(Object.getOwnPropertyNames) must return false'
+);
+
+assert.throws(TypeError, () => {
+ new Object.getOwnPropertyNames({});
+}, '`new Object.getOwnPropertyNames({})` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/order-after-define-property.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/order-after-define-property.js
new file mode 100644
index 0000000000..ee8a079462
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/order-after-define-property.js
@@ -0,0 +1,50 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.getownpropertynames
+description: >
+ Property names are returned in ascending chronological order of creation
+ that is unaffected by [[DefineOwnProperty]].
+info: |
+ Object.getOwnPropertyNames ( O )
+
+ 1. Return ? GetOwnPropertyKeys(O, String).
+
+ GetOwnPropertyKeys ( O, type )
+
+ 1. Let obj be ? ToObject(O).
+ 2. Let keys be ? obj.[[OwnPropertyKeys]]().
+ [...]
+
+ OrdinaryOwnPropertyKeys ( O )
+
+ [...]
+ 3. For each own property key P of O that is a String but is not an array index,
+ in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ [...]
+ 5. Return keys.
+features: [arrow-function]
+includes: [compareArray.js]
+---*/
+
+var obj = {};
+Object.defineProperty(obj, "a", {
+ get: function() {},
+ set: function(_value) {},
+ enumerable: true,
+ configurable: true,
+})
+obj.b = 2;
+Object.defineProperty(obj, "a", {
+ set: function(_value) {},
+});
+assert.compareArray(Object.getOwnPropertyNames(obj), ["a", "b"]);
+
+var arr = [];
+arr.a = 1;
+Object.defineProperty(arr, "length", {value: 2});
+assert.compareArray(Object.getOwnPropertyNames(arr), ["length", "a"]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/proxy-invariant-absent-not-configurable-symbol-key.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/proxy-invariant-absent-not-configurable-symbol-key.js
new file mode 100644
index 0000000000..8064daff4f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/proxy-invariant-absent-not-configurable-symbol-key.js
@@ -0,0 +1,56 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.getownpropertynames
+description: >
+ Proxy [[OwnPropertyKeys]] trap does not skip symbol keys when validating invariant:
+ * The result List must contain the keys of all non-configurable own properties of
+ the target object.
+info: |
+ Object.getOwnPropertyNames ( O )
+
+ 1. Return ? GetOwnPropertyKeys(O, String).
+
+ GetOwnPropertyKeys ( O, type )
+
+ ...
+ 2. Let keys be ? obj.[[OwnPropertyKeys]]().
+
+ [[OwnPropertyKeys]] ( )
+
+ ...
+ 11. Let targetKeys be ? target.[[OwnPropertyKeys]]().
+ ...
+ 15. Let targetNonconfigurableKeys be a new empty List.
+ 16. For each element key of targetKeys, do
+ a. Let desc be ? target.[[GetOwnProperty]](key).
+ b. If desc is not undefined and desc.[[Configurable]] is false, then
+ i. Append key as an element of targetNonconfigurableKeys.
+ ...
+ 18. Let uncheckedResultKeys be a new List which is a copy of trapResult.
+ 19. For each key that is an element of targetNonconfigurableKeys, do
+ a. If key is not an element of uncheckedResultKeys, throw a TypeError exception.
+features: [Proxy, Symbol]
+---*/
+
+var target = {};
+var symbol = Symbol();
+Object.defineProperty(target, symbol, {
+ value: 1,
+ writable: true,
+ enumerable: true,
+ configurable: false,
+});
+
+var proxy = new Proxy(target, {
+ ownKeys: function() {
+ return [];
+ },
+});
+
+assert.throws(TypeError, function() {
+ Object.getOwnPropertyNames(proxy);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/proxy-invariant-duplicate-symbol-entry.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/proxy-invariant-duplicate-symbol-entry.js
new file mode 100644
index 0000000000..fe3757163f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/proxy-invariant-duplicate-symbol-entry.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.getownpropertynames
+description: >
+ Proxy [[OwnPropertyKeys]] trap does not skip symbol keys when validating invariant:
+ * The returned List contains no duplicate entries.
+info: |
+ Object.getOwnPropertyNames ( O )
+
+ 1. Return ? GetOwnPropertyKeys(O, String).
+
+ GetOwnPropertyKeys ( O, type )
+
+ ...
+ 2. Let keys be ? obj.[[OwnPropertyKeys]]().
+
+ [[OwnPropertyKeys]] ( )
+
+ ...
+ 8. Let trapResult be ? CreateListFromArrayLike(trapResultArray, « String, Symbol »).
+ 9. If trapResult contains any duplicate entries, throw a TypeError exception.
+features: [Proxy, Symbol]
+---*/
+
+var symbol = Symbol();
+var proxy = new Proxy({}, {
+ ownKeys: function() {
+ return [symbol, symbol];
+ },
+});
+
+assert.throws(TypeError, function() {
+ Object.getOwnPropertyNames(proxy);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/proxy-invariant-not-extensible-absent-symbol-key.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/proxy-invariant-not-extensible-absent-symbol-key.js
new file mode 100644
index 0000000000..20edc78cf9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/proxy-invariant-not-extensible-absent-symbol-key.js
@@ -0,0 +1,54 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.getownpropertynames
+description: >
+ Proxy [[OwnPropertyKeys]] trap does not skip symbol keys when validating invariant:
+ * If the target object is not extensible, then the result List must contain all the keys of
+ the own properties of the target object and no other values.
+info: |
+ Object.getOwnPropertyNames ( O )
+
+ 1. Return ? GetOwnPropertyKeys(O, String).
+
+ GetOwnPropertyKeys ( O, type )
+
+ ...
+ 2. Let keys be ? obj.[[OwnPropertyKeys]]().
+
+ [[OwnPropertyKeys]] ( )
+
+ ...
+ 11. Let targetKeys be ? target.[[OwnPropertyKeys]]().
+ 16. For each element key of targetKeys, do
+ a. Let desc be ? target.[[GetOwnProperty]](key).
+ b. If desc is not undefined and desc.[[Configurable]] is false, then
+ ...
+ c. Else,
+ i. Append key as an element of targetConfigurableKeys.
+ ...
+ 18. Let uncheckedResultKeys be a new List which is a copy of trapResult.
+ ...
+ 21. For each key that is an element of targetConfigurableKeys, do
+ a. If key is not an element of uncheckedResultKeys, throw a TypeError exception.
+features: [Proxy, Symbol]
+---*/
+
+var target = {};
+var symbol = Symbol();
+target[symbol] = 2;
+
+var proxy = new Proxy(target, {
+ ownKeys: function() {
+ return [];
+ },
+});
+
+Object.preventExtensions(target);
+
+assert.throws(TypeError, function() {
+ Object.getOwnPropertyNames(proxy);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/proxy-invariant-not-extensible-extra-symbol-key.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/proxy-invariant-not-extensible-extra-symbol-key.js
new file mode 100644
index 0000000000..e03c0d9fb5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/proxy-invariant-not-extensible-extra-symbol-key.js
@@ -0,0 +1,51 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.getownpropertynames
+description: >
+ Proxy [[OwnPropertyKeys]] trap does not skip symbol keys when validating invariant:
+ * If the target object is not extensible, then the result List must contain all the keys of
+ the own properties of the target object and no other values.
+info: |
+ Object.getOwnPropertyNames ( O )
+
+ 1. Return ? GetOwnPropertyKeys(O, String).
+
+ GetOwnPropertyKeys ( O, type )
+
+ ...
+ 2. Let keys be ? obj.[[OwnPropertyKeys]]().
+
+ [[OwnPropertyKeys]] ( )
+
+ ...
+ 11. Let targetKeys be ? target.[[OwnPropertyKeys]]().
+ 16. For each element key of targetKeys, do
+ a. Let desc be ? target.[[GetOwnProperty]](key).
+ b. If desc is not undefined and desc.[[Configurable]] is false, then
+ ...
+ c. Else,
+ i. Append key as an element of targetConfigurableKeys.
+ ...
+ 18. Let uncheckedResultKeys be a new List which is a copy of trapResult.
+ ...
+ 22. If uncheckedResultKeys is not empty, throw a TypeError exception.
+features: [Proxy, Symbol]
+---*/
+
+var target = {};
+var symbol = Symbol();
+var proxy = new Proxy(target, {
+ ownKeys: function() {
+ return [symbol];
+ },
+});
+
+Object.preventExtensions(target);
+
+assert.throws(TypeError, function() {
+ Object.getOwnPropertyNames(proxy);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/shell.js b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertyNames/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/browser.js b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/length.js b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/length.js
new file mode 100644
index 0000000000..6807e1d8dc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/length.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.getownpropertysymbols
+description: >
+ Object.getOwnPropertySymbols.length is 1.
+info: |
+ Object.getOwnPropertySymbols ( O )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, has a length
+ property whose value is an integer. Unless otherwise specified, this
+ value is equal to the largest number of named arguments shown in the
+ subclause headings for the function description, including optional
+ parameters. However, rest parameters shown using the form “...name”
+ are not included in the default argument count.
+
+ Unless otherwise specified, the length property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.getOwnPropertySymbols.length, 1);
+
+verifyNotEnumerable(Object.getOwnPropertySymbols, "length");
+verifyNotWritable(Object.getOwnPropertySymbols, "length");
+verifyConfigurable(Object.getOwnPropertySymbols, "length");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/name.js b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/name.js
new file mode 100644
index 0000000000..0199dbba7d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/name.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.getownpropertysymbols
+description: >
+ Object.getOwnPropertySymbols.name is "getOwnPropertySymbols".
+info: |
+ Object.getOwnPropertySymbols ( O )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.getOwnPropertySymbols.name, "getOwnPropertySymbols");
+
+verifyNotEnumerable(Object.getOwnPropertySymbols, "name");
+verifyNotWritable(Object.getOwnPropertySymbols, "name");
+verifyConfigurable(Object.getOwnPropertySymbols, "name");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/non-object-argument-invalid.js b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/non-object-argument-invalid.js
new file mode 100644
index 0000000000..ca722cca30
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/non-object-argument-invalid.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.getownpropertysymbols
+description: >
+ Object.getOwnPropertySymbols called with an invalid non-object value
+info: |
+ GetOwnPropertyKeys ( O, type )
+
+ Let obj be ? ToObject(O).
+ Let keys be ? obj.[[OwnPropertyKeys]]().
+ Let nameList be a new empty List.
+ For each element nextKey of keys, do
+ If Type(nextKey) is Symbol and type is symbol or Type(nextKey) is String and type is string, then
+ Append nextKey as the last element of nameList.
+ Return CreateArrayFromList(nameList).
+
+features: [Symbol]
+---*/
+
+let count = 0;
+
+assert.throws(TypeError, () => {
+ count++;
+ Object.getOwnPropertySymbols(undefined);
+}, '`Object.getOwnPropertySymbols(undefined)` throws TypeError');
+
+assert.throws(TypeError, () => {
+ count++;
+ Object.getOwnPropertySymbols(null);
+}, '`Object.getOwnPropertySymbols(null)` throws TypeError');
+
+assert.sameValue(count, 2, 'The value of `count` is 2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/non-object-argument-valid.js b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/non-object-argument-valid.js
new file mode 100644
index 0000000000..bc9f498394
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/non-object-argument-valid.js
@@ -0,0 +1,47 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.getownpropertysymbols
+description: >
+ Object.getOwnPropertySymbols called with a valid non-object value
+info: |
+ GetOwnPropertyKeys ( O, type )
+
+ Let obj be ? ToObject(O).
+ Let keys be ? obj.[[OwnPropertyKeys]]().
+ Let nameList be a new empty List.
+ For each element nextKey of keys, do
+ If Type(nextKey) is Symbol and type is symbol or Type(nextKey) is String and type is string, then
+ Append nextKey as the last element of nameList.
+ Return CreateArrayFromList(nameList).
+
+features: [Symbol]
+includes: [compareArray.js]
+---*/
+
+assert.compareArray(
+ Object.getOwnPropertySymbols(true), [],
+ 'Object.getOwnPropertySymbols(true) must return []'
+);
+assert.compareArray(
+ Object.getOwnPropertySymbols(false), [],
+ 'Object.getOwnPropertySymbols(false) must return []'
+);
+assert.compareArray(
+ Object.getOwnPropertySymbols(1), [],
+ 'Object.getOwnPropertySymbols(1) must return []'
+);
+assert.compareArray(
+ Object.getOwnPropertySymbols(0), [],
+ 'Object.getOwnPropertySymbols(0) must return []'
+);
+assert.compareArray(
+ Object.getOwnPropertySymbols(""), [],
+ 'Object.getOwnPropertySymbols("") must return []'
+);
+assert.compareArray(
+ Object.getOwnPropertySymbols(Symbol()), [],
+ 'Object.getOwnPropertySymbols(Symbol()) must return []'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/not-a-constructor.js
new file mode 100644
index 0000000000..c9a4d86680
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.getOwnPropertySymbols does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, Symbol, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(Object.getOwnPropertySymbols),
+ false,
+ 'isConstructor(Object.getOwnPropertySymbols) must return false'
+);
+
+assert.throws(TypeError, () => {
+ new Object.getOwnPropertySymbols({});
+}, '`new Object.getOwnPropertySymbols({})` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/object-contains-symbol-property-with-description.js b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/object-contains-symbol-property-with-description.js
new file mode 100644
index 0000000000..87d6e5619e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/object-contains-symbol-property-with-description.js
@@ -0,0 +1,20 @@
+// Copyright (C) 2013 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.getownpropertysymbols
+description: >
+ Object.getOwnPropertySymbols returns all symbol properties that have descriptions
+features: [Symbol]
+---*/
+
+var sym = Symbol("description");
+
+var obj = {};
+obj[sym] = 1;
+
+var syms = Object.getOwnPropertySymbols(obj);
+
+assert.sameValue(syms[0], sym, "Array of symbols returned by `Object.getOwnPropertySymbols(obj)` includes `sym`");
+assert.sameValue(syms.length, 1, "The value of `syms.length` is `1`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/object-contains-symbol-property-without-description.js b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/object-contains-symbol-property-without-description.js
new file mode 100644
index 0000000000..7d63d51ad2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/object-contains-symbol-property-without-description.js
@@ -0,0 +1,20 @@
+// Copyright (C) 2013 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.getownpropertysymbols
+description: >
+ Object.getOwnPropertySymbols returns all symbol properties that do not have descriptions
+features: [Symbol]
+---*/
+
+var sym = Symbol();
+
+var obj = {};
+obj[sym] = 1;
+
+var syms = Object.getOwnPropertySymbols(obj);
+
+assert.sameValue(syms[0], sym, "Array of symbols returned by `Object.getOwnPropertySymbols(obj)` includes `sym`");
+assert.sameValue(syms.length, 1, "The value of `syms.length` is `1`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/order-after-define-property.js b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/order-after-define-property.js
new file mode 100644
index 0000000000..737ec77cdb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/order-after-define-property.js
@@ -0,0 +1,48 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.getownpropertysymbols
+description: >
+ Property names are returned in ascending chronological order of creation
+ that is unaffected by [[DefineOwnProperty]].
+info: |
+ Object.getOwnPropertySymbols ( O )
+
+ 1. Return ? GetOwnPropertyKeys(O, Symbol).
+
+ GetOwnPropertyKeys ( O, type )
+
+ 1. Let obj be ? ToObject(O).
+ 2. Let keys be ? obj.[[OwnPropertyKeys]]().
+ [...]
+
+ OrdinaryOwnPropertyKeys ( O )
+
+ [...]
+ 4. For each own property key P of O that is a Symbol, in ascending
+ chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 5. Return keys.
+features: [Symbol]
+includes: [compareArray.js]
+---*/
+
+var symA = Symbol("a");
+var symB = Symbol("b");
+
+var obj = {};
+obj[symA] = 1;
+obj[symB] = 2;
+Object.defineProperty(obj, symA, {
+ get: function() {},
+});
+assert.compareArray(Object.getOwnPropertySymbols(obj), [symA, symB]);
+
+var arr = [];
+arr[symA] = 1;
+arr[symB] = 2;
+Object.defineProperty(arr, symA, {writable: false});
+assert.compareArray(Object.getOwnPropertySymbols(arr), [symA, symB]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/proxy-invariant-absent-not-configurable-string-key.js b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/proxy-invariant-absent-not-configurable-string-key.js
new file mode 100644
index 0000000000..7c16ab01ef
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/proxy-invariant-absent-not-configurable-string-key.js
@@ -0,0 +1,55 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.getownpropertysymbols
+description: >
+ Proxy [[OwnPropertyKeys]] trap does not skip string keys when validating invariant:
+ * The result List must contain the keys of all non-configurable own properties of
+ the target object.
+info: |
+ Object.getOwnPropertySymbols ( O )
+
+ 1. Return ? GetOwnPropertyKeys(O, Symbol).
+
+ GetOwnPropertyKeys ( O, type )
+
+ ...
+ 2. Let keys be ? obj.[[OwnPropertyKeys]]().
+
+ [[OwnPropertyKeys]] ( )
+
+ ...
+ 11. Let targetKeys be ? target.[[OwnPropertyKeys]]().
+ ...
+ 15. Let targetNonconfigurableKeys be a new empty List.
+ 16. For each element key of targetKeys, do
+ a. Let desc be ? target.[[GetOwnProperty]](key).
+ b. If desc is not undefined and desc.[[Configurable]] is false, then
+ i. Append key as an element of targetNonconfigurableKeys.
+ ...
+ 18. Let uncheckedResultKeys be a new List which is a copy of trapResult.
+ 19. For each key that is an element of targetNonconfigurableKeys, do
+ a. If key is not an element of uncheckedResultKeys, throw a TypeError exception.
+features: [Proxy]
+---*/
+
+var target = {};
+Object.defineProperty(target, 'prop', {
+ value: 1,
+ writable: true,
+ enumerable: true,
+ configurable: false,
+});
+
+var proxy = new Proxy(target, {
+ ownKeys: function() {
+ return [];
+ },
+});
+
+assert.throws(TypeError, function() {
+ Object.getOwnPropertySymbols(proxy);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/proxy-invariant-duplicate-string-entry.js b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/proxy-invariant-duplicate-string-entry.js
new file mode 100644
index 0000000000..7ce3773702
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/proxy-invariant-duplicate-string-entry.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.getownpropertysymbols
+description: >
+ Proxy [[OwnPropertyKeys]] trap does not skip string keys when validating invariant:
+ * The returned List contains no duplicate entries.
+info: |
+ Object.getOwnPropertySymbols ( O )
+
+ 1. Return ? GetOwnPropertyKeys(O, Symbol).
+
+ GetOwnPropertyKeys ( O, type )
+
+ ...
+ 2. Let keys be ? obj.[[OwnPropertyKeys]]().
+
+ [[OwnPropertyKeys]] ( )
+
+ ...
+ 8. Let trapResult be ? CreateListFromArrayLike(trapResultArray, « String, Symbol »).
+ 9. If trapResult contains any duplicate entries, throw a TypeError exception.
+features: [Proxy]
+---*/
+
+var proxy = new Proxy({}, {
+ ownKeys: function() {
+ return ['a', 'a'];
+ },
+});
+
+assert.throws(TypeError, function() {
+ Object.getOwnPropertySymbols(proxy);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/proxy-invariant-not-extensible-absent-string-key.js b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/proxy-invariant-not-extensible-absent-string-key.js
new file mode 100644
index 0000000000..5f16121e9c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/proxy-invariant-not-extensible-absent-string-key.js
@@ -0,0 +1,51 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.getownpropertysymbols
+description: >
+ Proxy [[OwnPropertyKeys]] trap does not skip string keys when validating invariant:
+ * If the target object is not extensible, then the result List must contain all the keys of
+ the own properties of the target object and no other values.
+info: |
+ Object.getOwnPropertySymbols ( O )
+
+ 1. Return ? GetOwnPropertyKeys(O, Symbol).
+
+ GetOwnPropertyKeys ( O, type )
+
+ ...
+ 2. Let keys be ? obj.[[OwnPropertyKeys]]().
+
+ [[OwnPropertyKeys]] ( )
+
+ ...
+ 11. Let targetKeys be ? target.[[OwnPropertyKeys]]().
+ 16. For each element key of targetKeys, do
+ a. Let desc be ? target.[[GetOwnProperty]](key).
+ b. If desc is not undefined and desc.[[Configurable]] is false, then
+ ...
+ c. Else,
+ i. Append key as an element of targetConfigurableKeys.
+ ...
+ 18. Let uncheckedResultKeys be a new List which is a copy of trapResult.
+ ...
+ 21. For each key that is an element of targetConfigurableKeys, do
+ a. If key is not an element of uncheckedResultKeys, throw a TypeError exception.
+features: [Proxy]
+---*/
+
+var target = {prop: 2};
+var proxy = new Proxy(target, {
+ ownKeys: function() {
+ return [];
+ },
+});
+
+Object.preventExtensions(target);
+
+assert.throws(TypeError, function() {
+ Object.getOwnPropertySymbols(proxy);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/proxy-invariant-not-extensible-extra-string-key.js b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/proxy-invariant-not-extensible-extra-string-key.js
new file mode 100644
index 0000000000..233ce34b16
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/proxy-invariant-not-extensible-extra-string-key.js
@@ -0,0 +1,50 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.getownpropertysymbols
+description: >
+ Proxy [[OwnPropertyKeys]] trap does not skip string keys when validating invariant:
+ * If the target object is not extensible, then the result List must contain all the keys of
+ the own properties of the target object and no other values.
+info: |
+ Object.getOwnPropertySymbols ( O )
+
+ 1. Return ? GetOwnPropertyKeys(O, Symbol).
+
+ GetOwnPropertyKeys ( O, type )
+
+ ...
+ 2. Let keys be ? obj.[[OwnPropertyKeys]]().
+
+ [[OwnPropertyKeys]] ( )
+
+ ...
+ 11. Let targetKeys be ? target.[[OwnPropertyKeys]]().
+ 16. For each element key of targetKeys, do
+ a. Let desc be ? target.[[GetOwnProperty]](key).
+ b. If desc is not undefined and desc.[[Configurable]] is false, then
+ ...
+ c. Else,
+ i. Append key as an element of targetConfigurableKeys.
+ ...
+ 18. Let uncheckedResultKeys be a new List which is a copy of trapResult.
+ ...
+ 22. If uncheckedResultKeys is not empty, throw a TypeError exception.
+features: [Proxy]
+---*/
+
+var target = {};
+var proxy = new Proxy(target, {
+ ownKeys: function() {
+ return ['prop'];
+ },
+});
+
+Object.preventExtensions(target);
+
+assert.throws(TypeError, function() {
+ Object.getOwnPropertySymbols(proxy);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/shell.js b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getOwnPropertySymbols/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-0-1.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-0-1.js
new file mode 100644
index 0000000000..be0cca15a7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-0-1.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-0-1
+description: Object.getPrototypeOf must exist as a function
+---*/
+
+assert.sameValue(typeof(Object.getPrototypeOf), "function", 'typeof(Object.getPrototypeOf)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-0-2.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-0-2.js
new file mode 100644
index 0000000000..a402a47715
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-0-2.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-0-2
+description: Object.getPrototypeOf must exist as a function taking 1 parameter
+---*/
+
+assert.sameValue(Object.getPrototypeOf.length, 1, 'Object.getPrototypeOf.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-0-3.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-0-3.js
new file mode 100644
index 0000000000..7058948c84
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-0-3.js
@@ -0,0 +1,14 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-0-3
+description: Object.getPrototypeOf must take 1 parameter
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.getPrototypeOf();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-1-2.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-1-2.js
new file mode 100644
index 0000000000..d1a182d55e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-1-2.js
@@ -0,0 +1,14 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-1-2
+description: Object.getPrototypeOf throws TypeError if 'O' is null
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.getPrototypeOf(null);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-1-3.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-1-3.js
new file mode 100644
index 0000000000..d07baf00cd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-1-3.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-1-3
+description: Object.getPrototypeOf returns Boolean.prototype if 'O' is a boolean
+---*/
+
+assert.sameValue(Object.getPrototypeOf(true), Boolean.prototype, 'Object.getPrototypeOf(true)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-1-4.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-1-4.js
new file mode 100644
index 0000000000..bd55d66f73
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-1-4.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-1-4
+description: Object.getPrototypeOf returns String.prototype if 'O' is a string
+---*/
+
+assert.sameValue(Object.getPrototypeOf("abc"), String.prototype, 'Object.getPrototypeOf("abc")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-1.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-1.js
new file mode 100644
index 0000000000..3cf05634eb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-1.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-1
+description: Object.getPrototypeOf returns Number.prototype if 'O' is a number
+---*/
+
+assert.sameValue(Object.getPrototypeOf(0), Number.prototype, 'Object.getPrototypeOf(0)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-1.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-1.js
new file mode 100644
index 0000000000..0b8177c077
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-1
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (Boolean)
+---*/
+
+assert.sameValue(Object.getPrototypeOf(Boolean), Function.prototype, 'Object.getPrototypeOf(Boolean)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-10.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-10.js
new file mode 100644
index 0000000000..6e05eb1d0a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-10.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-10
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (RegExp)
+---*/
+
+assert.sameValue(Object.getPrototypeOf(RegExp), Function.prototype, 'Object.getPrototypeOf(RegExp)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-11.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-11.js
new file mode 100644
index 0000000000..bbbe24044c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-11.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-11
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (Error)
+---*/
+
+assert.sameValue(Object.getPrototypeOf(Error), Function.prototype, 'Object.getPrototypeOf(Error)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-12.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-12.js
new file mode 100644
index 0000000000..b72d16e116
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-12.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-12
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (EvalError)
+---*/
+
+assert.sameValue(Object.getPrototypeOf(EvalError), Error, 'Object.getPrototypeOf(EvalError)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-13.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-13.js
new file mode 100644
index 0000000000..b468f6e9d2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-13.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-13
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (RangeError)
+---*/
+
+assert.sameValue(Object.getPrototypeOf(RangeError), Error, 'Object.getPrototypeOf(RangeError)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-14.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-14.js
new file mode 100644
index 0000000000..6101e43953
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-14.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-14
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (ReferenceError)
+---*/
+
+assert.sameValue(Object.getPrototypeOf(ReferenceError), Error, 'Object.getPrototypeOf(ReferenceError)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-15.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-15.js
new file mode 100644
index 0000000000..a802e5b626
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-15.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-15
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (SyntaxError)
+---*/
+
+assert.sameValue(Object.getPrototypeOf(SyntaxError), Error, 'Object.getPrototypeOf(SyntaxError)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-16.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-16.js
new file mode 100644
index 0000000000..e62f026460
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-16.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-16
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (TypeError)
+---*/
+
+assert.sameValue(Object.getPrototypeOf(TypeError), Error, 'Object.getPrototypeOf(TypeError)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-17.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-17.js
new file mode 100644
index 0000000000..67ceae23f0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-17.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-17
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (URIError)
+---*/
+
+assert.sameValue(Object.getPrototypeOf(URIError), Error, 'Object.getPrototypeOf(URIError)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-18.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-18.js
new file mode 100644
index 0000000000..6a49f3512e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-18.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-18
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (JSON)
+---*/
+
+assert.sameValue(Object.getPrototypeOf(JSON), Object.prototype, 'Object.getPrototypeOf(JSON)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-19.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-19.js
new file mode 100644
index 0000000000..d51b0964b3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-19.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-19
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (Object object)
+---*/
+
+var obj = {};
+
+assert.sameValue(Object.getPrototypeOf(obj), Object.prototype, 'Object.getPrototypeOf(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-2.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-2.js
new file mode 100644
index 0000000000..10826fd4d0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-2.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Let 'x' be the return value from getPrototypeOf when called on d.
+ Then, x.isPrototypeOf(d) must be true.
+es5id: 15.2.3.2-2-2
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (custom object)
+---*/
+
+function base() {}
+
+function derived() {}
+derived.prototype = new base();
+
+var d = new derived();
+var x = Object.getPrototypeOf(d);
+
+assert.sameValue(x.isPrototypeOf(d), true, 'x.isPrototypeOf(d)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-20.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-20.js
new file mode 100644
index 0000000000..956a276255
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-20.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-20
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (Function Object)
+---*/
+
+var obj = function(a, b) {
+ return a + b;
+};
+
+assert.sameValue(Object.getPrototypeOf(obj), Function.prototype, 'Object.getPrototypeOf(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-21.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-21.js
new file mode 100644
index 0000000000..f466d4243c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-21.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-21
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (Array object)
+---*/
+
+var arr = [1, 2, 3];
+
+assert.sameValue(Object.getPrototypeOf(arr), Array.prototype, 'Object.getPrototypeOf(arr)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-22.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-22.js
new file mode 100644
index 0000000000..bff25349a7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-22.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-22
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (String object)
+---*/
+
+var obj = new String("abc");
+
+assert.sameValue(Object.getPrototypeOf(obj), String.prototype, 'Object.getPrototypeOf(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-23.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-23.js
new file mode 100644
index 0000000000..cc5fb8fbfc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-23.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-23
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (Boolean object)
+---*/
+
+var obj = new Boolean(true);
+
+assert.sameValue(Object.getPrototypeOf(obj), Boolean.prototype, 'Object.getPrototypeOf(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-24.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-24.js
new file mode 100644
index 0000000000..1dfcd9bb41
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-24.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-24
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (Number object)
+---*/
+
+var obj = new Number(-3);
+
+assert.sameValue(Object.getPrototypeOf(obj), Number.prototype, 'Object.getPrototypeOf(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-25.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-25.js
new file mode 100644
index 0000000000..b461a7647f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-25.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-25
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (Date object)
+---*/
+
+var obj = new Date();
+
+assert.sameValue(Object.getPrototypeOf(obj), Date.prototype, 'Object.getPrototypeOf(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-26.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-26.js
new file mode 100644
index 0000000000..adbedca94b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-26.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-26
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (RegExp object)
+---*/
+
+var obj = new RegExp();
+
+assert.sameValue(Object.getPrototypeOf(obj), RegExp.prototype, 'Object.getPrototypeOf(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-27.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-27.js
new file mode 100644
index 0000000000..da90f47471
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-27.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-27
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (Error object)
+---*/
+
+var obj = new Error();
+
+assert.sameValue(Object.getPrototypeOf(obj), Error.prototype, 'Object.getPrototypeOf(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-28.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-28.js
new file mode 100644
index 0000000000..ac2f7bf5a4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-28.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-28
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (the Arguments object)
+---*/
+
+function fun() {
+ return arguments;
+}
+var obj = fun(1, true, 3);
+
+assert.sameValue(Object.getPrototypeOf(obj), Object.prototype, 'Object.getPrototypeOf(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-3.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-3.js
new file mode 100644
index 0000000000..8d1fc2db00
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-3.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-3
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (Object)
+---*/
+
+assert.sameValue(Object.getPrototypeOf(Object), Function.prototype, 'Object.getPrototypeOf(Object)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-30.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-30.js
new file mode 100644
index 0000000000..d0bf5447f4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-30.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-30
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (the global object)
+---*/
+
+var proto = Object.getPrototypeOf(this);
+
+assert.sameValue(proto.isPrototypeOf(this), true, 'proto.isPrototypeOf(this)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-31.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-31.js
new file mode 100644
index 0000000000..eea1744b59
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-31.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-31
+description: Object.getPrototypeOf returns null
+---*/
+
+assert.sameValue(Object.getPrototypeOf(Object.prototype), null, 'Object.getPrototypeOf(Object.prototype)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-4.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-4.js
new file mode 100644
index 0000000000..666c053410
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-4.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-4
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (Function)
+---*/
+
+assert.sameValue(Object.getPrototypeOf(Function), Function.prototype, 'Object.getPrototypeOf(Function)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-5.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-5.js
new file mode 100644
index 0000000000..d51dbe2a8f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-5.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-5
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (Array)
+---*/
+
+assert.sameValue(Object.getPrototypeOf(Array), Function.prototype, 'Object.getPrototypeOf(Array)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-6.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-6.js
new file mode 100644
index 0000000000..4702575ef9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-6.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-6
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (String)
+---*/
+
+assert.sameValue(Object.getPrototypeOf(String), Function.prototype, 'Object.getPrototypeOf(String)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-7.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-7.js
new file mode 100644
index 0000000000..fee7e5392f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-7.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-7
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (Number)
+---*/
+
+assert.sameValue(Object.getPrototypeOf(Number), Function.prototype, 'Object.getPrototypeOf(Number)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-8.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-8.js
new file mode 100644
index 0000000000..0365a3a239
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-8.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-8
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (Math)
+---*/
+
+assert.sameValue(Object.getPrototypeOf(Math), Object.prototype, 'Object.getPrototypeOf(Math)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-9.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-9.js
new file mode 100644
index 0000000000..71d43d1d6e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/15.2.3.2-2-9.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.2-2-9
+description: >
+ Object.getPrototypeOf returns the [[Prototype]] of its parameter
+ (Date)
+---*/
+
+assert.sameValue(Object.getPrototypeOf(Date), Function.prototype, 'Object.getPrototypeOf(Date)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/browser.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/name.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/name.js
new file mode 100644
index 0000000000..ad6ed3dfd7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/name.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 19.1.2.9
+description: >
+ Object.getPrototypeOf.name is "getPrototypeOf".
+info: |
+ Object.getPrototypeOf ( O )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.getPrototypeOf.name, "getPrototypeOf");
+
+verifyNotEnumerable(Object.getPrototypeOf, "name");
+verifyNotWritable(Object.getPrototypeOf, "name");
+verifyConfigurable(Object.getPrototypeOf, "name");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/not-a-constructor.js
new file mode 100644
index 0000000000..a40dd4beca
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.getPrototypeOf does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(Object.getPrototypeOf),
+ false,
+ 'isConstructor(Object.getPrototypeOf) must return false'
+);
+
+assert.throws(TypeError, () => {
+ new Object.getPrototypeOf({});
+}, '`new Object.getPrototypeOf({})` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/getPrototypeOf/shell.js b/js/src/tests/test262/built-ins/Object/getPrototypeOf/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/getPrototypeOf/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/browser.js b/js/src/tests/test262/built-ins/Object/hasOwn/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/descriptor.js b/js/src/tests/test262/built-ins/Object/hasOwn/descriptor.js
new file mode 100644
index 0000000000..105e9eaa10
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/descriptor.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: Testing descriptor property of Object.hasOwn
+includes: [propertyHelper.js]
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+verifyWritable(Object, "hasOwn");
+verifyNotEnumerable(Object, "hasOwn");
+verifyConfigurable(Object, "hasOwn");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown.js
new file mode 100644
index 0000000000..5f0587e3bb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown.js
@@ -0,0 +1,21 @@
+// Copyright 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+info: |
+ Object.hasOwn ( _O_, _P_ )
+
+ 1. Let _obj_ be ? ToObject(_O_).
+ 2. Let _key_ be ? ToPropertyKey(_P_).
+ 3. Return ? HasOwnProperty(_obj_, _key_).
+description: >
+ Checking type of the Object.hasOwn and the returned result
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+assert.sameValue(typeof Object.hasOwn, 'function');
+assert(Object.hasOwn(Object, 'hasOwn'));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_exists.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_exists.js
new file mode 100644
index 0000000000..eefc438f7c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_exists.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: Properties - [[HasOwnProperty]] (old style inherited property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var base = {
+ foo: 42
+};
+var o = Object.create(base);
+
+assert.sameValue(Object.hasOwn(o, "foo"), false, 'Object.hasOwn(o, "foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter.js
new file mode 100644
index 0000000000..9fff68d638
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: Properties - [[HasOwnProperty]] (literal inherited getter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var base = {
+ get foo() {
+ return 42;
+ }
+};
+var o = Object.create(base);
+
+assert.sameValue(Object.hasOwn(o, "foo"), false, 'Object.hasOwn(o, "foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_and_setter.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_and_setter.js
new file mode 100644
index 0000000000..389a0b432b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_and_setter.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (literal inherited getter/setter
+ property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var base = {
+ get foo() {
+ return 42;
+ },
+ set foo(x) {
+ }
+};
+var o = Object.create(base);
+
+assert.sameValue(Object.hasOwn(o, "foo"), false, 'Object.hasOwn(o, "foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_and_setter_configurable_enumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_and_setter_configurable_enumerable.js
new file mode 100644
index 0000000000..7008fb123f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_and_setter_configurable_enumerable.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (configurable, enumerable
+ inherited getter/setter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ get: function() {
+ return 42;
+ },
+ set: function() {;
+ },
+ enumerable: true,
+ configurable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(Object.hasOwn(o, "foo"), false, 'Object.hasOwn(o, "foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_and_setter_configurable_nonenumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_and_setter_configurable_nonenumerable.js
new file mode 100644
index 0000000000..544ef19bde
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_and_setter_configurable_nonenumerable.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (configurable, non-enumerable
+ inherited getter/setter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ get: function() {
+ return 42;
+ },
+ set: function() {;
+ },
+ configurable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(Object.hasOwn(o, "foo"), false, 'Object.hasOwn(o, "foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_and_setter_nonconfigurable_enumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_and_setter_nonconfigurable_enumerable.js
new file mode 100644
index 0000000000..651f64075b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_and_setter_nonconfigurable_enumerable.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (non-configurable, enumerable
+ inherited getter/setter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ get: function() {
+ return 42;
+ },
+ set: function() {;
+ },
+ enumerable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(Object.hasOwn(o, "foo"), false, 'Object.hasOwn(o, "foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_and_setter_nonconfigurable_nonenumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_and_setter_nonconfigurable_nonenumerable.js
new file mode 100644
index 0000000000..e990298d9f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_and_setter_nonconfigurable_nonenumerable.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (non-configurable, non-enumerable
+ inherited getter/setter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ get: function() {
+ return 42;
+ },
+ set: function() {;
+ }
+});
+var o = Object.create(base);
+
+assert.sameValue(Object.hasOwn(o, "foo"), false, 'Object.hasOwn(o, "foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_configurable_enumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_configurable_enumerable.js
new file mode 100644
index 0000000000..7be3fc00a3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_configurable_enumerable.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (configurable, enumerable
+ inherited getter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ get: function() {
+ return 42;
+ },
+ enumerable: true,
+ configurable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(Object.hasOwn(o, "foo"), false, 'Object.hasOwn(o, "foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_configurable_nonenumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_configurable_nonenumerable.js
new file mode 100644
index 0000000000..b32db7f3a6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_configurable_nonenumerable.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (configurable, non-enumerable
+ inherited getter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ get: function() {
+ return 42;
+ },
+ configurable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(Object.hasOwn(o, "foo"), false, 'Object.hasOwn(o, "foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_nonconfigurable_enumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_nonconfigurable_enumerable.js
new file mode 100644
index 0000000000..4f8e2c20f6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_nonconfigurable_enumerable.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (non-configurable, enumerable
+ inherited getter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ get: function() {
+ return 42;
+ },
+ enumerable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(Object.hasOwn(o, "foo"), false, 'Object.hasOwn(o, "foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_nonconfigurable_nonenumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_nonconfigurable_nonenumerable.js
new file mode 100644
index 0000000000..e5d79ec8d3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_getter_nonconfigurable_nonenumerable.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (non-configurable, non-enumerable
+ inherited getter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ get: function() {
+ return 42;
+ }
+});
+var o = Object.create(base);
+
+assert.sameValue(Object.hasOwn(o, "foo"), false, 'Object.hasOwn(o, "foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_nonwritable_configurable_enumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_nonwritable_configurable_enumerable.js
new file mode 100644
index 0000000000..f6a04d85fc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_nonwritable_configurable_enumerable.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (non-writable, configurable,
+ enumerable inherited value property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ value: 42,
+ configurable: true,
+ enumerable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(Object.hasOwn(o, "foo"), false, 'Object.hasOwn(o, "foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_nonwritable_configurable_nonenumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_nonwritable_configurable_nonenumerable.js
new file mode 100644
index 0000000000..87e13e833d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_nonwritable_configurable_nonenumerable.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (non-writable, configurable,
+ non-enumerable inherited value property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ value: 42,
+ configurable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(Object.hasOwn(o, "foo"), false, 'Object.hasOwn(o, "foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_nonwritable_nonconfigurable_enumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_nonwritable_nonconfigurable_enumerable.js
new file mode 100644
index 0000000000..3ebdb438f9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_nonwritable_nonconfigurable_enumerable.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (non-writable, non-configurable,
+ enumerable inherited value property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ value: 42,
+ enumerable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(Object.hasOwn(o, "foo"), false, 'Object.hasOwn(o, "foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_nonwritable_nonconfigurable_nonenumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_nonwritable_nonconfigurable_nonenumerable.js
new file mode 100644
index 0000000000..97de4fe45c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_nonwritable_nonconfigurable_nonenumerable.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (non-writable, non-configurable,
+ non-enumerable inherited value property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ value: 42
+});
+var o = Object.create(base);
+
+assert.sameValue(Object.hasOwn(o, "foo"), false, 'Object.hasOwn(o, "foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_setter.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_setter.js
new file mode 100644
index 0000000000..aee60cc1d7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_setter.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: Properties - [[HasOwnProperty]] (literal inherited setter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var base = {
+ set foo(x) {
+ }
+};
+var o = Object.create(base);
+
+assert.sameValue(Object.hasOwn(o, "foo"), false, 'Object.hasOwn(o, "foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_setter_configurable_enumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_setter_configurable_enumerable.js
new file mode 100644
index 0000000000..0abbf08d4a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_setter_configurable_enumerable.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (configurable, enumerable
+ inherited setter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ set: function() {;
+ },
+ enumerable: true,
+ configurable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(Object.hasOwn(o, "foo"), false, 'Object.hasOwn(o, "foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_setter_configurable_nonenumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_setter_configurable_nonenumerable.js
new file mode 100644
index 0000000000..01036b8b84
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_setter_configurable_nonenumerable.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (configurable, non-enumerable
+ inherited setter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ set: function() {;
+ },
+ configurable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(Object.hasOwn(o, "foo"), false, 'Object.hasOwn(o, "foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_setter_nonconfigurable_enumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_setter_nonconfigurable_enumerable.js
new file mode 100644
index 0000000000..6c4a6339ed
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_setter_nonconfigurable_enumerable.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (non-configurable, enumerable
+ inherited setter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ set: function() {;
+ },
+ enumerable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(Object.hasOwn(o, "foo"), false, 'Object.hasOwn(o, "foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_setter_nonconfigurable_nonenumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_setter_nonconfigurable_nonenumerable.js
new file mode 100644
index 0000000000..dc1f127609
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_setter_nonconfigurable_nonenumerable.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (non-configurable, non-enumerable
+ inherited setter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ set: function() {;
+ }
+});
+var o = Object.create(base);
+
+assert.sameValue(Object.hasOwn(o, "foo"), false, 'Object.hasOwn(o, "foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_writable_configurable_enumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_writable_configurable_enumerable.js
new file mode 100644
index 0000000000..b23947cc53
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_writable_configurable_enumerable.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (writable, configurable,
+ enumerable inherited value property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ value: 42,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(Object.hasOwn(o, "foo"), false, 'Object.hasOwn(o, "foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_writable_configurable_nonenumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_writable_configurable_nonenumerable.js
new file mode 100644
index 0000000000..629e5d0fe8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_writable_configurable_nonenumerable.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (writable, configurable,
+ non-enumerable inherited value property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ value: 42,
+ writable: true,
+ configurable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(Object.hasOwn(o, "foo"), false, 'Object.hasOwn(o, "foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_writable_nonconfigurable_enumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_writable_nonconfigurable_enumerable.js
new file mode 100644
index 0000000000..7f0d8c3cda
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_writable_nonconfigurable_enumerable.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (writable, non-configurable,
+ enumerable inherited value property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ value: 42,
+ writable: true,
+ enumerable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(Object.hasOwn(o, "foo"), false, 'Object.hasOwn(o, "foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_writable_nonconfigurable_nonenumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_writable_nonconfigurable_nonenumerable.js
new file mode 100644
index 0000000000..2dd98d90fe
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_inherited_writable_nonconfigurable_nonenumerable.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (writable, non-configurable,
+ non-enumerable inherited value property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ value: 42,
+ writable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(Object.hasOwn(o, "foo"), false, 'Object.hasOwn(o, "foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_nonexistent.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_nonexistent.js
new file mode 100644
index 0000000000..6d6c4b0d4c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_nonexistent.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: Properties - [[HasOwnProperty]] (property does not exist)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var o = {};
+
+assert.sameValue(Object.hasOwn(o, "foo"), false, 'Object.hasOwn(o, "foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter.js
new file mode 100644
index 0000000000..6f67785d83
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: Properties - [[HasOwnProperty]] (literal own getter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var o = {
+ get foo() {
+ return 42;
+ }
+};
+
+assert.sameValue(Object.hasOwn(o, "foo"), true, 'Object.hasOwn(o, "foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_and_setter.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_and_setter.js
new file mode 100644
index 0000000000..e23f79d7c4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_and_setter.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (literal own getter/setter
+ property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var o = {
+ get foo() {
+ return 42;
+ },
+ set foo(x) {
+ }
+};
+
+assert.sameValue(Object.hasOwn(o, "foo"), true, 'Object.hasOwn(o, "foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_and_setter_configurable_enumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_and_setter_configurable_enumerable.js
new file mode 100644
index 0000000000..8b17cbb95d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_and_setter_configurable_enumerable.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (configurable, enumerable own
+ getter/setter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ get: function() {
+ return 42;
+ },
+ set: function() {;
+ },
+ enumerable: true,
+ configurable: true
+});
+
+assert.sameValue(Object.hasOwn(o, "foo"), true, 'Object.hasOwn(o, "foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_and_setter_configurable_nonenumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_and_setter_configurable_nonenumerable.js
new file mode 100644
index 0000000000..6c578d2ab2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_and_setter_configurable_nonenumerable.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (configurable, non-enumerable own
+ getter/setter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ get: function() {
+ return 42;
+ },
+ set: function() {;
+ },
+ configurable: true
+});
+
+assert.sameValue(Object.hasOwn(o, "foo"), true, 'Object.hasOwn(o, "foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_and_setter_nonconfigurable_enumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_and_setter_nonconfigurable_enumerable.js
new file mode 100644
index 0000000000..4732f5bc17
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_and_setter_nonconfigurable_enumerable.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (non-configurable, enumerable own
+ getter/setter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ get: function() {
+ return 42;
+ },
+ set: function() {;
+ },
+ enumerable: true
+});
+
+assert.sameValue(Object.hasOwn(o, "foo"), true, 'Object.hasOwn(o, "foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_and_setter_nonconfigurable_nonenumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_and_setter_nonconfigurable_nonenumerable.js
new file mode 100644
index 0000000000..aa3534ae89
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_and_setter_nonconfigurable_nonenumerable.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (non-configurable, non-enumerable
+ own getter/setter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ get: function() {
+ return 42;
+ },
+ set: function() {;
+ }
+});
+
+assert.sameValue(Object.hasOwn(o, "foo"), true, 'Object.hasOwn(o, "foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_configurable_enumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_configurable_enumerable.js
new file mode 100644
index 0000000000..96e151f048
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_configurable_enumerable.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (configurable, enumerable own
+ getter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ get: function() {
+ return 42;
+ },
+ enumerable: true,
+ configurable: true
+});
+
+assert.sameValue(Object.hasOwn(o, "foo"), true, 'Object.hasOwn(o, "foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_configurable_nonenumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_configurable_nonenumerable.js
new file mode 100644
index 0000000000..7e91b1357c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_configurable_nonenumerable.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (configurable, non-enumerable own
+ getter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ get: function() {
+ return 42;
+ },
+ configurable: true
+});
+
+assert.sameValue(Object.hasOwn(o, "foo"), true, 'Object.hasOwn(o, "foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_nonconfigurable_enumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_nonconfigurable_enumerable.js
new file mode 100644
index 0000000000..de0bf03326
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_nonconfigurable_enumerable.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (non-configurable, enumerable own
+ getter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ get: function() {
+ return 42;
+ },
+ enumerable: true
+});
+
+assert.sameValue(Object.hasOwn(o, "foo"), true, 'Object.hasOwn(o, "foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_nonconfigurable_nonenumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_nonconfigurable_nonenumerable.js
new file mode 100644
index 0000000000..84b3e1c195
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_getter_nonconfigurable_nonenumerable.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (non-configurable, non-enumerable
+ own getter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ get: function() {
+ return 42;
+ }
+});
+
+assert.sameValue(Object.hasOwn(o, "foo"), true, 'Object.hasOwn(o, "foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_nonwritable_configurable_enumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_nonwritable_configurable_enumerable.js
new file mode 100644
index 0000000000..dc8e0031a4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_nonwritable_configurable_enumerable.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (non-writable, configurable,
+ enumerable own value property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ value: 42,
+ configurable: true,
+ enumerable: true
+});
+
+assert.sameValue(Object.hasOwn(o, "foo"), true, 'Object.hasOwn(o, "foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_nonwritable_nonconfigurable_enumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_nonwritable_nonconfigurable_enumerable.js
new file mode 100644
index 0000000000..754097da1b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_nonwritable_nonconfigurable_enumerable.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (non-writable, non-configurable,
+ enumerable own value property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ value: 42,
+ enumerable: true
+});
+
+assert.sameValue(Object.hasOwn(o, "foo"), true, 'Object.hasOwn(o, "foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_nonwriteable_configurable_nonenumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_nonwriteable_configurable_nonenumerable.js
new file mode 100644
index 0000000000..36b7f14ccd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_nonwriteable_configurable_nonenumerable.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (non-writable, configurable,
+ non-enumerable own value property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ value: 42,
+ configurable: true
+});
+
+assert.sameValue(Object.hasOwn(o, "foo"), true, 'Object.hasOwn(o, "foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_nonwriteable_nonconfigurable_nonenumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_nonwriteable_nonconfigurable_nonenumerable.js
new file mode 100644
index 0000000000..f60bb35222
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_nonwriteable_nonconfigurable_nonenumerable.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (non-writable, non-configurable,
+ non-enumerable own value property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ value: 42
+});
+
+assert.sameValue(Object.hasOwn(o, "foo"), true, 'Object.hasOwn(o, "foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_property_exists.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_property_exists.js
new file mode 100644
index 0000000000..661d7804d4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_property_exists.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: Properties - [[HasOwnProperty]] (old style own property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var o = {
+ foo: 42
+};
+
+assert.sameValue(Object.hasOwn(o, "foo"), true, 'Object.hasOwn(o, "foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_setter.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_setter.js
new file mode 100644
index 0000000000..94aa453182
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_setter.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: Properties - [[HasOwnProperty]] (literal own setter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var o = {
+ set foo(x) {
+ }
+};
+
+assert.sameValue(Object.hasOwn(o, "foo"), true, 'Object.hasOwn(o, "foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_setter_configurable_enumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_setter_configurable_enumerable.js
new file mode 100644
index 0000000000..09e650bb02
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_setter_configurable_enumerable.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (configurable, enumerable own
+ setter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ set: function() {;
+ },
+ enumerable: true,
+ configurable: true
+});
+
+assert.sameValue(Object.hasOwn(o, "foo"), true, 'Object.hasOwn(o, "foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_setter_configurable_nonenumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_setter_configurable_nonenumerable.js
new file mode 100644
index 0000000000..322cb967c2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_setter_configurable_nonenumerable.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (configurable, non-enumerable own
+ setter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ set: function() {;
+ },
+ configurable: true
+});
+
+assert.sameValue(Object.hasOwn(o, "foo"), true, 'Object.hasOwn(o, "foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_setter_nonconfigurable_enumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_setter_nonconfigurable_enumerable.js
new file mode 100644
index 0000000000..3c8f500bfb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_setter_nonconfigurable_enumerable.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (non-configurable, enumerable own
+ setter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ set: function() {;
+ },
+ enumerable: true
+});
+
+assert.sameValue(Object.hasOwn(o, "foo"), true, 'Object.hasOwn(o, "foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_setter_nonconfigurable_nonenumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_setter_nonconfigurable_nonenumerable.js
new file mode 100644
index 0000000000..953fca4644
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_setter_nonconfigurable_nonenumerable.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (non-configurable, non-enumerable
+ own setter property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ set: function() {;
+ }
+});
+
+assert.sameValue(Object.hasOwn(o, "foo"), true, 'Object.hasOwn(o, "foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_writable_configurable_enumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_writable_configurable_enumerable.js
new file mode 100644
index 0000000000..e5e22be7e5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_writable_configurable_enumerable.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (writable, configurable,
+ enumerable own value property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ value: 42,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+
+assert.sameValue(Object.hasOwn(o, "foo"), true, 'Object.hasOwn(o, "foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_writable_configurable_nonenumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_writable_configurable_nonenumerable.js
new file mode 100644
index 0000000000..b759d497f3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_writable_configurable_nonenumerable.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (writable, configurable,
+ non-enumerable own value property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ value: 42,
+ writable: true,
+ configurable: true
+});
+
+assert.sameValue(Object.hasOwn(o, "foo"), true, 'Object.hasOwn(o, "foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_writable_nonconfigurable_enumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_writable_nonconfigurable_enumerable.js
new file mode 100644
index 0000000000..31e4d6206d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_writable_nonconfigurable_enumerable.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (writable, non-configurable,
+ enumerable own value property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ value: 42,
+ writable: true,
+ enumerable: true
+});
+
+assert.sameValue(Object.hasOwn(o, "foo"), true, 'Object.hasOwn(o, "foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_writable_nonconfigurable_nonenumerable.js b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_writable_nonconfigurable_nonenumerable.js
new file mode 100644
index 0000000000..8684e398f5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/hasown_own_writable_nonconfigurable_nonenumerable.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Properties - [[HasOwnProperty]] (writable, non-configurable,
+ non-enumerable own value property)
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ value: 42,
+ writable: true
+});
+
+assert.sameValue(Object.hasOwn(o, "foo"), true, 'Object.hasOwn(o, "foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/length.js b/js/src/tests/test262/built-ins/Object/hasOwn/length.js
new file mode 100644
index 0000000000..9e8b586ce1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/length.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Object.hasOwn.length is 2.
+info: |
+ Object.hasOwn ( _O_, _P_ )
+
+ ECMAScript Standard Built-in Objects
+
+ Every built-in function object, including constructors, has a "length"
+ property whose value is an integer. Unless otherwise specified, this
+ value is equal to the largest number of named arguments shown in the
+ subclause headings for the function description.
+
+ Unless otherwise specified, the "length" property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+verifyProperty(Object.hasOwn, "length", {
+ value: 2,
+ writable: false,
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/name.js b/js/src/tests/test262/built-ins/Object/hasOwn/name.js
new file mode 100644
index 0000000000..c8532bc559
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/name.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Object.hasOwn.name is "hasOwn".
+info: |
+ Object.hasOwn ( _O_, _P_ )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+assert.sameValue(Object.hasOwn.name, "hasOwn");
+
+verifyNotEnumerable(Object.hasOwn, "name");
+verifyNotWritable(Object.hasOwn, "name");
+verifyConfigurable(Object.hasOwn, "name");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/hasOwn/not-a-constructor.js
new file mode 100644
index 0000000000..a3badb6c87
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.hasOwn does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+author: Jamie Kyle
+features: [Reflect.construct, arrow-function, Object.hasOwn]
+---*/
+
+assert.sameValue(
+ isConstructor(Object.hasOwn),
+ false,
+ 'isConstructor(Object.hasOwn) must return false'
+);
+
+assert.throws(TypeError, () => {
+ new Object.hasOwn('');
+}, '`new Object.hasOwn(\'\')` throws TypeError');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/prototype.js b/js/src/tests/test262/built-ins/Object/hasOwn/prototype.js
new file mode 100644
index 0000000000..1eb3676ddc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/prototype.js
@@ -0,0 +1,15 @@
+// Copyright 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+info: Object.hasOwn has not prototype property
+description: >
+ Checking if obtaining the prototype property of Object.hasOwn fails
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+assert.sameValue(Object.hasOwn.prototype, undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/shell.js b/js/src/tests/test262/built-ins/Object/hasOwn/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/symbol_own_property.js b/js/src/tests/test262/built-ins/Object/hasOwn/symbol_own_property.js
new file mode 100644
index 0000000000..49146009fa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/symbol_own_property.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: Object.hasOwn called with symbol property key
+info: |
+ Object.hasOwn ( _O_, _P_ )
+
+ 1. Let _obj_ be ? ToObject(_O_).
+ 1. Let _key_ be ? ToPropertyKey(_P_).
+ ...
+author: Jamie Kyle
+features: [Symbol, Object.hasOwn]
+---*/
+
+var obj = {};
+var sym = Symbol();
+
+assert.sameValue(
+ Object.hasOwn(obj, sym),
+ false,
+ "Returns false if symbol own property not found"
+);
+
+obj[sym] = 0;
+
+assert.sameValue(
+ Object.hasOwn(obj, sym),
+ true,
+ "Returns true if symbol own property found"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/symbol_property_toPrimitive.js b/js/src/tests/test262/built-ins/Object/hasOwn/symbol_property_toPrimitive.js
new file mode 100644
index 0000000000..76260149d8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/symbol_property_toPrimitive.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: Object.hasOwn with symbol and @@toPrimitive conversion
+info: |
+ Object.hasOwn ( _O_, _P_ )
+
+ 1. Let _obj_ be ? ToObject(_O_).
+ 1. Let _key_ be ? ToPropertyKey(_P_).
+ ...
+author: Jamie Kyle
+features: [Symbol.toPrimitive, Object.hasOwn]
+---*/
+
+var obj = {};
+var sym = Symbol();
+
+var callCount = 0;
+var wrapper = {};
+wrapper[Symbol.toPrimitive] = function() {
+ callCount += 1;
+ return sym;
+};
+
+obj[sym] = 0;
+
+assert.sameValue(
+ Object.hasOwn(obj, wrapper),
+ true,
+ "Returns true if symbol own property found"
+);
+
+assert.sameValue(callCount, 1, "toPrimitive method called exactly once");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/symbol_property_toString.js b/js/src/tests/test262/built-ins/Object/hasOwn/symbol_property_toString.js
new file mode 100644
index 0000000000..e27def6e27
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/symbol_property_toString.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: Object.hasOwn with symbol and toString conversion
+info: |
+ Object.hasOwn ( _O_, _P_ )
+
+ 1. Let _obj_ be ? ToObject(_O_).
+ 1. Let _key_ be ? ToPropertyKey(_P_).
+ ...
+author: Jamie Kyle
+features: [Symbol, Object.hasOwn]
+---*/
+
+var obj = {};
+var sym = Symbol();
+
+var callCount = 0;
+var wrapper = {
+ toString: function() {
+ callCount += 1;
+ return sym;
+ },
+ valueOf: function () {
+ throw new Test262Error("valueOf() called")
+ }
+};
+
+obj[sym] = 0;
+
+assert.sameValue(
+ Object.hasOwn(obj, wrapper),
+ true,
+ "Returns true if symbol own property found"
+);
+
+assert.sameValue(callCount, 1, "toString method called exactly once");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/symbol_property_valueOf.js b/js/src/tests/test262/built-ins/Object/hasOwn/symbol_property_valueOf.js
new file mode 100644
index 0000000000..fd7f2b589d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/symbol_property_valueOf.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: Object.hasOwn with symbol and valueOf conversion
+info: |
+ Object.hasOwn ( _O_, _P_ )
+
+ 1. Let _obj_ be ? ToObject(_O_).
+ 2. Let _key_ be ? ToPropertyKey(_P_).
+ ...
+author: Jamie Kyle
+features: [Symbol, Object.hasOwn]
+---*/
+
+var obj = {};
+var sym = Symbol();
+
+var callCount = 0;
+var wrapper = {
+ valueOf: function() {
+ callCount += 1;
+ return sym;
+ },
+ toString: null
+};
+
+obj[sym] = 0;
+
+assert.sameValue(
+ Object.hasOwn(obj, wrapper),
+ true,
+ "Returns true if symbol own property found"
+);
+
+assert.sameValue(callCount, 1, "valueOf method called exactly once");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/toobject_before_topropertykey.js b/js/src/tests/test262/built-ins/Object/hasOwn/toobject_before_topropertykey.js
new file mode 100644
index 0000000000..6552617f03
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/toobject_before_topropertykey.js
@@ -0,0 +1,50 @@
+// Copyright (C) 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.hasown
+description: >
+ ToObject is performed before ToPropertyKey.
+info: |
+ Object.hasOwn ( _O_, _P_ )
+
+ 1. Let _obj_ be ? ToObject(_O_).
+ 2. Let _key_ be ? ToPropertyKey(_P_).
+
+ ToPropertyKey ( argument )
+
+ 1. Let key be ? ToPrimitive(argument, hint String).
+author: Jamie Kyle
+features: [Symbol.toPrimitive, Object.hasOwn]
+---*/
+
+var callCount1 = 0;
+var coercibleKey1 = {
+ get toString() {
+ callCount1++;
+ throw new Test262Error();
+ },
+ get valueOf() {
+ callCount1++;
+ throw new Test262Error();
+ },
+};
+
+assert.throws(TypeError, function() {
+ Object.hasOwn(null, coercibleKey1);
+});
+assert.sameValue(callCount1, 0, "toString and valueOf must not be called");
+
+
+var callCount2 = 0;
+var coercibleKey2 = {};
+coercibleKey2[Symbol.toPrimitive] = function() {
+ callCount2++;
+ throw new Test262Error();
+};
+
+assert.throws(TypeError, function() {
+ Object.hasOwn(undefined, coercibleKey2);
+});
+assert.sameValue(callCount2, 0, "Symbol.toPrimitive must not be called");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/toobject_null.js b/js/src/tests/test262/built-ins/Object/hasOwn/toobject_null.js
new file mode 100644
index 0000000000..b9cf662835
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/toobject_null.js
@@ -0,0 +1,17 @@
+// Copyright 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Let O be the result of calling ToObject passing the this value as
+ the argument.
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+assert.throws(TypeError, function() {
+ Object.hasOwn(null, 'foo');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/hasOwn/toobject_undefined.js b/js/src/tests/test262/built-ins/Object/hasOwn/toobject_undefined.js
new file mode 100644
index 0000000000..070ba2d6af
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/hasOwn/toobject_undefined.js
@@ -0,0 +1,17 @@
+// Copyright 2021 Jamie Kyle. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.hasown
+description: >
+ Let O be the result of calling ToObject passing the this value as
+ the argument.
+author: Jamie Kyle
+features: [Object.hasOwn]
+---*/
+
+assert.throws(TypeError, function() {
+ Object.hasOwn(undefined, 'foo');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/browser.js b/js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/consistent-value-function-arguments.js b/js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/consistent-value-function-arguments.js
new file mode 100644
index 0000000000..4497384698
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/consistent-value-function-arguments.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2017 Claude Pache. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-invariants-of-the-essential-internal-methods
+description: >
+ Value of non-writable, non-configurable data property must not change
+ ("arguments" property of a non-strict function)
+info: |
+ [[GetOwnProperty]] (P)
+ [...]
+ - If a property P is described as a data property with Desc.[[Value]] equal
+ to v and Desc.[[Writable]] and Desc.[[Configurable]] are both false, then
+ the SameValue must be returned for the Desc.[[Value]] attribute of the
+ property on all future calls to [[GetOwnProperty]] ( P ).
+ [...]
+ (This invariant was violated for the specific property under test by a number
+ of implementations as of January 2017.)
+---*/
+
+function f() {
+ return Reflect.getOwnPropertyDescriptor(f, 'arguments');
+}
+
+Reflect.defineProperty(f, 'arguments', {
+ writable: false,
+ configurable: false
+});
+
+var desc = Reflect.getOwnPropertyDescriptor(f, 'arguments');
+if (desc && desc.configurable === false && desc.writable === false) {
+ var desc2 = f();
+ assert.sameValue(desc.value, desc2.value);
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/consistent-value-function-caller.js b/js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/consistent-value-function-caller.js
new file mode 100644
index 0000000000..fe7c73ee9a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/consistent-value-function-caller.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2017 Claude Pache. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-invariants-of-the-essential-internal-methods
+description: >
+ Value of non-writable, non-configurable data property must not change
+ ("caller" property of a non-strict function)
+info: |
+ [[GetOwnProperty]] (P)
+ [...]
+ - If a property P is described as a data property with Desc.[[Value]] equal
+ to v and Desc.[[Writable]] and Desc.[[Configurable]] are both false, then
+ the SameValue must be returned for the Desc.[[Value]] attribute of the
+ property on all future calls to [[GetOwnProperty]] ( P ).
+ [...]
+ (This invariant was violated for the specific property under test by a number
+ of implementations as of January 2017.)
+---*/
+
+function f() {
+ return Reflect.getOwnPropertyDescriptor(f, 'caller');
+}
+
+function g() {
+ return f();
+}
+
+Reflect.defineProperty(f, 'caller', {
+ writable: false,
+ configurable: false
+});
+
+var desc = Reflect.getOwnPropertyDescriptor(f, 'caller');
+if (desc && desc.configurable === false && desc.writable === false) {
+ var desc2 = g();
+ assert.sameValue(desc.value, desc2.value);
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/consistent-value-regexp-dollar1.js b/js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/consistent-value-regexp-dollar1.js
new file mode 100644
index 0000000000..7c1e48dc00
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/consistent-value-regexp-dollar1.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2017 Claude Pache. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-invariants-of-the-essential-internal-methods
+description: >
+ Value of non-writable, non-configurable data property must not change
+ ("$1" property of the RegExp built-in)
+info: |
+ [[GetOwnProperty]] (P)
+ [...]
+ - If a property P is described as a data property with Desc.[[Value]] equal
+ to v and Desc.[[Writable]] and Desc.[[Configurable]] are both false, then
+ the SameValue must be returned for the Desc.[[Value]] attribute of the
+ property on all future calls to [[GetOwnProperty]] ( P ).
+ [...]
+ (This invariant was violated for the specific property under test by at least
+ one implementation as of January 2017.)
+---*/
+
+Reflect.defineProperty(RegExp, '$1', {
+ writable: false,
+ configurable: false
+});
+
+var desc = Reflect.getOwnPropertyDescriptor(RegExp, '$1');
+if (desc && desc.configurable === false && desc.writable === false) {
+ /(x)/.exec('x');
+ var desc2 = Reflect.getOwnPropertyDescriptor(RegExp, '$1');
+ assert.sameValue(desc.value, desc2.value);
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/consistent-writable-regexp-dollar1.js b/js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/consistent-writable-regexp-dollar1.js
new file mode 100644
index 0000000000..374c4a48df
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/consistent-writable-regexp-dollar1.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2017 Claude Pache. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-invariants-of-the-essential-internal-methods
+description: >
+ A property made non-writable, non-configurable must not be reported as writable
+ ("$1" property of the RegExp built-in)
+info: |
+ [[GetOwnProperty]] (P)
+ [...]
+ - If the [[Writable]] attribute may change from false to true,
+ then the [[Configurable]] attribute must be true..
+ [...]
+ (This invariant was violated for the specific property under test by at least
+ one implementation as of January 2017.)
+---*/
+
+if (Reflect.defineProperty(RegExp, '$1', {
+ writable: false,
+ configurable: false
+ })) {
+ var desc = Reflect.getOwnPropertyDescriptor(RegExp, '$1');
+ assert.sameValue(desc.writable, false);
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/nan-equivalence-define-own-property-reassign.js b/js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/nan-equivalence-define-own-property-reassign.js
new file mode 100644
index 0000000000..367b86a20d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/nan-equivalence-define-own-property-reassign.js
@@ -0,0 +1,70 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-ordinary-object-internal-methods-and-internal-slots-defineownproperty-p-desc
+description: >
+ Replaces value field even if they pass in the SameValue algorithm, including
+ distinct NaN values
+info: |
+ This test does not compare the actual byte values, instead it simply checks that
+ the value is some valid NaN encoding.
+
+ ---
+
+ Previously, this test compared the "value" field using the SameValue
+ algorithm (thereby ignoring distinct NaN values)
+
+ ---
+
+ [[DefineOwnProperty]] (P, Desc)
+
+ Return ? OrdinaryDefineOwnProperty(O, P, Desc).
+
+ #sec-ordinarydefineownproperty
+ OrdinaryDefineOwnProperty ( O, P, Desc )
+
+ 1. Let current be ? O.[[GetOwnProperty]](P).
+ 2. Let extensible be O.[[Extensible]].
+ 3. Return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc,
+ current).
+
+ #sec-validateandapplypropertydescriptor
+ ValidateAndApplyPropertyDescriptor ( O, P, extensible, Desc, current )
+
+ ...
+ 7. Else if IsDataDescriptor(current) and IsDataDescriptor(Desc) are both true,
+ then
+ a. If current.[[Configurable]] is false and current.[[Writable]] is false,
+ then
+ ...
+ ...
+ 9. If O is not undefined, then
+ a. For each field of Desc that is present, set the corresponding attribute
+ of the property named P of object O to the value of the field.
+ 10. Return true.
+
+ #sec-isnan-number
+
+ NOTE: A reliable way for ECMAScript code to test if a value X is a NaN is
+ an expression of the form X !== X. The result will be true if and only
+ if X is a NaN.
+includes: [nans.js]
+---*/
+
+var len = NaNs.length;
+
+for (var idx = 0; idx < len; ++idx) {
+ for (var jdx = 0; jdx < len; ++jdx) {
+ var a = {};
+
+ a.prop = NaNs[idx];
+ a.prop = NaNs[jdx];
+
+ assert(
+ a.prop !== a.prop,
+ `Object property value reassigned to NaN produced by (index=${idx}) results in a valid NaN`
+ );
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/nan-equivalence-define-own-property-reconfigure.js b/js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/nan-equivalence-define-own-property-reconfigure.js
new file mode 100644
index 0000000000..4c10cb6f8f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/nan-equivalence-define-own-property-reconfigure.js
@@ -0,0 +1,77 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-ordinary-object-internal-methods-and-internal-slots-defineownproperty-p-desc
+description: >
+ Replaces value field even if they pass in the SameValue algorithm, including
+ distinct NaN values
+info: |
+ This test does not compare the actual byte values, instead it simply checks that
+ the value is some valid NaN encoding.
+
+ ---
+
+ Previously, this method compared the "value" field using the SameValue
+ algorithm (thereby ignoring distinct NaN values)
+
+ ---
+
+ [[DefineOwnProperty]] (P, Desc)
+
+ Return ? OrdinaryDefineOwnProperty(O, P, Desc).
+
+ #sec-ordinarydefineownproperty
+ OrdinaryDefineOwnProperty ( O, P, Desc )
+
+ 1. Let current be ? O.[[GetOwnProperty]](P).
+ 2. Let extensible be O.[[Extensible]].
+ 3. Return ValidateAndApplyPropertyDescriptor(O, P, extensible, Desc,
+ current).
+
+ #sec-validateandapplypropertydescriptor
+ ValidateAndApplyPropertyDescriptor ( O, P, extensible, Desc, current )
+
+ ...
+ 7. Else if IsDataDescriptor(current) and IsDataDescriptor(Desc) are both true,
+ then
+ a. If current.[[Configurable]] is false and current.[[Writable]] is false,
+ then
+ ...
+ ...
+ 9. If O is not undefined, then
+ a. For each field of Desc that is present, set the corresponding attribute
+ of the property named P of object O to the value of the field.
+ 10. Return true.
+
+ #sec-isnan-number
+
+ NOTE: A reliable way for ECMAScript code to test if a value X is a NaN is
+ an expression of the form X !== X. The result will be true if and only
+ if X is a NaN.
+includes: [nans.js]
+---*/
+
+var len = NaNs.length;
+
+for (var idx = 0; idx < len; ++idx) {
+ for (var jdx = 0; jdx < len; ++jdx) {
+ var a = {};
+ var b = {};
+
+ Object.defineProperty(a, "prop", {
+ value: NaNs[idx],
+ configurable: true,
+ });
+
+ Object.defineProperty(a, "prop", {
+ value: NaNs[jdx],
+ });
+
+ assert(
+ a.prop !== a.prop,
+ `Object property value reconfigured to NaN produced by (index=${idx}) results in a valid NaN`
+ );
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/shell.js b/js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/shell.js
new file mode 100644
index 0000000000..b9f0067942
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/internals/DefineOwnProperty/shell.js
@@ -0,0 +1,24 @@
+// GENERATED, DO NOT EDIT
+// file: nans.js
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: |
+ A collection of NaN values produced from expressions that have been observed
+ to create distinct bit representations on various platforms. These provide a
+ weak basis for assertions regarding the consistent canonicalization of NaN
+ values in Array buffers.
+defines: [NaNs]
+---*/
+
+var NaNs = [
+ NaN,
+ Number.NaN,
+ NaN * 0,
+ 0/0,
+ Infinity/Infinity,
+ -(0/0),
+ Math.pow(-1, 0.5),
+ -Math.pow(-1, 0.5),
+ Number("Not-a-Number"),
+];
diff --git a/js/src/tests/test262/built-ins/Object/internals/browser.js b/js/src/tests/test262/built-ins/Object/internals/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/internals/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/internals/shell.js b/js/src/tests/test262/built-ins/Object/internals/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/internals/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/is-a-constructor.js b/js/src/tests/test262/built-ins/Object/is-a-constructor.js
new file mode 100644
index 0000000000..38fa8b6cd8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/is-a-constructor.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ The Object constructor implements [[Construct]]
+info: |
+ IsConstructor ( argument )
+
+ The abstract operation IsConstructor takes argument argument (an ECMAScript language value).
+ It determines if argument is a function object with a [[Construct]] internal method.
+ It performs the following steps when called:
+
+ If Type(argument) is not Object, return false.
+ If argument has a [[Construct]] internal method, return true.
+ Return false.
+includes: [isConstructor.js]
+features: [Reflect.construct]
+---*/
+
+assert.sameValue(isConstructor(Object), true, 'isConstructor(Object) must return true');
+new Object();
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/is/browser.js b/js/src/tests/test262/built-ins/Object/is/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/is/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/is/length.js b/js/src/tests/test262/built-ins/Object/is/length.js
new file mode 100644
index 0000000000..98483984b9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/is/length.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.10
+description: >
+ Object.is ( value1, value2 )
+
+ 17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.is.length, 2, "The value of `Object.is.length` is `2`");
+
+verifyNotEnumerable(Object.is, "length");
+verifyNotWritable(Object.is, "length");
+verifyConfigurable(Object.is, "length");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/is/name.js b/js/src/tests/test262/built-ins/Object/is/name.js
new file mode 100644
index 0000000000..f495ccbc12
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/is/name.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.10
+description: >
+ Object.is ( value1, value2 )
+
+ 17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.is.name, 'is', "The value of `Object.is.name` is `'is'`");
+
+verifyNotEnumerable(Object.is, "name");
+verifyNotWritable(Object.is, "name");
+verifyConfigurable(Object.is, "name");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/is/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/is/not-a-constructor.js
new file mode 100644
index 0000000000..96c90fcc5d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/is/not-a-constructor.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.is does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, Object.is, arrow-function]
+---*/
+
+assert.sameValue(isConstructor(Object.is), false, 'isConstructor(Object.is) must return false');
+
+assert.throws(TypeError, () => {
+ new Object.is(0, 0);
+}, '`new Object.is(0, 0)` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-boolean.js b/js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-boolean.js
new file mode 100644
index 0000000000..96a9b52bde
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-boolean.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.10
+description: >
+ Object.is ( value1, value2 )
+
+ 7.2.9 SameValue(x, y)
+
+ ...
+ 8. If Type(x) is Boolean, then
+ a. If x and y are both true or both false,
+ return true; otherwise, return false.
+---*/
+
+assert.sameValue(Object.is(true, false), false, "`Object.is(true, false)` returns `false`");
+assert.sameValue(Object.is(false, true), false, "`Object.is(false, true)` returns `false`");
+assert.sameValue(Object.is(true, 1), false, "`Object.is(true, 1)` returns `false`");
+assert.sameValue(Object.is(false, 0), false, "`Object.is(false, 0)` returns `false`");
+assert.sameValue(Object.is(true, {}), false, "`Object.is(true, {})` returns `false`");
+assert.sameValue(Object.is(true, undefined), false, "`Object.is(true, undefined)` returns `false`");
+assert.sameValue(Object.is(false, undefined), false, "`Object.is(false, undefined)` returns `false`");
+assert.sameValue(Object.is(true, null), false, "`Object.is(true, null)` returns `false`");
+assert.sameValue(Object.is(false, null), false, "`Object.is(false, null)` returns `false`");
+assert.sameValue(Object.is(true, NaN), false, "`Object.is(true, NaN)` returns `false`");
+assert.sameValue(Object.is(false, NaN), false, "`Object.is(false, NaN)` returns `false`");
+assert.sameValue(Object.is(true, ''), false, "`Object.is(true, '')` returns `false`");
+assert.sameValue(Object.is(false, ''), false, "`Object.is(false, '')` returns `false`");
+assert.sameValue(Object.is(true, []), false, "`Object.is(true, [])` returns `false`");
+assert.sameValue(Object.is(false, []), false, "`Object.is(false, [])` returns `false`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-null.js b/js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-null.js
new file mode 100644
index 0000000000..11373e3466
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-null.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.10
+description: >
+ Object.is ( value1, value2 )
+
+ 7.2.9 SameValue(x, y)
+
+ ...
+ 3. If Type(x) is different from Type(y), return false.
+ ...
+ 5. If Type(x) is Null, return true.
+ ...
+
+---*/
+
+assert.sameValue(Object.is(null), false, "`Object.is(null)` returns `false`");
+assert.sameValue(Object.is(null, undefined), false, "`Object.is(null, undefined)` returns `false`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-number.js b/js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-number.js
new file mode 100644
index 0000000000..7dd60bed5d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-number.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.10
+description: >
+ Object.is ( value1, value2 )
+
+ ...
+ 6. If Type(x) is Number, then
+ a. If x is NaN and y is NaN, return true.
+ b. If x is +0 and y is -0, return false.
+ c. If x is -0 and y is +0, return false.
+ d. If x is the same Number value as y, return true.
+ e. Return false.
+ ...
+---*/
+
+assert.sameValue(Object.is(+0, -0), false, "`Object.is(+0, -0)` returns `false`");
+assert.sameValue(Object.is(-0, +0), false, "`Object.is(-0, +0)` returns `false`");
+assert.sameValue(Object.is(0), false, "`Object.is(0)` returns `false`");
+assert.sameValue(Object.is(Infinity, -Infinity), false, "`Object.is(Infinity, -Infinity)` returns `false`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-object.js b/js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-object.js
new file mode 100644
index 0000000000..38aeba6e09
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-object.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.10
+description: >
+ Object.is ( value1, value2 )
+
+ ...
+ 10. Return true if x and y are the same Object value. Otherwise, return false.
+---*/
+
+assert.sameValue(Object.is({}, {}), false, "`Object.is({}, {})` returns `false`");
+assert.sameValue(
+ Object.is(Object(), Object()),
+ false,
+ "`Object.is(Object(), Object())` returns `false`"
+);
+assert.sameValue(
+ Object.is(new Object(), new Object()),
+ false,
+ "`Object.is(new Object(), new Object())` returns `false`"
+);
+assert.sameValue(
+ Object.is(Object(0), Object(0)),
+ false,
+ "`Object.is(Object(0), Object(0))` returns `false`"
+);
+assert.sameValue(
+ Object.is(new Object(''), new Object('')),
+ false,
+ "`Object.is(new Object(''), new Object(''))` returns `false`"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-string.js b/js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-string.js
new file mode 100644
index 0000000000..c0ea4fde01
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-string.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.10
+description: >
+ Object.is ( value1, value2 )
+
+ 7.2.9 SameValue(x, y)
+
+ ...
+ 7. If Type(x) is String, then
+ a. If x and y are exactly the same sequence of code units
+ (same length and same code units at corresponding indices)
+ return true; otherwise, return false.
+ ...
+---*/
+
+assert.sameValue(Object.is('', true), false, "`Object.is('', true)` returns `false`");
+assert.sameValue(Object.is('', 0), false, "`Object.is('', 0)` returns `false`");
+assert.sameValue(Object.is('', {}), false, "`Object.is('', {})` returns `false`");
+assert.sameValue(
+ Object.is('', undefined),
+ false,
+ "`Object.is('', undefined)` returns `false`"
+);
+assert.sameValue(Object.is('', null), false, "`Object.is('', null)` returns `false`");
+assert.sameValue(Object.is('', NaN), false, "`Object.is('', NaN)` returns `false`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-symbol.js b/js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-symbol.js
new file mode 100644
index 0000000000..bfc0dddd09
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-symbol.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.10
+description: >
+ Object.is ( value1, value2 )
+
+ ...
+ 6. If Type(x) is Symbol, then
+ a. If x and y are both the same Symbol value,
+ return true; otherwise, return false.
+ ...
+features: [Symbol]
+---*/
+
+assert.sameValue(
+ Object.is(Symbol(), Symbol()),
+ false,
+ "`Object.is(Symbol(), Symbol())` returns `false`"
+);
+assert.sameValue(
+ Object.is(Symbol('description'), Symbol('description')),
+ false,
+ "`Object.is(Symbol('description'), Symbol('description'))` returns `false`"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-type.js b/js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-type.js
new file mode 100644
index 0000000000..b33e75f234
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-type.js
@@ -0,0 +1,70 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.10
+description: >
+ Object.is ( value1, value2 )
+
+ 7.2.9 SameValue(x, y)
+
+ ...
+ 3. If Type(x) is different from Type(y), return false.
+ ...
+
+---*/
+
+var a = {};
+
+assert.sameValue(Object.is(a, true), false, "`Object.is(a, true)` returns `false`");
+assert.sameValue(Object.is(a, ''), false, "`Object.is(a, '')` returns `false`");
+assert.sameValue(Object.is(a, 0), false, "`Object.is(a, 0)` returns `false`");
+assert.sameValue(
+ Object.is(a, undefined),
+ false,
+ "`Object.is(a, undefined)` returns `false`"
+);
+
+assert.sameValue(Object.is(NaN, true), false, "`Object.is(NaN, true)` returns `false`");
+assert.sameValue(Object.is(NaN, ''), false, "`Object.is(NaN, '')` returns `false`");
+assert.sameValue(Object.is(NaN, a), false, "`Object.is(NaN, a)` returns `false`");
+assert.sameValue(
+ Object.is(NaN, undefined),
+ false,
+ "`Object.is(NaN, undefined)` returns `false`"
+);
+assert.sameValue(Object.is(NaN, null), false, "`Object.is(NaN, null)` returns `false`");
+
+assert.sameValue(Object.is(true, 0), false, "`Object.is(true, 0)` returns `false`");
+assert.sameValue(Object.is(true, a), false, "`Object.is(true, a)` returns `false`");
+assert.sameValue(
+ Object.is(true, undefined),
+ false,
+ "`Object.is(true, undefined)` returns `false`"
+);
+assert.sameValue(Object.is(true, null), false, "`Object.is(true, null)` returns `false`");
+assert.sameValue(Object.is(true, NaN), false, "`Object.is(true, NaN)` returns `false`");
+assert.sameValue(Object.is(true, ''), false, "`Object.is(true, '')` returns `false`");
+
+assert.sameValue(Object.is(false, 0), false, "`Object.is(false, 0)` returns `false`");
+assert.sameValue(Object.is(false, a), false, "`Object.is(false, a)` returns `false`");
+assert.sameValue(
+ Object.is(false, undefined),
+ false,
+ "`Object.is(false, undefined)` returns `false`"
+);
+assert.sameValue(Object.is(false, null), false, "`Object.is(false, null)` returns `false`");
+assert.sameValue(Object.is(false, NaN), false, "`Object.is(false, NaN)` returns `false`");
+assert.sameValue(Object.is(false, ''), false, "`Object.is(false, '')` returns `false`");
+
+assert.sameValue(Object.is(0, true), false, "`Object.is(0, true)` returns `false`");
+assert.sameValue(Object.is(0, a), false, "`Object.is(0, a)` returns `false`");
+assert.sameValue(
+ Object.is(0, undefined),
+ false,
+ "`Object.is(0, undefined)` returns `false`"
+);
+assert.sameValue(Object.is(0, null), false, "`Object.is(0, null)` returns `false`");
+assert.sameValue(Object.is(0, NaN), false, "`Object.is(0, NaN)` returns `false`");
+assert.sameValue(Object.is(0, ''), false, "`Object.is(0, '')` returns `false`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-undefined.js b/js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-undefined.js
new file mode 100644
index 0000000000..2b6ac29c57
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/is/not-same-value-x-y-undefined.js
@@ -0,0 +1,18 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.10
+description: >
+ Object.is ( value1, value2 )
+
+ 7.2.9 SameValue(x, y)
+
+ ...
+ 4. If Type(x) is Undefined, return true.
+ ...
+
+---*/
+
+assert.sameValue(Object.is(undefined, null), false, "`Object.is(undefined, null)` returns `false`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/is/object-is.js b/js/src/tests/test262/built-ins/Object/is/object-is.js
new file mode 100644
index 0000000000..22dcd083aa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/is/object-is.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.10
+description: >
+ Object.is ( value1, value2 )
+
+ 17 ECMAScript Standard Built-in Objects
+
+includes: [propertyHelper.js]
+---*/
+
+
+assert.sameValue(typeof Object.is, "function");
+assert.sameValue(Object.is.name, "is");
+
+verifyWritable(Object, "is");
+verifyNotEnumerable(Object, "is");
+verifyConfigurable(Object, "is");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/is/same-value-x-y-boolean.js b/js/src/tests/test262/built-ins/Object/is/same-value-x-y-boolean.js
new file mode 100644
index 0000000000..3af4a4b63c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/is/same-value-x-y-boolean.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.10
+description: >
+ Object.is ( value1, value2 )
+
+ 7.2.9 SameValue(x, y)
+
+ ...
+ 8. If Type(x) is Boolean, then
+ a. If x and y are both true or both false,
+ return true; otherwise, return false.
+---*/
+
+assert.sameValue(Object.is(true, true), true, "`Object.is(true, true)` returns `true`");
+assert.sameValue(Object.is(false, false), true, "`Object.is(false, false)` returns `true`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/is/same-value-x-y-empty.js b/js/src/tests/test262/built-ins/Object/is/same-value-x-y-empty.js
new file mode 100644
index 0000000000..1a21afffe6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/is/same-value-x-y-empty.js
@@ -0,0 +1,18 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.10
+description: >
+ Object.is ( value1, value2 )
+
+ 7.2.9 SameValue(x, y)
+
+ ...
+ 4. If Type(x) is Undefined, return true.
+ ...
+
+---*/
+
+assert.sameValue(Object.is(), true, "`Object.is()` returns `true`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/is/same-value-x-y-null.js b/js/src/tests/test262/built-ins/Object/is/same-value-x-y-null.js
new file mode 100644
index 0000000000..b7111df164
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/is/same-value-x-y-null.js
@@ -0,0 +1,20 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.10
+description: >
+ Object.is ( value1, value2 )
+
+ 7.2.9 SameValue(x, y)
+
+ ...
+ 3. If Type(x) is different from Type(y), return false.
+ ...
+ 5. If Type(x) is Null, return true.
+ ...
+
+---*/
+
+assert.sameValue(Object.is(null, null), true, "`Object.is(null, null)` returns `true`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/is/same-value-x-y-number.js b/js/src/tests/test262/built-ins/Object/is/same-value-x-y-number.js
new file mode 100644
index 0000000000..56512031d6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/is/same-value-x-y-number.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.10
+description: >
+ Object.is ( value1, value2 )
+
+ ...
+ 6. If Type(x) is Number, then
+ a. If x is NaN and y is NaN, return true.
+ b. If x is +0 and y is -0, return false.
+ c. If x is -0 and y is +0, return false.
+ d. If x is the same Number value as y, return true.
+ e. Return false.
+ ...
+---*/
+
+assert.sameValue(Object.is(NaN, NaN), true, "`Object.is(NaN, NaN)` returns `true`");
+assert.sameValue(Object.is(-0, -0), true, "`Object.is(-0, -0)` returns `true`");
+assert.sameValue(Object.is(+0, +0), true, "`Object.is(+0, +0)` returns `true`");
+assert.sameValue(Object.is(0, 0), true, "`Object.is(0, 0)` returns `true`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/is/same-value-x-y-object.js b/js/src/tests/test262/built-ins/Object/is/same-value-x-y-object.js
new file mode 100644
index 0000000000..8a3fa70901
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/is/same-value-x-y-object.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.10
+description: >
+ Object.is ( value1, value2 )
+
+ ...
+ 10. Return true if x and y are the same Object value. Otherwise, return false.
+---*/
+
+var a = {};
+var b = Object(0);
+var c = new Object("");
+var d = [];
+var e = Array();
+var f = new Array();
+
+assert.sameValue(Object.is(a, a), true, "`Object.is(a, a)` returns `true`");
+assert.sameValue(Object.is(b, b), true, "`Object.is(b, b)` returns `true`");
+assert.sameValue(Object.is(c, c), true, "`Object.is(c, c)` returns `true`");
+assert.sameValue(Object.is(d, d), true, "`Object.is(d, d)` returns `true`");
+assert.sameValue(Object.is(e, e), true, "`Object.is(e, e)` returns `true`");
+assert.sameValue(Object.is(f, f), true, "`Object.is(f, f)` returns `true`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/is/same-value-x-y-string.js b/js/src/tests/test262/built-ins/Object/is/same-value-x-y-string.js
new file mode 100644
index 0000000000..2c9437bce9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/is/same-value-x-y-string.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.10
+description: >
+ Object.is ( value1, value2 )
+
+ 7.2.9 SameValue(x, y)
+
+ ...
+ 7. If Type(x) is String, then
+ a. If x and y are exactly the same sequence of code units
+ (same length and same code units at corresponding indices)
+ return true; otherwise, return false.
+ ...
+---*/
+
+assert.sameValue(Object.is('', ''), true, "`Object.is('', '')` returns `true`");
+assert.sameValue(
+ Object.is('foo', 'foo'),
+ true,
+ "`Object.is('foo', 'foo')` returns `true`"
+);
+assert.sameValue(
+ Object.is(String('foo'), String('foo')),
+ true,
+ "`Object.is(String('foo'), String('foo'))` returns `true`"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/is/same-value-x-y-symbol.js b/js/src/tests/test262/built-ins/Object/is/same-value-x-y-symbol.js
new file mode 100644
index 0000000000..e10329f767
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/is/same-value-x-y-symbol.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.10
+description: >
+ Object.is ( value1, value2 )
+
+ ...
+ 6. If Type(x) is Symbol, then
+ a. If x and y are both the same Symbol value,
+ return true; otherwise, return false.
+ ...
+features: [Symbol]
+---*/
+
+var a = Symbol();
+var b = Symbol("description");
+
+assert.sameValue(Object.is(a, a), true, "`Object.is(a, a)` returns `true`");
+assert.sameValue(Object.is(b, b), true, "`Object.is(b, b)` returns `true`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/is/same-value-x-y-undefined.js b/js/src/tests/test262/built-ins/Object/is/same-value-x-y-undefined.js
new file mode 100644
index 0000000000..25c8506f70
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/is/same-value-x-y-undefined.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.10
+description: >
+ Object.is ( value1, value2 )
+
+ 7.2.9 SameValue(x, y)
+
+ ...
+ 4. If Type(x) is Undefined, return true.
+ ...
+
+---*/
+
+assert.sameValue(Object.is(undefined, undefined), true, "`Object.is(undefined, undefined)` returns `true`");
+assert.sameValue(Object.is(undefined), true, "`Object.is(undefined)` returns `true`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/is/shell.js b/js/src/tests/test262/built-ins/Object/is/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/is/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/is/symbol-object-is-same-value.js b/js/src/tests/test262/built-ins/Object/is/symbol-object-is-same-value.js
new file mode 100644
index 0000000000..a6c0ad77ce
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/is/symbol-object-is-same-value.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2013 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.is
+description: >
+ Object.is/SameValue: Symbol
+features: [Object.is, Symbol]
+---*/
+var symA = Symbol('66');
+var symB = Symbol('66');
+
+
+assert.sameValue(Object.is(symA, symA), true, "`Object.is(symA, symA)` returns `true`");
+assert.sameValue(Object.is(symB, symB), true, "`Object.is(symB, symB)` returns `true`");
+assert.sameValue(Object.is(symA, symB), false, "`Object.is(symA, symB)` returns `false`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-0-1.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-0-1.js
new file mode 100644
index 0000000000..13a3e8513d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-0-1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-0-1
+description: Object.isExtensible must exist as a function
+---*/
+
+var f = Object.isExtensible;
+
+assert.sameValue(typeof(f), "function", 'typeof(f)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-0-2.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-0-2.js
new file mode 100644
index 0000000000..f756aae99a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-0-2.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-0-2
+description: Object.isExtensible must exist as a function taking 1 parameter
+---*/
+
+assert.sameValue(Object.isExtensible.length, 1, 'Object.isExtensible.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-0-3.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-0-3.js
new file mode 100644
index 0000000000..61348c4f8f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-0-3.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ A newly created object using the Object contructor has its [[Extensible]]
+ property set to true by default (15.2.2.1, step 8).
+es5id: 15.2.3.13-0-3
+description: >
+ Object.isExtensible is true for objects created using the Object
+ constructor
+---*/
+
+var o = new Object();
+
+assert.sameValue(Object.isExtensible(o), true, 'Object.isExtensible(o)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-1-1.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-1-1.js
new file mode 100644
index 0000000000..d12be81541
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-1-1.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-1-1
+description: Object.isExtensible does not throw TypeError if 'O' is undefined
+---*/
+
+Object.isExtensible(undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-1-2.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-1-2.js
new file mode 100644
index 0000000000..22db32e90f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-1-2.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-1-2
+description: Object.isExtensible does not throw TypeError if 'O' is null
+---*/
+
+Object.isExtensible(null);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-1-3.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-1-3.js
new file mode 100644
index 0000000000..4bdac9f69d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-1-3.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-1-3
+description: Object.isExtensible does not throw TypeError if 'O' is a boolean
+---*/
+
+Object.isExtensible(true);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-1-4.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-1-4.js
new file mode 100644
index 0000000000..ae0d7b5004
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-1-4.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-1-4
+description: Object.isExtensible does not throw TypeError if 'O' is a string
+---*/
+
+Object.isExtensible("abc");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-1.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-1.js
new file mode 100644
index 0000000000..57b7ff86bd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-1
+description: >
+ Object.isExtensible does not throw TypeError if type of first
+ param is not Object
+---*/
+
+Object.isExtensible(0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-1.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-1.js
new file mode 100644
index 0000000000..98a6ad45a1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-1
+description: Object.isExtensible returns true for all built-in objects (Global)
+---*/
+
+var global = this;
+
+assert(Object.isExtensible(global));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-10.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-10.js
new file mode 100644
index 0000000000..3316e0aa20
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-10.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-10
+description: Object.isExtensible returns true for all built-in objects (RegExp)
+---*/
+
+var e = Object.isExtensible(RegExp);
+
+assert.sameValue(e, true, 'e');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-11.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-11.js
new file mode 100644
index 0000000000..de6ccff767
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-11.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-11
+description: Object.isExtensible returns true for all built-in objects (Error)
+---*/
+
+var e = Object.isExtensible(Error);
+
+assert.sameValue(e, true, 'e');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-12.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-12.js
new file mode 100644
index 0000000000..18cdad9e4f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-12.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-12
+description: Object.isExtensible returns true for all built-in objects (JSON)
+---*/
+
+var e = Object.isExtensible(JSON);
+
+assert.sameValue(e, true, 'e');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-13.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-13.js
new file mode 100644
index 0000000000..a2ff9c44e9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-13.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-13
+description: >
+ Object.isExtensible returns true for all built-in objects
+ (Function.constructor)
+---*/
+
+var e = Object.isExtensible(Function.constructor);
+
+assert.sameValue(e, true, 'e');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-14.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-14.js
new file mode 100644
index 0000000000..529c2d409c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-14.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-14
+description: >
+ Object.isExtensible returns true for all built-in objects
+ (Function.prototype)
+---*/
+
+var e = Object.isExtensible(Function.prototype);
+
+assert.sameValue(e, true, 'e');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-15.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-15.js
new file mode 100644
index 0000000000..dbf4db1c7b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-15.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-15
+description: >
+ Object.isExtensible returns true for all built-in objects
+ (Array.prototype)
+---*/
+
+var e = Object.isExtensible(Array.prototype);
+
+assert.sameValue(e, true, 'e');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-16.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-16.js
new file mode 100644
index 0000000000..bf4edf2910
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-16.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-16
+description: >
+ Object.isExtensible returns true for all built-in objects
+ (String.prototype)
+---*/
+
+var e = Object.isExtensible(String.prototype);
+
+assert.sameValue(e, true, 'e');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-17.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-17.js
new file mode 100644
index 0000000000..0767d26aed
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-17.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-17
+description: >
+ Object.isExtensible returns true for all built-in objects
+ (Boolean.prototype)
+---*/
+
+var e = Object.isExtensible(Boolean.prototype);
+
+assert.sameValue(e, true, 'e');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-18.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-18.js
new file mode 100644
index 0000000000..99f2aeddb0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-18.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-18
+description: >
+ Object.isExtensible returns true for all built-in objects
+ (Number.prototype)
+---*/
+
+var e = Object.isExtensible(Number.prototype);
+
+assert.sameValue(e, true, 'e');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-19.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-19.js
new file mode 100644
index 0000000000..9f411ed118
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-19.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-19
+description: >
+ Object.isExtensible returns true for all built-in objects
+ (Date.prototype)
+---*/
+
+var e = Object.isExtensible(Date.prototype);
+
+assert.sameValue(e, true, 'e');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-2.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-2.js
new file mode 100644
index 0000000000..e2060210c2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-2.js
@@ -0,0 +1,14 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-2
+description: Object.isExtensible returns true for all built-in objects (Object)
+---*/
+
+var o = {};
+var e = Object.isExtensible(o);
+
+assert.sameValue(e, true, 'e');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-20.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-20.js
new file mode 100644
index 0000000000..87e644b31f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-20.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-20
+description: >
+ Object.isExtensible returns true for all built-in objects
+ (RegExp.prototype)
+---*/
+
+var e = Object.isExtensible(RegExp.prototype);
+
+assert.sameValue(e, true, 'e');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-21.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-21.js
new file mode 100644
index 0000000000..3963526646
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-21.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Function.constructor
+ Function.prototype
+ Array.prototype
+ String.prototype
+ Boolean.prototype
+ Number.prototype
+ Date.prototype
+ RegExp.prototype
+ Error.prototype
+es5id: 15.2.3.13-2-21
+description: >
+ Object.isExtensible returns true for all built-in objects
+ (Error.prototype)
+---*/
+
+var e = Object.isExtensible(Error.prototype);
+
+assert.sameValue(e, true, 'e');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-22.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-22.js
new file mode 100644
index 0000000000..351f13bdd4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-22.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-22
+description: Object.isExtensible returns true if 'O' is extensible
+---*/
+
+var obj = {};
+
+assert(Object.isExtensible(obj), 'Object.isExtensible(obj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-23.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-23.js
new file mode 100644
index 0000000000..0f556dfa27
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-23.js
@@ -0,0 +1,14 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-23
+description: Object.isExtensible returns false if 'O' is not extensible
+---*/
+
+var obj = {};
+Object.preventExtensions(obj);
+
+assert.sameValue(Object.isExtensible(obj), false, 'Object.isExtensible(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-24.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-24.js
new file mode 100644
index 0000000000..252a9838b0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-24.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-24
+description: >
+ Object.isExtensible returns true if O is extensible and has a
+ prototype that is extensible
+---*/
+
+var proto = {};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var obj = new ConstructFun();
+
+assert(Object.isExtensible(obj), 'Object.isExtensible(obj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-25.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-25.js
new file mode 100644
index 0000000000..77cc5d1371
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-25.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-25
+description: >
+ Object.isExtensible returns true if O is extensible and has a
+ prototype that is not extensible
+---*/
+
+var proto = {};
+Object.preventExtensions(proto);
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var obj = new ConstructFun();
+
+assert(Object.isExtensible(obj), 'Object.isExtensible(obj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-26.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-26.js
new file mode 100644
index 0000000000..d25fd782a0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-26.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-26
+description: >
+ Object.isExtensible returns false if O is not extensible and has a
+ prototype that is extensible
+---*/
+
+var proto = {};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var obj = new ConstructFun();
+
+Object.preventExtensions(obj);
+
+assert.sameValue(Object.isExtensible(obj), false, 'Object.isExtensible(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-27.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-27.js
new file mode 100644
index 0000000000..9200da1085
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-27.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-27
+description: >
+ Object.isExtensible returns false if O is not extensible and has a
+ prototype that is not extensible
+---*/
+
+var proto = {};
+Object.preventExtensions(proto);
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var obj = new ConstructFun();
+Object.preventExtensions(obj);
+
+assert.sameValue(Object.isExtensible(obj), false, 'Object.isExtensible(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-29.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-29.js
new file mode 100644
index 0000000000..7cdec561e4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-29.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-29
+description: Object.isExtensible returns true for the global object
+---*/
+
+assert(Object.isExtensible(this), 'Object.isExtensible(this) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-3.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-3.js
new file mode 100644
index 0000000000..10d10c2ff7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-3.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-3
+description: >
+ Object.isExtensible returns true for all built-in objects
+ (Function)
+---*/
+
+function foo() {}
+
+var e = Object.isExtensible(foo);
+
+assert.sameValue(e, true, 'e');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-4.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-4.js
new file mode 100644
index 0000000000..0ec1748a33
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-4.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-4
+description: Object.isExtensible returns true for all built-in objects (Array)
+---*/
+
+var e = Object.isExtensible(Array);
+
+assert.sameValue(e, true, 'e');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-5.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-5.js
new file mode 100644
index 0000000000..1364ea117f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-5.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-5
+description: Object.isExtensible returns true for all built-in objects (String)
+---*/
+
+var e = Object.isExtensible(String);
+
+assert.sameValue(e, true, 'e');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-6.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-6.js
new file mode 100644
index 0000000000..5d84efc34b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-6.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-6
+description: Object.isExtensible returns true for all built-in objects (Boolean)
+---*/
+
+var e = Object.isExtensible(Boolean);
+
+assert.sameValue(e, true, 'e');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-7.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-7.js
new file mode 100644
index 0000000000..c6f06af3e0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-7.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-7
+description: Object.isExtensible returns true for all built-in objects (Number)
+---*/
+
+var e = Object.isExtensible(Number);
+
+assert.sameValue(e, true, 'e');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-8.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-8.js
new file mode 100644
index 0000000000..5d06b9074d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-8.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-8
+description: Object.isExtensible returns true for all built-in objects (Math)
+---*/
+
+var e = Object.isExtensible(Math);
+
+assert.sameValue(e, true, 'e');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-9.js b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-9.js
new file mode 100644
index 0000000000..b4f8b64c99
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/15.2.3.13-2-9.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.13-2-9
+description: Object.isExtensible returns true for all built-in objects (Date)
+---*/
+
+var e = Object.isExtensible(Date);
+
+assert.sameValue(e, true, 'e');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/browser.js b/js/src/tests/test262/built-ins/Object/isExtensible/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/name.js b/js/src/tests/test262/built-ins/Object/isExtensible/name.js
new file mode 100644
index 0000000000..ae6a6e6549
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/name.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 19.1.2.11
+description: >
+ Object.isExtensible.name is "isExtensible".
+info: |
+ Object.isExtensible ( O )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.isExtensible.name, "isExtensible");
+
+verifyNotEnumerable(Object.isExtensible, "name");
+verifyNotWritable(Object.isExtensible, "name");
+verifyConfigurable(Object.isExtensible, "name");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/isExtensible/not-a-constructor.js
new file mode 100644
index 0000000000..56ab6d19e3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/not-a-constructor.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.isExtensible does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(isConstructor(Object.isExtensible), false, 'isConstructor(Object.isExtensible) must return false');
+
+assert.throws(TypeError, () => {
+ new Object.isExtensible({});
+}, '`new Object.isExtensible({})` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isExtensible/shell.js b/js/src/tests/test262/built-ins/Object/isExtensible/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isExtensible/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-0-1.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-0-1.js
new file mode 100644
index 0000000000..c30cdcfd6c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-0-1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-0-1
+description: Object.isFrozen must exist as a function
+---*/
+
+var f = Object.isFrozen;
+
+assert.sameValue(typeof(f), "function", 'typeof(f)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-0-2.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-0-2.js
new file mode 100644
index 0000000000..4c23ddb324
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-0-2.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-0-2
+description: Object.isFrozen must exist as a function taking 1 parameter
+---*/
+
+assert.sameValue(Object.isFrozen.length, 1, 'Object.isFrozen.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-1.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-1.js
new file mode 100644
index 0000000000..99b82bb5f8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-1-1
+description: >
+ Object.isFrozen - TypeError is not thrown when the first param 'O'
+ is undefined
+---*/
+
+Object.isFrozen(undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-2.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-2.js
new file mode 100644
index 0000000000..b7c54cac7c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-2.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-1-2
+description: >
+ Object.isFrozen - TypeError is not thrown when the first param 'O'
+ is null
+---*/
+
+Object.isFrozen(null);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-3.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-3.js
new file mode 100644
index 0000000000..01293b08da
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-3.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-1-3
+description: >
+ Object.isFrozen - TypeError is not thrown when the first param 'O'
+ is a boolean
+---*/
+
+Object.isFrozen(true);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-4.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-4.js
new file mode 100644
index 0000000000..af5296610d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-4.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-1-4
+description: >
+ Object.isFrozen - TypeError is not thrown when the first param 'O'
+ is a string
+---*/
+
+Object.isFrozen("abc");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-5.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-5.js
new file mode 100644
index 0000000000..a9453055be
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-5.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-1-5
+description: Object.isFrozen applies to dense array
+---*/
+
+var obj = Object.freeze([0, 1, 2]);
+
+assert(Object.isFrozen(obj), 'Object.isFrozen(obj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-6.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-6.js
new file mode 100644
index 0000000000..5169e63a4c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-6.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-1-6
+description: Object.isFrozen applies to sparse array
+---*/
+
+var sparseArr = [0, 1];
+sparseArr[10000] = 10000;
+
+sparseArr = Object.freeze(sparseArr);
+
+assert(Object.isFrozen(sparseArr), 'Object.isFrozen(sparseArr) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-7.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-7.js
new file mode 100644
index 0000000000..dbf304e0b6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1-7.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-1-7
+description: >
+ Object.isFrozen applies to non-array object which contains index
+ named properties
+---*/
+
+var obj = Object.freeze({
+ 0: 0,
+ 1: 1,
+ 1000: 1000
+});
+
+assert(Object.isFrozen(obj), 'Object.isFrozen(obj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1.js
new file mode 100644
index 0000000000..40edf0f31c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-1
+description: >
+ Object.isFrozen does not throw TypeError if type of first param is
+ not Object
+---*/
+
+Object.isFrozen(0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-1.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-1.js
new file mode 100644
index 0000000000..1491744985
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-1.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-2-1
+description: >
+ Object.isFrozen - inherited data property is not considered into
+ the for each loop
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "Father", {
+ value: 10,
+ writable: false,
+ configurable: true
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var child = new Con();
+
+Object.preventExtensions(child);
+
+assert(Object.isFrozen(child), 'Object.isFrozen(child) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-2.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-2.js
new file mode 100644
index 0000000000..07a4cc8d2b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-2.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-2-2
+description: >
+ Object.isFrozen - inherited accessor property is not considered
+ into the for each loop
+---*/
+
+var proto = {};
+
+function get_func() {
+ return 10;
+}
+
+function set_func() {}
+
+Object.defineProperty(proto, "Father", {
+ get: get_func,
+ set: set_func,
+ configurable: true
+});
+
+var Con = function() {};
+Con.prototype = proto;
+
+var child = new Con();
+
+Object.preventExtensions(child);
+
+assert(Object.isFrozen(child), 'Object.isFrozen(child) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-1.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-1.js
new file mode 100644
index 0000000000..5fcf32b45c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-1.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-2-a-1
+description: Object.isFrozen - 'P' is own data property
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 12,
+ writable: true,
+ configurable: false
+});
+
+Object.preventExtensions(obj);
+
+assert.sameValue(Object.isFrozen(obj), false, 'Object.isFrozen(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-11.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-11.js
new file mode 100644
index 0000000000..c33097705a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-11.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-2-a-11
+description: Object.isFrozen - 'O' is the Arguments object
+---*/
+
+var arg;
+
+(function fun() {
+ arg = arguments;
+}(1, 2, 3));
+
+Object.preventExtensions(arg);
+
+assert.sameValue(Object.isFrozen(arg), false, 'Object.isFrozen(arg)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-12.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-12.js
new file mode 100644
index 0000000000..d188de24d1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-12.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-2-a-12
+description: Object.isFrozen - 'O' is a String object
+---*/
+
+var obj = new String("abc");
+
+obj.len = 100;
+
+Object.preventExtensions(obj);
+
+assert.sameValue(Object.isFrozen(obj), false, 'Object.isFrozen(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-13.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-13.js
new file mode 100644
index 0000000000..93cf8ac3c2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-13.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-2-a-13
+description: Object.isFrozen - 'O' is a Function object
+---*/
+
+var obj = function() {};
+
+Object.defineProperty(obj, "property", {
+ value: 12,
+ writable: true,
+ configurable: false
+});
+
+Object.preventExtensions(obj);
+
+assert.sameValue(Object.isFrozen(obj), false, 'Object.isFrozen(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-14.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-14.js
new file mode 100644
index 0000000000..6c1d4a810a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-14.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-2-a-14
+description: Object.isFrozen - 'O' is an Array object
+---*/
+
+var obj = [2];
+obj.len = 200;
+
+Object.preventExtensions(obj);
+
+assert.sameValue(Object.isFrozen(obj), false, 'Object.isFrozen(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-2.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-2.js
new file mode 100644
index 0000000000..1c80dabdac
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-2.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-2-a-2
+description: >
+ Object.isFrozen - 'P' is own data property that overrides an
+ inherited data property
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "foo", {
+ value: 9,
+ writable: false,
+ configurable: false
+});
+
+var Con = function() {};
+Con.prototype = proto;
+var child = new Con();
+
+Object.defineProperty(child, "foo", {
+ value: 12,
+ writable: true,
+ configurable: false
+});
+
+Object.preventExtensions(child);
+
+assert.sameValue(Object.isFrozen(child), false, 'Object.isFrozen(child)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-3.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-3.js
new file mode 100644
index 0000000000..45b0d12e67
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-3.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-2-a-3
+description: >
+ Object.isFrozen - 'P' is own data property that overrides an
+ inherited accessor property
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "foo", {
+ get: function() {
+ return 9;
+ },
+ configurable: false
+});
+
+var Con = function() {};
+Con.prototype = proto;
+var child = new Con();
+
+
+Object.defineProperty(child, "foo", {
+ value: 12,
+ configurable: true
+});
+
+Object.preventExtensions(child);
+
+assert.sameValue(Object.isFrozen(child), false, 'Object.isFrozen(child)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-4.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-4.js
new file mode 100644
index 0000000000..eb221237de
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-4.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-2-a-4
+description: Object.isFrozen - 'P' is own accessor property
+---*/
+
+var obj = {};
+Object.defineProperty(obj, "foo", {
+ get: function() {
+ return 9;
+ },
+ configurable: true
+});
+
+Object.preventExtensions(obj);
+
+assert.sameValue(Object.isFrozen(obj), false, 'Object.isFrozen(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-5.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-5.js
new file mode 100644
index 0000000000..23f870f82d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-5.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-2-a-5
+description: >
+ Object.isFrozen - 'P' is own accessor property that overrides an
+ inherited data property
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "foo", {
+ value: 12,
+ configurable: false
+});
+
+var Con = function() {};
+Con.prototype = proto;
+var child = new Con();
+
+Object.defineProperty(child, "foo", {
+ get: function() {
+ return 9;
+ },
+ configurable: true
+});
+
+Object.preventExtensions(child);
+
+assert.sameValue(Object.isFrozen(child), false, 'Object.isFrozen(child)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-6.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-6.js
new file mode 100644
index 0000000000..d8d6e9e2ce
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-6.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-2-a-6
+description: >
+ Object.isFrozen - 'P' is own accessor property that overrides an
+ inherited accessor property
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "foo", {
+ get: function() {
+ return 12;
+ },
+ configurable: false
+});
+
+var Con = function() {};
+Con.prototype = proto;
+var child = new Con();
+
+
+Object.defineProperty(child, "foo", {
+ get: function() {
+ return 9;
+ },
+ configurable: true
+});
+
+Object.preventExtensions(child);
+
+assert.sameValue(Object.isFrozen(child), false, 'Object.isFrozen(child)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-7.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-7.js
new file mode 100644
index 0000000000..efbb917e2f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-7.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-2-a-7
+description: >
+ Object.isFrozen - 'P' is own accessor property without a get
+ function
+---*/
+
+var obj = {};
+Object.defineProperty(obj, "foo", {
+ set: function() {},
+ configurable: true
+});
+
+Object.preventExtensions(obj);
+
+assert.sameValue(Object.isFrozen(obj), false, 'Object.isFrozen(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-8.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-8.js
new file mode 100644
index 0000000000..41207b4c80
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-a-8.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-2-a-8
+description: >
+ Object.isFrozen - 'P' is own accessor property without a get
+ function that overrides an inherited accessor property
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "foo", {
+ get: function() {
+ return 9;
+ },
+ configurable: false
+});
+
+var Con = function() {};
+Con.prototype = proto;
+var child = new Con();
+
+Object.defineProperty(child, "foo", {
+ set: function() {},
+ configurable: true
+});
+
+Object.preventExtensions(child);
+
+assert.sameValue(Object.isFrozen(child), false, 'Object.isFrozen(child)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-b-i-1.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-b-i-1.js
new file mode 100644
index 0000000000..b33f2b0700
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-b-i-1.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-2-b-i-1
+description: >
+ Object.isFrozen returns false if 'O' contains own writable data
+ property
+---*/
+
+var obj = {};
+Object.defineProperty(obj, "foo", {
+ value: 20,
+ writable: true,
+ configurable: false
+});
+Object.preventExtensions(obj);
+
+assert.sameValue(Object.isFrozen(obj), false, 'Object.isFrozen(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-c-1.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-c-1.js
new file mode 100644
index 0000000000..75cee88605
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-c-1.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-2-c-1
+description: >
+ Object.isFrozen returns false if 'O' contains own configurable
+ data property
+---*/
+
+var obj = {};
+Object.defineProperty(obj, "foo", {
+ value: 20,
+ writable: false,
+ configurable: true
+});
+
+Object.preventExtensions(obj);
+
+assert.sameValue(Object.isFrozen(obj), false, 'Object.isFrozen(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-c-2.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-c-2.js
new file mode 100644
index 0000000000..0110d56c49
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-2-c-2.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-2-c-2
+description: >
+ Object.isFrozen returns false if 'O' contains own configurable
+ accessor property
+---*/
+
+var obj = {};
+
+function get_func() {
+ return 10;
+}
+
+function set_func() {}
+
+Object.defineProperty(obj, "foo", {
+ get: get_func,
+ set: set_func,
+ configurable: true
+});
+
+Object.preventExtensions(obj);
+
+assert.sameValue(Object.isFrozen(obj), false, 'Object.isFrozen(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-1.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-1.js
new file mode 100644
index 0000000000..7ba4b95381
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-1.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-1
+description: Object.isFrozen returns false for all built-in objects (Global)
+---*/
+
+assert(!Object.isFrozen(this));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-10.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-10.js
new file mode 100644
index 0000000000..b679daed2b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-10.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-10
+description: Object.isFrozen returns false for all built-in objects (Boolean)
+---*/
+
+var b = Object.isFrozen(Boolean);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-11.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-11.js
new file mode 100644
index 0000000000..b2b9d7b67e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-11.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-11
+description: >
+ Object.isFrozen returns false for all built-in objects
+ (Boolean.prototype)
+---*/
+
+var b = Object.isFrozen(Boolean.prototype);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-12.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-12.js
new file mode 100644
index 0000000000..c5402693fa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-12.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-12
+description: Object.isFrozen returns false for all built-in objects (Number)
+---*/
+
+var b = Object.isFrozen(Number);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-13.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-13.js
new file mode 100644
index 0000000000..dd28b24d36
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-13.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-13
+description: >
+ Object.isFrozen returns false for all built-in objects
+ (Number.prototype)
+---*/
+
+var b = Object.isFrozen(Number.prototype);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-14.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-14.js
new file mode 100644
index 0000000000..8a94a92338
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-14.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-14
+description: Object.isFrozen returns false for all built-in objects (Math)
+---*/
+
+var b = Object.isFrozen(Math);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-15.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-15.js
new file mode 100644
index 0000000000..a39061c429
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-15.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-15
+description: Object.isFrozen returns false for all built-in objects (Date)
+---*/
+
+var b = Object.isFrozen(Date);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-16.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-16.js
new file mode 100644
index 0000000000..52f6a85e4a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-16.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-16
+description: >
+ Object.isFrozen returns false for all built-in objects
+ (Date.prototype)
+---*/
+
+var b = Object.isFrozen(Date.prototype);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-17.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-17.js
new file mode 100644
index 0000000000..f99e006510
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-17.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-17
+description: Object.isFrozen returns false for all built-in objects (RegExp)
+---*/
+
+var b = Object.isFrozen(RegExp);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-18.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-18.js
new file mode 100644
index 0000000000..8434b79b85
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-18.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-18
+description: >
+ Object.isFrozen returns false for all built-in objects
+ (RegExp.prototype)
+---*/
+
+var b = Object.isFrozen(RegExp.prototype);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-19.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-19.js
new file mode 100644
index 0000000000..f125bc67a4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-19.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-19
+description: Object.isFrozen returns false for all built-in objects (Error)
+---*/
+
+var b = Object.isFrozen(Error);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-2.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-2.js
new file mode 100644
index 0000000000..ffa070888c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-2.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-2
+description: Object.isFrozen returns false for all built-in objects (Object)
+---*/
+
+var b = Object.isFrozen(Object);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-20.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-20.js
new file mode 100644
index 0000000000..3bffc5529e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-20.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-20
+description: >
+ Object.isFrozen returns false for all built-in objects
+ (Error.prototype)
+---*/
+
+var b = Object.isFrozen(Error.prototype);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-21.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-21.js
new file mode 100644
index 0000000000..2a8d30f968
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-21.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-21
+description: Object.isFrozen returns false for all built-in objects (EvalError)
+---*/
+
+var b = Object.isFrozen(EvalError);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-22.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-22.js
new file mode 100644
index 0000000000..6a664e279d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-22.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-22
+description: Object.isFrozen returns false for all built-in objects (RangeError)
+---*/
+
+var b = Object.isFrozen(RangeError);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-23.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-23.js
new file mode 100644
index 0000000000..974c2949fe
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-23.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-23
+description: >
+ Object.isFrozen returns false for all built-in objects
+ (ReferenceError)
+---*/
+
+var b = Object.isFrozen(ReferenceError);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-24.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-24.js
new file mode 100644
index 0000000000..1d3e75be86
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-24.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-24
+description: >
+ Object.isFrozen returns false for all built-in objects
+ (SyntaxError)
+---*/
+
+var b = Object.isFrozen(SyntaxError);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-25.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-25.js
new file mode 100644
index 0000000000..86cfc530e7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-25.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-25
+description: Object.isFrozen returns false for all built-in objects (TypeError)
+---*/
+
+var b = Object.isFrozen(TypeError);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-26.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-26.js
new file mode 100644
index 0000000000..0304619454
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-26.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-26
+description: Object.isFrozen returns false for all built-in objects (URIError)
+---*/
+
+var b = Object.isFrozen(URIError);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-27.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-27.js
new file mode 100644
index 0000000000..8b13c85019
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-27.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-27
+description: Object.isFrozen returns false for all built-in objects (JSON)
+---*/
+
+var b = Object.isFrozen(JSON);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-28.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-28.js
new file mode 100644
index 0000000000..e8d631151c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-28.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-28
+description: >
+ Object.isFrozen returns true when all own properties of 'O' are
+ not writable and not configurable, and 'O' is not extensible
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "foo1", {
+ value: 20,
+ writable: false,
+ enumerable: false,
+ configurable: false
+});
+
+
+function get_func() {
+ return 10;
+}
+
+function set_func() {}
+
+Object.defineProperty(obj, "foo2", {
+ get: get_func,
+ set: set_func,
+ configurable: false
+});
+
+Object.preventExtensions(obj);
+
+assert(Object.isFrozen(obj), 'Object.isFrozen(obj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-3.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-3.js
new file mode 100644
index 0000000000..85007c7f8e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-3.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-3
+description: >
+ Object.isFrozen returns false for all built-in objects
+ (Object.prototype)
+---*/
+
+var b = Object.isFrozen(Object.prototype);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-4.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-4.js
new file mode 100644
index 0000000000..53cce1fb6f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-4.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-4
+description: Object.isFrozen returns false for all built-in objects (Function)
+---*/
+
+var b = Object.isFrozen(Function);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-5.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-5.js
new file mode 100644
index 0000000000..badf8057e3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-5.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-5
+description: >
+ Object.isFrozen returns false for all built-in objects
+ (Function.prototype)
+---*/
+
+var b = Object.isFrozen(Function.prototype);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-6.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-6.js
new file mode 100644
index 0000000000..50702e237f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-6.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-6
+description: Object.isFrozen returns false for all built-in objects (Array)
+---*/
+
+var b = Object.isFrozen(Array);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-7.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-7.js
new file mode 100644
index 0000000000..501b5505bc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-7.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-7
+description: >
+ Object.isFrozen returns false for all built-in objects
+ (Array.prototype)
+---*/
+
+var b = Object.isFrozen(Array.prototype);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-8.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-8.js
new file mode 100644
index 0000000000..f7d7e68ef8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-8.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-8
+description: Object.isFrozen returns false for all built-in objects (String)
+---*/
+
+var b = Object.isFrozen(String);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-9.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-9.js
new file mode 100644
index 0000000000..c465f97638
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-3-9.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-3-9
+description: >
+ Object.isFrozen returns false for all built-in objects
+ (String.prototype)
+---*/
+
+var b = Object.isFrozen(String.prototype);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-4-1.js b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-4-1.js
new file mode 100644
index 0000000000..62d775f224
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/15.2.3.12-4-1.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.12-4-1
+description: Object.isFrozen returns false if extensible is true
+---*/
+
+assert.sameValue(Object.isFrozen({}), false, 'Object.isFrozen({})');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/browser.js b/js/src/tests/test262/built-ins/Object/isFrozen/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/name.js b/js/src/tests/test262/built-ins/Object/isFrozen/name.js
new file mode 100644
index 0000000000..4b83c75722
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/name.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 19.1.2.12
+description: >
+ Object.isFrozen.name is "isFrozen".
+info: |
+ Object.isFrozen ( O )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.isFrozen.name, "isFrozen");
+
+verifyNotEnumerable(Object.isFrozen, "name");
+verifyNotWritable(Object.isFrozen, "name");
+verifyConfigurable(Object.isFrozen, "name");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/isFrozen/not-a-constructor.js
new file mode 100644
index 0000000000..5f8014985b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/not-a-constructor.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.isFrozen does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(isConstructor(Object.isFrozen), false, 'isConstructor(Object.isFrozen) must return false');
+
+assert.throws(TypeError, () => {
+ new Object.isFrozen({});
+}, '`new Object.isFrozen({})` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/proxy-no-ownkeys-returned-keys-order.js b/js/src/tests/test262/built-ins/Object/isFrozen/proxy-no-ownkeys-returned-keys-order.js
new file mode 100644
index 0000000000..5989f8c123
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/proxy-no-ownkeys-returned-keys-order.js
@@ -0,0 +1,54 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.isfrozen
+description: >
+ If Proxy "ownKeys" trap is missing, keys are sorted by type in ascending
+ chronological order.
+info: |
+ TestIntegrityLevel ( O, level )
+
+ [...]
+ 6. Let keys be ? O.[[OwnPropertyKeys]]().
+ 7. For each element k of keys, do
+ a. Let currentDesc be ? O.[[GetOwnProperty]](k).
+
+ [[OwnPropertyKeys]] ( )
+
+ [...]
+ 6. If trap is undefined, then
+ a. Return ? target.[[OwnPropertyKeys]]().
+
+ OrdinaryOwnPropertyKeys ( O )
+
+ [...]
+ 3. For each own property key P of O such that Type(P) is String and P is
+ not an array index, in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 4. For each own property key P of O such that Type(P) is Symbol,
+ in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 5. Return keys.
+features: [Proxy, Symbol, Reflect]
+includes: [compareArray.js]
+---*/
+
+var target = {};
+var sym = Symbol();
+target[sym] = 1;
+target.foo = 2;
+target[0] = 3;
+Object.freeze(target);
+
+var getOwnKeys = [];
+var proxy = new Proxy(target, {
+ getOwnPropertyDescriptor: function(target, key) {
+ getOwnKeys.push(key);
+ return Reflect.getOwnPropertyDescriptor(target, key);
+ },
+});
+
+Object.isFrozen(proxy);
+assert.compareArray(getOwnKeys, ["0", "foo", sym]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isFrozen/shell.js b/js/src/tests/test262/built-ins/Object/isFrozen/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isFrozen/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-0-1.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-0-1.js
new file mode 100644
index 0000000000..0563532a38
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-0-1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-0-1
+description: Object.isSealed must exist as a function
+---*/
+
+var f = Object.isSealed;
+
+assert.sameValue(typeof(f), "function", 'typeof(f)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-0-2.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-0-2.js
new file mode 100644
index 0000000000..307b3f6ec8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-0-2.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-0-2
+description: Object.isSealed must exist as a function taking 1 parameter
+---*/
+
+assert.sameValue(Object.isSealed.length, 1, 'Object.isSealed.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-1.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-1.js
new file mode 100644
index 0000000000..a59acc4e9f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-1
+description: >
+ Object.isSealed does not throw TypeError if type of first param is
+ not Object
+---*/
+
+Object.isSealed(0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-1.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-1.js
new file mode 100644
index 0000000000..70ae44f1df
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-1.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-1
+description: Object.isSealed returns false for all built-in objects (Global)
+---*/
+
+assert(!Object.isSealed(this));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-10.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-10.js
new file mode 100644
index 0000000000..9d83beaa9c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-10.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-10
+description: Object.isSealed returns false for all built-in objects (Boolean)
+---*/
+
+var b = Object.isSealed(Boolean);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-11.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-11.js
new file mode 100644
index 0000000000..1f90e37653
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-11.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-11
+description: >
+ Object.isSealed returns false for all built-in objects
+ (Boolean.prototype)
+---*/
+
+var b = Object.isSealed(Boolean.prototype);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-12.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-12.js
new file mode 100644
index 0000000000..733f6ab559
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-12.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-12
+description: Object.isSealed returns false for all built-in objects (Number)
+---*/
+
+var b = Object.isSealed(Number);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-13.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-13.js
new file mode 100644
index 0000000000..d10efa3ae6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-13.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-13
+description: >
+ Object.isSealed returns false for all built-in objects
+ (Number.prototype)
+---*/
+
+var b = Object.isSealed(Number.prototype);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-14.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-14.js
new file mode 100644
index 0000000000..c4b6c0cf29
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-14.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-14
+description: Object.isSealed returns false for all built-in objects (Math)
+---*/
+
+var b = Object.isSealed(Math);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-15.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-15.js
new file mode 100644
index 0000000000..8999346ae3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-15.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-15
+description: Object.isSealed returns false for all built-in objects (Date)
+---*/
+
+var b = Object.isSealed(Date);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-16.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-16.js
new file mode 100644
index 0000000000..3079a81242
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-16.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-16
+description: >
+ Object.isSealed returns false for all built-in objects
+ (Date.prototype)
+---*/
+
+var b = Object.isSealed(Date.prototype);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-17.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-17.js
new file mode 100644
index 0000000000..3922751f6f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-17.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-17
+description: Object.isSealed returns false for all built-in objects (RegExp)
+---*/
+
+var b = Object.isSealed(RegExp);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-18.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-18.js
new file mode 100644
index 0000000000..178d33d044
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-18.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-18
+description: >
+ Object.isSealed returns false for all built-in objects
+ (RegExp.prototype)
+---*/
+
+var b = Object.isSealed(RegExp.prototype);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-19.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-19.js
new file mode 100644
index 0000000000..74d27cfe2e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-19.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-19
+description: Object.isSealed returns false for all built-in objects (Error)
+---*/
+
+var b = Object.isSealed(Error);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-2.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-2.js
new file mode 100644
index 0000000000..b0e6c7096d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-2.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-2
+description: Object.isSealed returns false for all built-in objects (Object)
+---*/
+
+var b = Object.isSealed(Object);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-20.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-20.js
new file mode 100644
index 0000000000..b89aeb9772
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-20.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-20
+description: >
+ Object.isSealed returns false for all built-in objects
+ (Error.prototype)
+---*/
+
+var b = Object.isSealed(Error.prototype);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-21.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-21.js
new file mode 100644
index 0000000000..a6583febc2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-21.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-21
+description: Object.isSealed returns false for all built-in objects (EvalError)
+---*/
+
+var b = Object.isSealed(EvalError);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-22.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-22.js
new file mode 100644
index 0000000000..27f0c920c0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-22.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-22
+description: Object.isSealed returns false for all built-in objects (RangeError)
+---*/
+
+var b = Object.isSealed(RangeError);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-23.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-23.js
new file mode 100644
index 0000000000..ca9d5c2c44
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-23.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-23
+description: >
+ Object.isSealed returns false for all built-in objects
+ (ReferenceError)
+---*/
+
+var b = Object.isSealed(ReferenceError);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-24.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-24.js
new file mode 100644
index 0000000000..fcc1d67225
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-24.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-24
+description: >
+ Object.isSealed returns false for all built-in objects
+ (SyntaxError)
+---*/
+
+var b = Object.isSealed(SyntaxError);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-25.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-25.js
new file mode 100644
index 0000000000..09e2b5b68b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-25.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-25
+description: Object.isSealed returns false for all built-in objects (TypeError)
+---*/
+
+var b = Object.isSealed(TypeError);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-26.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-26.js
new file mode 100644
index 0000000000..3083a39f0c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-26.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-26
+description: Object.isSealed returns false for all built-in objects (URIError)
+---*/
+
+var b = Object.isSealed(URIError);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-27.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-27.js
new file mode 100644
index 0000000000..df1e795f90
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-27.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-27
+description: Object.isSealed returns false for all built-in objects (JSON)
+---*/
+
+var b = Object.isSealed(JSON);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-3.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-3.js
new file mode 100644
index 0000000000..d6b26297a0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-3.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-3
+description: >
+ Object.isSealed returns false for all built-in objects
+ (Object.prototype)
+---*/
+
+var b = Object.isSealed(Object.prototype);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-4.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-4.js
new file mode 100644
index 0000000000..16478106ad
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-4.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-4
+description: Object.isSealed returns false for all built-in objects (Function)
+---*/
+
+var b = Object.isSealed(Function);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-5.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-5.js
new file mode 100644
index 0000000000..92b56fd611
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-5.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-5
+description: >
+ Object.isSealed returns false for all built-in objects
+ (Function.prototype)
+---*/
+
+var b = Object.isSealed(Function.prototype);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-6.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-6.js
new file mode 100644
index 0000000000..d006e75d2f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-6.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-6
+description: Object.isSealed returns false for all built-in objects (Array)
+---*/
+
+var b = Object.isSealed(Array);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-7.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-7.js
new file mode 100644
index 0000000000..e67bffd1c0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-7.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-7
+description: >
+ Object.isSealed returns false for all built-in objects
+ (Array.prototype)
+---*/
+
+var b = Object.isSealed(Array.prototype);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-8.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-8.js
new file mode 100644
index 0000000000..e252e12d2b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-8.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-8
+description: Object.isSealed returns false for all built-in objects (String)
+---*/
+
+var b = Object.isSealed(String);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-9.js b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-9.js
new file mode 100644
index 0000000000..408e74ecc4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/15.2.3.11-4-9.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.11-4-9
+description: >
+ Object.isSealed returns false for all built-in objects
+ (String.prototype)
+---*/
+
+var b = Object.isSealed(String.prototype);
+
+assert.sameValue(b, false, 'b');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/browser.js b/js/src/tests/test262/built-ins/Object/isSealed/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/name.js b/js/src/tests/test262/built-ins/Object/isSealed/name.js
new file mode 100644
index 0000000000..c11f5b4842
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/name.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 19.1.2.13
+description: >
+ Object.isSealed.name is "isSealed".
+info: |
+ Object.isSealed ( O )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.isSealed.name, "isSealed");
+
+verifyNotEnumerable(Object.isSealed, "name");
+verifyNotWritable(Object.isSealed, "name");
+verifyConfigurable(Object.isSealed, "name");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/isSealed/not-a-constructor.js
new file mode 100644
index 0000000000..a02bf5f415
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/not-a-constructor.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.isSealed does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(isConstructor(Object.isSealed), false, 'isConstructor(Object.isSealed) must return false');
+
+assert.throws(TypeError, () => {
+ new Object.isSealed({});
+}, '`new Object.isSealed({})` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/proxy-no-ownkeys-returned-keys-order.js b/js/src/tests/test262/built-ins/Object/isSealed/proxy-no-ownkeys-returned-keys-order.js
new file mode 100644
index 0000000000..cc50d92aba
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/proxy-no-ownkeys-returned-keys-order.js
@@ -0,0 +1,54 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.issealed
+description: >
+ If Proxy "ownKeys" trap is missing, keys are sorted by type in ascending
+ chronological order.
+info: |
+ TestIntegrityLevel ( O, level )
+
+ [...]
+ 6. Let keys be ? O.[[OwnPropertyKeys]]().
+ 7. For each element k of keys, do
+ a. Let currentDesc be ? O.[[GetOwnProperty]](k).
+
+ [[OwnPropertyKeys]] ( )
+
+ [...]
+ 6. If trap is undefined, then
+ a. Return ? target.[[OwnPropertyKeys]]().
+
+ OrdinaryOwnPropertyKeys ( O )
+
+ [...]
+ 3. For each own property key P of O such that Type(P) is String and P is
+ not an array index, in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 4. For each own property key P of O such that Type(P) is Symbol,
+ in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 5. Return keys.
+features: [Proxy, Symbol, Reflect]
+includes: [compareArray.js]
+---*/
+
+var target = {};
+var sym = Symbol();
+target[sym] = 1;
+target.foo = 2;
+target[0] = 3;
+Object.seal(target);
+
+var getOwnKeys = [];
+var proxy = new Proxy(target, {
+ getOwnPropertyDescriptor: function(target, key) {
+ getOwnKeys.push(key);
+ return Reflect.getOwnPropertyDescriptor(target, key);
+ },
+});
+
+Object.isSealed(proxy);
+assert.compareArray(getOwnKeys, ["0", "foo", sym]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/isSealed/shell.js b/js/src/tests/test262/built-ins/Object/isSealed/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/isSealed/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-0-1.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-0-1.js
new file mode 100644
index 0000000000..1a85693b1c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-0-1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-0-1
+description: Object.keys must exist as a function
+---*/
+
+var f = Object.keys;
+
+assert.sameValue(typeof(f), "function", 'typeof(f)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-0-2.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-0-2.js
new file mode 100644
index 0000000000..05ac39ab2e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-0-2.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-0-2
+description: Object.keys must exist as a function taking 1 parameter
+---*/
+
+assert.sameValue(Object.keys.length, 1, 'Object.keys.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-1-1.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-1-1.js
new file mode 100644
index 0000000000..42dc96fe11
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-1-1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-1-1
+description: >
+ Object.keys does not throw TypeError if type of first param is not
+ Object
+---*/
+
+Object.keys(0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-1-2.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-1-2.js
new file mode 100644
index 0000000000..2774667e23
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-1-2.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-1-2
+description: >
+ Object.keys does not throw TypeError if type of first param is not
+ Object (boolean)
+---*/
+
+Object.keys(true);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-1-3.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-1-3.js
new file mode 100644
index 0000000000..ef3497c04a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-1-3.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-1-3
+description: >
+ Object.keys does not throw TypeError if type of first param is not
+ Object (string)
+---*/
+
+Object.keys('abc');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-1-4.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-1-4.js
new file mode 100644
index 0000000000..5c15c91904
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-1-4.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-1-4
+description: >
+ Object.keys throws TypeError if type of first param is not Object
+ (null)
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.keys(null);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-1-5.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-1-5.js
new file mode 100644
index 0000000000..89b5c9b463
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-1-5.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-1-5
+description: >
+ Object.keys throws TypeError if type of first param is not Object
+ (undefined)
+---*/
+
+
+assert.throws(TypeError, function() {
+ Object.keys(undefined);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-1.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-1.js
new file mode 100644
index 0000000000..aecf57b41f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-1.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-2-1
+description: Object.keys returns the standard built-in Array
+---*/
+
+var o = {
+ x: 1,
+ y: 2
+};
+
+var a = Object.keys(o);
+
+assert.sameValue(Array.isArray(a), true, 'Array.isArray(a)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-2.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-2.js
new file mode 100644
index 0000000000..8c52be6d93
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-2.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-2-2
+description: Object.keys returns the standard built-in Array (check [[Class]]
+---*/
+
+var o = {
+ x: 1,
+ y: 2
+};
+
+var a = Object.keys(o);
+var s = Object.prototype.toString.call(a);
+
+assert.sameValue(s, '[object Array]', 's');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-3.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-3.js
new file mode 100644
index 0000000000..395b3d7789
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-3.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-2-3
+description: Object.keys returns the standard built-in Array (Array overridden)
+---*/
+
+function Array() {}
+
+var o = {
+ x: 1,
+ y: 2
+};
+
+var a = Object.keys(o);
+
+var s = Object.prototype.toString.call(a);
+
+assert.sameValue(s, '[object Array]', 's');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-4.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-4.js
new file mode 100644
index 0000000000..65ea90fe28
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-4.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-2-4
+description: Object.keys returns the standard built-in Array that is extensible
+---*/
+
+var o = {
+ x: 1,
+ y: 2
+};
+
+var a = Object.keys(o);
+
+assert.sameValue(Object.isExtensible(a), true, 'Object.isExtensible(a)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-5.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-5.js
new file mode 100644
index 0000000000..5fa5a8aef2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-5.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-2-5
+description: Object.keys returns the standard built-in Array that is not sealed
+---*/
+
+var o = {
+ x: 1,
+ y: 2
+};
+
+var a = Object.keys(o);
+
+assert.sameValue(Object.isSealed(a), false, 'Object.isSealed(a)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-6.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-6.js
new file mode 100644
index 0000000000..7945a71bca
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-6.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-2-6
+description: Object.keys returns the standard built-in Array that is not frozen
+---*/
+
+var o = {
+ x: 1,
+ y: 2
+};
+
+var a = Object.keys(o);
+
+assert.sameValue(Object.isFrozen(a), false, 'Object.isFrozen(a)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-7.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-7.js
new file mode 100644
index 0000000000..21c9f2b24a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-7.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-2-7
+description: >
+ Object.keys - 'n' is 0 when 'O' doesn't contain own enumerable
+ data or accessor properties
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop1", {
+ value: 1001,
+ enumerable: false,
+ configurable: true
+});
+
+Object.defineProperty(obj, "prop2", {
+ get: function() {
+ return 1002;
+ },
+ enumerable: false,
+ configurable: true
+});
+
+var arr = Object.keys(obj);
+
+assert.sameValue(arr.length, 0, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-8.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-8.js
new file mode 100644
index 0000000000..b771b257b0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-2-8.js
@@ -0,0 +1,38 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-2-8
+description: >
+ Object.keys - 'n' is the correct value when enumerable properties
+ exist in 'O'
+---*/
+
+var obj = {
+ prop1: 1001,
+ prop2: function() {
+ return 1002;
+ }
+};
+
+Object.defineProperty(obj, "prop3", {
+ value: 1003,
+ enumerable: false,
+ configurable: true
+});
+
+Object.defineProperty(obj, "prop4", {
+ get: function() {
+ return 1004;
+ },
+ enumerable: false,
+ configurable: true
+});
+
+var arr = Object.keys(obj);
+
+assert.sameValue(arr.length, 2, 'arr.length');
+assert.sameValue(arr[0], "prop1", 'arr[0]');
+assert.sameValue(arr[1], "prop2", 'arr[1]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-1.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-1.js
new file mode 100644
index 0000000000..0cb6194e33
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-1.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-3-1
+description: >
+ Object.keys returns the standard built-in Array containing own
+ enumerable properties
+---*/
+
+var o = {
+ x: 1,
+ y: 2
+};
+
+var a = Object.keys(o);
+
+assert.sameValue(a.length, 2, 'a.length');
+assert.sameValue(a[0], 'x', 'a[0]');
+assert.sameValue(a[1], 'y', 'a[1]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-2.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-2.js
new file mode 100644
index 0000000000..3e857df3cf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-2.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-3-2
+description: >
+ Object.keys returns the standard built-in Array containing own
+ enumerable properties (function)
+---*/
+
+function foo() {}
+foo.x = 1;
+
+var a = Object.keys(foo);
+
+assert.sameValue(a.length, 1, 'a.length');
+assert.sameValue(a[0], 'x', 'a[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-3.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-3.js
new file mode 100644
index 0000000000..8069aeaba7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-3.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-3-3
+description: >
+ Object.keys returns the standard built-in Array containing own
+ enumerable properties (array)
+---*/
+
+var o = [1, 2];
+var a = Object.keys(o);
+
+assert.sameValue(a.length, 2, 'a.length');
+assert.sameValue(a[0], '0', 'a[0]');
+assert.sameValue(a[1], '1', 'a[1]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-4.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-4.js
new file mode 100644
index 0000000000..674233c587
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-4.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-3-4
+description: >
+ Object.keys of an arguments object returns the indices of the
+ given arguments
+---*/
+
+function testArgs2(x, y, z) {
+ // Properties of the arguments object are enumerable.
+ var a = Object.keys(arguments);
+ if (a.length === 2 && a[0] in arguments && a[1] in arguments)
+ return true;
+}
+
+function testArgs3(x, y, z) {
+ // Properties of the arguments object are enumerable.
+ var a = Object.keys(arguments);
+ if (a.length === 3 && a[0] in arguments && a[1] in arguments && a[2] in arguments)
+ return true;
+}
+
+function testArgs4(x, y, z) {
+ // Properties of the arguments object are enumerable.
+ var a = Object.keys(arguments);
+ if (a.length === 4 && a[0] in arguments && a[1] in arguments && a[2] in arguments && a[3] in arguments)
+ return true;
+}
+
+assert(testArgs2(1, 2), 'testArgs2(1, 2) !== true');
+assert(testArgs3(1, 2, 3), 'testArgs3(1, 2, 3) !== true');
+assert(testArgs4(1, 2, 3, 4), 'testArgs4(1, 2, 3, 4) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-5.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-5.js
new file mode 100644
index 0000000000..4fa5229dcb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-5.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-3-5
+description: Object.keys must return a fresh array on each invocation
+---*/
+
+var literal = {
+ a: 1
+};
+var keysBefore = Object.keys(literal);
+assert.sameValue(keysBefore[0], 'a', 'keysBefore[0]');
+keysBefore[0] = 'x';
+var keysAfter = Object.keys(literal);
+
+assert.sameValue(keysBefore[0], 'x', 'keysBefore[0]');
+assert.sameValue(keysAfter[0], 'a', 'keysAfter[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-6.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-6.js
new file mode 100644
index 0000000000..9475d9eaa2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-6.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-3-6
+description: >
+ Object.keys - returns the standard built-in Array (instanceof
+ Array)
+---*/
+
+var obj = {};
+
+var arr = Object.keys(obj);
+
+assert(arr instanceof Array, 'arr instanceof Array !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-7.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-7.js
new file mode 100644
index 0000000000..2c37cc836f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-3-7.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-3-7
+description: >
+ Object.keys - length of the returned array equals the number of
+ own enumerable properties of 'O'
+---*/
+
+var obj = {
+ prop1: 1001,
+ prop2: 1002
+};
+
+Object.defineProperty(obj, "prop3", {
+ value: 1003,
+ enumerable: true,
+ configurable: true
+});
+
+Object.defineProperty(obj, "prop4", {
+ get: function() {
+ return 1003;
+ },
+ enumerable: false,
+ configurable: true
+});
+
+var arr = Object.keys(obj);
+
+assert.sameValue(arr.length, 3, 'arr.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-4-1.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-4-1.js
new file mode 100644
index 0000000000..bda8ef57dc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-4-1.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-4-1
+description: Object.keys - elements of the returned array start from index 0
+---*/
+
+var obj = {
+ prop1: 1001,
+ prop2: 1002
+};
+
+Object.defineProperty(obj, "prop3", {
+ value: 1003,
+ enumerable: true,
+ configurable: true
+});
+
+Object.defineProperty(obj, "prop4", {
+ get: function() {
+ return 1003;
+ },
+ enumerable: true,
+ configurable: true
+});
+
+var arr = Object.keys(obj);
+
+assert(arr.hasOwnProperty(0), 'arr.hasOwnProperty(0) !== true');
+assert.sameValue(arr[0], "prop1", 'arr[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-1.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-1.js
new file mode 100644
index 0000000000..528b95c1c8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-1.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-5-1
+description: >
+ Object.keys - own enumerable data property of 'O' is defined in
+ returned array
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ value: 1003,
+ enumerable: true,
+ configurable: true
+});
+
+var arr = Object.keys(obj);
+
+assert(arr.hasOwnProperty(0), 'arr.hasOwnProperty(0) !== true');
+assert.sameValue(arr[0], "prop", 'arr[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-10.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-10.js
new file mode 100644
index 0000000000..2abdd3fd39
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-10.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-5-10
+description: >
+ Object.keys - inherted enumerable accessor property that is
+ over-ridden by non-enumerable own accessor property is not defined
+ in returned array
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "prop", {
+ get: function() {},
+ enumerable: true,
+ configurable: true
+});
+var Con = function() {};
+Con.prototype = proto;
+
+var obj = new Con();
+Object.defineProperty(obj, "prop", {
+ get: function() {},
+ enumerable: false,
+ configurable: true
+});
+
+var arr = Object.keys(obj);
+
+for (var p in arr) {
+ assert.notSameValue(arr[p], "prop", 'arr[p]');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-11.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-11.js
new file mode 100644
index 0000000000..e243880fef
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-11.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-5-11
+description: >
+ Object.keys - own enumerable indexed data property of dense array
+ 'O' is defined in returned array
+---*/
+
+var obj = [1, 2, 3, 4, 5];
+
+var arr = Object.keys(obj);
+
+var initValue = 0;
+for (var p in arr) {
+ if (arr.hasOwnProperty(p)) {
+ assert.sameValue(arr[p], initValue.toString(), 'arr[p]');
+ initValue++;
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-12.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-12.js
new file mode 100644
index 0000000000..082812b2d1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-12.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-5-12
+description: >
+ Object.keys - own enumerable indexed accessor property of dense
+ array 'O' is defined in returned array
+---*/
+
+var propertyFound = false;
+
+var obj = [2, 3, 4, 5];
+
+Object.defineProperty(obj, "prop", {
+ get: function() {
+ return 6;
+ },
+ enumerable: true,
+ configurable: true
+});
+
+var arr = Object.keys(obj);
+
+for (var p in arr) {
+ if (arr.hasOwnProperty(p)) {
+ if (arr[p] === "prop") {
+ propertyFound = true;
+ break;
+ }
+ }
+}
+
+assert(propertyFound, 'Property not found');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-13.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-13.js
new file mode 100644
index 0000000000..05be7a5c23
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-13.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-5-13
+description: >
+ Object.keys - own enumerable indexed data property of sparse array
+ 'O' is defined in returned array
+---*/
+
+var obj = [1, , 3, , 5];
+
+Object.defineProperty(obj, 5, {
+ value: 7,
+ enumerable: false,
+ configurable: true
+});
+
+Object.defineProperty(obj, 10000, {
+ value: "ElementWithLargeIndex",
+ enumerable: true,
+ configurable: true
+});
+
+var arr = Object.keys(obj);
+
+var index;
+var initValue = 0;
+for (index = 0; index < 3; index++) {
+ assert.sameValue(arr[index], initValue.toString(), 'Unexpected property at index: ' + index);
+ initValue += 2;
+}
+
+assert.sameValue(arr.length, 4, 'arr.length');
+assert.sameValue(arr[3], "10000", 'arr[3]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-14.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-14.js
new file mode 100644
index 0000000000..7bb109925b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-14.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-5-14
+description: >
+ Object.keys - own enumerable indexed accessor property of sparse
+ array 'O' is defined in returned array
+---*/
+
+var propertyFound = false;
+
+var obj = [1, , 3, , 5];
+
+Object.defineProperty(obj, "10000", {
+ get: function() {
+ return "ElementWithLargeIndex";
+ },
+ enumerable: true,
+ configurable: true
+});
+
+var arr = Object.keys(obj);
+
+for (var p in arr) {
+ if (arr[p] === "10000") {
+ propertyFound = true;
+ break;
+ }
+}
+
+assert(propertyFound, 'Property not found');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-15.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-15.js
new file mode 100644
index 0000000000..5f78b94c11
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-15.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-5-15
+description: >
+ Object.keys - own enumerable indexed data property of String
+ object 'O' is defined in returned array
+---*/
+
+var obj = new String("xyz");
+obj[-20] = -20;
+obj[20] = 20;
+
+Object.defineProperty(obj, "prop", {
+ value: 1003,
+ enumerable: false,
+ configurable: true
+});
+
+var arr = Object.keys(obj);
+
+for (var i = 0; i < arr.length; i++) {
+ assert(obj.hasOwnProperty(arr[i]), 'obj.hasOwnProperty(arr[i]) !== true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-16.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-16.js
new file mode 100644
index 0000000000..8f9e655cfd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-16.js
@@ -0,0 +1,32 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-5-16
+description: >
+ Object.keys - own enumerable indexed accessor property of String
+ object 'O' is defined in returned array
+---*/
+
+var obj = new String("xyz");
+obj[-20] = -20;
+obj[20] = 20;
+
+Object.defineProperty(obj, "prop1", {
+ get: function() {},
+ enumerable: true,
+ configurable: true
+});
+Object.defineProperty(obj, "prop2", {
+ get: function() {},
+ enumerable: false,
+ configurable: true
+});
+
+var arr = Object.keys(obj);
+
+for (var i = 0; i < arr.length; i++) {
+ assert(obj.hasOwnProperty(arr[i]), 'obj.hasOwnProperty(arr[i]) !== true');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-2.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-2.js
new file mode 100644
index 0000000000..62b39939a1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-2.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-5-2
+description: >
+ Object.keys - own enumerable accessor property of 'O' is defined
+ in returned array
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop", {
+ get: function() {
+ return 1003;
+ },
+ enumerable: true,
+ configurable: true
+});
+
+var arr = Object.keys(obj);
+
+assert(arr.hasOwnProperty(0), 'arr.hasOwnProperty(0) !== true');
+assert.sameValue(arr[0], "prop", 'arr[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-3.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-3.js
new file mode 100644
index 0000000000..f91f94ec70
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-3.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-5-3
+description: >
+ Object.keys - non-enumerable own data property of 'O' is not
+ defined in returned array
+---*/
+
+var obj = {
+ prop1: 1001,
+ prop2: 1002
+};
+
+Object.defineProperty(obj, "prop3", {
+ value: 1003,
+ enumerable: true,
+ configurable: true
+});
+
+Object.defineProperty(obj, "prop4", {
+ value: 1004,
+ enumerable: false,
+ configurable: true
+});
+
+var arr = Object.keys(obj);
+
+for (var p in arr) {
+ if (arr.hasOwnProperty(p)) {
+ assert.notSameValue(arr[p], "prop4", 'arr[p]');
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-4.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-4.js
new file mode 100644
index 0000000000..02ccb887f4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-4.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-5-4
+description: >
+ Object.keys - non-enumerable own accessor property of 'O' is not
+ defined in returned array
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "prop1", {
+ get: function() {},
+ enumerable: true,
+ configurable: true
+});
+Object.defineProperty(obj, "prop2", {
+ get: function() {},
+ enumerable: false,
+ configurable: true
+});
+Object.defineProperty(obj, "prop3", {
+ get: function() {},
+ enumerable: true,
+ configurable: true
+});
+
+var arr = Object.keys(obj);
+
+for (var p in arr) {
+ if (arr.hasOwnProperty(p)) {
+ assert.notSameValue(arr[p], "prop2", 'arr[p]');
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-5.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-5.js
new file mode 100644
index 0000000000..579e572b47
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-5.js
@@ -0,0 +1,29 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-5-5
+description: >
+ Object.keys - inherited enumerable data property of 'O' is not
+ defined in returned array
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "inheritedProp", {
+ value: 1003,
+ enumerable: true,
+ configurable: true
+});
+var Con = function() {};
+Con.prototype = proto;
+
+var obj = new Con();
+obj.prop = 1004;
+
+var arr = Object.keys(obj);
+
+for (var p in arr) {
+ assert.notSameValue(arr[p], "inheritedProp", 'arr[p]');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-6.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-6.js
new file mode 100644
index 0000000000..9f10f38dc9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-6.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-5-6
+description: >
+ Object.keys - inherited enumerable accessor property of 'O' is not
+ defined in returned array
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "inheritedProp", {
+ get: function() {
+ return 1003;
+ },
+ enumerable: true,
+ configurable: true
+});
+var Con = function() {};
+Con.prototype = proto;
+
+var obj = new Con();
+Object.defineProperty(obj, "prop", {
+ get: function() {
+ return 1004;
+ },
+ enumerable: true,
+ configurable: true
+});
+
+var arr = Object.keys(obj);
+
+for (var p in arr) {
+ assert.notSameValue(arr[p], "inheritedProp", 'arr[p]');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-7.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-7.js
new file mode 100644
index 0000000000..df12cdfa17
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-7.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-5-7
+description: >
+ Object.keys - inherted enumerable data property that is
+ over-ridden by non-enumerable own data property is not defined in
+ returned array
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "prop", {
+ value: 1003,
+ enumerable: true,
+ configurable: true
+});
+var Con = function() {};
+Con.prototype = proto;
+
+var obj = new Con();
+Object.defineProperty(obj, "prop", {
+ value: 1004,
+ enumerable: false,
+ configurable: true
+});
+
+var arr = Object.keys(obj);
+
+for (var p in arr) {
+ assert.notSameValue(arr[p], "prop", 'arr[p]');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-8.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-8.js
new file mode 100644
index 0000000000..3be78250f3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-8.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-5-8
+description: >
+ Object.keys - inherted enumerable data property that is
+ over-ridden by non-enumerable own accessor property is not defined
+ in returned array
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "prop", {
+ value: 1003,
+ enumerable: true,
+ configurable: true
+});
+var Con = function() {};
+Con.prototype = proto;
+
+var obj = new Con();
+Object.defineProperty(obj, "prop", {
+ get: function() {},
+ enumerable: false,
+ configurable: true
+});
+
+var arr = Object.keys(obj);
+
+for (var p in arr) {
+ assert.notSameValue(arr[p], "prop", 'arr[p]');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-9.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-9.js
new file mode 100644
index 0000000000..35558529a7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-9.js
@@ -0,0 +1,34 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-5-9
+description: >
+ Object.keys - inherted enumerable accessor property that is
+ over-ridden by non-enumerable own data property is not defined in
+ returned array
+---*/
+
+var proto = {};
+Object.defineProperty(proto, "prop", {
+ get: function() {},
+ enumerable: true,
+ configurable: true
+});
+var Con = function() {};
+Con.prototype = proto;
+
+var obj = new Con();
+Object.defineProperty(obj, "prop", {
+ value: 1003,
+ enumerable: false,
+ configurable: true
+});
+
+var arr = Object.keys(obj);
+
+for (var p in arr) {
+ assert.notSameValue(arr[p], "prop", 'arr[p]');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-a-1.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-a-1.js
new file mode 100644
index 0000000000..00063439e5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-a-1.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-5-a-1
+description: >
+ Object.keys - 'value' attribute of element in returned array is
+ correct.
+---*/
+
+var obj = {
+ prop1: 1
+};
+
+var array = Object.keys(obj);
+
+var desc = Object.getOwnPropertyDescriptor(array, "0");
+
+assert(desc.hasOwnProperty("value"), 'desc.hasOwnProperty("value") !== true');
+assert.sameValue(desc.value, "prop1", 'desc.value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-a-2.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-a-2.js
new file mode 100644
index 0000000000..e662ab89a7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-a-2.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-5-a-2
+description: >
+ Object.keys - 'writable' attribute of element of returned array is
+ correct
+---*/
+
+var obj = {
+ prop1: 100
+};
+
+var array = Object.keys(obj);
+
+array[0] = "isWritable";
+
+var desc = Object.getOwnPropertyDescriptor(array, "0");
+
+assert.sameValue(array[0], "isWritable", 'array[0]');
+assert(desc.hasOwnProperty("writable"), 'desc.hasOwnProperty("writable") !== true');
+assert.sameValue(desc.writable, true, 'desc.writable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-a-3.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-a-3.js
new file mode 100644
index 0000000000..afd5c28f4a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-a-3.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-5-a-3
+description: >
+ Object.keys - 'enumerable' attribute of element of returned array
+ is correct
+---*/
+
+var obj = {
+ prop1: 100
+};
+
+var array = Object.keys(obj);
+var desc = Object.getOwnPropertyDescriptor(array, "0");
+var result = false;
+for (var index in array) {
+ if (obj.hasOwnProperty(array[index]) && array[index] === "prop1") {
+ result = true;
+ }
+}
+
+assert(result, 'result !== true');
+assert(desc.hasOwnProperty("enumerable"), 'desc.hasOwnProperty("enumerable") !== true');
+assert.sameValue(desc.enumerable, true, 'desc.enumerable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-a-4.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-a-4.js
new file mode 100644
index 0000000000..08e6e4618f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-a-4.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-5-a-4
+description: >
+ Object.keys - Verify that 'configurable' attribute of element of
+ returned array is correct
+---*/
+
+var obj = {
+ prop1: 100
+};
+
+var array = Object.keys(obj);
+var desc = Object.getOwnPropertyDescriptor(array, "0");
+
+delete array[0];
+
+assert.sameValue(typeof array[0], "undefined", 'typeof array[0]');
+assert(desc.hasOwnProperty("configurable"), 'desc.hasOwnProperty("configurable") !== true');
+assert.sameValue(desc.configurable, true, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-b-1.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-b-1.js
new file mode 100644
index 0000000000..840621073d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-5-b-1.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-5-b-1
+description: Object.keys - Verify that 'index' of returned array is ascend by 1
+---*/
+
+var obj = {
+ prop1: 100,
+ prop2: 200,
+ prop3: 300
+};
+
+var array = Object.keys(obj);
+
+var idx = 0;
+for (var index in array) {
+ if (array.hasOwnProperty(index)) {
+ assert.sameValue(index, idx.toString(), 'index');
+ idx++;
+ }
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-6-1.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-6-1.js
new file mode 100644
index 0000000000..fd815ad331
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-6-1.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-6-1
+description: >
+ Object.keys - the order of elements in returned array is the same
+ with the order of properties in 'O' (dense array)
+---*/
+
+var denseArray = [1, 2, 3];
+
+var tempArray = [];
+for (var p in denseArray) {
+ if (denseArray.hasOwnProperty(p)) {
+ tempArray.push(p);
+ }
+}
+
+var returnedArray = Object.keys(denseArray);
+
+for (var index in returnedArray) {
+ assert.sameValue(tempArray[index], returnedArray[index], 'tempArray[index]');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-6-2.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-6-2.js
new file mode 100644
index 0000000000..e493fc1496
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-6-2.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-6-2
+description: >
+ Object.keys - the order of elements in returned array is the same
+ with the order of properties in 'O' (sparse array)
+---*/
+
+var sparseArray = [1, 2, , 4, , 6];
+
+var tempArray = [];
+for (var p in sparseArray) {
+ if (sparseArray.hasOwnProperty(p)) {
+ tempArray.push(p);
+ }
+}
+
+var returnedArray = Object.keys(sparseArray);
+
+for (var index in returnedArray) {
+ assert.sameValue(tempArray[index], returnedArray[index], 'tempArray[index]');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-6-3.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-6-3.js
new file mode 100644
index 0000000000..6edec3cb8c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-6-3.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-6-3
+description: >
+ Object.keys - the order of elements in returned array is the same
+ with the order of properties in 'O' (String object)
+---*/
+
+var str = new String("abc");
+
+var tempArray = [];
+for (var p in str) {
+ if (str.hasOwnProperty(p)) {
+ tempArray.push(p);
+ }
+}
+
+var returnedArray = Object.keys(str);
+
+for (var index in returnedArray) {
+ assert.sameValue(tempArray[index], returnedArray[index], 'tempArray[index]');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-6-4.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-6-4.js
new file mode 100644
index 0000000000..9889e713a8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-6-4.js
@@ -0,0 +1,30 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-6-4
+description: >
+ Object.keys - the order of elements in returned array is the same
+ with the order of properties in 'O' (Arguments object)
+---*/
+
+var func = function(a, b, c) {
+ return arguments;
+};
+
+var args = func(1, "b", false);
+
+var tempArray = [];
+for (var p in args) {
+ if (args.hasOwnProperty(p)) {
+ tempArray.push(p);
+ }
+}
+
+var returnedArray = Object.keys(args);
+
+for (var index in returnedArray) {
+ assert.sameValue(tempArray[index], returnedArray[index], 'tempArray[index]');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-6-5.js b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-6-5.js
new file mode 100644
index 0000000000..079ead456b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/15.2.3.14-6-5.js
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.14-6-5
+description: >
+ Object.keys - the order of elements in returned array is the same
+ with the order of properties in 'O' (any other built-in object)
+---*/
+
+var obj = new Date();
+obj.prop1 = 100;
+obj.prop2 = "prop2";
+
+var tempArray = [];
+for (var p in obj) {
+ if (obj.hasOwnProperty(p)) {
+ tempArray.push(p);
+ }
+}
+
+var returnedArray = Object.keys(obj);
+
+for (var index in returnedArray) {
+ assert.sameValue(tempArray[index], returnedArray[index], 'tempArray[index]');
+}
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/browser.js b/js/src/tests/test262/built-ins/Object/keys/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/keys/name.js b/js/src/tests/test262/built-ins/Object/keys/name.js
new file mode 100644
index 0000000000..4839cf4031
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/name.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 19.1.2.14
+description: >
+ Object.keys.name is "keys".
+info: |
+ Object.keys ( O )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.keys.name, "keys");
+
+verifyNotEnumerable(Object.keys, "name");
+verifyNotWritable(Object.keys, "name");
+verifyConfigurable(Object.keys, "name");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/keys/not-a-constructor.js
new file mode 100644
index 0000000000..dc5c3083f2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/not-a-constructor.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.keys does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(isConstructor(Object.keys), false, 'isConstructor(Object.keys) must return false');
+
+assert.throws(TypeError, () => {
+ new Object.keys({});
+}, '`new Object.keys({})` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/order-after-define-property-with-function.js b/js/src/tests/test262/built-ins/Object/keys/order-after-define-property-with-function.js
new file mode 100644
index 0000000000..cd7a3ed392
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/order-after-define-property-with-function.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.keys
+description: >
+ Property names are returned in ascending chronological order of creation
+ that is unaffected by [[DefineOwnProperty]].
+info: |
+ Object.keys ( O )
+
+ [...]
+ 2. Let nameList be ? EnumerableOwnPropertyNames(obj, key).
+ 3. Return CreateArrayFromList(nameList).
+
+ EnumerableOwnPropertyNames ( O, kind )
+
+ [...]
+ 2. Let ownKeys be ? O.[[OwnPropertyKeys]]().
+ [...]
+
+ OrdinaryOwnPropertyKeys ( O )
+
+ [...]
+ 3. For each own property key P of O that is a String but is not an array index,
+ in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ [...]
+ 5. Return keys.
+features: [arrow-function]
+includes: [compareArray.js]
+---*/
+
+var fn = () => {};
+fn.a = 1;
+Object.defineProperty(fn, "length", {enumerable: true});
+assert.compareArray(Object.keys(fn), ["length", "a"]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/order-after-define-property.js b/js/src/tests/test262/built-ins/Object/keys/order-after-define-property.js
new file mode 100644
index 0000000000..151dd83a56
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/order-after-define-property.js
@@ -0,0 +1,44 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.keys
+description: >
+ Property names are returned in ascending chronological order of creation
+ that is unaffected by [[DefineOwnProperty]].
+info: |
+ Object.keys ( O )
+
+ [...]
+ 2. Let nameList be ? EnumerableOwnPropertyNames(obj, key).
+ 3. Return CreateArrayFromList(nameList).
+
+ EnumerableOwnPropertyNames ( O, kind )
+
+ [...]
+ 2. Let ownKeys be ? O.[[OwnPropertyKeys]]().
+ [...]
+
+ OrdinaryOwnPropertyKeys ( O )
+
+ [...]
+ 3. For each own property key P of O that is a String but is not an array index,
+ in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ [...]
+ 5. Return keys.
+includes: [compareArray.js]
+---*/
+
+var obj = {};
+Object.defineProperty(obj, "a", {
+ get: function() {},
+ set: function(_value) {},
+ enumerable: true,
+ configurable: true,
+});
+obj.b = 2;
+Object.defineProperty(obj, "a", {value: 1});
+assert.compareArray(Object.keys(obj), ["a", "b"]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/property-traps-order-with-proxied-array.js b/js/src/tests/test262/built-ins/Object/keys/property-traps-order-with-proxied-array.js
new file mode 100644
index 0000000000..44cbbb5ed8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/property-traps-order-with-proxied-array.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2018 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.keys
+description: >
+ Ensure the correct property traps are called on a proxy of an array.
+info: |
+ 19.1.2.16 Object.keys ( O )
+ ...
+ 2. Let nameList be ? EnumerableOwnPropertyNames(obj, "key").
+ ...
+
+ 7.3.21 EnumerableOwnPropertyNames ( O, kind )
+ ...
+ 2. Let ownKeys be ? O.[[OwnPropertyKeys]]().
+ ...
+ 4. For each element key of ownKeys in List order, do
+ a. If Type(key) is String, then
+ i. Let desc be ? O.[[GetOwnProperty]](key).
+ ...
+features: [Proxy]
+includes: [compareArray.js]
+---*/
+
+var log = [];
+
+Object.keys(new Proxy([], new Proxy({},{
+ get(t, pk, r) {
+ log.push(pk);
+ }
+})));
+
+assert.compareArray([
+ "ownKeys",
+ "getOwnPropertyDescriptor",
+], log);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/proxy-keys.js b/js/src/tests/test262/built-ins/Object/keys/proxy-keys.js
new file mode 100644
index 0000000000..5ed94aa1e2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/proxy-keys.js
@@ -0,0 +1,170 @@
+// Copyright (C) 2017 Caitlin Potter. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.keys
+description: >
+ Object.keys() observably performs [[GetOwnProperty]]
+info: |
+ 19.1.2.16 Object.keys ( O )
+
+ 1. Let obj be ? ToObject(O).
+ 2. Let nameList be ? EnumerableOwnProperties(obj, "key").
+ ...
+
+ 7.3.21 EnumerableOwnProperties ( O, kind )
+
+ 1. Assert: Type(O) is Object.
+ 2. Let ownKeys be ? O.[[OwnPropertyKeys]]().
+ 3. Let properties be a new empty List.
+ 4. For each element key of ownKeys in List order, do
+ a. If Type(key) is String, then
+ i. Let desc be ? O.[[GetOwnProperty]](key).
+ ...
+features: [Symbol]
+---*/
+
+let log = [];
+let s = Symbol("test");
+let target = {
+ x: true
+};
+
+let ownKeys = {
+ get length() {
+ log.push({
+ name: "get ownKeys['length']",
+ receiver: this
+ });
+ return 3;
+ },
+
+ get 0() {
+ log.push({
+ name: "get ownKeys[0]",
+ receiver: this
+ });
+ return "a";
+ },
+
+ get 1() {
+ log.push({
+ name: "get ownKeys[1]",
+ receiver: this
+ });
+ return s;
+ },
+
+ get 2() {
+ log.push({
+ name: "get ownKeys[2]",
+ receiver: this
+ });
+ return "b";
+ }
+};
+
+let ownKeysDescriptors = {
+ "a": {
+ enumerable: true,
+ configurable: true,
+ value: 1
+ },
+
+ "b": {
+ enumerable: false,
+ configurable: true,
+ value: 2
+ },
+
+ [s]: {
+ enumerable: true,
+ configurable: true,
+ value: 3
+ }
+};
+
+let handler = {
+ get ownKeys() {
+ log.push({
+ name: "get handler.ownKeys",
+ receiver: this
+ });
+ return (...args) => {
+ log.push({
+ name: "call handler.ownKeys",
+ receiver: this,
+ args
+ });
+ return ownKeys;
+ };
+ },
+
+ get getOwnPropertyDescriptor() {
+ log.push({
+ name: "get handler.getOwnPropertyDescriptor",
+ receiver: this
+ });
+ return (...args) => {
+ log.push({
+ name: "call handler.getOwnPropertyDescriptor",
+ receiver: this,
+ args
+ });
+ const name = args[1];
+ return ownKeysDescriptors[name];
+ };
+ }
+};
+
+let proxy = new Proxy(target, handler);
+let keys = Object.keys(proxy);
+
+assert.sameValue(log.length, 10);
+
+assert.sameValue(log[0].name, "get handler.ownKeys");
+assert.sameValue(log[0].receiver, handler);
+
+assert.sameValue(log[1].name, "call handler.ownKeys");
+assert.sameValue(log[1].receiver, handler);
+assert.sameValue(log[1].args.length, 1);
+assert.sameValue(log[1].args[0], target);
+
+// CreateListFromArrayLike(trapResultArray, « String, Symbol »).
+assert.sameValue(log[2].name, "get ownKeys['length']");
+assert.sameValue(log[2].receiver, ownKeys);
+
+assert.sameValue(log[3].name, "get ownKeys[0]");
+assert.sameValue(log[3].receiver, ownKeys);
+
+assert.sameValue(log[4].name, "get ownKeys[1]");
+assert.sameValue(log[4].receiver, ownKeys);
+
+assert.sameValue(log[5].name, "get ownKeys[2]");
+assert.sameValue(log[5].receiver, ownKeys);
+
+// Let desc be ? O.[[GetOwnProperty]]("a").
+assert.sameValue(log[6].name, "get handler.getOwnPropertyDescriptor");
+assert.sameValue(log[6].receiver, handler);
+
+assert.sameValue(log[7].name, "call handler.getOwnPropertyDescriptor");
+assert.sameValue(log[7].receiver, handler);
+assert.sameValue(log[7].args.length, 2);
+assert.sameValue(log[7].args[0], target);
+assert.sameValue(log[7].args[1], "a");
+
+// Let desc be ? O.[[GetOwnProperty]]("b").
+assert.sameValue(log[8].name, "get handler.getOwnPropertyDescriptor");
+assert.sameValue(log[8].receiver, handler);
+
+assert.sameValue(log[9].name, "call handler.getOwnPropertyDescriptor");
+assert.sameValue(log[9].receiver, handler);
+assert.sameValue(log[9].args.length, 2);
+assert.sameValue(log[9].args[0], target);
+assert.sameValue(log[9].args[1], "b");
+
+// "a" is the only enumerable String-keyed property.
+assert.sameValue(keys.length, 1);
+assert.sameValue(keys[0], "a");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/proxy-non-enumerable-prop-invariant-1.js b/js/src/tests/test262/built-ins/Object/keys/proxy-non-enumerable-prop-invariant-1.js
new file mode 100644
index 0000000000..39c2e4294f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/proxy-non-enumerable-prop-invariant-1.js
@@ -0,0 +1,56 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.keys
+description: >
+ Proxy [[OwnPropertyKeys]] trap does not skip non-enumerable keys when validating invariant:
+ * The result List must contain the keys of all non-configurable own properties of
+ the target object.
+info: |
+ Object.keys ( O )
+
+ ...
+ 2. Let nameList be ? EnumerableOwnPropertyNames(obj, "key").
+
+ EnumerableOwnPropertyNames ( O, kind )
+
+ ...
+ 2. Let ownKeys be ? O.[[OwnPropertyKeys]]().
+
+ [[OwnPropertyKeys]] ( )
+
+ ...
+ 11. Let targetKeys be ? target.[[OwnPropertyKeys]]().
+ ...
+ 15. Let targetNonconfigurableKeys be a new empty List.
+ 16. For each element key of targetKeys, do
+ a. Let desc be ? target.[[GetOwnProperty]](key).
+ b. If desc is not undefined and desc.[[Configurable]] is false, then
+ i. Append key as an element of targetNonconfigurableKeys.
+ ...
+ 18. Let uncheckedResultKeys be a new List which is a copy of trapResult.
+ 19. For each key that is an element of targetNonconfigurableKeys, do
+ a. If key is not an element of uncheckedResultKeys, throw a TypeError exception.
+features: [Proxy]
+---*/
+
+var target = {};
+Object.defineProperty(target, 'prop', {
+ value: 1,
+ writable: true,
+ enumerable: false,
+ configurable: false,
+});
+
+var proxy = new Proxy(target, {
+ ownKeys: function() {
+ return [];
+ },
+});
+
+assert.throws(TypeError, function() {
+ Object.keys(proxy);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/proxy-non-enumerable-prop-invariant-2.js b/js/src/tests/test262/built-ins/Object/keys/proxy-non-enumerable-prop-invariant-2.js
new file mode 100644
index 0000000000..846a48d03b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/proxy-non-enumerable-prop-invariant-2.js
@@ -0,0 +1,59 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.keys
+description: >
+ Proxy [[OwnPropertyKeys]] trap does not skip non-enumerable keys when validating invariant:
+ * If the target object is not extensible, then the result List must contain all the keys of
+ the own properties of the target object and no other values.
+info: |
+ Object.keys ( O )
+
+ ...
+ 2. Let nameList be ? EnumerableOwnPropertyNames(obj, "key").
+
+ EnumerableOwnPropertyNames ( O, kind )
+
+ ...
+ 2. Let ownKeys be ? O.[[OwnPropertyKeys]]().
+
+ [[OwnPropertyKeys]] ( )
+
+ ...
+ 11. Let targetKeys be ? target.[[OwnPropertyKeys]]().
+ 16. For each element key of targetKeys, do
+ a. Let desc be ? target.[[GetOwnProperty]](key).
+ b. If desc is not undefined and desc.[[Configurable]] is false, then
+ ...
+ c. Else,
+ i. Append key as an element of targetConfigurableKeys.
+ ...
+ 18. Let uncheckedResultKeys be a new List which is a copy of trapResult.
+ ...
+ 21. For each key that is an element of targetConfigurableKeys, do
+ a. If key is not an element of uncheckedResultKeys, throw a TypeError exception.
+features: [Proxy]
+---*/
+
+var target = {};
+Object.defineProperty(target, 'prop', {
+ value: 2,
+ writable: true,
+ enumerable: false,
+ configurable: true,
+});
+
+var proxy = new Proxy(target, {
+ ownKeys: function() {
+ return [];
+ },
+});
+
+Object.preventExtensions(target);
+
+assert.throws(TypeError, function() {
+ Object.keys(proxy);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/proxy-non-enumerable-prop-invariant-3.js b/js/src/tests/test262/built-ins/Object/keys/proxy-non-enumerable-prop-invariant-3.js
new file mode 100644
index 0000000000..d1d73af448
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/proxy-non-enumerable-prop-invariant-3.js
@@ -0,0 +1,57 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.keys
+description: >
+ Proxy [[OwnPropertyKeys]] trap does not skip non-enumerable keys when validating invariant:
+ * If the target object is not extensible, then the result List must contain all the keys of
+ the own properties of the target object and no other values.
+info: |
+ Object.keys ( O )
+
+ ...
+ 2. Let nameList be ? EnumerableOwnPropertyNames(obj, "key").
+
+ EnumerableOwnPropertyNames ( O, kind )
+
+ ...
+ 2. Let ownKeys be ? O.[[OwnPropertyKeys]]().
+
+ [[OwnPropertyKeys]] ( )
+
+ ...
+ 11. Let targetKeys be ? target.[[OwnPropertyKeys]]().
+ 16. For each element key of targetKeys, do
+ a. Let desc be ? target.[[GetOwnProperty]](key).
+ b. If desc is not undefined and desc.[[Configurable]] is false, then
+ ...
+ c. Else,
+ i. Append key as an element of targetConfigurableKeys.
+ ...
+ 18. Let uncheckedResultKeys be a new List which is a copy of trapResult.
+ ...
+ 22. If uncheckedResultKeys is not empty, throw a TypeError exception.
+features: [Proxy]
+---*/
+
+var target = {};
+Object.defineProperty(target, 'prop', {
+ value: 3,
+ writable: true,
+ enumerable: false,
+ configurable: true,
+});
+
+var proxy = new Proxy(target, {
+ ownKeys: function() {
+ return ['prop'];
+ },
+});
+
+Object.preventExtensions(target);
+
+var keys = Object.keys(proxy);
+assert.sameValue(keys.length, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/return-order.js b/js/src/tests/test262/built-ins/Object/keys/return-order.js
new file mode 100644
index 0000000000..fcc909c4d7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/return-order.js
@@ -0,0 +1,32 @@
+// Copyright 2019 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.keys
+description: Object.keys enumeration order
+features: [for-in-order]
+includes: [compareArray.js]
+---*/
+
+var o = {
+ p1: 'p1',
+ p2: 'p2',
+ p3: 'p3',
+};
+o.p4 = 'p4';
+
+o[2] = '2';
+o[0] = '0';
+o[1] = '1';
+
+delete o.p1;
+delete o.p3;
+o.p1 = 'p1';
+
+var actual = Object.keys(o);
+
+var expected = ['0', '1', '2', 'p2', 'p4', 'p1'];
+
+assert.compareArray(actual, expected);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/keys/shell.js b/js/src/tests/test262/built-ins/Object/keys/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/keys/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-0-1.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-0-1.js
new file mode 100644
index 0000000000..c01efa70d6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-0-1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-0-1
+description: Object.preventExtensions must exist as a function
+---*/
+
+var f = Object.preventExtensions;
+
+assert.sameValue(typeof(f), "function", 'typeof(f)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-0-2.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-0-2.js
new file mode 100644
index 0000000000..f1dbaa35ea
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-0-2.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-0-2
+description: >
+ Object.preventExtensions must exist as a function taking 1
+ parameter
+---*/
+
+assert.sameValue(Object.preventExtensions.length, 1, 'Object.preventExtensions.length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-1-1.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-1-1.js
new file mode 100644
index 0000000000..25426b1b88
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-1-1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-1-1
+description: >
+ Object.preventExtensions does not throw TypeError if 'O' is
+ undefined
+---*/
+
+Object.preventExtensions(undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-1-2.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-1-2.js
new file mode 100644
index 0000000000..bac4c4e914
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-1-2.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-1-2
+description: Object.preventExtensions does not throw TypeError if 'O' is null
+---*/
+
+Object.preventExtensions(null);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-1-3.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-1-3.js
new file mode 100644
index 0000000000..d765ba8cf7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-1-3.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-1-3
+description: >
+ Object.preventExtensions does not throw TypeError if 'O' is a
+ boolean primitive value
+---*/
+
+Object.preventExtensions(true);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-1-4.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-1-4.js
new file mode 100644
index 0000000000..1ffbf1e9be
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-1-4.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-1-4
+description: >
+ Object.preventExtensions does not throw TypeError if 'O' is a
+ string primitive value
+---*/
+
+Object.preventExtensions("abc");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-1.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-1.js
new file mode 100644
index 0000000000..64f566f7dd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-1
+description: >
+ Object.preventExtensions does not throw TypeError if type of first
+ param is not Object
+---*/
+
+Object.preventExtensions(0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-2-1.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-2-1.js
new file mode 100644
index 0000000000..b0d64ba6e1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-2-1.js
@@ -0,0 +1,26 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-2-1
+description: >
+ Object.preventExtensions - repeated calls to preventExtensions
+ have no side effects
+---*/
+
+var obj = {};
+var testResult1 = true;
+var testResult2 = true;
+
+var preCheck = Object.isExtensible(obj);
+
+Object.preventExtensions(obj);
+testResult1 = Object.isExtensible(obj);
+Object.preventExtensions(obj);
+testResult2 = Object.isExtensible(obj);
+
+assert(preCheck, 'preCheck !== true');
+assert.sameValue(testResult1, false, 'testResult1');
+assert.sameValue(testResult2, false, 'testResult2');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-2.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-2.js
new file mode 100644
index 0000000000..7b76d2c18a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-2.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The effect of preventExtentions must be testable by calling isExtensible
+es5id: 15.2.3.10-2
+description: >
+ Object.preventExtensions returns its arguments after setting its
+ extensible property to false
+---*/
+
+var o = {};
+var o2 = undefined;
+
+o2 = Object.preventExtensions(o);
+
+assert.sameValue(o2, o, 'o2');
+assert.sameValue(Object.isExtensible(o2), false, 'Object.isExtensible(o2)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-1.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-1.js
new file mode 100644
index 0000000000..0b743f2b1c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-1.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-3-1
+description: >
+ Object.preventExtensions - Object.isExtensible(arg) returns false
+ if arg is the returned object
+---*/
+
+var obj = {};
+var preCheck = Object.isExtensible(obj);
+Object.preventExtensions(obj);
+
+assert(preCheck, 'preCheck !== true');
+assert.sameValue(Object.isExtensible(obj), false, 'Object.isExtensible(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-10.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-10.js
new file mode 100644
index 0000000000..dee7f3deb7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-10.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-3-10
+description: >
+ Object.preventExtensions - indexed properties cannot be added into
+ an Error object
+includes: [propertyHelper.js]
+---*/
+
+var errObj = new Error();
+
+assert(Object.isExtensible(errObj));
+Object.preventExtensions(errObj);
+assert(!Object.isExtensible(errObj));
+
+verifyNotWritable(errObj, "0", "nocheck");
+
+assert(!errObj.hasOwnProperty("0"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-11.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-11.js
new file mode 100644
index 0000000000..1c42839aee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-11.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-3-11
+description: >
+ Object.preventExtensions - indexed properties cannot be added into
+ an Arguments object
+includes: [propertyHelper.js]
+---*/
+
+var argObj;
+(function() {
+ argObj = arguments;
+}());
+
+assert(Object.isExtensible(argObj));
+Object.preventExtensions(argObj);
+assert(!Object.isExtensible(argObj));
+
+verifyNotWritable(argObj, "0", "nocheck");
+
+assert(!argObj.hasOwnProperty("0"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-12.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-12.js
new file mode 100644
index 0000000000..7b14a19bf1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-12.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-3-12
+description: >
+ Object.preventExtensions - named properties cannot be added into
+ the returned object
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+assert(Object.isExtensible(obj));
+Object.preventExtensions(obj);
+assert(!Object.isExtensible(obj));
+
+verifyNotWritable(obj, "exName", "nocheck");
+
+assert(!obj.hasOwnProperty("exName"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-13.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-13.js
new file mode 100644
index 0000000000..5080aace99
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-13.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-3-13
+description: >
+ Object.preventExtensions - named properties cannot be added into a
+ Function object
+includes: [propertyHelper.js]
+---*/
+
+var obj = function() {};
+
+assert(Object.isExtensible(obj));
+Object.preventExtensions(obj);
+assert(!Object.isExtensible(obj));
+
+verifyNotWritable(obj, "exName", "nocheck");
+
+assert(!obj.hasOwnProperty("exName"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-14.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-14.js
new file mode 100644
index 0000000000..1b3215f02c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-14.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-3-14
+description: >
+ Object.preventExtensions - named properties cannot be added into
+ an Array object
+includes: [propertyHelper.js]
+---*/
+
+var obj = [];
+
+assert(Object.isExtensible(obj));
+Object.preventExtensions(obj);
+assert(!Object.isExtensible(obj));
+
+verifyNotWritable(obj, "exName", "nocheck");
+
+assert(!obj.hasOwnProperty("exName"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-15.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-15.js
new file mode 100644
index 0000000000..61ebf986b9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-15.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-3-15
+description: >
+ Object.preventExtensions - named properties cannot be added into a
+ String object
+includes: [propertyHelper.js]
+---*/
+
+var obj = new String("bbq");
+
+assert(Object.isExtensible(obj));
+Object.preventExtensions(obj);
+assert(!Object.isExtensible(obj));
+
+verifyNotWritable(obj, "exName", "nocheck");
+
+assert(!obj.hasOwnProperty("exName"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-16.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-16.js
new file mode 100644
index 0000000000..56209edb33
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-16.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-3-16
+description: >
+ Object.preventExtensions - named properties cannot be added into a
+ Boolean object
+includes: [propertyHelper.js]
+---*/
+
+var obj = new Boolean(true);
+
+assert(Object.isExtensible(obj));
+Object.preventExtensions(obj);
+assert(!Object.isExtensible(obj));
+
+verifyNotWritable(obj, "exName", "nocheck");
+
+assert(!obj.hasOwnProperty("exName"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-17.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-17.js
new file mode 100644
index 0000000000..49162ee573
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-17.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-3-17
+description: >
+ Object.preventExtensions - named properties cannot be added into a
+ Number object
+includes: [propertyHelper.js]
+---*/
+
+var obj = new Number(123);
+
+assert(Object.isExtensible(obj));
+Object.preventExtensions(obj);
+assert(!Object.isExtensible(obj));
+
+verifyNotWritable(obj, "exName", "nocheck");
+
+assert(!obj.hasOwnProperty("exName"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-18.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-18.js
new file mode 100644
index 0000000000..44c410f8b1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-18.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-3-18
+description: >
+ Object.preventExtensions - named properties cannot be added into a
+ Date object
+includes: [propertyHelper.js]
+---*/
+
+var obj = new Date();
+
+assert(Object.isExtensible(obj));
+Object.preventExtensions(obj);
+assert(!Object.isExtensible(obj));
+
+verifyNotWritable(obj, "exName", "nocheck");
+
+assert(!obj.hasOwnProperty("exName"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-19.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-19.js
new file mode 100644
index 0000000000..5c9440afd2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-19.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-3-19
+description: >
+ Object.preventExtensions - named properties cannot be added into a
+ RegExp object
+includes: [propertyHelper.js]
+---*/
+
+var obj = new RegExp();
+
+assert(Object.isExtensible(obj));
+Object.preventExtensions(obj);
+assert(!Object.isExtensible(obj));
+
+verifyNotWritable(obj, "exName", "nocheck");
+
+assert(!obj.hasOwnProperty("exName"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-2.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-2.js
new file mode 100644
index 0000000000..ea15fa3fbf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-2.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-3-2
+description: >
+ Object.preventExtensions - indexed properties cannot be added into
+ the returned object
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+assert(Object.isExtensible(obj));
+Object.preventExtensions(obj);
+assert(!Object.isExtensible(obj));
+
+verifyNotWritable(obj, "0", "nocheck");
+
+assert(!obj.hasOwnProperty("0"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-20.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-20.js
new file mode 100644
index 0000000000..f1bc6393e2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-20.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-3-20
+description: >
+ Object.preventExtensions - named properties cannot be added into
+ an Error object
+includes: [propertyHelper.js]
+---*/
+
+var obj = new Error();
+
+assert(Object.isExtensible(obj));
+Object.preventExtensions(obj);
+assert(!Object.isExtensible(obj));
+
+verifyNotWritable(obj, "exName", "nocheck");
+
+assert(!obj.hasOwnProperty("exName"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-21.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-21.js
new file mode 100644
index 0000000000..524f4f64f2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-21.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-3-21
+description: >
+ Object.preventExtensions - named properties cannot be added into
+ an Arguments object
+includes: [propertyHelper.js]
+---*/
+
+var obj;
+(function() {
+ obj = arguments;
+}());
+
+assert(Object.isExtensible(obj));
+Object.preventExtensions(obj);
+assert(!Object.isExtensible(obj));
+
+verifyNotWritable(obj, "exName", "nocheck");
+
+assert(!obj.hasOwnProperty("exName"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-22.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-22.js
new file mode 100644
index 0000000000..58d9a2ab18
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-22.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-3-22
+description: >
+ Object.preventExtensions - properties can still be deleted after
+ extensions have been prevented
+---*/
+
+var obj = {
+ prop: 12
+};
+var preCheck = Object.isExtensible(obj);
+Object.preventExtensions(obj);
+
+delete obj.prop;
+
+assert(preCheck, 'preCheck !== true');
+assert.sameValue(obj.hasOwnProperty("prop"), false, 'obj.hasOwnProperty("prop")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-23.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-23.js
new file mode 100644
index 0000000000..1d0ff17f80
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-23.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-3-23
+description: >
+ Object.preventExtensions - properties can still be reassigned
+ after extensions have been prevented
+---*/
+
+var obj = {
+ prop: 12
+};
+var preCheck = Object.isExtensible(obj);
+Object.preventExtensions(obj);
+
+obj.prop = -1;
+
+assert(preCheck, 'preCheck !== true');
+assert.sameValue(obj.prop, -1, 'obj.prop');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-24.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-24.js
new file mode 100644
index 0000000000..d5299f2afa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-24.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-3-24
+description: >
+ Object.preventExtensions - [[Extensible]]: false on a prototype
+ doesn't prevent adding properties to an instance that inherits
+ from that prototype
+---*/
+
+var proto = {};
+var preCheck = Object.isExtensible(proto);
+Object.preventExtensions(proto);
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+var child = new ConstructFun();
+
+child.prop = 10;
+
+assert(preCheck, 'preCheck !== true');
+assert(child.hasOwnProperty("prop"), 'child.hasOwnProperty("prop") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-3.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-3.js
new file mode 100644
index 0000000000..0e82ad9285
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-3.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-3-3
+description: >
+ Object.preventExtensions - indexed properties cannot be added into
+ a Function object
+includes: [propertyHelper.js]
+---*/
+
+var obj = function() {};
+
+assert(Object.isExtensible(obj));
+Object.preventExtensions(obj);
+assert(!Object.isExtensible(obj));
+
+verifyNotWritable(obj, "0", "nocheck");
+
+assert(!obj.hasOwnProperty("0"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-4.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-4.js
new file mode 100644
index 0000000000..4d79be6486
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-4.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-3-4
+description: >
+ Object.preventExtensions - indexed properties cannot be added into
+ an Array object
+includes: [propertyHelper.js]
+---*/
+
+var obj = [];
+
+assert(Object.isExtensible(obj));
+Object.preventExtensions(obj);
+assert(!Object.isExtensible(obj));
+
+verifyNotWritable(obj, "0", "nocheck");
+
+assert(!obj.hasOwnProperty("0"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-5-1.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-5-1.js
new file mode 100644
index 0000000000..a35d2ab8e5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-5-1.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-3-5-1
+description: >
+ Object.preventExtensions - indexed properties cannot be added into
+ a String object
+includes: [propertyHelper.js]
+---*/
+
+var obj = new String("bbq");
+
+assert(Object.isExtensible(obj));
+Object.preventExtensions(obj);
+assert(!Object.isExtensible(obj));
+
+verifyNotWritable(obj, "10", "nocheck");
+
+assert(!obj.hasOwnProperty("10"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-5.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-5.js
new file mode 100644
index 0000000000..c234615332
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-5.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-3-5
+description: >
+ Object.preventExtensions - indexed properties cannot be added into
+ a String object
+---*/
+
+var strObj = new String();
+var preCheck = Object.isExtensible(strObj);
+Object.preventExtensions(strObj);
+assert.throws(TypeError, function() {
+ Object.defineProperty(strObj, "0", {
+ value: "c"
+ });
+});
+assert(preCheck, 'preCheck !== true');
+assert.sameValue(strObj.hasOwnProperty("0"), false, 'strObj.hasOwnProperty("0")');
+assert.sameValue(typeof strObj[0], "undefined", 'typeof strObj[0]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-6.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-6.js
new file mode 100644
index 0000000000..1f556adb97
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-6.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-3-6
+description: >
+ Object.preventExtensions - indexed properties cannot be added into
+ a Boolean object
+includes: [propertyHelper.js]
+---*/
+
+var obj = new Boolean(true);
+
+assert(Object.isExtensible(obj));
+Object.preventExtensions(obj);
+assert(!Object.isExtensible(obj));
+
+verifyNotWritable(obj, "0", "nocheck");
+
+assert(!obj.hasOwnProperty("0"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-7.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-7.js
new file mode 100644
index 0000000000..35f92e2a9e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-7.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-3-7
+description: >
+ Object.preventExtensions - indexed properties cannot be added into
+ a Number object
+includes: [propertyHelper.js]
+---*/
+
+var obj = new Number(123);
+
+assert(Object.isExtensible(obj));
+Object.preventExtensions(obj);
+assert(!Object.isExtensible(obj));
+
+verifyNotWritable(obj, "0", "nocheck");
+
+assert(!obj.hasOwnProperty("0"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-8.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-8.js
new file mode 100644
index 0000000000..3fd880b2d6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-8.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-3-8
+description: >
+ Object.preventExtensions - indexed properties cannot be added into
+ a Date object
+includes: [propertyHelper.js]
+---*/
+
+var obj = new Date();
+
+assert(Object.isExtensible(obj));
+Object.preventExtensions(obj);
+assert(!Object.isExtensible(obj));
+
+verifyNotWritable(obj, "0", "nocheck");
+
+assert(!obj.hasOwnProperty("0"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-9.js b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-9.js
new file mode 100644
index 0000000000..f98d113553
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/15.2.3.10-3-9.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.10-3-9
+description: >
+ Object.preventExtensions - indexed properties cannot be added into
+ a RegExp object
+includes: [propertyHelper.js]
+---*/
+
+var obj = new RegExp();
+
+assert(Object.isExtensible(obj));
+Object.preventExtensions(obj);
+assert(!Object.isExtensible(obj));
+
+verifyNotWritable(obj, "0", "nocheck");
+
+assert(!obj.hasOwnProperty("0"));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/abrupt-completion.js b/js/src/tests/test262/built-ins/Object/preventExtensions/abrupt-completion.js
new file mode 100644
index 0000000000..9a2f60e01f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/abrupt-completion.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.preventextensions
+description: >
+ O.[[PreventExtensions]]() returns abrupt completion.
+info: |
+ Object.preventExtensions ( O )
+
+ ...
+ 2. Let status be ? O.[[PreventExtensions]]().
+features: [Proxy]
+---*/
+
+var p = new Proxy({}, {
+ preventExtensions: function() {
+ throw new Test262Error();
+ },
+});
+
+assert.throws(Test262Error, function() {
+ Object.preventExtensions(p);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/browser.js b/js/src/tests/test262/built-ins/Object/preventExtensions/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/name.js b/js/src/tests/test262/built-ins/Object/preventExtensions/name.js
new file mode 100644
index 0000000000..09e9f7130d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/name.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 19.1.2.15
+description: >
+ Object.preventExtensions.name is "preventExtensions".
+info: |
+ Object.preventExtensions ( O )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.preventExtensions.name, "preventExtensions");
+
+verifyNotEnumerable(Object.preventExtensions, "name");
+verifyNotWritable(Object.preventExtensions, "name");
+verifyConfigurable(Object.preventExtensions, "name");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/preventExtensions/not-a-constructor.js
new file mode 100644
index 0000000000..dac8c6ee18
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.preventExtensions does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(Object.preventExtensions),
+ false,
+ 'isConstructor(Object.preventExtensions) must return false'
+);
+
+assert.throws(TypeError, () => {
+ new Object.preventExtensions({});
+}, '`new Object.preventExtensions({})` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/shell.js b/js/src/tests/test262/built-ins/Object/preventExtensions/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/symbol-object-contains-symbol-properties-non-strict.js b/js/src/tests/test262/built-ins/Object/preventExtensions/symbol-object-contains-symbol-properties-non-strict.js
new file mode 100644
index 0000000000..3f45211187
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/symbol-object-contains-symbol-properties-non-strict.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2013 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.4
+description: >
+ Object.preventExtensions(obj) where obj contains symbol properties.
+flags: [noStrict]
+features: [Symbol]
+---*/
+var symA = Symbol("A");
+var symB = Symbol("B");
+var obj = {};
+obj[symA] = 1;
+Object.preventExtensions(obj);
+obj[symA] = 2;
+obj[symB] = 1;
+
+assert.sameValue(obj[symA], 2, "The value of `obj[symA]` is `2`");
+assert.sameValue(delete obj[symA], true, "`delete obj[symA]` is `true`");
+assert.sameValue(obj[symB], undefined, "The value of `obj[symB]` is `undefined`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/symbol-object-contains-symbol-properties-strict-strict.js b/js/src/tests/test262/built-ins/Object/preventExtensions/symbol-object-contains-symbol-properties-strict-strict.js
new file mode 100644
index 0000000000..31aebc0bc6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/symbol-object-contains-symbol-properties-strict-strict.js
@@ -0,0 +1,34 @@
+'use strict';
+// Copyright (C) 2013 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.4
+description: >
+ Object.preventExtensions(obj) where obj contains symbol properties.
+flags: [onlyStrict]
+features: [Symbol]
+---*/
+var symA = Symbol("A");
+var symB = Symbol("B");
+var symC = Symbol("C");
+var obj = {};
+obj[symA] = 1;
+Object.preventExtensions(obj);
+obj[symA] = 2;
+
+assert.throws(TypeError, function() {
+ obj[symB] = 1;
+});
+
+assert.throws(TypeError, function() {
+ Object.defineProperty(obj, symC, {
+ value: 1
+ });
+});
+
+assert.sameValue(obj[symA], 2, "The value of `obj[symA]` is `2`");
+assert.sameValue(delete obj[symA], true, "`delete obj[symA]` is `true`");
+assert.sameValue(obj[symB], undefined, "The value of `obj[symB]` is `undefined`");
+assert.sameValue(obj[symC], undefined, "The value of `obj[symC]` is `undefined`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/preventExtensions/throws-when-false.js b/js/src/tests/test262/built-ins/Object/preventExtensions/throws-when-false.js
new file mode 100644
index 0000000000..f77a15f63c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/preventExtensions/throws-when-false.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2019 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.preventextensions
+description: >
+ Object.preventExtensions throws if O.[[PreventExtensions]]() returns false.
+info: |
+ Object.preventExtensions ( O )
+ ...
+ 2. Let status be ? O.[[PreventExtensions]]().
+ 3. If status is false, throw a TypeError exception.
+---*/
+
+const p = new Proxy({}, {
+ preventExtensions() {
+ return false;
+ },
+});
+
+assert.throws(TypeError, () => {
+ Object.preventExtensions(p);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prop-desc.js b/js/src/tests/test262/built-ins/Object/prop-desc.js
new file mode 100644
index 0000000000..64e7a8969a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prop-desc.js
@@ -0,0 +1,18 @@
+// Copyright (C) 2019 Bocoup. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-constructor-properties-of-the-global-object-object
+description: Property descriptor for Object
+info: |
+ Every other data property described in clauses 18 through 26 and in Annex B.2
+ has the attributes { [[Writable]]: true, [[Enumerable]]: false,
+ [[Configurable]]: true } unless otherwise specified.
+includes: [propertyHelper.js]
+---*/
+
+verifyNotEnumerable(this, "Object");
+verifyWritable(this, "Object");
+verifyConfigurable(this, "Object");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/property-order.js b/js/src/tests/test262/built-ins/Object/property-order.js
new file mode 100644
index 0000000000..9a3ec5813c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/property-order.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2020 ExE Boss. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-createbuiltinfunction
+description: Object constructor property order
+info: |
+ Set order: "length", "name", ...
+---*/
+
+var propNames = Object.getOwnPropertyNames(Object);
+var lengthIndex = propNames.indexOf("length");
+var nameIndex = propNames.indexOf("name");
+
+assert(lengthIndex >= 0 && nameIndex === lengthIndex + 1,
+ "The `length` property comes before the `name` property on built-in functions");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/proto-from-ctor-realm.js b/js/src/tests/test262/built-ins/Object/proto-from-ctor-realm.js
new file mode 100644
index 0000000000..11ca7808e0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/proto-from-ctor-realm.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object-value
+description: Default [[Prototype]] value derived from realm of the newTarget
+info: |
+ 1. If NewTarget is neither undefined nor the active function, then
+ a. Return ? OrdinaryCreateFromConstructor(NewTarget, "%ObjectPrototype%").
+
+ 9.1.14 GetPrototypeFromConstructor
+
+ [...]
+ 3. Let proto be ? Get(constructor, "prototype").
+ 4. If Type(proto) is not Object, then
+ a. Let realm be ? GetFunctionRealm(constructor).
+ b. Let proto be realm's intrinsic object named intrinsicDefaultProto.
+ [...]
+features: [cross-realm, Reflect]
+---*/
+
+var other = $262.createRealm().global;
+var C = new other.Function();
+C.prototype = null;
+
+var o = Reflect.construct(Object, [], C);
+
+assert.sameValue(Object.getPrototypeOf(o), other.Object.prototype);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/15.2.3.1.js b/js/src/tests/test262/built-ins/Object/prototype/15.2.3.1.js
new file mode 100644
index 0000000000..0a1d1dfe67
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/15.2.3.1.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.1
+description: >
+ Object.prototype is a data property with default attribute values
+ (false)
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Object, 'prototype');
+
+assert.sameValue(desc.writable, false, 'desc.writable');
+assert.sameValue(desc.enumerable, false, 'desc.enumerable');
+assert.sameValue(desc.configurable, false, 'desc.configurable');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/S15.2.3.1_A1.js b/js/src/tests/test262/built-ins/Object/prototype/S15.2.3.1_A1.js
new file mode 100644
index 0000000000..df8799dce4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/S15.2.3.1_A1.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The Object.prototype property has the attribute ReadOnly
+es5id: 15.2.3.1_A1
+description: Checking if varying "Object.prototype" property fails
+includes: [propertyHelper.js]
+---*/
+
+var obj = Object.prototype;
+verifyNotWritable(Object, "prototype", null, function() {
+ return "shifted";
+});
+
+assert.sameValue(Object.prototype, obj, 'The value of Object.prototype is expected to equal the value of obj');
+
+try {
+ Object.prototype();
+ throw new Test262Error('#2: the Object.prototype property has the attributes ReadOnly');
+} catch (e) {
+ if (e instanceof Test262Error) {
+ throw e;
+ }
+}
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/S15.2.3.1_A2.js b/js/src/tests/test262/built-ins/Object/prototype/S15.2.3.1_A2.js
new file mode 100644
index 0000000000..44dbf8dd02
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/S15.2.3.1_A2.js
@@ -0,0 +1,26 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The Object.prototype property has the attribute DontEnum
+es5id: 15.2.3.1_A2
+description: Checking if enumerating "Object.prototype" property fails
+---*/
+assert(
+ !Object.propertyIsEnumerable('prototype'),
+ 'The value of !Object.propertyIsEnumerable("prototype") is expected to be true'
+);
+
+var cout = 0;
+
+for (var p in Object) {
+ if (p === "prototype") {
+ cout++;
+ }
+}
+
+assert.sameValue(cout, 0, 'The value of cout is expected to be 0');
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/S15.2.3.1_A3.js b/js/src/tests/test262/built-ins/Object/prototype/S15.2.3.1_A3.js
new file mode 100644
index 0000000000..a60160dcce
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/S15.2.3.1_A3.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.3.1_A3
+description: Checking if deleting "Object.prototype" property fails;
+includes: [propertyHelper.js]
+---*/
+
+verifyNotConfigurable(Object, "prototype");
+
+try {
+ assert.sameValue(delete Object.prototype, false, 'The value of `delete Object.prototype` is expected to be false');
+} catch (e) {
+ if (e instanceof Test262Error) {
+ throw e;
+ }
+ assert(e instanceof TypeError, 'The result of evaluating (e instanceof TypeError) is expected to be true');
+}
+
+if (!(Object.hasOwnProperty('prototype'))) {
+ throw new Test262Error('#2: the Object.prototype property has the attributes DontDelete.');
+}
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/S15.2.4_A1_T1.js b/js/src/tests/test262/built-ins/Object/prototype/S15.2.4_A1_T1.js
new file mode 100644
index 0000000000..4dc07aac2f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/S15.2.4_A1_T1.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Object prototype object has not prototype
+es5id: 15.2.4_A1_T1
+description: Checking if obtaining Object.prototype.prototype fails
+---*/
+assert.sameValue(
+ Object.prototype.prototype,
+ undefined,
+ 'The value of Object.prototype.prototype is expected to equal undefined'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/S15.2.4_A1_T2.js b/js/src/tests/test262/built-ins/Object/prototype/S15.2.4_A1_T2.js
new file mode 100644
index 0000000000..26fa71ae33
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/S15.2.4_A1_T2.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Object prototype object has not prototype
+es5id: 15.2.4_A1_T2
+description: >
+ Since the Object prototype object has not prototype, deleted
+ toString method can not be found in prototype chain
+---*/
+assert.notSameValue(Object.prototype.toString(), false, 'Object.prototype.toString() must return false');
+
+delete Object.prototype.toString;
+
+try {
+ Object.prototype.toString();
+ throw new Test262Error('#2: Object prototype object has not prototype');
+} catch (e) {
+ assert.sameValue(
+ e instanceof TypeError,
+ true,
+ 'The result of evaluating (e instanceof TypeError) is expected to be true'
+ );
+}
+//
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/S15.2.4_A2.js b/js/src/tests/test262/built-ins/Object/prototype/S15.2.4_A2.js
new file mode 100644
index 0000000000..52fd2735f7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/S15.2.4_A2.js
@@ -0,0 +1,18 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The value of the internal [[Class]] property of Object prototype object
+ is "Object"
+es5id: 15.2.4_A2
+description: >
+ Getting the value of the internal [[Class]] property with
+ Object.prototype.toString() function
+---*/
+
+var tostr = Object.prototype.toString();
+
+assert.sameValue(tostr, "[object Object]", 'The value of tostr is expected to be "[object Object]"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/S15.2.4_A3.js b/js/src/tests/test262/built-ins/Object/prototype/S15.2.4_A3.js
new file mode 100644
index 0000000000..06c9c56c45
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/S15.2.4_A3.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Since the Object prototype object is not a function, it has not [[call]]
+ method
+es5id: 15.2.4_A3
+description: Checking if calling Object prototype as a function fails
+---*/
+
+assert.throws(TypeError, function() {
+ Object.prototype();
+}, 'Object.prototype() throws a TypeError exception');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/S15.2.4_A4.js b/js/src/tests/test262/built-ins/Object/prototype/S15.2.4_A4.js
new file mode 100644
index 0000000000..4502a16478
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/S15.2.4_A4.js
@@ -0,0 +1,16 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Since the Object prototype object is not a function, it has not
+ [[create]] method
+es5id: 15.2.4_A4
+description: Checking if creating "new Object.prototype" fails
+---*/
+
+assert.throws(TypeError, function() {
+ new Object.prototype;
+}, '`new Object.prototype` throws a TypeError exception');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/browser.js b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/define-abrupt.js b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/define-abrupt.js
new file mode 100644
index 0000000000..b47387ea73
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/define-abrupt.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when [[DefineOwnProperty]] returns an abrupt completion
+info: |
+ [...]
+ 5. Perform ? DefinePropertyOrThrow(O, key, desc).
+features: [Proxy, __getter__]
+---*/
+
+var noop = function() {};
+var thrower = function() {
+ throw new Test262Error();
+};
+var subject = new Proxy({}, { defineProperty: thrower });
+
+assert.throws(Test262Error, function() {
+ subject.__defineGetter__('attr', noop);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/define-existing.js b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/define-existing.js
new file mode 100644
index 0000000000..d23ffa10fe
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/define-existing.js
@@ -0,0 +1,45 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when property exists and is configurable
+info: |
+ [...]
+ 3. Let desc be PropertyDescriptor{[[Get]]: getter, [[Enumerable]]: true,
+ [[Configurable]]: true}.
+ 4. Let key be ? ToPropertyKey(P).
+ 5. Perform ? DefinePropertyOrThrow(O, key, desc).
+ 6. Return undefined.
+includes: [propertyHelper.js]
+features: [__getter__]
+---*/
+
+var subject = {};
+var originalGet = function() {};
+var originalSet = function() {};
+var newGet = function() {};
+var desc, result;
+
+Object.defineProperty(subject, 'stringAcsr', {
+ get: originalGet,
+ set: originalSet,
+ enumerable: false,
+ configurable: true
+});
+
+result = subject.__defineGetter__('stringAcsr', newGet);
+
+desc = Object.getOwnPropertyDescriptor(subject, 'stringAcsr');
+
+verifyProperty(subject, "stringAcsr", {
+ enumerable: true,
+ configurable: true
+});
+
+assert.sameValue(desc.get, newGet, 'descriptor `get` method');
+assert.sameValue(desc.set, originalSet, 'descriptor `set` method');
+assert.sameValue(desc.value, undefined, 'descriptor `value` property');
+
+assert.sameValue(result, undefined, 'method return value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/define-new.js b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/define-new.js
new file mode 100644
index 0000000000..cdb4acc11e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/define-new.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when property does not exist
+info: |
+ [...]
+ 3. Let desc be PropertyDescriptor{[[Get]]: getter, [[Enumerable]]: true,
+ [[Configurable]]: true}.
+ 4. Let key be ? ToPropertyKey(P).
+ 5. Perform ? DefinePropertyOrThrow(O, key, desc).
+ 6. Return undefined.
+includes: [propertyHelper.js]
+features: [__getter__]
+---*/
+
+var subject = {};
+var get = function() {};
+var desc, result;
+
+result = subject.__defineGetter__('stringAcsr', get);
+
+desc = Object.getOwnPropertyDescriptor(subject, 'stringAcsr');
+
+verifyProperty(subject, "stringAcsr", {
+ enumerable: true,
+ configurable: true
+});
+
+assert.sameValue(desc.get, get, 'descriptor `get` method');
+assert.sameValue(desc.set, undefined, 'descriptor `set` method');
+assert.sameValue(desc.value, undefined, 'descriptor `value` property');
+
+assert.sameValue(result, undefined, 'method return value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/define-non-configurable.js b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/define-non-configurable.js
new file mode 100644
index 0000000000..fbb5e0e0a2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/define-non-configurable.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when property exists and is not configurable
+info: |
+ [...]
+ 5. Perform ? DefinePropertyOrThrow(O, key, desc).
+features: [__getter__]
+---*/
+
+var noop = function() {};
+var subject = Object.defineProperty(
+ {}, 'attr', { value: 1, configurable: false }
+);
+
+assert.sameValue(typeof Object.prototype.__defineGetter__, 'function');
+
+assert.throws(TypeError, function() {
+ subject.__defineGetter__('attr', noop);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/define-non-extensible.js b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/define-non-extensible.js
new file mode 100644
index 0000000000..5cb7cb6ce2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/define-non-extensible.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when "this" value is not extensible
+info: |
+ [...]
+ 5. Perform ? DefinePropertyOrThrow(O, key, desc).
+features: [__getter__]
+---*/
+
+var noop = function() {};
+var subject = Object.preventExtensions({ existing: null });
+
+subject.__defineGetter__('existing', noop);
+
+assert.throws(TypeError, function() {
+ subject.__defineGetter__('brand new', noop);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/getter-non-callable.js b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/getter-non-callable.js
new file mode 100644
index 0000000000..c157c16ab6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/getter-non-callable.js
@@ -0,0 +1,45 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when getter is not callable
+info: |
+ [...]
+ 2. If IsCallable(getter) is false, throw a TypeError exception.
+features: [Symbol, __getter__]
+---*/
+
+var subject = {};
+var symbol = Symbol('');
+var toStringCount = 0;
+var key = {
+ toString: function() {
+ toStringCount += 1;
+ }
+};
+
+assert.sameValue(typeof Object.prototype.__defineGetter__, 'function');
+
+assert.throws(TypeError, function() {
+ subject.__defineGetter__(key, '');
+}, 'string');
+
+assert.throws(TypeError, function() {
+ subject.__defineGetter__(key, 23);
+}, 'number');
+
+assert.throws(TypeError, function() {
+ subject.__defineGetter__(key, true);
+}, 'boolean');
+
+assert.throws(TypeError, function() {
+ subject.__defineGetter__(key, symbol);
+}, 'symbol');
+
+assert.throws(TypeError, function() {
+ subject.__defineGetter__(key, {});
+}, 'object');
+
+assert.sameValue(toStringCount, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/key-invalid.js b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/key-invalid.js
new file mode 100644
index 0000000000..7f33e87995
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/key-invalid.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when property key cannot be derived
+info: |
+ [...]
+ 4. Let key be ? ToPropertyKey(P).
+features: [__getter__]
+---*/
+
+var noop = function() {};
+var subject = {};
+var key = {
+ toString: function() {
+ throw new Test262Error();
+ }
+};
+
+assert.throws(Test262Error, function() {
+ subject.__defineGetter__(key, noop);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/length.js b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/length.js
new file mode 100644
index 0000000000..ef93522cfd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/length.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Object.prototype.__defineGetter__ `length` property
+info: |
+ ES6 Section 17:
+ Every built-in Function object, including constructors, has a length
+ property whose value is an integer. Unless otherwise specified, this value
+ is equal to the largest number of named arguments shown in the subclause
+ headings for the function description, including optional parameters.
+
+ [...]
+
+ Unless otherwise specified, the length property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [__getter__]
+---*/
+
+verifyProperty(Object.prototype.__defineGetter__, "length", {
+ enumerable: false,
+ writable: false,
+ configurable: true,
+ value: 2
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/name.js b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/name.js
new file mode 100644
index 0000000000..555dd53a28
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/name.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Object.prototype.__defineGetter__ `name` property
+info: |
+ ES6 Section 17:
+
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value is a
+ String. Unless otherwise specified, this value is the name that is given to
+ the function in this specification.
+
+ [...]
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [__getter__]
+---*/
+
+verifyProperty(Object.prototype.__defineGetter__, "name", {
+ enumerable: false,
+ writable: false,
+ configurable: true,
+ value: "__defineGetter__"
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/prop-desc.js b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/prop-desc.js
new file mode 100644
index 0000000000..0d383509df
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/prop-desc.js
@@ -0,0 +1,20 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Property descriptor for Object.prototype.__defineGetter__
+info: |
+ Every other data property described in clauses 18 through 26 and in Annex
+ B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
+ [[Configurable]]: true } unless otherwise specified.
+includes: [propertyHelper.js]
+features: [__getter__]
+---*/
+
+verifyProperty(Object.prototype, "__defineGetter__", {
+ enumerable: false,
+ writable: true,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/shell.js b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/this-non-obj.js b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/this-non-obj.js
new file mode 100644
index 0000000000..1629696292
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineGetter__/this-non-obj.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when "this" value is not Object-coercible
+info: |
+ 1. Let O be ? ToObject(this value).
+features: [__getter__]
+---*/
+
+var __defineGetter__ = Object.prototype.__defineGetter__;
+var noop = function() {};
+var toStringCount = 0;
+var key = {
+ toString: function() {
+ toStringCount += 1;
+ }
+};
+
+assert.sameValue(typeof __defineGetter__, 'function');
+
+assert.throws(TypeError, function() {
+ __defineGetter__.call(undefined, key, noop);
+}, 'undefined');
+
+assert.throws(TypeError, function() {
+ __defineGetter__.call(null, key, noop);
+}, 'null');
+
+assert.sameValue(toStringCount, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/browser.js b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/define-abrupt.js b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/define-abrupt.js
new file mode 100644
index 0000000000..ed523997bc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/define-abrupt.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when [[DefineOwnProperty]] returns an abrupt completion
+info: |
+ [...]
+ 5. Perform ? DefinePropertyOrThrow(O, key, desc).
+features: [Proxy, __setter__]
+---*/
+
+var noop = function() {};
+var thrower = function() {
+ throw new Test262Error();
+};
+var subject = new Proxy({}, { defineProperty: thrower });
+
+assert.throws(Test262Error, function() {
+ subject.__defineSetter__('attr', noop);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/define-existing.js b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/define-existing.js
new file mode 100644
index 0000000000..f41f9c2bfa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/define-existing.js
@@ -0,0 +1,45 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when property exists and is configurable
+info: |
+ [...]
+ 3. Let desc be PropertyDescriptor{[[Set]]: setter, [[Enumerable]]: true,
+ [[Configurable]]: true}.
+ 4. Let key be ? ToPropertyKey(P).
+ 5. Perform ? DefinePropertyOrThrow(O, key, desc).
+ 6. Return undefined.
+includes: [propertyHelper.js]
+features: [__setter__]
+---*/
+
+var subject = {};
+var originalGet = function() {};
+var originalSet = function() {};
+var newSet = function() {};
+var desc, result;
+
+Object.defineProperty(subject, 'stringAcsr', {
+ get: originalGet,
+ set: originalSet,
+ enumerable: false,
+ configurable: true
+});
+
+result = subject.__defineSetter__('stringAcsr', newSet);
+
+desc = Object.getOwnPropertyDescriptor(subject, 'stringAcsr');
+
+verifyProperty(subject, "stringAcsr", {
+ enumerable: true,
+ configurable: true
+});
+
+assert.sameValue(desc.get, originalGet, 'descriptor `get` method');
+assert.sameValue(desc.set, newSet, 'descriptor `set` method');
+assert.sameValue(desc.value, undefined, 'descriptor `value` property');
+
+assert.sameValue(result, undefined, 'method return value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/define-new.js b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/define-new.js
new file mode 100644
index 0000000000..035f3208e6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/define-new.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when property does not exist
+info: |
+ [...]
+ 3. Let desc be PropertyDescriptor{[[Set]]: setter, [[Enumerable]]: true,
+ [[Configurable]]: true}.
+ 4. Let key be ? ToPropertyKey(P).
+ 5. Perform ? DefinePropertyOrThrow(O, key, desc).
+ 6. Return undefined.
+includes: [propertyHelper.js]
+features: [__setter__]
+---*/
+
+var subject = {};
+var set = function() {};
+var desc, result;
+
+result = subject.__defineSetter__('stringAcsr', set);
+
+desc = Object.getOwnPropertyDescriptor(subject, 'stringAcsr');
+
+verifyProperty(subject, "stringAcsr", {
+ enumerable: true,
+ configurable: true,
+});
+
+assert.sameValue(desc.get, undefined, 'descriptor `get` method');
+assert.sameValue(desc.set, set, 'descriptor `set` method');
+assert.sameValue(desc.value, undefined, 'descriptor `value` property');
+
+assert.sameValue(result, undefined, 'method return value');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/define-non-configurable.js b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/define-non-configurable.js
new file mode 100644
index 0000000000..6bd6826a9e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/define-non-configurable.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when property exists and is not configurable
+info: |
+ [...]
+ 5. Perform ? DefinePropertyOrThrow(O, key, desc).
+features: [__setter__]
+---*/
+
+var noop = function() {};
+var subject = Object.defineProperty(
+ {}, 'attr', { value: 1, configurable: false }
+);
+
+assert.sameValue(typeof Object.prototype.__defineSetter__, 'function');
+
+assert.throws(TypeError, function() {
+ subject.__defineSetter__('attr', noop);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/define-non-extensible.js b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/define-non-extensible.js
new file mode 100644
index 0000000000..ef09e90c8c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/define-non-extensible.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when "this" value is not extensible
+info: |
+ [...]
+ 5. Perform ? DefinePropertyOrThrow(O, key, desc).
+features: [__setter__]
+---*/
+
+var noop = function() {};
+var subject = Object.preventExtensions({ existing: null });
+
+subject.__defineSetter__('existing', noop);
+
+assert.throws(TypeError, function() {
+ subject.__defineSetter__('brand new', noop);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/key-invalid.js b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/key-invalid.js
new file mode 100644
index 0000000000..2653006fb5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/key-invalid.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when property key cannot be derived
+info: |
+ [...]
+ 4. Let key be ? ToPropertyKey(P).
+features: [__setter__]
+---*/
+
+var noop = function() {};
+var subject = {};
+var key = {
+ toString: function() {
+ throw new Test262Error();
+ }
+};
+
+assert.throws(Test262Error, function() {
+ subject.__defineSetter__(key, noop);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/length.js b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/length.js
new file mode 100644
index 0000000000..64a7e49f81
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/length.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Object.prototype.__defineSetter__ `length` property
+info: |
+ ES6 Section 17:
+ Every built-in Function object, including constructors, has a length
+ property whose value is an integer. Unless otherwise specified, this value
+ is equal to the largest number of named arguments shown in the subclause
+ headings for the function description, including optional parameters.
+
+ [...]
+
+ Unless otherwise specified, the length property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [__setter__]
+---*/
+
+verifyProperty(Object.prototype.__defineSetter__, "length", {
+ enumerable: false,
+ writable: false,
+ configurable: true,
+ value: 2
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/name.js b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/name.js
new file mode 100644
index 0000000000..9c42abfcc8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/name.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Object.prototype.__defineSetter__ `name` property
+info: |
+ ES6 Section 17:
+
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value is a
+ String. Unless otherwise specified, this value is the name that is given to
+ the function in this specification.
+
+ [...]
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [__setter__]
+---*/
+
+verifyProperty(Object.prototype.__defineSetter__, "name", {
+ enumerable: false,
+ writable: false,
+ configurable: true,
+ value: "__defineSetter__"
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/prop-desc.js b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/prop-desc.js
new file mode 100644
index 0000000000..dc80e690f6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/prop-desc.js
@@ -0,0 +1,20 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Property descriptor for Object.prototype.__defineSetter__
+info: |
+ Every other data property described in clauses 18 through 26 and in Annex
+ B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
+ [[Configurable]]: true } unless otherwise specified.
+includes: [propertyHelper.js]
+features: [__setter__]
+---*/
+
+verifyProperty(Object.prototype, "__defineSetter__", {
+ enumerable: false,
+ writable: true,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/setter-non-callable.js b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/setter-non-callable.js
new file mode 100644
index 0000000000..e22a45f967
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/setter-non-callable.js
@@ -0,0 +1,45 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when getter is not callable
+info: |
+ [...]
+ 2. If IsCallable(setter) is false, throw a TypeError exception.
+features: [Symbol, __setter__]
+---*/
+
+var subject = {};
+var symbol = Symbol('');
+var toStringCount = 0;
+var key = {
+ toString: function() {
+ toStringCount += 1;
+ }
+};
+
+assert.sameValue(typeof Object.prototype.__defineSetter__, 'function');
+
+assert.throws(TypeError, function() {
+ subject.__defineSetter__(key, '');
+}, 'string');
+
+assert.throws(TypeError, function() {
+ subject.__defineSetter__(key, 23);
+}, 'number');
+
+assert.throws(TypeError, function() {
+ subject.__defineSetter__(key, true);
+}, 'boolean');
+
+assert.throws(TypeError, function() {
+ subject.__defineSetter__(key, symbol);
+}, 'symbol');
+
+assert.throws(TypeError, function() {
+ subject.__defineSetter__(key, {});
+}, 'object');
+
+assert.sameValue(toStringCount, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/shell.js b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/this-non-obj.js b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/this-non-obj.js
new file mode 100644
index 0000000000..abd335733f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__defineSetter__/this-non-obj.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when "this" value is not Object-coercible
+info: |
+ 1. Let O be ? ToObject(this value).
+features: [__setter__]
+---*/
+
+var __defineSetter__ = Object.prototype.__defineSetter__;
+var noop = function() {};
+var toStringCount = 0;
+var key = {
+ toString: function() {
+ toStringCount += 1;
+ }
+};
+
+assert.sameValue(typeof __defineSetter__, 'function');
+
+assert.throws(TypeError, function() {
+ __defineSetter__.call(undefined, key, noop);
+}, 'undefined');
+
+assert.throws(TypeError, function() {
+ __defineSetter__.call(null, key, noop);
+}, 'null');
+
+assert.sameValue(toStringCount, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/browser.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/key-invalid.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/key-invalid.js
new file mode 100644
index 0000000000..360068ff3d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/key-invalid.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when property key cannot be derived
+info: |
+ [...]
+ 2. Let key be ? ToPropertyKey(P).
+features: [__getter__]
+---*/
+
+var subject = {};
+var key = {
+ toString: function() {
+ throw new Test262Error();
+ }
+};
+
+assert.throws(Test262Error, function() {
+ subject.__lookupGetter__(key);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/length.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/length.js
new file mode 100644
index 0000000000..938755546f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/length.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Object.prototype.__lookupGetter__ `length` property
+info: |
+ ES6 Section 17:
+ Every built-in Function object, including constructors, has a length
+ property whose value is an integer. Unless otherwise specified, this value
+ is equal to the largest number of named arguments shown in the subclause
+ headings for the function description, including optional parameters.
+
+ [...]
+
+ Unless otherwise specified, the length property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [__getter__]
+---*/
+
+verifyProperty(Object.prototype.__lookupGetter__, "length", {
+ enumerable: false,
+ writable: false,
+ configurable: true,
+ value: 1
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-not-found.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-not-found.js
new file mode 100644
index 0000000000..02e846487c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-not-found.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when property does not exist in prototype chain
+info: |
+ [...]
+ 4. Repeat
+ a. Let desc be ? O.[[GetOwnProperty]](key).
+ b. If desc is not undefined, then
+ i. If IsAccessorDescriptor(desc) is true, return desc.[[Get]].
+ ii. Return undefined.
+ c. Let O be ? O.[[GetPrototypeOf]]().
+ d. If O is null, return undefined.
+features: [__getter__]
+---*/
+
+var root = {};
+var intermediary = Object.create(root);
+var subject = Object.create(intermediary);
+
+assert.sameValue(subject.__lookupGetter__('target'), undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-own-acsr-w-getter.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-own-acsr-w-getter.js
new file mode 100644
index 0000000000..40447c8eb6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-own-acsr-w-getter.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: >
+ Behavior when "this" value defines a like-named accessor property with a
+ `get` method
+info: |
+ [...]
+ 4. Repeat
+ a. Let desc be ? O.[[GetOwnProperty]](key).
+ b. If desc is not undefined, then
+ i. If IsAccessorDescriptor(desc) is true, return desc.[[Get]].
+ ii. Return undefined.
+ c. Let O be ? O.[[GetPrototypeOf]]().
+ d. If O is null, return undefined.
+features: [__getter__]
+---*/
+
+var root = Object.defineProperty({}, 'target', { get: function() {} });
+var desc = { get: function() {} };
+var subject = Object.create(root, { target: desc });
+
+assert.sameValue(subject.__lookupGetter__('target'), desc.get);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-own-acsr-wo-getter.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-own-acsr-wo-getter.js
new file mode 100644
index 0000000000..2fd7f0a9ad
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-own-acsr-wo-getter.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: >
+ Behavior when "this" value defines a like-named accessor property without a
+ `get` method
+info: |
+ [...]
+ 4. Repeat
+ a. Let desc be ? O.[[GetOwnProperty]](key).
+ b. If desc is not undefined, then
+ i. If IsAccessorDescriptor(desc) is true, return desc.[[Get]].
+ ii. Return undefined.
+ c. Let O be ? O.[[GetPrototypeOf]]().
+ d. If O is null, return undefined.
+features: [__getter__]
+---*/
+
+var root = Object.defineProperty({}, 'target', { get: function() {} });
+var desc = { set: function() {} };
+var subject = Object.create(root, { target: desc });
+
+assert.sameValue(subject.__lookupGetter__('target'), undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-own-data.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-own-data.js
new file mode 100644
index 0000000000..9a5f7e56d4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-own-data.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when "this" value defines a like-named data property
+info: |
+ [...]
+ 4. Repeat
+ a. Let desc be ? O.[[GetOwnProperty]](key).
+ b. If desc is not undefined, then
+ i. If IsAccessorDescriptor(desc) is true, return desc.[[Get]].
+ ii. Return undefined.
+ c. Let O be ? O.[[GetPrototypeOf]]().
+ d. If O is null, return undefined.
+features: [__getter__]
+---*/
+
+var root = Object.defineProperty({}, 'target', { get: function() {} });
+var desc = { value: null };
+var subject = Object.create(root, { target: desc });
+
+assert.sameValue(subject.__lookupGetter__('target'), undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-own-get-err.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-own-get-err.js
new file mode 100644
index 0000000000..ffbc02b828
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-own-get-err.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: >
+ Behavior when [[GetOwnProperty]] of "this" value returns an abrupt
+ completion
+info: |
+ [...]
+ 4. Repeat
+ a. Let desc be ? O.[[GetOwnProperty]](key).
+ b. If desc is not undefined, then
+ i. If IsAccessorDescriptor(desc) is true, return desc.[[Get]].
+ ii. Return undefined.
+ c. Let O be ? O.[[GetPrototypeOf]]().
+ d. If O is null, return undefined.
+features: [Proxy, __getter__]
+---*/
+
+var root = Object.defineProperty({}, 'target', { get: function() {} });
+var thrower = function() { throw new Test262Error(); };
+var subject = new Proxy(root, { getOwnPropertyDescriptor: thrower });
+
+assert.throws(Test262Error, function() {
+ subject.__lookupGetter__('target');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-own-proto-err.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-own-proto-err.js
new file mode 100644
index 0000000000..3c775afa43
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-own-proto-err.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: >
+ Behavior when [[GetPrototypeOf]] of "this" value returns an abrupt
+ completion
+info: |
+ [...]
+ 4. Repeat
+ a. Let desc be ? O.[[GetOwnProperty]](key).
+ b. If desc is not undefined, then
+ i. If IsAccessorDescriptor(desc) is true, return desc.[[Get]].
+ ii. Return undefined.
+ c. Let O be ? O.[[GetPrototypeOf]]().
+ d. If O is null, return undefined.
+features: [Proxy, __getter__]
+---*/
+
+var root = Object.defineProperty({}, 'target', { get: function() {} });
+var thrower = function() { throw new Test262Error(); };
+var subject = new Proxy(Object.create(root), { getPrototypeOf: thrower });
+
+assert.throws(Test262Error, function() {
+ subject.__lookupGetter__('target');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-proto-acsr-w-getter.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-proto-acsr-w-getter.js
new file mode 100644
index 0000000000..f5f27ec71c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-proto-acsr-w-getter.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: >
+ Behavior when prototype defines a like-named accessor property with a `get`
+ method
+info: |
+ [...]
+ 4. Repeat
+ a. Let desc be ? O.[[GetOwnProperty]](key).
+ b. If desc is not undefined, then
+ i. If IsAccessorDescriptor(desc) is true, return desc.[[Get]].
+ ii. Return undefined.
+ c. Let O be ? O.[[GetPrototypeOf]]().
+ d. If O is null, return undefined.
+features: [__getter__]
+---*/
+
+var root = Object.defineProperty({}, 'target', { get: function() {} });
+var desc = { get: function() {} };
+var intermediary = Object.create(root, { target: desc });
+var subject = Object.create(intermediary);
+
+assert.sameValue(subject.__lookupGetter__('target'), desc.get);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-proto-acsr-wo-getter.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-proto-acsr-wo-getter.js
new file mode 100644
index 0000000000..cf02372470
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-proto-acsr-wo-getter.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: >
+ Behavior when prototype defines a like-named accessor property without a
+ `get` method
+info: |
+ [...]
+ 4. Repeat
+ a. Let desc be ? O.[[GetOwnProperty]](key).
+ b. If desc is not undefined, then
+ i. If IsAccessorDescriptor(desc) is true, return desc.[[Get]].
+ ii. Return undefined.
+ c. Let O be ? O.[[GetPrototypeOf]]().
+ d. If O is null, return undefined.
+features: [__getter__]
+---*/
+
+var root = Object.defineProperty({}, 'target', { get: function() {} });
+var desc = { set: function() {} };
+var intermediary = Object.create(root, { target: desc });
+var subject = Object.create(intermediary);
+
+assert.sameValue(subject.__lookupGetter__('target'), undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-proto-data.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-proto-data.js
new file mode 100644
index 0000000000..873c1b1d3c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-proto-data.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when prototype defines a like-named data property
+info: |
+ [...]
+ 4. Repeat
+ a. Let desc be ? O.[[GetOwnProperty]](key).
+ b. If desc is not undefined, then
+ i. If IsAccessorDescriptor(desc) is true, return desc.[[Get]].
+ ii. Return undefined.
+ c. Let O be ? O.[[GetPrototypeOf]]().
+ d. If O is null, return undefined.
+features: [__getter__]
+---*/
+
+var root = Object.defineProperty({}, 'target', { get: function() {} });
+var desc = { value: null };
+var intermediary = Object.create(root, { target: desc });
+var subject = Object.create(intermediary);
+
+assert.sameValue(subject.__lookupGetter__('target'), undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-proto-get-err.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-proto-get-err.js
new file mode 100644
index 0000000000..7609eb606d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-proto-get-err.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: >
+ Behavior when [[GetOwnProperty]] of prototype returns an abrupt completion
+info: |
+ [...]
+ 4. Repeat
+ a. Let desc be ? O.[[GetOwnProperty]](key).
+ b. If desc is not undefined, then
+ i. If IsAccessorDescriptor(desc) is true, return desc.[[Get]].
+ ii. Return undefined.
+ c. Let O be ? O.[[GetPrototypeOf]]().
+ d. If O is null, return undefined.
+features: [Proxy, __getter__]
+---*/
+
+var root = Object.defineProperty({}, 'target', { get: function() {} });
+var thrower = function() { throw new Test262Error(); };
+var intermediary = new Proxy(
+ Object.create(root), { getOwnPropertyDescriptor: thrower }
+);
+var subject = Object.create(intermediary);
+
+assert.throws(Test262Error, function() {
+ subject.__lookupGetter__('target');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-proto-proto-err.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-proto-proto-err.js
new file mode 100644
index 0000000000..750a654ae7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/lookup-proto-proto-err.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: >
+ Behavior when [[GetPrototypeOf]] of prototype returns an abrupt completion
+info: |
+ [...]
+ 4. Repeat
+ a. Let desc be ? O.[[GetOwnProperty]](key).
+ b. If desc is not undefined, then
+ i. If IsAccessorDescriptor(desc) is true, return desc.[[Get]].
+ ii. Return undefined.
+ c. Let O be ? O.[[GetPrototypeOf]]().
+ d. If O is null, return undefined.
+features: [Proxy, __getter__]
+---*/
+
+var root = Object.defineProperty({}, 'target', { get: function() {} });
+var thrower = function() { throw new Test262Error(); };
+var intermediary = new Proxy(Object.create(root), { getPrototypeOf: thrower });
+var subject = Object.create(intermediary);
+
+assert.throws(Test262Error, function() {
+ subject.__lookupGetter__('target');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/name.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/name.js
new file mode 100644
index 0000000000..5b78f42e5b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/name.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Object.prototype.__lookupGetter__ `name` property
+info: |
+ ES6 Section 17:
+
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value is a
+ String. Unless otherwise specified, this value is the name that is given to
+ the function in this specification.
+
+ [...]
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [__getter__]
+---*/
+
+verifyProperty(Object.prototype.__lookupGetter__, "name", {
+ enumerable: false,
+ writable: false,
+ configurable: true,
+ value: "__lookupGetter__"
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/prop-desc.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/prop-desc.js
new file mode 100644
index 0000000000..77f1c8fded
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/prop-desc.js
@@ -0,0 +1,20 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Property descriptor for Object.prototype.__lookupGetter__
+info: |
+ Every other data property described in clauses 18 through 26 and in Annex
+ B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
+ [[Configurable]]: true } unless otherwise specified.
+includes: [propertyHelper.js]
+features: [__getter__]
+---*/
+
+verifyProperty(Object.prototype, "__lookupGetter__", {
+ enumerable: false,
+ writable: true,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/shell.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/this-non-obj.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/this-non-obj.js
new file mode 100644
index 0000000000..06c903e4ac
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupGetter__/this-non-obj.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when "this" value is not Object-coercible
+info: |
+ 1. Let O be ? ToObject(this value).
+features: [__getter__]
+---*/
+
+var __lookupGetter__ = Object.prototype.__lookupGetter__;
+var toStringCount = 0;
+var key = {
+ toString: function() {
+ toStringCount += 1;
+ }
+};
+
+assert.sameValue(typeof __lookupGetter__, 'function');
+
+assert.throws(TypeError, function() {
+ __lookupGetter__.call(undefined, key);
+}, 'undefined');
+
+assert.throws(TypeError, function() {
+ __lookupGetter__.call(null, key);
+}, 'null');
+
+assert.sameValue(toStringCount, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/browser.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/key-invalid.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/key-invalid.js
new file mode 100644
index 0000000000..856e936cf9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/key-invalid.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when property key cannot be derived
+info: |
+ [...]
+ 2. Let key be ? ToPropertyKey(P).
+features: [__setter__]
+---*/
+
+var subject = {};
+var key = {
+ toString: function() {
+ throw new Test262Error();
+ }
+};
+
+assert.throws(Test262Error, function() {
+ subject.__lookupSetter__(key);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/length.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/length.js
new file mode 100644
index 0000000000..c38ba625ed
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/length.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Object.prototype.__lookupSetter__ `length` property
+info: |
+ ES6 Section 17:
+ Every built-in Function object, including constructors, has a length
+ property whose value is an integer. Unless otherwise specified, this value
+ is equal to the largest number of named arguments shown in the subclause
+ headings for the function description, including optional parameters.
+
+ [...]
+
+ Unless otherwise specified, the length property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [__setter__]
+---*/
+
+verifyProperty(Object.prototype.__lookupSetter__, "length", {
+ enumerable: false,
+ writable: false,
+ configurable: true,
+ value: 1
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-not-found.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-not-found.js
new file mode 100644
index 0000000000..06c90705ff
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-not-found.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when property does not exist in prototype chain
+info: |
+ [...]
+ 4. Repeat
+ a. Let desc be ? O.[[GetOwnProperty]](key).
+ b. If desc is not undefined, then
+ i. If IsAccessorDescriptor(desc) is true, return desc.[[Get]].
+ ii. Return undefined.
+ c. Let O be ? O.[[GetPrototypeOf]]().
+ d. If O is null, return undefined.
+features: [__setter__]
+---*/
+
+var root = {};
+var intermediary = Object.create(root);
+var subject = Object.create(intermediary);
+
+assert.sameValue(subject.__lookupSetter__('target'), undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-own-acsr-w-setter.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-own-acsr-w-setter.js
new file mode 100644
index 0000000000..a4bb617008
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-own-acsr-w-setter.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: >
+ Behavior when "this" value defines a like-named accessor property with a
+ `set` method
+info: |
+ [...]
+ 4. Repeat
+ a. Let desc be ? O.[[GetOwnProperty]](key).
+ b. If desc is not undefined, then
+ i. If IsAccessorDescriptor(desc) is true, return desc.[[Set]].
+ ii. Return undefined.
+ c. Let O be ? O.[[GetPrototypeOf]]().
+ d. If O is null, return undefined.
+features: [__setter__]
+---*/
+
+var root = Object.defineProperty({}, 'target', { set: function() {} });
+var desc = { set: function() {} };
+var subject = Object.create(root, { target: desc });
+
+assert.sameValue(subject.__lookupSetter__('target'), desc.set);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-own-acsr-wo-setter.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-own-acsr-wo-setter.js
new file mode 100644
index 0000000000..68f29f8d40
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-own-acsr-wo-setter.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: >
+ Behavior when "this" value defines a like-named accessor property without a
+ `set` method
+info: |
+ [...]
+ 4. Repeat
+ a. Let desc be ? O.[[GetOwnProperty]](key).
+ b. If desc is not undefined, then
+ i. If IsAccessorDescriptor(desc) is true, return desc.[[Set]].
+ ii. Return undefined.
+ c. Let O be ? O.[[GetPrototypeOf]]().
+ d. If O is null, return undefined.
+features: [__setter__]
+---*/
+
+var root = Object.defineProperty({}, 'target', { set: function() {} });
+var desc = { get: function() {} };
+var subject = Object.create(root, { target: desc });
+
+assert.sameValue(subject.__lookupSetter__('target'), undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-own-data.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-own-data.js
new file mode 100644
index 0000000000..a1a4481bc1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-own-data.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when "this" value defines a like-named data property
+info: |
+ [...]
+ 4. Repeat
+ a. Let desc be ? O.[[GetOwnProperty]](key).
+ b. If desc is not undefined, then
+ i. If IsAccessorDescriptor(desc) is true, return desc.[[Get]].
+ ii. Return undefined.
+ c. Let O be ? O.[[GetPrototypeOf]]().
+ d. If O is null, return undefined.
+features: [__setter__]
+---*/
+
+var root = Object.defineProperty({}, 'target', { set: function() {} });
+var desc = { value: null };
+var subject = Object.create(root, { target: desc });
+
+assert.sameValue(subject.__lookupSetter__('target'), undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-own-get-err.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-own-get-err.js
new file mode 100644
index 0000000000..81a5f78d73
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-own-get-err.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: >
+ Behavior when [[GetOwnProperty]] of "this" value returns an abrupt
+ completion
+info: |
+ [...]
+ 4. Repeat
+ a. Let desc be ? O.[[GetOwnProperty]](key).
+ b. If desc is not undefined, then
+ i. If IsAccessorDescriptor(desc) is true, return desc.[[Set]].
+ ii. Return undefined.
+ c. Let O be ? O.[[GetPrototypeOf]]().
+ d. If O is null, return undefined.
+features: [Proxy, __setter__]
+---*/
+
+var root = Object.defineProperty({}, 'target', { set: function() {} });
+var thrower = function() { throw new Test262Error(); };
+var subject = new Proxy(root, { getOwnPropertyDescriptor: thrower });
+
+assert.throws(Test262Error, function() {
+ subject.__lookupSetter__('target');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-own-proto-err.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-own-proto-err.js
new file mode 100644
index 0000000000..7f1879b353
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-own-proto-err.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: >
+ Behavior when [[GetPrototypeOf]] of "this" value returns an abrupt
+ completion
+info: |
+ [...]
+ 4. Repeat
+ a. Let desc be ? O.[[GetOwnProperty]](key).
+ b. If desc is not undefined, then
+ i. If IsAccessorDescriptor(desc) is true, return desc.[[Get]].
+ ii. Return undefined.
+ c. Let O be ? O.[[GetPrototypeOf]]().
+ d. If O is null, return undefined.
+features: [Proxy, __setter__]
+---*/
+
+var root = Object.defineProperty({}, 'target', { set: function() {} });
+var thrower = function() { throw new Test262Error(); };
+var subject = new Proxy(Object.create(root), { getPrototypeOf: thrower });
+
+assert.throws(Test262Error, function() {
+ subject.__lookupSetter__('target');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-proto-acsr-w-setter.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-proto-acsr-w-setter.js
new file mode 100644
index 0000000000..abd8ea3f5f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-proto-acsr-w-setter.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: >
+ Behavior when prototype defines a like-named accessor property with a `get`
+ method
+info: |
+ [...]
+ 4. Repeat
+ a. Let desc be ? O.[[GetOwnProperty]](key).
+ b. If desc is not undefined, then
+ i. If IsAccessorDescriptor(desc) is true, return desc.[[Set]].
+ ii. Return undefined.
+ c. Let O be ? O.[[GetPrototypeOf]]().
+ d. If O is null, return undefined.
+features: [__setter__]
+---*/
+
+var root = Object.defineProperty({}, 'target', { set: function() {} });
+var desc = { set: function() {} };
+var intermediary = Object.create(root, { target: desc });
+var subject = Object.create(intermediary);
+
+assert.sameValue(subject.__lookupSetter__('target'), desc.set);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-proto-acsr-wo-setter.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-proto-acsr-wo-setter.js
new file mode 100644
index 0000000000..d6d05afd33
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-proto-acsr-wo-setter.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: >
+ Behavior when prototype defines a like-named accessor property without a
+ `get` method
+info: |
+ [...]
+ 4. Repeat
+ a. Let desc be ? O.[[GetOwnProperty]](key).
+ b. If desc is not undefined, then
+ i. If IsAccessorDescriptor(desc) is true, return desc.[[Set]].
+ ii. Return undefined.
+ c. Let O be ? O.[[GetPrototypeOf]]().
+ d. If O is null, return undefined.
+features: [__setter__]
+---*/
+
+var root = Object.defineProperty({}, 'target', { set: function() {} });
+var desc = { get: function() {} };
+var intermediary = Object.create(root, { target: desc });
+var subject = Object.create(intermediary);
+
+assert.sameValue(subject.__lookupSetter__('target'), undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-proto-data.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-proto-data.js
new file mode 100644
index 0000000000..fa17c63e00
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-proto-data.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when prototype defines a like-named data property
+info: |
+ [...]
+ 4. Repeat
+ a. Let desc be ? O.[[GetOwnProperty]](key).
+ b. If desc is not undefined, then
+ i. If IsAccessorDescriptor(desc) is true, return desc.[[Get]].
+ ii. Return undefined.
+ c. Let O be ? O.[[GetPrototypeOf]]().
+ d. If O is null, return undefined.
+features: [__setter__]
+---*/
+
+var root = Object.defineProperty({}, 'target', { set: function() {} });
+var desc = { value: null };
+var intermediary = Object.create(root, { target: desc });
+var subject = Object.create(intermediary);
+
+assert.sameValue(subject.__lookupSetter__('target'), undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-proto-get-err.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-proto-get-err.js
new file mode 100644
index 0000000000..d459172e90
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-proto-get-err.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: >
+ Behavior when [[GetOwnProperty]] of prototype returns an abrupt completion
+info: |
+ [...]
+ 4. Repeat
+ a. Let desc be ? O.[[GetOwnProperty]](key).
+ b. If desc is not undefined, then
+ i. If IsAccessorDescriptor(desc) is true, return desc.[[Set]].
+ ii. Return undefined.
+ c. Let O be ? O.[[GetPrototypeOf]]().
+ d. If O is null, return undefined.
+features: [Proxy, __setter__]
+---*/
+
+var root = Object.defineProperty({}, 'target', { set: function() {} });
+var thrower = function() { throw new Test262Error(); };
+var intermediary = new Proxy(
+ Object.create(root), { getOwnPropertyDescriptor: thrower }
+);
+var subject = Object.create(intermediary);
+
+assert.throws(Test262Error, function() {
+ subject.__lookupSetter__('target');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-proto-proto-err.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-proto-proto-err.js
new file mode 100644
index 0000000000..3a1ff7a55c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/lookup-proto-proto-err.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: >
+ Behavior when [[GetPrototypeOf]] of prototype returns an abrupt completion
+info: |
+ [...]
+ 4. Repeat
+ a. Let desc be ? O.[[GetOwnProperty]](key).
+ b. If desc is not undefined, then
+ i. If IsAccessorDescriptor(desc) is true, return desc.[[Set]].
+ ii. Return undefined.
+ c. Let O be ? O.[[GetPrototypeOf]]().
+ d. If O is null, return undefined.
+features: [Proxy, __setter__]
+---*/
+
+var root = Object.defineProperty({}, 'target', { set: function() {} });
+var thrower = function() { throw new Test262Error(); };
+var intermediary = new Proxy(Object.create(root), { getPrototypeOf: thrower });
+var subject = Object.create(intermediary);
+
+assert.throws(Test262Error, function() {
+ subject.__lookupSetter__('target');
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/name.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/name.js
new file mode 100644
index 0000000000..37474fadb5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/name.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Object.prototype.__lookupSetter__ `name` property
+info: |
+ ES6 Section 17:
+
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value is a
+ String. Unless otherwise specified, this value is the name that is given to
+ the function in this specification.
+
+ [...]
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+features: [__setter__]
+---*/
+
+verifyProperty(Object.prototype.__lookupSetter__, "name", {
+ enumerable: false,
+ writable: false,
+ configurable: true,
+ value: "__lookupSetter__"
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/prop-desc.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/prop-desc.js
new file mode 100644
index 0000000000..ced38ae59a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/prop-desc.js
@@ -0,0 +1,20 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Property descriptor for Object.prototype.__lookupSetter__
+info: |
+ Every other data property described in clauses 18 through 26 and in Annex
+ B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
+ [[Configurable]]: true } unless otherwise specified.
+includes: [propertyHelper.js]
+features: [__setter__]
+---*/
+
+verifyProperty(Object.prototype, "__lookupSetter__", {
+ enumerable: false,
+ writable: true,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/shell.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/this-non-obj.js b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/this-non-obj.js
new file mode 100644
index 0000000000..e49db40fd3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__lookupSetter__/this-non-obj.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+description: Behavior when "this" value is not Object-coercible
+info: |
+ 1. Let O be ? ToObject(this value).
+features: [__setter__]
+---*/
+
+var __lookupSetter__ = Object.prototype.__lookupSetter__;
+var toStringCount = 0;
+var key = {
+ toString: function() {
+ toStringCount += 1;
+ }
+};
+
+assert.sameValue(typeof __lookupSetter__, 'function');
+
+assert.throws(TypeError, function() {
+ __lookupSetter__.call(undefined, key);
+}, 'undefined');
+
+assert.throws(TypeError, function() {
+ __lookupSetter__.call(null, key);
+}, 'null');
+
+assert.sameValue(toStringCount, 0);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__proto__/browser.js b/js/src/tests/test262/built-ins/Object/prototype/__proto__/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__proto__/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__proto__/get-abrupt.js b/js/src/tests/test262/built-ins/Object/prototype/__proto__/get-abrupt.js
new file mode 100644
index 0000000000..103dad1d40
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__proto__/get-abrupt.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.prototype.__proto__
+es6id: B.2.2.1
+description: Abrupt completion from [[GetPrototypeOf]]
+info: |
+ 1. Let O be ? ToObject(this value).
+ 2. Return ? O.[[GetPrototypeOf]]().
+features: [Proxy, __proto__]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').get;
+var thrower = function() {
+ throw new Test262Error();
+};
+
+var subject = new Proxy({}, { getPrototypeOf: thrower });
+
+assert.throws(Test262Error, function() {
+ get.call(subject);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__proto__/get-fn-name.js b/js/src/tests/test262/built-ins/Object/prototype/__proto__/get-fn-name.js
new file mode 100644
index 0000000000..293c6a995d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__proto__/get-fn-name.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: B.2.2.1.1
+description: >
+ get Object.prototype.__proto__
+
+ 17 ECMAScript Standard Built-in Objects
+
+ Functions that are specified as get or set accessor functions of built-in
+ properties have "get " or "set " prepended to the property name string.
+
+includes: [propertyHelper.js]
+features: [__proto__]
+---*/
+
+var descriptor = Object.getOwnPropertyDescriptor(Object.prototype, "__proto__");
+
+verifyProperty(descriptor.get, "name", {
+ enumerable: false,
+ writable: false,
+ configurable: true,
+ value: "get __proto__"
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__proto__/get-ordinary-obj.js b/js/src/tests/test262/built-ins/Object/prototype/__proto__/get-ordinary-obj.js
new file mode 100644
index 0000000000..e917d0f307
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__proto__/get-ordinary-obj.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.prototype.__proto__
+es6id: B.2.2.1
+description: Normal completion from ordinary object's [[GetPrototypeOf]]
+info: |
+ 1. Let O be ? ToObject(this value).
+ 2. Return ? O.[[GetPrototypeOf]]().
+features: [__proto__]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').get;
+var proto = {};
+var withCustomProto = Object.create(proto);
+var withNullProto = Object.create(null);
+
+assert.sameValue(get.call({}), Object.prototype, 'Ordinary object');
+assert.sameValue(get.call(withCustomProto), proto, 'custom prototype object');
+assert.sameValue(get.call(withNullProto), null, 'null prototype');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__proto__/get-to-obj-abrupt.js b/js/src/tests/test262/built-ins/Object/prototype/__proto__/get-to-obj-abrupt.js
new file mode 100644
index 0000000000..4a9213e3da
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__proto__/get-to-obj-abrupt.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.prototype.__proto__
+es6id: B.2.2.1
+description: Abrupt completion from ToObject
+info: |
+ 1. Let O be ? ToObject(this value).
+features: [__proto__]
+---*/
+
+var get = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').get;
+
+assert.sameValue(typeof get, 'function');
+
+assert.throws(TypeError, function() {
+ get.call(undefined);
+});
+
+assert.throws(TypeError, function() {
+ get.call(null);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__proto__/prop-desc.js b/js/src/tests/test262/built-ins/Object/prototype/__proto__/prop-desc.js
new file mode 100644
index 0000000000..75e791e862
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__proto__/prop-desc.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-additional-properties-of-the-object.prototype-object
+es6id: B.2.2.1.2
+description: Property descriptor for Object.prototype.__proto__
+info: |
+ Object.prototype.__proto__ is an accessor property with attributes {
+ [[Enumerable]]: false, [[Configurable]]: true }. The [[Get]] and [[Set]]
+ attributes are defined as follows:
+includes: [propertyHelper.js]
+features: [__proto__]
+---*/
+
+var desc = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__');
+
+assert.sameValue(desc.value, undefined, '`value` property');
+assert.sameValue(typeof desc.get, 'function', '`get` property');
+assert.sameValue(typeof desc.set, 'function', '`set` property');
+
+verifyProperty(Object.prototype, "__proto__", {
+ enumerable: false,
+ configurable: true
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-abrupt.js b/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-abrupt.js
new file mode 100644
index 0000000000..02a617978a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-abrupt.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.prototype.__proto__
+es6id: B.2.2.1
+description: Abrupt completion from [[SetPrototypeOf]]
+info: |
+ [...]
+ 4. Let status be ? O.[[SetPrototypeOf]](proto).
+features: [Proxy, __proto__]
+---*/
+
+var thrower = function() {
+ throw new Test262Error();
+};
+var subject = new Proxy({}, { setPrototypeOf: thrower });
+
+assert.throws(Test262Error, function() {
+ subject.__proto__ = {};
+});
+
+assert.sameValue(Object.getPrototypeOf(subject), Object.prototype);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-cycle-shadowed.js b/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-cycle-shadowed.js
new file mode 100644
index 0000000000..ca372a8165
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-cycle-shadowed.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.prototype.__proto__
+es6id: B.2.2.1
+description: >
+ Cycles are not detected when a Proxy exotic object exists in the prototype
+ chain
+info: |
+ [...]
+ 4. Let status be ? O.[[SetPrototypeOf]](proto).
+ 5. If status is false, throw a TypeError exception.
+
+ 9.1.2.1 OrdinarySetPrototypeOf
+
+ [...]
+ 6. Let p be V.
+ 7. Let done be false.
+ 8. Repeat while done is false,
+ a. If p is null, let done be true.
+ b. Else if SameValue(p, O) is true, return false.
+ c. Else,
+ i. If the [[GetPrototypeOf]] internal method of p is not the ordinary
+ object internal method defined in 9.1.1, let done be true.
+ ii. Else, let p be the value of p's [[Prototype]] internal slot.
+features: [__proto__]
+---*/
+
+var root = {};
+var intermediary = new Proxy(Object.create(root), {});
+var leaf = Object.create(intermediary);
+
+root.__proto__ = leaf;
+
+assert.sameValue(Object.getPrototypeOf(root), leaf);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-cycle.js b/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-cycle.js
new file mode 100644
index 0000000000..226cef02ca
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-cycle.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.prototype.__proto__
+es6id: B.2.2.1
+description: Cycle detection
+info: |
+ [...]
+ 4. Let status be ? O.[[SetPrototypeOf]](proto).
+ 5. If status is false, throw a TypeError exception.
+
+ 9.1.2.1 OrdinarySetPrototypeOf
+
+ [...]
+ 6. Let p be V.
+ 7. Let done be false.
+ 8. Repeat while done is false,
+ a. If p is null, let done be true.
+ b. Else if SameValue(p, O) is true, return false.
+ c. Else,
+ i. If the [[GetPrototypeOf]] internal method of p is not the ordinary
+ object internal method defined in 9.1.1, let done be true.
+ ii. Else, let p be the value of p's [[Prototype]] internal slot.
+features: [__proto__]
+---*/
+
+var root = {};
+var intermediary = Object.create(root);
+var leaf = Object.create(intermediary);
+
+assert.throws(TypeError, function() {
+ root.__proto__ = leaf;
+});
+
+assert.sameValue(Object.getPrototypeOf(root), Object.prototype);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-fn-name.js b/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-fn-name.js
new file mode 100644
index 0000000000..566b661603
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-fn-name.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: B.2.2.1.2
+description: >
+ set Object.prototype.__proto__
+
+ 17 ECMAScript Standard Built-in Objects
+
+ Functions that are specified as get or set accessor functions of built-in
+ properties have "get " or "set " prepended to the property name string.
+
+includes: [propertyHelper.js]
+features: [__proto__]
+---*/
+
+var descriptor = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__');
+
+verifyProperty(descriptor.set, "name", {
+ enumerable: false,
+ writable: false,
+ configurable: true,
+ value: "set __proto__"
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-immutable.js b/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-immutable.js
new file mode 100644
index 0000000000..2472ca43ed
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-immutable.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.prototype.__proto__
+description: Called on an immutable prototype exotic object
+info: |
+ [...]
+ 4. Let status be ? O.[[SetPrototypeOf]](proto).
+ 5. If status is false, throw a TypeError exception.
+features: [__proto__]
+---*/
+
+Object.prototype.__proto__ = null;
+
+assert.throws(TypeError, function() {
+ Object.prototype.__proto__ = {};
+});
+
+assert.sameValue(Object.getPrototypeOf(Object.prototype), null);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-invalid-value.js b/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-invalid-value.js
new file mode 100644
index 0000000000..0459a9f25f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-invalid-value.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.prototype.__proto__
+es6id: B.2.2.1
+description: Called with a value that is neither an Object nor Null
+info: |
+ 1. Let O be ? RequireObjectCoercible(this value).
+ 2. If Type(proto) is neither Object nor Null, return undefined.
+features: [Symbol, __proto__]
+---*/
+
+var set = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;
+var subject = {};
+
+assert.sameValue(set.call(subject, true), undefined, 'boolean');
+assert.sameValue(
+ Object.getPrototypeOf(subject), Object.prototype, 'following boolean'
+);
+
+assert.sameValue(set.call(subject, 1), undefined, 'number');
+assert.sameValue(
+ Object.getPrototypeOf(subject), Object.prototype, 'following number'
+);
+
+assert.sameValue(set.call(subject, 'string'), undefined, 'string');
+assert.sameValue(
+ Object.getPrototypeOf(subject), Object.prototype, 'following string'
+);
+
+assert.sameValue(set.call(subject, Symbol('')), undefined, 'symbol');
+assert.sameValue(
+ Object.getPrototypeOf(subject), Object.prototype, 'following symbol'
+);
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-non-extensible.js b/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-non-extensible.js
new file mode 100644
index 0000000000..f0bb8212c7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-non-extensible.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.prototype.__proto__
+es6id: B.2.2.1
+description: Called on an non-extensible object
+info: |
+ [...]
+ 4. Let status be ? O.[[SetPrototypeOf]](proto).
+ 5. If status is false, throw a TypeError exception.
+
+ 9.1.2.1 OrdinarySetPrototypeOf
+
+ [...]
+ 2. Let extensible be the value of the [[Extensible]] internal slot of O.
+ 3. Let current be the value of the [[Prototype]] internal slot of O.
+ 4. If SameValue(V, current) is true, return true.
+ 5. If extensible is false, return false.
+features: [__proto__]
+---*/
+
+var proto = {};
+var subject = Object.create(proto);
+
+Object.preventExtensions(subject);
+
+subject.__proto__ = proto;
+
+assert.throws(TypeError, function() {
+ subject.__proto__ = {};
+});
+
+assert.sameValue(Object.getPrototypeOf(subject), proto);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-non-obj-coercible.js b/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-non-obj-coercible.js
new file mode 100644
index 0000000000..aa779dfbfd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-non-obj-coercible.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.prototype.__proto__
+es6id: B.2.2.1
+description: Called on a value that is not object-coercible
+info: |
+ 1. Let O be ? RequireObjectCoercible(this value).
+features: [__proto__]
+---*/
+
+var set = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;
+
+assert.sameValue(typeof set, 'function');
+
+assert.throws(TypeError, function() {
+ set.call(undefined);
+});
+
+assert.throws(TypeError, function() {
+ set.call(null);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-non-object.js b/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-non-object.js
new file mode 100644
index 0000000000..755540239f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-non-object.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.prototype.__proto__
+es6id: B.2.2.1
+description: Called on a value that is object-coercible but not an Object
+info: |
+ 1. Let O be ? RequireObjectCoercible(this value).
+ 2. If Type(proto) is neither Object nor Null, return undefined.
+ 3. If Type(O) is not Object, return undefined.
+features: [Symbol, __proto__]
+---*/
+
+var set = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;
+var subject = {};
+
+assert.sameValue(set.call(true), undefined, 'boolean');
+assert.sameValue(
+ Object.getPrototypeOf(subject), Object.prototype, 'following boolean'
+);
+
+assert.sameValue(set.call(1), undefined, 'number');
+assert.sameValue(
+ Object.getPrototypeOf(subject), Object.prototype, 'following number'
+);
+
+assert.sameValue(set.call('string'), undefined, 'string');
+assert.sameValue(
+ Object.getPrototypeOf(subject), Object.prototype, 'following string'
+);
+
+assert.sameValue(set.call(Symbol('')), undefined, 'symbol');
+assert.sameValue(
+ Object.getPrototypeOf(subject), Object.prototype, 'following symbol'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-ordinary-obj.js b/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-ordinary-obj.js
new file mode 100644
index 0000000000..f21a43402e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__proto__/set-ordinary-obj.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.prototype.__proto__
+es6id: B.2.2.1
+description: Setting valid value on an ordinary object
+info: |
+ [...]
+ 4. Let status be ? O.[[SetPrototypeOf]](proto).
+ 5. If status is false, throw a TypeError exception.
+ 6. Return undefined.
+features: [__proto__]
+---*/
+
+var set = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;
+var proto = {};
+var subject = {};
+
+assert.sameValue(set.call(subject, proto), undefined);
+assert.sameValue(Object.getPrototypeOf(subject), proto);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/__proto__/shell.js b/js/src/tests/test262/built-ins/Object/prototype/__proto__/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/__proto__/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/prototype/browser.js b/js/src/tests/test262/built-ins/Object/prototype/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/prototype/constructor/S15.2.4.1_A1_T1.js b/js/src/tests/test262/built-ins/Object/prototype/constructor/S15.2.4.1_A1_T1.js
new file mode 100644
index 0000000000..f22e1fc143
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/constructor/S15.2.4.1_A1_T1.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The initial value of Object.prototype.constructor is the built-in Object
+ constructor
+es5id: 15.2.4.1_A1_T1
+description: Checking the Object.prototype.constructor
+---*/
+assert.sameValue(
+ Object.prototype.constructor,
+ Object,
+ 'The value of Object.prototype.constructor is expected to equal the value of Object'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/constructor/S15.2.4.1_A1_T2.js b/js/src/tests/test262/built-ins/Object/prototype/constructor/S15.2.4.1_A1_T2.js
new file mode 100644
index 0000000000..c987017fde
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/constructor/S15.2.4.1_A1_T2.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The initial value of Object.prototype.constructor is the built-in Object
+ constructor
+es5id: 15.2.4.1_A1_T2
+description: >
+ Creating "new Object.prototype.constructor" and checking its
+ properties
+---*/
+
+var constr = Object.prototype.constructor;
+
+var obj = new constr;
+
+assert.notSameValue(obj, undefined, 'The value of obj is expected to not equal ``undefined``');
+assert.sameValue(obj.constructor, Object, 'The value of obj.constructor is expected to equal the value of Object');
+
+assert(
+ !!Object.prototype.isPrototypeOf(obj),
+ 'The value of !!Object.prototype.isPrototypeOf(obj) is expected to be true'
+);
+
+var to_string_result = '[object ' + 'Object' + ']';
+assert.sameValue(obj.toString(), to_string_result, 'obj.toString() returns to_string_result');
+assert.sameValue(obj.valueOf().toString(), to_string_result, 'obj.valueOf().toString() returns to_string_result');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/constructor/browser.js b/js/src/tests/test262/built-ins/Object/prototype/constructor/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/constructor/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/prototype/constructor/shell.js b/js/src/tests/test262/built-ins/Object/prototype/constructor/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/constructor/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/prototype/extensibility.js b/js/src/tests/test262/built-ins/Object/prototype/extensibility.js
new file mode 100644
index 0000000000..a65c158c7e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/extensibility.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-properties-of-the-object-prototype-object
+description: >
+ Object.prototype is still extensible and may have extensions prevented
+info: |
+ 19.1.3 Properties of the Object Prototype Object
+
+ The value of the [[Prototype]] internal slot of the Object prototype object is
+ null and the initial value of the [[Extensible]] internal slot is true.
+---*/
+
+assert(
+ Object.isExtensible(Object.prototype),
+ "Object.prototype is extensible"
+);
+
+assert.sameValue(
+ Object.preventExtensions(Object.prototype),
+ Object.prototype,
+ "Object.prototype may have extensions prevented"
+);
+
+assert.sameValue(
+ Object.isExtensible(Object.prototype),
+ false,
+ "Object.prototype is not extensible after a preventExtensions operation"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_1.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_1.js
new file mode 100644
index 0000000000..c64913ccec
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_1
+description: Properties - [[HasOwnProperty]] (property does not exist)
+---*/
+
+var o = {};
+
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_10.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_10.js
new file mode 100644
index 0000000000..26039ecf64
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_10.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_10
+description: >
+ Properties - [[HasOwnProperty]] (writable, configurable,
+ non-enumerable own value property)
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ value: 42,
+ writable: true,
+ configurable: true
+});
+
+assert(o.hasOwnProperty("foo"), 'o.hasOwnProperty("foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_11.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_11.js
new file mode 100644
index 0000000000..d9ff6adfd2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_11.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_11
+description: >
+ Properties - [[HasOwnProperty]] (writable, configurable,
+ enumerable own value property)
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ value: 42,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+
+assert(o.hasOwnProperty("foo"), 'o.hasOwnProperty("foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_12.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_12.js
new file mode 100644
index 0000000000..edb1e8de7e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_12.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_12
+description: >
+ Properties - [[HasOwnProperty]] (non-writable, non-configurable,
+ non-enumerable inherited value property)
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ value: 42
+});
+var o = Object.create(base);
+
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_13.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_13.js
new file mode 100644
index 0000000000..c59d687403
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_13.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_13
+description: >
+ Properties - [[HasOwnProperty]] (non-writable, non-configurable,
+ enumerable inherited value property)
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ value: 42,
+ enumerable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_14.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_14.js
new file mode 100644
index 0000000000..9d385ee88e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_14.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_14
+description: >
+ Properties - [[HasOwnProperty]] (non-writable, configurable,
+ non-enumerable inherited value property)
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ value: 42,
+ configurable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_15.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_15.js
new file mode 100644
index 0000000000..6a7520fe47
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_15.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_15
+description: >
+ Properties - [[HasOwnProperty]] (writable, non-configurable,
+ non-enumerable inherited value property)
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ value: 42,
+ writable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_16.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_16.js
new file mode 100644
index 0000000000..b491620f68
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_16.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_16
+description: >
+ Properties - [[HasOwnProperty]] (non-writable, configurable,
+ enumerable inherited value property)
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ value: 42,
+ configurable: true,
+ enumerable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_17.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_17.js
new file mode 100644
index 0000000000..a89febbca6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_17.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_17
+description: >
+ Properties - [[HasOwnProperty]] (writable, non-configurable,
+ enumerable inherited value property)
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ value: 42,
+ writable: true,
+ enumerable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_18.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_18.js
new file mode 100644
index 0000000000..efd916452e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_18.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_18
+description: >
+ Properties - [[HasOwnProperty]] (writable, configurable,
+ non-enumerable inherited value property)
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ value: 42,
+ writable: true,
+ configurable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_19.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_19.js
new file mode 100644
index 0000000000..0b48e5c1bf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_19.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_19
+description: >
+ Properties - [[HasOwnProperty]] (writable, configurable,
+ enumerable inherited value property)
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ value: 42,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_2.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_2.js
new file mode 100644
index 0000000000..7ffe83d56d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_2.js
@@ -0,0 +1,15 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_2
+description: Properties - [[HasOwnProperty]] (old style own property)
+---*/
+
+var o = {
+ foo: 42
+};
+
+assert(o.hasOwnProperty("foo"), 'o.hasOwnProperty("foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_20.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_20.js
new file mode 100644
index 0000000000..f505468b34
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_20.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_20
+description: Properties - [[HasOwnProperty]] (literal own getter property)
+---*/
+
+var o = {
+ get foo() {
+ return 42;
+ }
+};
+
+assert(o.hasOwnProperty("foo"), 'o.hasOwnProperty("foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_21.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_21.js
new file mode 100644
index 0000000000..015c83b944
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_21.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_21
+description: Properties - [[HasOwnProperty]] (literal own setter property)
+---*/
+
+var o = {
+ set foo(x) {;
+ }
+};
+
+assert(o.hasOwnProperty("foo"), 'o.hasOwnProperty("foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_22.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_22.js
new file mode 100644
index 0000000000..464f9e7af4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_22.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_22
+description: >
+ Properties - [[HasOwnProperty]] (literal own getter/setter
+ property)
+---*/
+
+var o = {
+ get foo() {
+ return 42;
+ },
+ set foo(x) {;
+ }
+};
+
+assert(o.hasOwnProperty("foo"), 'o.hasOwnProperty("foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_23.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_23.js
new file mode 100644
index 0000000000..38550db4de
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_23.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_23
+description: Properties - [[HasOwnProperty]] (literal inherited getter property)
+---*/
+
+var base = {
+ get foo() {
+ return 42;
+ }
+};
+var o = Object.create(base);
+
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_24.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_24.js
new file mode 100644
index 0000000000..35efe9030d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_24.js
@@ -0,0 +1,17 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_24
+description: Properties - [[HasOwnProperty]] (literal inherited setter property)
+---*/
+
+var base = {
+ set foo(x) {;
+ }
+};
+var o = Object.create(base);
+
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_25.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_25.js
new file mode 100644
index 0000000000..332424e8a3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_25.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_25
+description: >
+ Properties - [[HasOwnProperty]] (literal inherited getter/setter
+ property)
+---*/
+
+var base = {
+ get foo() {
+ return 42;
+ },
+ set foo(x) {;
+ }
+};
+var o = Object.create(base);
+
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_26.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_26.js
new file mode 100644
index 0000000000..7127ef47df
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_26.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_26
+description: >
+ Properties - [[HasOwnProperty]] (non-configurable, non-enumerable
+ own getter property)
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ get: function() {
+ return 42;
+ }
+});
+
+assert(o.hasOwnProperty("foo"), 'o.hasOwnProperty("foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_27.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_27.js
new file mode 100644
index 0000000000..bb87dc3b8c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_27.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_27
+description: >
+ Properties - [[HasOwnProperty]] (non-configurable, enumerable own
+ getter property)
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ get: function() {
+ return 42;
+ },
+ enumerable: true
+});
+
+assert(o.hasOwnProperty("foo"), 'o.hasOwnProperty("foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_28.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_28.js
new file mode 100644
index 0000000000..7f3cc16af8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_28.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_28
+description: >
+ Properties - [[HasOwnProperty]] (configurable, non-enumerable own
+ getter property)
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ get: function() {
+ return 42;
+ },
+ configurable: true
+});
+
+assert(o.hasOwnProperty("foo"), 'o.hasOwnProperty("foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_29.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_29.js
new file mode 100644
index 0000000000..025537aa98
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_29.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_29
+description: >
+ Properties - [[HasOwnProperty]] (configurable, enumerable own
+ getter property)
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ get: function() {
+ return 42;
+ },
+ enumerable: true,
+ configurable: true
+});
+
+assert(o.hasOwnProperty("foo"), 'o.hasOwnProperty("foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_3.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_3.js
new file mode 100644
index 0000000000..8dd61c82df
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_3.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_3
+description: Properties - [[HasOwnProperty]] (old style inherited property)
+---*/
+
+var base = {
+ foo: 42
+};
+var o = Object.create(base);
+
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_30.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_30.js
new file mode 100644
index 0000000000..74bba37470
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_30.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_30
+description: >
+ Properties - [[HasOwnProperty]] (non-configurable, non-enumerable
+ own setter property)
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ set: function() {;
+ }
+});
+
+assert(o.hasOwnProperty("foo"), 'o.hasOwnProperty("foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_31.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_31.js
new file mode 100644
index 0000000000..94630d7cf2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_31.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_31
+description: >
+ Properties - [[HasOwnProperty]] (non-configurable, enumerable own
+ setter property)
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ set: function() {;
+ },
+ enumerable: true
+});
+
+assert(o.hasOwnProperty("foo"), 'o.hasOwnProperty("foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_32.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_32.js
new file mode 100644
index 0000000000..de90c1bfdc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_32.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_32
+description: >
+ Properties - [[HasOwnProperty]] (configurable, non-enumerable own
+ setter property)
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ set: function() {;
+ },
+ configurable: true
+});
+
+assert(o.hasOwnProperty("foo"), 'o.hasOwnProperty("foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_33.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_33.js
new file mode 100644
index 0000000000..3530a36271
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_33.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_33
+description: >
+ Properties - [[HasOwnProperty]] (configurable, enumerable own
+ setter property)
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ set: function() {;
+ },
+ enumerable: true,
+ configurable: true
+});
+
+assert(o.hasOwnProperty("foo"), 'o.hasOwnProperty("foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_34.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_34.js
new file mode 100644
index 0000000000..514ee487ac
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_34.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_34
+description: >
+ Properties - [[HasOwnProperty]] (non-configurable, non-enumerable
+ own getter/setter property)
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ get: function() {
+ return 42;
+ },
+ set: function() {;
+ }
+});
+
+assert(o.hasOwnProperty("foo"), 'o.hasOwnProperty("foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_35.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_35.js
new file mode 100644
index 0000000000..1eab5f8f92
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_35.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_35
+description: >
+ Properties - [[HasOwnProperty]] (non-configurable, enumerable own
+ getter/setter property)
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ get: function() {
+ return 42;
+ },
+ set: function() {;
+ },
+ enumerable: true
+});
+
+assert(o.hasOwnProperty("foo"), 'o.hasOwnProperty("foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_36.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_36.js
new file mode 100644
index 0000000000..b03569e462
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_36.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_36
+description: >
+ Properties - [[HasOwnProperty]] (configurable, non-enumerable own
+ getter/setter property)
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ get: function() {
+ return 42;
+ },
+ set: function() {;
+ },
+ configurable: true
+});
+
+assert(o.hasOwnProperty("foo"), 'o.hasOwnProperty("foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_37.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_37.js
new file mode 100644
index 0000000000..c2a7c7594f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_37.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_37
+description: >
+ Properties - [[HasOwnProperty]] (configurable, enumerable own
+ getter/setter property)
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ get: function() {
+ return 42;
+ },
+ set: function() {;
+ },
+ enumerable: true,
+ configurable: true
+});
+
+assert(o.hasOwnProperty("foo"), 'o.hasOwnProperty("foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_38.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_38.js
new file mode 100644
index 0000000000..7b8b6b96ee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_38.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_38
+description: >
+ Properties - [[HasOwnProperty]] (non-configurable, non-enumerable
+ inherited getter property)
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ get: function() {
+ return 42;
+ }
+});
+var o = Object.create(base);
+
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_39.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_39.js
new file mode 100644
index 0000000000..635c0e8ede
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_39.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_39
+description: >
+ Properties - [[HasOwnProperty]] (non-configurable, enumerable
+ inherited getter property)
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ get: function() {
+ return 42;
+ },
+ enumerable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_4.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_4.js
new file mode 100644
index 0000000000..491227b690
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_4.js
@@ -0,0 +1,18 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_4
+description: >
+ Properties - [[HasOwnProperty]] (non-writable, non-configurable,
+ non-enumerable own value property)
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ value: 42
+});
+
+assert(o.hasOwnProperty("foo"), 'o.hasOwnProperty("foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_40.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_40.js
new file mode 100644
index 0000000000..7c692ecf40
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_40.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_40
+description: >
+ Properties - [[HasOwnProperty]] (configurable, non-enumerable
+ inherited getter property)
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ get: function() {
+ return 42;
+ },
+ configurable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_41.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_41.js
new file mode 100644
index 0000000000..f267870cb8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_41.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_41
+description: >
+ Properties - [[HasOwnProperty]] (configurable, enumerable
+ inherited getter property)
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ get: function() {
+ return 42;
+ },
+ enumerable: true,
+ configurable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_42.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_42.js
new file mode 100644
index 0000000000..441b04c354
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_42.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_42
+description: >
+ Properties - [[HasOwnProperty]] (non-configurable, non-enumerable
+ inherited setter property)
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ set: function() {;
+ }
+});
+var o = Object.create(base);
+
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_43.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_43.js
new file mode 100644
index 0000000000..978196a536
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_43.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_43
+description: >
+ Properties - [[HasOwnProperty]] (non-configurable, enumerable
+ inherited setter property)
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ set: function() {;
+ },
+ enumerable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_44.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_44.js
new file mode 100644
index 0000000000..8cbee1a166
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_44.js
@@ -0,0 +1,21 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_44
+description: >
+ Properties - [[HasOwnProperty]] (configurable, non-enumerable
+ inherited setter property)
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ set: function() {;
+ },
+ configurable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_45.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_45.js
new file mode 100644
index 0000000000..acf540ff63
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_45.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_45
+description: >
+ Properties - [[HasOwnProperty]] (configurable, enumerable
+ inherited setter property)
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ set: function() {;
+ },
+ enumerable: true,
+ configurable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_46.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_46.js
new file mode 100644
index 0000000000..fbba7cbf4c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_46.js
@@ -0,0 +1,23 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_46
+description: >
+ Properties - [[HasOwnProperty]] (non-configurable, non-enumerable
+ inherited getter/setter property)
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ get: function() {
+ return 42;
+ },
+ set: function() {;
+ }
+});
+var o = Object.create(base);
+
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_47.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_47.js
new file mode 100644
index 0000000000..85d43eaf0c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_47.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_47
+description: >
+ Properties - [[HasOwnProperty]] (non-configurable, enumerable
+ inherited getter/setter property)
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ get: function() {
+ return 42;
+ },
+ set: function() {;
+ },
+ enumerable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_48.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_48.js
new file mode 100644
index 0000000000..2746714b7a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_48.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_48
+description: >
+ Properties - [[HasOwnProperty]] (configurable, non-enumerable
+ inherited getter/setter property)
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ get: function() {
+ return 42;
+ },
+ set: function() {;
+ },
+ configurable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_49.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_49.js
new file mode 100644
index 0000000000..4cda6bb3a1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_49.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_49
+description: >
+ Properties - [[HasOwnProperty]] (configurable, enumerable
+ inherited getter/setter property)
+---*/
+
+var base = {};
+Object.defineProperty(base, "foo", {
+ get: function() {
+ return 42;
+ },
+ set: function() {;
+ },
+ enumerable: true,
+ configurable: true
+});
+var o = Object.create(base);
+
+assert.sameValue(o.hasOwnProperty("foo"), false, 'o.hasOwnProperty("foo")');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_5.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_5.js
new file mode 100644
index 0000000000..e128936983
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_5.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_5
+description: >
+ Properties - [[HasOwnProperty]] (non-writable, non-configurable,
+ enumerable own value property)
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ value: 42,
+ enumerable: true
+});
+
+assert(o.hasOwnProperty("foo"), 'o.hasOwnProperty("foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_6.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_6.js
new file mode 100644
index 0000000000..95c8994b43
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_6.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_6
+description: >
+ Properties - [[HasOwnProperty]] (non-writable, configurable,
+ non-enumerable own value property)
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ value: 42,
+ configurable: true
+});
+
+assert(o.hasOwnProperty("foo"), 'o.hasOwnProperty("foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_7.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_7.js
new file mode 100644
index 0000000000..d3a3a9104a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_7.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_7
+description: >
+ Properties - [[HasOwnProperty]] (writable, non-configurable,
+ non-enumerable own value property)
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ value: 42,
+ writable: true
+});
+
+assert(o.hasOwnProperty("foo"), 'o.hasOwnProperty("foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_8.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_8.js
new file mode 100644
index 0000000000..4ef56ef4b0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_8.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_8
+description: >
+ Properties - [[HasOwnProperty]] (non-writable, configurable,
+ enumerable own value property)
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ value: 42,
+ configurable: true,
+ enumerable: true
+});
+
+assert(o.hasOwnProperty("foo"), 'o.hasOwnProperty("foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_9.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_9.js
new file mode 100644
index 0000000000..ef1d16f1c6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/8.12.1-1_9.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 8.12.1-1_9
+description: >
+ Properties - [[HasOwnProperty]] (writable, non-configurable,
+ enumerable own value property)
+---*/
+
+var o = {};
+Object.defineProperty(o, "foo", {
+ value: 42,
+ writable: true,
+ enumerable: true
+});
+
+assert(o.hasOwnProperty("foo"), 'o.hasOwnProperty("foo") !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/S15.2.4.5_A12.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/S15.2.4.5_A12.js
new file mode 100644
index 0000000000..d22be23a7d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/S15.2.4.5_A12.js
@@ -0,0 +1,15 @@
+// Copyright 2011 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.4.5_A12
+description: >
+ Let O be the result of calling ToObject passing the this value as
+ the argument.
+---*/
+
+assert.throws(TypeError, function() {
+ Object.prototype.hasOwnProperty.call(undefined, 'foo');
+}, 'Object.prototype.hasOwnProperty.call(undefined, "foo") throws a TypeError exception');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/S15.2.4.5_A13.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/S15.2.4.5_A13.js
new file mode 100644
index 0000000000..b8f3f150ac
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/S15.2.4.5_A13.js
@@ -0,0 +1,15 @@
+// Copyright 2011 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.4.5_A13
+description: >
+ Let O be the result of calling ToObject passing the this value as
+ the argument.
+---*/
+
+assert.throws(TypeError, function() {
+ Object.prototype.hasOwnProperty.call(null, 'foo');
+}, 'Object.prototype.hasOwnProperty.call(null, "foo") throws a TypeError exception');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/S15.2.4.5_A1_T1.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/S15.2.4.5_A1_T1.js
new file mode 100644
index 0000000000..72f641c6ea
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/S15.2.4.5_A1_T1.js
@@ -0,0 +1,27 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the hasOwnProperty method is called with argument V, the following steps are taken:
+ i) Let O be this object
+ ii) Call ToString(V)
+ iii) If O doesn't have a property with the name given by Result(ii), return false
+ iv) Return true
+es5id: 15.2.4.5_A1_T1
+description: >
+ Checking type of the Object.prototype.hasOwnProperty and the
+ returned result
+---*/
+assert.sameValue(
+ typeof Object.prototype.hasOwnProperty,
+ "function",
+ 'The value of `typeof Object.prototype.hasOwnProperty` is expected to be "function"'
+);
+
+assert(
+ !!Object.prototype.hasOwnProperty("hasOwnProperty"),
+ 'The value of !!Object.prototype.hasOwnProperty("hasOwnProperty") is expected to be true'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/S15.2.4.5_A1_T2.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/S15.2.4.5_A1_T2.js
new file mode 100644
index 0000000000..d3b6acdad5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/S15.2.4.5_A1_T2.js
@@ -0,0 +1,40 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the hasOwnProperty method is called with argument V, the following steps are taken:
+ i) Let O be this object
+ ii) Call ToString(V)
+ iii) If O doesn't have a property with the name given by Result(ii), return false
+ iv) Return true
+es5id: 15.2.4.5_A1_T2
+description: Argument of the hasOwnProperty method is a custom boolean property
+---*/
+assert.sameValue(
+ typeof Object.prototype.hasOwnProperty,
+ "function",
+ 'The value of `typeof Object.prototype.hasOwnProperty` is expected to be "function"'
+);
+
+var obj = {
+ the_property: true
+};
+
+assert.sameValue(
+ typeof obj.hasOwnProperty,
+ "function",
+ 'The value of `typeof obj.hasOwnProperty` is expected to be "function"'
+);
+
+assert(
+ !obj.hasOwnProperty("hasOwnProperty"),
+ 'The value of !obj.hasOwnProperty("hasOwnProperty") is expected to be true'
+);
+
+assert(
+ !!obj.hasOwnProperty("the_property"),
+ 'The value of !!obj.hasOwnProperty("the_property") is expected to be true'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/S15.2.4.5_A1_T3.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/S15.2.4.5_A1_T3.js
new file mode 100644
index 0000000000..407765b865
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/S15.2.4.5_A1_T3.js
@@ -0,0 +1,45 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the hasOwnProperty method is called with argument V, the following steps are taken:
+ i) Let O be this object
+ ii) Call ToString(V)
+ iii) If O doesn't have a property with the name given by Result(ii), return false
+ iv) Return true
+es5id: 15.2.4.5_A1_T3
+description: >
+ Argument of the hasOwnProperty method is a custom property of a
+ function object
+---*/
+
+var FACTORY = function() {
+ this.aproperty = 1;
+};
+
+var instance = new FACTORY;
+
+assert.sameValue(
+ typeof Object.prototype.hasOwnProperty,
+ "function",
+ 'The value of `typeof Object.prototype.hasOwnProperty` is expected to be "function"'
+);
+
+assert.sameValue(
+ typeof instance.hasOwnProperty,
+ "function",
+ 'The value of `typeof instance.hasOwnProperty` is expected to be "function"'
+);
+
+assert(
+ !instance.hasOwnProperty("toString"),
+ 'The value of !instance.hasOwnProperty("toString") is expected to be true'
+);
+
+assert(
+ !!instance.hasOwnProperty("aproperty"),
+ 'The value of !!instance.hasOwnProperty("aproperty") is expected to be true'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/S15.2.4.5_A6.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/S15.2.4.5_A6.js
new file mode 100644
index 0000000000..7b1ee66e75
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/S15.2.4.5_A6.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Object.prototype.hasOwnProperty has not prototype property
+es5id: 15.2.4.5_A6
+description: >
+ Checking if obtaining the prototype property of
+ Object.prototype.hasOwnProperty fails
+---*/
+assert.sameValue(
+ Object.prototype.hasOwnProperty.prototype,
+ undefined,
+ 'The value of Object.prototype.hasOwnProperty.prototype is expected to equal undefined'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/browser.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/length.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/length.js
new file mode 100644
index 0000000000..3bebbbd35d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/length.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.prototype.hasownproperty
+description: >
+ Object.prototype.hasOwnProperty.length is 1.
+info: |
+ Object.prototype.hasOwnProperty ( V )
+
+ ECMAScript Standard Built-in Objects
+
+ Every built-in function object, including constructors, has a "length"
+ property whose value is an integer. Unless otherwise specified, this
+ value is equal to the largest number of named arguments shown in the
+ subclause headings for the function description.
+
+ Unless otherwise specified, the "length" property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+verifyProperty(Object.prototype.hasOwnProperty, "length", {
+ value: 1,
+ writable: false,
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/name.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/name.js
new file mode 100644
index 0000000000..ae01259e26
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/name.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 19.1.3.2
+description: >
+ Object.prototype.hasOwnProperty.name is "hasOwnProperty".
+info: |
+ Object.prototype.hasOwnProperty ( V )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.prototype.hasOwnProperty.name, "hasOwnProperty");
+
+verifyNotEnumerable(Object.prototype.hasOwnProperty, "name");
+verifyNotWritable(Object.prototype.hasOwnProperty, "name");
+verifyConfigurable(Object.prototype.hasOwnProperty, "name");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/not-a-constructor.js
new file mode 100644
index 0000000000..07d38e779c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.prototype.hasOwnProperty does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(Object.prototype.hasOwnProperty),
+ false,
+ 'isConstructor(Object.prototype.hasOwnProperty) must return false'
+);
+
+assert.throws(TypeError, () => {
+ new Object.prototype.hasOwnProperty('');
+}, '`new Object.prototype.hasOwnProperty(\'\')` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/shell.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/symbol_own_property.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/symbol_own_property.js
new file mode 100644
index 0000000000..d7b0abea3c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/symbol_own_property.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.prototype.hasOwnProperty called with symbol property key
+info: |
+ 19.1.3.2 Object.prototype.hasOwnProperty ( V )
+
+ 1. Let P be ToPropertyKey(V).
+ 2. ReturnIfAbrupt(P).
+ ...
+es6id: 19.1.3.2
+features: [Symbol]
+---*/
+
+var obj = {};
+var sym = Symbol();
+
+assert.sameValue(
+ obj.hasOwnProperty(sym),
+ false,
+ "Returns false if symbol own property not found"
+);
+
+obj[sym] = 0;
+
+assert.sameValue(
+ obj.hasOwnProperty(sym),
+ true,
+ "Returns true if symbol own property found"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/symbol_property_toPrimitive.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/symbol_property_toPrimitive.js
new file mode 100644
index 0000000000..03a211d08e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/symbol_property_toPrimitive.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.prototype.hasOwnProperty with symbol and @@toPrimitive conversion
+info: |
+ 19.1.3.2 Object.prototype.hasOwnProperty ( V )
+
+ 1. Let P be ToPropertyKey(V).
+ 2. ReturnIfAbrupt(P).
+ ...
+es6id: 19.1.3.2
+features: [Symbol.toPrimitive]
+---*/
+
+var obj = {};
+var sym = Symbol();
+
+var callCount = 0;
+var wrapper = {};
+wrapper[Symbol.toPrimitive] = function() {
+ callCount += 1;
+ return sym;
+};
+
+obj[sym] = 0;
+
+assert.sameValue(
+ obj.hasOwnProperty(wrapper),
+ true,
+ "Returns true if symbol own property found"
+);
+
+assert.sameValue(callCount, 1, "toPrimitive method called exactly once");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/symbol_property_toString.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/symbol_property_toString.js
new file mode 100644
index 0000000000..5d807383e7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/symbol_property_toString.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.prototype.hasOwnProperty with symbol and toString conversion
+info: |
+ 19.1.3.2 Object.prototype.hasOwnProperty ( V )
+
+ 1. Let P be ToPropertyKey(V).
+ 2. ReturnIfAbrupt(P).
+ ...
+es6id: 19.1.3.2
+features: [Symbol]
+---*/
+
+var obj = {};
+var sym = Symbol();
+
+var callCount = 0;
+var wrapper = {
+ toString: function() {
+ callCount += 1;
+ return sym;
+ },
+ valueOf: function() {
+ throw new Test262Error("valueOf() called");
+ }
+};
+
+obj[sym] = 0;
+
+assert.sameValue(
+ obj.hasOwnProperty(wrapper),
+ true,
+ "Returns true if symbol own property found"
+);
+
+assert.sameValue(callCount, 1, "toString method called exactly once");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/symbol_property_valueOf.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/symbol_property_valueOf.js
new file mode 100644
index 0000000000..0a8b0f97d3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/symbol_property_valueOf.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.prototype.hasOwnProperty with symbol and valueOf conversion
+info: |
+ 19.1.3.2 Object.prototype.hasOwnProperty ( V )
+
+ 1. Let P be ToPropertyKey(V).
+ 2. ReturnIfAbrupt(P).
+ ...
+es6id: 19.1.3.2
+features: [Symbol]
+---*/
+
+var obj = {};
+var sym = Symbol();
+
+var callCount = 0;
+var wrapper = {
+ valueOf: function() {
+ callCount += 1;
+ return sym;
+ },
+ toString: null
+};
+
+obj[sym] = 0;
+
+assert.sameValue(
+ obj.hasOwnProperty(wrapper),
+ true,
+ "Returns true if symbol own property found"
+);
+
+assert.sameValue(callCount, 1, "valueOf method called exactly once");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/topropertykey_before_toobject.js b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/topropertykey_before_toobject.js
new file mode 100644
index 0000000000..76ba785ec3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/hasOwnProperty/topropertykey_before_toobject.js
@@ -0,0 +1,47 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.prototype.hasownproperty
+description: >
+ ToPropertyKey is performed before ToObject.
+info: |
+ Object.prototype.hasOwnProperty ( V )
+
+ 1. Let P be ? ToPropertyKey(V).
+ 2. Let O be ? ToObject(this value).
+
+ ToPropertyKey ( argument )
+
+ 1. Let key be ? ToPrimitive(argument, hint String).
+features: [Symbol.toPrimitive]
+---*/
+
+var coercibleKey1 = {
+ get toString() {
+ this.hint = "string";
+ throw new Test262Error();
+ },
+ get valueOf() {
+ this.hint = "defaultOrNumber";
+ throw new Test262Error();
+ },
+};
+
+assert.throws(Test262Error, function() {
+ Object.prototype.hasOwnProperty.call(null, coercibleKey1);
+});
+assert.sameValue(coercibleKey1.hint, "string");
+
+
+var coercibleKey2 = {};
+coercibleKey2[Symbol.toPrimitive] = function(hint) {
+ this.hint = hint;
+ throw new Test262Error();
+};
+
+assert.throws(Test262Error, function() {
+ Object.prototype.hasOwnProperty.call(undefined, coercibleKey2);
+});
+assert.sameValue(coercibleKey2.hint, "string");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/arg-is-proxy.js b/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/arg-is-proxy.js
new file mode 100644
index 0000000000..88717f0e54
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/arg-is-proxy.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.isprototypeof
+description: >
+ If V is a Proxy object, only its "getPrototypeOf" trap gets invoked.
+info: |
+ Object.prototype.isPrototypeOf ( V )
+
+ ...
+ 3. Repeat,
+ a. Set V to ? V.[[GetPrototypeOf]]().
+ b. If V is null, return false.
+ c. If SameValue(O, V) is true, return true.
+includes: [proxyTrapsHelper.js]
+features: [Proxy]
+---*/
+
+var proxyProto = [];
+var handler = allowProxyTraps({
+ getPrototypeOf: function(_target) {
+ return proxyProto;
+ },
+});
+
+var proxy = new Proxy({}, handler);
+
+assert.sameValue(proxyProto.isPrototypeOf(proxy), true);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/browser.js b/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/builtin.js b/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/builtin.js
new file mode 100644
index 0000000000..1c88d3f66f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/builtin.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.isprototypeof
+description: >
+ Tests that Object.prototype.isPrototypeOf meets the requirements
+ for built-in objects defined by the introduction of chapter 17 of
+ the ECMAScript Language Specification.
+features: [Reflect.construct]
+---*/
+
+assert(
+ Object.isExtensible(Object.prototype.isPrototypeOf),
+ 'Object.isExtensible(Object.prototype.isPrototypeOf) must return true'
+);
+assert.sameValue(
+ Object.prototype.toString.call(Object.prototype.isPrototypeOf),
+ "[object Function]",
+ 'Object.prototype.toString.call(Object.prototype.isPrototypeOf) must return "[object Function]"'
+);
+assert.sameValue(
+ Object.getPrototypeOf(Object.prototype.isPrototypeOf),
+ Function.prototype,
+ 'Object.getPrototypeOf(Object.prototype.isPrototypeOf) must return the value of Function.prototype'
+);
+assert.sameValue(
+ Object.prototype.isPrototypeOf.hasOwnProperty("prototype"),
+ false,
+ 'Object.prototype.isPrototypeOf.hasOwnProperty("prototype") must return false'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/length.js b/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/length.js
new file mode 100644
index 0000000000..3bb8cfe675
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/length.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.isprototypeof
+description: >
+ Object.prototype.isPrototypeOf.length is 1.
+info: |
+ Object.prototype.isPrototypeOf ( V )
+
+ ECMAScript Standard Built-in Objects
+
+ Unless otherwise specified, the length property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+verifyProperty(Object.prototype.isPrototypeOf, "length", {
+ value: 1,
+ writable: false,
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/name.js b/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/name.js
new file mode 100644
index 0000000000..8019166101
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/name.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.isprototypeof
+description: >
+ Object.prototype.isPrototypeOf.name is "isPrototypeOf".
+info: |
+ Object.prototype.isPrototypeOf ( V )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+verifyProperty(Object.prototype.isPrototypeOf, "name", {
+ value: "isPrototypeOf",
+ writable: false,
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/not-a-constructor.js
new file mode 100644
index 0000000000..9de714cba9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.prototype.isPrototypeOf does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(Object.prototype.isPrototypeOf),
+ false,
+ 'isConstructor(Object.prototype.isPrototypeOf) must return false'
+);
+
+assert.throws(TypeError, () => {
+ new Object.prototype.isPrototypeOf({});
+}, '`new Object.prototype.isPrototypeOf({})` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/null-this-and-object-arg-throws.js b/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/null-this-and-object-arg-throws.js
new file mode 100644
index 0000000000..f9c1162a2c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/null-this-and-object-arg-throws.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2011 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.isprototypeof
+description: >
+ The ordering of steps 1 and 2 preserves the behaviour specified by previous
+ editions of this specification for the case where V is not an object and
+ the this value is undefined or null.
+info: |
+ Object.prototype.isPrototypeOf ( V )
+
+ 1. If Type(V) is not Object, return false.
+ 2. Let O be ? ToObject(this value).
+---*/
+
+assert.throws(TypeError, function() {
+ Object.prototype.isPrototypeOf.call(null, function() {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/null-this-and-primitive-arg-returns-false.js b/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/null-this-and-primitive-arg-returns-false.js
new file mode 100644
index 0000000000..ba4bc82ce6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/null-this-and-primitive-arg-returns-false.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.isprototypeof
+description: >
+ The ordering of steps 1 and 2 preserves the behaviour specified by previous
+ editions of this specification for the case where V is not an object and
+ the this value is undefined or null.
+info: |
+ Object.prototype.isPrototypeOf ( V )
+
+ 1. If Type(V) is not Object, return false.
+ 2. Let O be ? ToObject(this value).
+features: [Symbol]
+---*/
+
+assert.sameValue(Object.prototype.isPrototypeOf.call(null, undefined), false);
+assert.sameValue(Object.prototype.isPrototypeOf.call(null, null), false);
+assert.sameValue(Object.prototype.isPrototypeOf.call(null, false), false);
+assert.sameValue(Object.prototype.isPrototypeOf.call(null, ""), false);
+assert.sameValue(Object.prototype.isPrototypeOf.call(null, Symbol()), false);
+assert.sameValue(Object.prototype.isPrototypeOf.call(null, 10), false);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/shell.js b/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/shell.js
new file mode 100644
index 0000000000..bc72493f03
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/shell.js
@@ -0,0 +1,33 @@
+// GENERATED, DO NOT EDIT
+// file: proxyTrapsHelper.js
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: |
+ Used to assert the correctness of object behavior in the presence
+ and context of Proxy objects.
+defines: [allowProxyTraps]
+---*/
+
+function allowProxyTraps(overrides) {
+ function throwTest262Error(msg) {
+ return function () { throw new Test262Error(msg); };
+ }
+ if (!overrides) { overrides = {}; }
+ return {
+ getPrototypeOf: overrides.getPrototypeOf || throwTest262Error('[[GetPrototypeOf]] trap called'),
+ setPrototypeOf: overrides.setPrototypeOf || throwTest262Error('[[SetPrototypeOf]] trap called'),
+ isExtensible: overrides.isExtensible || throwTest262Error('[[IsExtensible]] trap called'),
+ preventExtensions: overrides.preventExtensions || throwTest262Error('[[PreventExtensions]] trap called'),
+ getOwnPropertyDescriptor: overrides.getOwnPropertyDescriptor || throwTest262Error('[[GetOwnProperty]] trap called'),
+ has: overrides.has || throwTest262Error('[[HasProperty]] trap called'),
+ get: overrides.get || throwTest262Error('[[Get]] trap called'),
+ set: overrides.set || throwTest262Error('[[Set]] trap called'),
+ deleteProperty: overrides.deleteProperty || throwTest262Error('[[Delete]] trap called'),
+ defineProperty: overrides.defineProperty || throwTest262Error('[[DefineOwnProperty]] trap called'),
+ enumerate: throwTest262Error('[[Enumerate]] trap called: this trap has been removed'),
+ ownKeys: overrides.ownKeys || throwTest262Error('[[OwnPropertyKeys]] trap called'),
+ apply: overrides.apply || throwTest262Error('[[Call]] trap called'),
+ construct: overrides.construct || throwTest262Error('[[Construct]] trap called')
+ };
+}
diff --git a/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/this-value-is-in-prototype-chain-of-arg.js b/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/this-value-is-in-prototype-chain-of-arg.js
new file mode 100644
index 0000000000..fe5773032a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/this-value-is-in-prototype-chain-of-arg.js
@@ -0,0 +1,44 @@
+// Copyright (C) 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.isprototypeof
+description: >
+ Object.prototype.isPrototypeOf returns true if either parameter V
+ and O refer to the same object or O is in [[Prototype]] chain of V.
+info: |
+ Object.prototype.isPrototypeOf ( V )
+
+ ...
+ 3. Repeat,
+ a. Set V to ? V.[[GetPrototypeOf]]().
+ b. If V is null, return false.
+ c. If SameValue(O, V) is true, return true.
+---*/
+
+function USER_FACTORY(name) {
+ this.name = name;
+ this.getName = function() {
+ return name;
+ };
+}
+
+function FORCEDUSER_FACTORY(name, grade) {
+ this.name = name;
+ this.grade = grade;
+ this.getGrade = function() {
+ return grade;
+ };
+}
+
+var proto = new USER_FACTORY("noname");
+
+FORCEDUSER_FACTORY.prototype = proto;
+
+var luke = new FORCEDUSER_FACTORY("Luke Skywalker", 12);
+
+assert.sameValue(proto.isPrototypeOf(luke), true);
+assert.sameValue(USER_FACTORY.prototype.isPrototypeOf(luke), true);
+assert.sameValue(Number.isPrototypeOf(luke), false);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/undefined-this-and-object-arg-throws.js b/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/undefined-this-and-object-arg-throws.js
new file mode 100644
index 0000000000..bc1fbd0bdc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/undefined-this-and-object-arg-throws.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2011 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.isprototypeof
+description: >
+ The ordering of steps 1 and 2 preserves the behaviour specified by previous
+ editions of this specification for the case where V is not an object and
+ the this value is undefined or null.
+info: |
+ Object.prototype.isPrototypeOf ( V )
+
+ 1. If Type(V) is not Object, return false.
+ 2. Let O be ? ToObject(this value).
+---*/
+
+assert.throws(TypeError, function() {
+ Object.prototype.isPrototypeOf.call(undefined, {});
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/undefined-this-and-primitive-arg-returns-false.js b/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/undefined-this-and-primitive-arg-returns-false.js
new file mode 100644
index 0000000000..fea05bce50
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/isPrototypeOf/undefined-this-and-primitive-arg-returns-false.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.isprototypeof
+description: >
+ The ordering of steps 1 and 2 preserves the behaviour specified by previous
+ editions of this specification for the case where V is not an object and
+ the this value is undefined or null.
+info: |
+ Object.prototype.isPrototypeOf ( V )
+
+ 1. If Type(V) is not Object, return false.
+ 2. Let O be ? ToObject(this value).
+features: [Symbol]
+---*/
+
+assert.sameValue(Object.prototype.isPrototypeOf.call(undefined, undefined), false);
+assert.sameValue(Object.prototype.isPrototypeOf.call(undefined, null), false);
+assert.sameValue(Object.prototype.isPrototypeOf.call(undefined, true), false);
+assert.sameValue(Object.prototype.isPrototypeOf.call(undefined, "str"), false);
+assert.sameValue(Object.prototype.isPrototypeOf.call(undefined, Symbol("desc")), false);
+assert.sameValue(Object.prototype.isPrototypeOf.call(undefined, 3.14), false);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A10.js b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A10.js
new file mode 100644
index 0000000000..399bcf58a7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A10.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The Object.prototype.propertyIsEnumerable.length property has the
+ attribute ReadOnly
+es5id: 15.2.4.7_A10
+description: >
+ Checking if varying the
+ Object.prototype.propertyIsEnumerable.length property fails
+includes: [propertyHelper.js]
+---*/
+assert(
+ !!Object.prototype.propertyIsEnumerable.hasOwnProperty('length'),
+ 'The value of !!Object.prototype.propertyIsEnumerable.hasOwnProperty("length") is expected to be true'
+);
+
+var obj = Object.prototype.propertyIsEnumerable.length;
+
+verifyNotWritable(Object.prototype.propertyIsEnumerable, "length", null, function() {
+ return "shifted";
+});
+
+assert.sameValue(
+ Object.prototype.propertyIsEnumerable.length,
+ obj,
+ 'The value of Object.prototype.propertyIsEnumerable.length is expected to equal the value of obj'
+);
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A11.js b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A11.js
new file mode 100644
index 0000000000..7f091b33b4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A11.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The length property of the hasOwnProperty method is 1
+es5id: 15.2.4.7_A11
+description: Checking the value of Object.prototype.hasOwnProperty.length
+---*/
+assert(
+ !!Object.prototype.propertyIsEnumerable.hasOwnProperty("length"),
+ 'The value of !!Object.prototype.propertyIsEnumerable.hasOwnProperty("length") is expected to be true'
+);
+
+assert.sameValue(
+ Object.prototype.propertyIsEnumerable.length,
+ 1,
+ 'The value of Object.prototype.propertyIsEnumerable.length is expected to be 1'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A12.js b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A12.js
new file mode 100644
index 0000000000..545bb9f14e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A12.js
@@ -0,0 +1,15 @@
+// Copyright 2011 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.4.7_A12
+description: >
+ Let O be the result of calling ToObject passing the this value as
+ the argument.
+---*/
+
+assert.throws(TypeError, function() {
+ Object.prototype.propertyIsEnumerable.call(undefined, 'foo');
+}, 'Object.prototype.propertyIsEnumerable.call(undefined, "foo") throws a TypeError exception');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A13.js b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A13.js
new file mode 100644
index 0000000000..95520cb233
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A13.js
@@ -0,0 +1,15 @@
+// Copyright 2011 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.4.7_A13
+description: >
+ Let O be the result of calling ToObject passing the this value as
+ the argument.
+---*/
+
+assert.throws(TypeError, function() {
+ Object.prototype.propertyIsEnumerable.call(null, 'foo');
+}, 'Object.prototype.propertyIsEnumerable.call(null, "foo") throws a TypeError exception');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A1_T1.js b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A1_T1.js
new file mode 100644
index 0000000000..ccdabf7a14
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A1_T1.js
@@ -0,0 +1,47 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The propertyIsEnumerable method does not consider objects in the
+ prototype chain
+es5id: 15.2.4.7_A1_T1
+description: >
+ Calling the propertyIsEnumerable method for object in the
+ prototype chain
+---*/
+assert.sameValue(
+ typeof Object.prototype.propertyIsEnumerable,
+ "function",
+ 'The value of `typeof Object.prototype.propertyIsEnumerable` is expected to be "function"'
+);
+
+var proto = {
+ rootprop: "avis"
+};
+
+function AVISFACTORY(name) {
+ this.name = name
+}
+
+AVISFACTORY.prototype = proto;
+
+var seagull = new AVISFACTORY("seagull");
+
+assert.sameValue(
+ typeof seagull.propertyIsEnumerable,
+ "function",
+ 'The value of `typeof seagull.propertyIsEnumerable` is expected to be "function"'
+);
+
+assert(
+ !!seagull.propertyIsEnumerable("name"),
+ 'The value of !!seagull.propertyIsEnumerable("name") is expected to be true'
+);
+
+assert(
+ !seagull.propertyIsEnumerable("rootprop"),
+ 'The value of !seagull.propertyIsEnumerable("rootprop") is expected to be true'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A2_T1.js b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A2_T1.js
new file mode 100644
index 0000000000..bcdeb02656
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A2_T1.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the propertyIsEnumerable method is called with argument V, the following steps are taken:
+ i) Let O be this object
+ ii) Call ToString(V)
+ iii) If O doesn't have a property with the name given by Result(ii), return false
+ iv) If the property has the DontEnum attribute, return false
+ v) Return true
+es5id: 15.2.4.7_A2_T1
+description: >
+ Checking the type of Object.prototype.propertyIsEnumerable and the
+ returned result
+---*/
+assert.sameValue(
+ typeof Object.prototype.propertyIsEnumerable,
+ "function",
+ 'The value of `typeof Object.prototype.propertyIsEnumerable` is expected to be "function"'
+);
+
+assert(
+ !Object.prototype.propertyIsEnumerable("propertyIsEnumerable"),
+ 'The value of !Object.prototype.propertyIsEnumerable("propertyIsEnumerable") is expected to be true'
+);
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A2_T2.js b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A2_T2.js
new file mode 100644
index 0000000000..cfee052ef9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A2_T2.js
@@ -0,0 +1,46 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ When the propertyIsEnumerable method is called with argument V, the following steps are taken:
+ i) Let O be this object
+ ii) Call ToString(V)
+ iii) If O doesn't have a property with the name given by Result(ii), return false
+ iv) If the property has the DontEnum attribute, return false
+ v) Return true
+es5id: 15.2.4.7_A2_T2
+description: >
+ Argument of the propertyIsEnumerable method is a custom boolean
+ property
+---*/
+assert.sameValue(
+ typeof Object.prototype.propertyIsEnumerable,
+ "function",
+ 'The value of `typeof Object.prototype.propertyIsEnumerable` is expected to be "function"'
+);
+
+var obj = {
+ the_property: true
+};
+
+assert.sameValue(
+ typeof obj.propertyIsEnumerable,
+ "function",
+ 'The value of `typeof obj.propertyIsEnumerable` is expected to be "function"'
+);
+
+assert(
+ !!obj.propertyIsEnumerable("the_property"),
+ 'The value of !!obj.propertyIsEnumerable("the_property") is expected to be true'
+);
+
+var accum = "";
+for (var prop in obj) {
+ accum += prop;
+}
+assert.sameValue(accum.indexOf("the_property"), 0, 'accum.indexOf("the_property") must return 0');
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A6.js b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A6.js
new file mode 100644
index 0000000000..ee0a6b3eb4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A6.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Object.prototype.propertyIsEnumerable has not prototype property
+es5id: 15.2.4.7_A6
+description: >
+ Checking if obtaining the prototype property of
+ Object.prototype.propertyIsEnumerable fails
+---*/
+assert.sameValue(
+ Object.prototype.propertyIsEnumerable.prototype,
+ undefined,
+ 'The value of Object.prototype.propertyIsEnumerable.prototype is expected to equal undefined'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A8.js b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A8.js
new file mode 100644
index 0000000000..8555db0e5f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A8.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The Object.prototype.propertyIsEnumerable.length property has the
+ attribute DontEnum
+es5id: 15.2.4.7_A8
+description: >
+ Checking if enumerating the
+ Object.prototype.propertyIsEnumerable.length property fails
+---*/
+assert(
+ !!Object.prototype.propertyIsEnumerable.hasOwnProperty('length'),
+ 'The value of !!Object.prototype.propertyIsEnumerable.hasOwnProperty("length") is expected to be true'
+);
+
+assert(
+ !Object.prototype.propertyIsEnumerable.propertyIsEnumerable('length'),
+ 'The value of !Object.prototype.propertyIsEnumerable.propertyIsEnumerable("length") is expected to be true'
+);
+
+for (var p in Object.prototype.propertyIsEnumerable) {
+ assert.notSameValue(p, "length", 'The value of p is not "length"');
+}
+//
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A9.js b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A9.js
new file mode 100644
index 0000000000..8f7264d09e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/S15.2.4.7_A9.js
@@ -0,0 +1,25 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The Object.prototype.propertyIsEnumerable.length property does not have
+ the attribute DontDelete
+es5id: 15.2.4.7_A9
+description: >
+ Checking if deleting the
+ Object.prototype.propertyIsEnumerable.length property fails
+---*/
+assert(
+ !!Object.prototype.propertyIsEnumerable.hasOwnProperty('length'),
+ 'The value of !!Object.prototype.propertyIsEnumerable.hasOwnProperty("length") is expected to be true'
+);
+
+assert(
+ !!delete Object.prototype.propertyIsEnumerable.length,
+ 'The value of !!delete Object.prototype.propertyIsEnumerable.length is expected to be true'
+);
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/browser.js b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/name.js b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/name.js
new file mode 100644
index 0000000000..9054d1f7a5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/name.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 19.1.3.4
+description: >
+ Object.prototype.propertyIsEnumerable.name is "propertyIsEnumerable".
+info: |
+ Object.prototype.propertyIsEnumerable ( V )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.prototype.propertyIsEnumerable.name, "propertyIsEnumerable");
+
+verifyNotEnumerable(Object.prototype.propertyIsEnumerable, "name");
+verifyNotWritable(Object.prototype.propertyIsEnumerable, "name");
+verifyConfigurable(Object.prototype.propertyIsEnumerable, "name");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/not-a-constructor.js
new file mode 100644
index 0000000000..e8bdaf469e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.prototype.propertyIsEnumerable does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(Object.prototype.propertyIsEnumerable),
+ false,
+ 'isConstructor(Object.prototype.propertyIsEnumerable) must return false'
+);
+
+assert.throws(TypeError, () => {
+ new Object.prototype.propertyIsEnumerable('');
+}, '`new Object.prototype.propertyIsEnumerable(\'\')` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/shell.js b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/symbol_own_property.js b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/symbol_own_property.js
new file mode 100644
index 0000000000..e1782e295b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/symbol_own_property.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.prototype.propertyIsEnumerable called with symbol property key
+info: |
+ 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
+
+ 1. Let P be ToPropertyKey(V).
+ 2. ReturnIfAbrupt(P).
+ ...
+es6id: 19.1.3.4
+features: [Symbol]
+---*/
+
+var obj = {};
+var sym = Symbol();
+
+assert.sameValue(
+ obj.propertyIsEnumerable(sym),
+ false,
+ "Returns false if symbol own property not found"
+);
+
+obj[sym] = 0;
+
+assert.sameValue(
+ obj.propertyIsEnumerable(sym),
+ true,
+ "Returns true if symbol own enumerable property found"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/symbol_property_toPrimitive.js b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/symbol_property_toPrimitive.js
new file mode 100644
index 0000000000..cd2a1763c3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/symbol_property_toPrimitive.js
@@ -0,0 +1,36 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.prototype.propertyIsEnumerable with symbol and @@toPrimitive conversion
+info: |
+ 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
+
+ 1. Let P be ToPropertyKey(V).
+ 2. ReturnIfAbrupt(P).
+ ...
+es6id: 19.1.3.4
+features: [Symbol.toPrimitive]
+---*/
+
+var obj = {};
+var sym = Symbol();
+
+var callCount = 0;
+var wrapper = {};
+wrapper[Symbol.toPrimitive] = function() {
+ callCount += 1;
+ return sym;
+};
+
+obj[sym] = 0;
+
+assert.sameValue(
+ obj.propertyIsEnumerable(wrapper),
+ true,
+ "Returns true if symbol own enumerable property found"
+);
+
+assert.sameValue(callCount, 1, "toPrimitive method called exactly once");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/symbol_property_toString.js b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/symbol_property_toString.js
new file mode 100644
index 0000000000..6eff94884c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/symbol_property_toString.js
@@ -0,0 +1,40 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.prototype.propertyIsEnumerable with symbol and toString conversion
+info: |
+ 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
+
+ 1. Let P be ToPropertyKey(V).
+ 2. ReturnIfAbrupt(P).
+ ...
+es6id: 19.1.3.4
+features: [Symbol]
+---*/
+
+var obj = {};
+var sym = Symbol();
+
+var callCount = 0;
+var wrapper = {
+ toString: function() {
+ callCount += 1;
+ return sym;
+ },
+ valueOf: function() {
+ throw new Test262Error("valueOf() called");
+ }
+};
+
+obj[sym] = 0;
+
+assert.sameValue(
+ obj.propertyIsEnumerable(wrapper),
+ true,
+ "Returns true if symbol own enumerable property found"
+);
+
+assert.sameValue(callCount, 1, "toString method called exactly once");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/symbol_property_valueOf.js b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/symbol_property_valueOf.js
new file mode 100644
index 0000000000..b844b6219f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/propertyIsEnumerable/symbol_property_valueOf.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.prototype.propertyIsEnumerable with symbol and valueOf conversion
+info: |
+ 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
+
+ 1. Let P be ToPropertyKey(V).
+ 2. ReturnIfAbrupt(P).
+ ...
+es6id: 19.1.3.4
+features: [Symbol]
+---*/
+
+var obj = {};
+var sym = Symbol();
+
+var callCount = 0;
+var wrapper = {
+ valueOf: function() {
+ callCount += 1;
+ return sym;
+ },
+ toString: null
+};
+
+obj[sym] = 0;
+
+assert.sameValue(
+ obj.propertyIsEnumerable(wrapper),
+ true,
+ "Returns true if symbol own enumerable property found"
+);
+
+assert.sameValue(callCount, 1, "valueOf method called exactly once");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/proto.js b/js/src/tests/test262/built-ins/Object/prototype/proto.js
new file mode 100644
index 0000000000..3a8ae4c536
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/proto.js
@@ -0,0 +1,16 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-properties-of-the-object-prototype-object
+description: >
+ The value of the [[Prototype]] internal slot of Object.prototype is null
+info: |
+ 19.1.3 Properties of the Object Prototype Object
+
+ The value of the [[Prototype]] internal slot of the Object prototype object is
+ null and the initial value of the [[Extensible]] internal slot is true.
+---*/
+
+assert.sameValue(Object.getPrototypeOf(Object.prototype), null);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/setPrototypeOf-with-different-values.js b/js/src/tests/test262/built-ins/Object/prototype/setPrototypeOf-with-different-values.js
new file mode 100644
index 0000000000..7574602a4c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/setPrototypeOf-with-different-values.js
@@ -0,0 +1,54 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-immutable-prototype-exotic-objects-setprototypeof-v
+description: >
+ Object.prototype's [[SetPrototypeOf]] returns false if value is not the same
+info: |
+ 9.4.7.1 [[SetPrototypeOf]] (V)
+
+ ...
+ 2. Let current be the value of the [[Prototype]] internal slot of O.
+ 3. If SameValue(V, current), return true.
+ 4. Return false.
+
+ 19.1.3 Properties of the Object Prototype Object
+
+ The value of the [[Prototype]] internal slot of the Object prototype object is
+ null and the initial value of the [[Extensible]] internal slot is true.
+features: [Reflect.setPrototypeOf]
+---*/
+
+var ObjProto = Object.prototype;
+
+assert.throws(TypeError, function() {
+ Object.setPrototypeOf(ObjProto, {});
+}, "Object.setPrototypeOf(ObjProto, {}) throws a TypeError");
+
+assert.throws(TypeError, function() {
+ Object.setPrototypeOf(ObjProto, Array.prototype);
+}, "Object.setPrototypeOf(ObjProto, Array.prototype) throws a TypeError");
+
+assert.throws(TypeError, function() {
+ Object.setPrototypeOf(ObjProto, ObjProto);
+}, "Object.setPrototypeOf(ObjProto, ObjProto) throws a TypeError");
+
+assert.sameValue(
+ Reflect.setPrototypeOf(ObjProto, {}),
+ false,
+ "Reflect.setPrototypeOf(ObjProto, {}) returns false"
+);
+
+assert.sameValue(
+ Reflect.setPrototypeOf(ObjProto, Array.prototype),
+ false,
+ "Reflect.setPrototypeOf(ObjProto, Array.prototype) returns false"
+);
+
+assert.sameValue(
+ Reflect.setPrototypeOf(ObjProto, ObjProto),
+ false,
+ "Reflect.setPrototypeOf(ObjProto, ObjProto) returns false"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/setPrototypeOf-with-same-value.js b/js/src/tests/test262/built-ins/Object/prototype/setPrototypeOf-with-same-value.js
new file mode 100644
index 0000000000..ea30d049bf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/setPrototypeOf-with-same-value.js
@@ -0,0 +1,46 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-immutable-prototype-exotic-objects-setprototypeof-v
+description: >
+ Object.prototype's [[SetPrototypeOf]] returns true if value is same
+info: |
+ 9.4.7.1 [[SetPrototypeOf]] (V)
+
+ ...
+ 2. Let current be the value of the [[Prototype]] internal slot of O.
+ 3. If SameValue(V, current), return true.
+ 4. Return false.
+
+ 19.1.3 Properties of the Object Prototype Object
+
+ The value of the [[Prototype]] internal slot of the Object prototype object is
+ null and the initial value of the [[Extensible]] internal slot is true.
+features: [Reflect.setPrototypeOf]
+---*/
+
+var ObjProto = Object.prototype;
+
+assert.sameValue(
+ Object.setPrototypeOf(ObjProto, null),
+ ObjProto,
+ "Object.setPrototypeOf(ObjProto, null) returns the Object.prototype"
+);
+
+assert(
+ Object.isExtensible(ObjProto),
+ "Object.prototype is still extensible after a setPrototypeOf operation - #1"
+);
+
+assert.sameValue(
+ Reflect.setPrototypeOf(ObjProto, null),
+ true,
+ "Reflect.setPrototypeOf(ObjProto, null) returns true"
+);
+
+assert(
+ Object.isExtensible(ObjProto),
+ "Object.prototype is still extensible after a setPrototypeOf operation - #2"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/shell.js b/js/src/tests/test262/built-ins/Object/prototype/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A1.js b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A1.js
new file mode 100644
index 0000000000..1875921aa6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A1.js
@@ -0,0 +1,29 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: toLocaleString function returns the result of calling toString()
+es5id: 15.2.4.3_A1
+description: >
+ Checking the type of Object.prototype.toLocaleString and the
+ returned result
+---*/
+assert.sameValue(
+ typeof Object.prototype.toLocaleString,
+ "function",
+ 'The value of `typeof Object.prototype.toLocaleString` is expected to be "function"'
+);
+
+assert.sameValue(
+ Object.prototype.toLocaleString(),
+ Object.prototype.toString(),
+ 'Object.prototype.toLocaleString() must return the same value returned by Object.prototype.toString()'
+);
+
+assert.sameValue(
+ {}.toLocaleString(),
+ {}.toString(),
+ '({}).toLocaleString() must return the same value returned by ({}).toString()'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A10.js b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A10.js
new file mode 100644
index 0000000000..788bc27196
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A10.js
@@ -0,0 +1,33 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The Object.prototype.toLocaleString.length property has the attribute
+ ReadOnly
+es5id: 15.2.4.3_A10
+description: >
+ Checking if varying the Object.prototype.toLocaleString.length
+ property fails
+includes: [propertyHelper.js]
+---*/
+assert(
+ !!Object.prototype.toLocaleString.hasOwnProperty('length'),
+ 'The value of !!Object.prototype.toLocaleString.hasOwnProperty("length") is expected to be true'
+);
+
+var obj = Object.prototype.toLocaleString.length;
+
+verifyNotWritable(Object.prototype.toLocaleString, "length", null, function() {
+ return "shifted";
+});
+
+assert.sameValue(
+ Object.prototype.toLocaleString.length,
+ obj,
+ 'The value of Object.prototype.toLocaleString.length is expected to equal the value of obj'
+);
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A11.js b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A11.js
new file mode 100644
index 0000000000..1afdd3a546
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A11.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The length property of the toLocaleString method is 0
+es5id: 15.2.4.3_A11
+description: Checking the Object.prototype.toLocaleString.length
+---*/
+assert(
+ !!Object.prototype.toLocaleString.hasOwnProperty("length"),
+ 'The value of !!Object.prototype.toLocaleString.hasOwnProperty("length") is expected to be true'
+);
+
+assert.sameValue(
+ Object.prototype.toLocaleString.length,
+ 0,
+ 'The value of Object.prototype.toLocaleString.length is expected to be 0'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A12.js b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A12.js
new file mode 100644
index 0000000000..299609daed
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A12.js
@@ -0,0 +1,15 @@
+// Copyright 2011 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.4.3_A12
+description: >
+ Let O be the result of calling ToObject passing the this value as
+ the argument.
+---*/
+
+assert.throws(TypeError, function() {
+ Object.prototype.toLocaleString.call(undefined);
+}, 'Object.prototype.toLocaleString.call(undefined) throws a TypeError exception');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A13.js b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A13.js
new file mode 100644
index 0000000000..c51669fa64
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A13.js
@@ -0,0 +1,15 @@
+// Copyright 2011 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.4.3_A13
+description: >
+ Let O be the result of calling ToObject passing the this value as
+ the argument.
+---*/
+
+assert.throws(TypeError, function() {
+ Object.prototype.toLocaleString.call(null);
+}, 'Object.prototype.toLocaleString.call(null) throws a TypeError exception');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A6.js b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A6.js
new file mode 100644
index 0000000000..8f316e0dd4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A6.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Object.prototype.toLocaleString has not prototype property
+es5id: 15.2.4.3_A6
+description: >
+ Checking if obtaining the prototype property of
+ Object.prototype.toLocaleString fails
+---*/
+assert.sameValue(
+ Object.prototype.toLocaleString.prototype,
+ undefined,
+ 'The value of Object.prototype.toLocaleString.prototype is expected to equal undefined'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A8.js b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A8.js
new file mode 100644
index 0000000000..4b67335a4c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A8.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The Object.prototype.toLocaleString.length property has the attribute
+ DontEnum
+es5id: 15.2.4.3_A8
+description: >
+ Checking if enumerating the Object.prototype.toLocaleString.length
+ property fails
+---*/
+assert(
+ !!Object.prototype.toLocaleString.hasOwnProperty('length'),
+ 'The value of !!Object.prototype.toLocaleString.hasOwnProperty("length") is expected to be true'
+);
+
+assert(
+ !Object.prototype.toLocaleString.propertyIsEnumerable('length'),
+ 'The value of !Object.prototype.toLocaleString.propertyIsEnumerable("length") is expected to be true'
+);
+
+for (var p in Object.prototype.toLocaleString) {
+ assert.notSameValue(p, "length", 'The value of p is not "length"');
+}
+//
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A9.js b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A9.js
new file mode 100644
index 0000000000..861a0728d9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/S15.2.4.3_A9.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The Object.prototype.toLocaleString.length property does not have the
+ attribute DontDelete
+es5id: 15.2.4.3_A9
+description: >
+ Checknig if deleting of the Object.prototype.toLocaleString.length
+ property fails
+---*/
+assert(
+ !!Object.prototype.toLocaleString.hasOwnProperty('length'),
+ 'The value of !!Object.prototype.toLocaleString.hasOwnProperty("length") is expected to be true'
+);
+
+assert(
+ !!delete Object.prototype.toLocaleString.length,
+ 'The value of !!delete Object.prototype.toLocaleString.length is expected to be true'
+);
+
+assert(
+ !Object.prototype.toLocaleString.hasOwnProperty('length'),
+ 'The value of !Object.prototype.toLocaleString.hasOwnProperty("length") is expected to be true'
+);
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/browser.js b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/name.js b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/name.js
new file mode 100644
index 0000000000..5f258165ba
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/name.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 19.1.3.5
+description: >
+ Object.prototype.toLocaleString.name is "toLocaleString".
+info: |
+ Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.prototype.toLocaleString.name, "toLocaleString");
+
+verifyNotEnumerable(Object.prototype.toLocaleString, "name");
+verifyNotWritable(Object.prototype.toLocaleString, "name");
+verifyConfigurable(Object.prototype.toLocaleString, "name");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/not-a-constructor.js
new file mode 100644
index 0000000000..49fc0525db
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.prototype.toLocaleString does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(Object.prototype.toLocaleString),
+ false,
+ 'isConstructor(Object.prototype.toLocaleString) must return false'
+);
+
+assert.throws(TypeError, () => {
+ new Object.prototype.toLocaleString('');
+}, '`new Object.prototype.toLocaleString(\'\')` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/primitive_this_value-strict.js b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/primitive_this_value-strict.js
new file mode 100644
index 0000000000..d606e49552
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/primitive_this_value-strict.js
@@ -0,0 +1,22 @@
+'use strict';
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.prototype.toLocaleString called with primitive thisValue
+info: |
+ 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
+
+ ...
+ 2. Return Invoke(O, "toString").
+es6id: 19.1.3.5
+flags: [onlyStrict]
+---*/
+
+Boolean.prototype.toString = function() {
+ return typeof this;
+};
+
+assert.sameValue(true.toLocaleString(), "boolean");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/primitive_this_value_getter-strict.js b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/primitive_this_value_getter-strict.js
new file mode 100644
index 0000000000..b7281954d1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/primitive_this_value_getter-strict.js
@@ -0,0 +1,27 @@
+'use strict';
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: Object.prototype.toLocaleString called with primitive thisValue in getter
+info: |
+ 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
+
+ ...
+ 2. Return Invoke(O, "toString").
+es6id: 19.1.3.5
+flags: [onlyStrict]
+---*/
+
+Object.defineProperty(Boolean.prototype, "toString", {
+ get: function() {
+ var v = typeof this;
+ return function() {
+ return v;
+ };
+ }
+});
+
+assert.sameValue(true.toLocaleString(), "boolean");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/shell.js b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toLocaleString/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-arguments.js b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-arguments.js
new file mode 100644
index 0000000000..c4a891f548
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-arguments.js
@@ -0,0 +1,14 @@
+// Copyright 2018 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.tostring
+description: has a [[ParameterMap]] internal slot, let builtinTag be "Arguments".
+---*/
+assert.sameValue(
+ Object.prototype.toString.call(function() { return arguments; }()),
+ "[object Arguments]",
+ "Object.prototype.toString.call(function() { return arguments; }()) returns [object Arguments]"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-array.js b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-array.js
new file mode 100644
index 0000000000..ef404f5cbc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-array.js
@@ -0,0 +1,34 @@
+// Copyright 2018 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.tostring
+description: Let isArray be ? IsArray(O). If isArray is true, let builtinTag be "Array".
+---*/
+assert.sameValue(
+ Object.prototype.toString.call([]),
+ "[object Array]",
+ "Object.prototype.toString.call([]) returns [object Array]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(Object([])),
+ "[object Array]",
+ "Object.prototype.toString.call(Object([])) returns [object Array]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(Array()),
+ "[object Array]",
+ "Object.prototype.toString.call(Array()) returns [object Array]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(Object(Array())),
+ "[object Array]",
+ "Object.prototype.toString.call(Object(Array())) returns [object Array]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(Object(new Array())),
+ "[object Array]",
+ "Object.prototype.toString.call(Object(new Array())) returns [object Array]"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-bigint.js b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-bigint.js
new file mode 100644
index 0000000000..be72a576c2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-bigint.js
@@ -0,0 +1,16 @@
+// Copyright (C) 2017 Igalia, S. L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.tostring
+description: BigInt.prototype[@@toStringTag] is BigInt
+info: |
+ Let tag be ? Get(O, @@toStringTag).
+features: [BigInt]
+---*/
+assert.sameValue(Object.prototype.toString.call(3n), "[object BigInt]");
+assert.sameValue(Object.prototype.toString.call(Object(3n)), "[object BigInt]");
+assert.sameValue(Object.prototype.toString.call(BigInt(3n)), "[object BigInt]");
+assert.sameValue(Object.prototype.toString.call(Object(BigInt(3n))), "[object BigInt]");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-boolean.js b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-boolean.js
new file mode 100644
index 0000000000..57b24bd76a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-boolean.js
@@ -0,0 +1,39 @@
+// Copyright 2018 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.tostring
+description: has a [[BooleanData]] internal slot, let builtinTag be "Boolean".
+---*/
+assert.sameValue(
+ Object.prototype.toString.call(true),
+ "[object Boolean]",
+ "Object.prototype.toString.call(true) returns [object Boolean]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(Object(true)),
+ "[object Boolean]",
+ "Object.prototype.toString.call(Object(true)) returns [object Boolean]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(Boolean(true)),
+ "[object Boolean]",
+ "Object.prototype.toString.call(Boolean(true)) returns [object Boolean]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(Object(Boolean(true))),
+ "[object Boolean]",
+ "Object.prototype.toString.call(Object(Boolean(true))) returns [object Boolean]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(new Boolean(true)),
+ "[object Boolean]",
+ "Object.prototype.toString.call(new Boolean(true)) returns [object Boolean]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(Object(new Boolean(true))),
+ "[object Boolean]",
+ "Object.prototype.toString.call(Object(new Boolean(true))) returns [object Boolean]"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-date.js b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-date.js
new file mode 100644
index 0000000000..7123fe988d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-date.js
@@ -0,0 +1,19 @@
+// Copyright 2018 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.tostring
+description: is a String exotic object, let builtinTag be "String".
+---*/
+assert.sameValue(
+ Object.prototype.toString.call(new Date()),
+ "[object Date]",
+ "Object.prototype.toString.call(new Date()) returns [object Date]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(Object(new Date())),
+ "[object Date]",
+ "Object.prototype.toString.call(Object(new Date())) returns [object Date]"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-error.js b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-error.js
new file mode 100644
index 0000000000..044d4349c7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-error.js
@@ -0,0 +1,29 @@
+// Copyright 2018 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.tostring
+description: has an [[ErrorData]] internal slot, let builtinTag be "Error".
+---*/
+assert.sameValue(
+ Object.prototype.toString.call(Error()),
+ "[object Error]",
+ "Object.prototype.toString.call(Error()) returns [object Error]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(Object(Error())),
+ "[object Error]",
+ "Object.prototype.toString.call(Object(Error())) returns [object Error]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(new Error()),
+ "[object Error]",
+ "Object.prototype.toString.call(new Error()) returns [object Error]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(Object(new Error())),
+ "[object Error]",
+ "Object.prototype.toString.call(Object(new Error())) returns [object Error]"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-function.js b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-function.js
new file mode 100644
index 0000000000..e0f694a12f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-function.js
@@ -0,0 +1,39 @@
+// Copyright 2018 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.tostring
+description: has a [[Call]] internal method, let builtinTag be "Function".
+---*/
+assert.sameValue(
+ Object.prototype.toString.call(function() {}),
+ "[object Function]",
+ "Object.prototype.toString.call(function() {}) returns [object Function]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(Object(function() {})),
+ "[object Function]",
+ "Object.prototype.toString.call(Object(function() {})) returns [object Function]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(Function()),
+ "[object Function]",
+ "Object.prototype.toString.call(Function()) returns [object Function]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(Object(Function())),
+ "[object Function]",
+ "Object.prototype.toString.call(Object(Function())) returns [object Function]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(new Function()),
+ "[object Function]",
+ "Object.prototype.toString.call(new Function()) returns [object Function]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(Object(new Function())),
+ "[object Function]",
+ "Object.prototype.toString.call(Object(new Function())) returns [object Function]"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-null.js b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-null.js
new file mode 100644
index 0000000000..b403798f62
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-null.js
@@ -0,0 +1,14 @@
+// Copyright 2018 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.tostring
+description: If the this value is null, return "[object Null]".
+---*/
+assert.sameValue(
+ Object.prototype.toString.call(null),
+ "[object Null]",
+ "Object.prototype.toString.call(null) returns [object Null]"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-number.js b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-number.js
new file mode 100644
index 0000000000..0c51af6dd2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-number.js
@@ -0,0 +1,39 @@
+// Copyright 2018 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.tostring
+description: has a [[NumberData]] internal slot, let builtinTag be "Number"
+---*/
+assert.sameValue(
+ Object.prototype.toString.call(9),
+ "[object Number]",
+ "Object.prototype.toString.call(9) returns [object Number]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(Object(9)),
+ "[object Number]",
+ "Object.prototype.toString.call(Object(9)) returns [object Number]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(Number(9)),
+ "[object Number]",
+ "Object.prototype.toString.call(Number(9)) returns [object Number]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(Object(Number(9))),
+ "[object Number]",
+ "Object.prototype.toString.call(Object(Number(9))) returns [object Number]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(new Number(9)),
+ "[object Number]",
+ "Object.prototype.toString.call(new Number(9)) returns [object Number]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(Object(new Number(9))),
+ "[object Number]",
+ "Object.prototype.toString.call(Object(new Number(9))) returns [object Number]"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-object.js b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-object.js
new file mode 100644
index 0000000000..755744dd8d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-object.js
@@ -0,0 +1,24 @@
+// Copyright 2018 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.tostring
+description: Else, let builtinTag be "Object".
+---*/
+assert.sameValue(
+ Object.prototype.toString.call({}),
+ "[object Object]",
+ "Object.prototype.toString.call({}) returns [object Object]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(Object({})),
+ "[object Object]",
+ "Object.prototype.toString.call(Object({})) returns [object Object]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(new Object({})),
+ "[object Object]",
+ "Object.prototype.toString.call(new Object({})) returns [object Object]"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-regexp.js b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-regexp.js
new file mode 100644
index 0000000000..8e9f77955d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-regexp.js
@@ -0,0 +1,29 @@
+// Copyright 2018 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.tostring
+description: has a [[RegExpMatcher]] internal slot, let builtinTag be "RegExp".
+---*/
+assert.sameValue(
+ Object.prototype.toString.call(/./),
+ "[object RegExp]",
+ "Object.prototype.toString.call(/./) returns [object RegExp]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(Object(/./)),
+ "[object RegExp]",
+ "Object.prototype.toString.call(Object(/./)) returns [object RegExp]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(new RegExp()),
+ "[object RegExp]",
+ "Object.prototype.toString.call(new RegExp()) returns [object RegExp]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(Object(new RegExp())),
+ "[object RegExp]",
+ "Object.prototype.toString.call(Object(new RegExp())) returns [object RegExp]"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-string.js b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-string.js
new file mode 100644
index 0000000000..61c9853ae0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-string.js
@@ -0,0 +1,39 @@
+// Copyright 2018 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.tostring
+description: is a String exotic object, let builtinTag be "String".
+---*/
+assert.sameValue(
+ Object.prototype.toString.call(""),
+ "[object String]",
+ "Object.prototype.toString.call(\"\") returns [object String]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(Object("")),
+ "[object String]",
+ "Object.prototype.toString.call(Object(\"\")) returns [object String]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(String("")),
+ "[object String]",
+ "Object.prototype.toString.call(String(\"\")) returns [object String]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(Object(String(""))),
+ "[object String]",
+ "Object.prototype.toString.call(Object(String(\"\"))) returns [object String]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(new String("")),
+ "[object String]",
+ "Object.prototype.toString.call(new String(\"\")) returns [object String]"
+);
+assert.sameValue(
+ Object.prototype.toString.call(Object(new String(""))),
+ "[object String]",
+ "Object.prototype.toString.call(Object(new String(\"\"))) returns [object String]"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-undefined.js b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-undefined.js
new file mode 100644
index 0000000000..8c2883d9b4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/Object.prototype.toString.call-undefined.js
@@ -0,0 +1,14 @@
+// Copyright 2018 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.tostring
+description: If the this value is undefined, return "[object Undefined]".
+---*/
+assert.sameValue(
+ Object.prototype.toString.call(undefined),
+ "[object Undefined]",
+ "Object.prototype.toString.call(undefined) returns [object Undefined]"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/browser.js b/js/src/tests/test262/built-ins/Object/prototype/toString/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/direct-invocation.js b/js/src/tests/test262/built-ins/Object/prototype/toString/direct-invocation.js
new file mode 100644
index 0000000000..74b7f781c9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/direct-invocation.js
@@ -0,0 +1,19 @@
+// Copyright 2018 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.tostring
+description: Else, let builtinTag be "Object".
+---*/
+assert.sameValue(
+ Object.prototype.toString(),
+ "[object Object]",
+ "Object.prototype.toString() returns [object Object]"
+);
+assert.sameValue(
+ {}.toString(),
+ "[object Object]",
+ "({}).toString() returns [object Object]"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/get-symbol-tag-err.js b/js/src/tests/test262/built-ins/Object/prototype/toString/get-symbol-tag-err.js
new file mode 100644
index 0000000000..831c04cf1b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/get-symbol-tag-err.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Behavior if error is thrown when accessing `Symbol.toStringTag` property
+es6id: 19.1.3.6
+info: |
+ 16. Let tag be Get (O, @@toStringTag).
+ 17. ReturnIfAbrupt(tag).
+features: [Symbol.toStringTag]
+---*/
+
+var poisonedToStringTag = Object.defineProperty({}, Symbol.toStringTag, {
+ get: function() {
+ throw new Test262Error();
+ }
+});
+
+assert.throws(Test262Error, function() {
+ poisonedToStringTag.toString();
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/length.js b/js/src/tests/test262/built-ins/Object/prototype/toString/length.js
new file mode 100644
index 0000000000..5ddddeed78
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/length.js
@@ -0,0 +1,32 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.tostring
+description: >
+ Object.prototype.toString.length is 0.
+info: |
+ Object.prototype.toString ( )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, has a length
+ property whose value is an integer. Unless otherwise specified, this
+ value is equal to the largest number of named arguments shown in the
+ subclause headings for the function description, including optional
+ parameters. However, rest parameters shown using the form “...name”
+ are not included in the default argument count.
+
+ Unless otherwise specified, the length property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+verifyProperty(Object.prototype.toString, "length", {
+ value: 0,
+ writable: false,
+ enumerable: false,
+ configurable: true
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/name.js b/js/src/tests/test262/built-ins/Object/prototype/toString/name.js
new file mode 100644
index 0000000000..9838a5762b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/name.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 19.1.3.6
+description: >
+ Object.prototype.toString.name is "toString".
+info: |
+ Object.prototype.toString ( )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+verifyProperty(Object.prototype.toString, "name", {
+ value: "toString",
+ writable: false,
+ enumerable: false,
+ configurable: true,
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/no-prototype-property.js b/js/src/tests/test262/built-ins/Object/prototype/toString/no-prototype-property.js
new file mode 100644
index 0000000000..e2a81a9757
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/no-prototype-property.js
@@ -0,0 +1,15 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: sec-object.prototype.tostring
+description: Object.prototype.toString has no prototype property
+---*/
+
+assert.sameValue(
+ Object.prototype.toString.hasOwnProperty("prototype"),
+ false,
+ "Object.prototype.toString.hasOwnProperty(\"prototype\") returns false"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/prototype/toString/not-a-constructor.js
new file mode 100644
index 0000000000..54f974d24f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.prototype.toString does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(Object.prototype.toString),
+ false,
+ 'isConstructor(Object.prototype.toString) must return false'
+);
+
+assert.throws(TypeError, () => {
+ new Object.prototype.toString();
+}, '`new Object.prototype.toString()` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/prop-desc.js b/js/src/tests/test262/built-ins/Object/prototype/toString/prop-desc.js
new file mode 100644
index 0000000000..7d3ac0d66b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/prop-desc.js
@@ -0,0 +1,23 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.tostring
+description: >
+ Object.prototype.toString property descriptor
+info: |
+ 17 ECMAScript Standard Built-in Objects:
+
+ ...
+ Every other data property described in clauses 18 through 26
+ and in Annex B.2 has the attributes { [[Writable]]: true,
+ [[Enumerable]]: false, [[Configurable]]: true } unless otherwise specified.
+
+includes: [propertyHelper.js]
+---*/
+
+verifyWritable(Object.prototype, "toString");
+verifyNotEnumerable(Object.prototype, "toString");
+verifyConfigurable(Object.prototype, "toString");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/proxy-array.js b/js/src/tests/test262/built-ins/Object/prototype/toString/proxy-array.js
new file mode 100644
index 0000000000..774c1c4735
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/proxy-array.js
@@ -0,0 +1,41 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.prototype.tostring
+description: Proxy of an array is treated as an array
+info: |
+ [...]
+ 3. Let O be ToObject(this value).
+ 4. Let isArray be ? IsArray(O).
+ 5. If isArray is true, let builtinTag be "Array".
+ [...]
+
+ 7.2.2 IsArray
+
+ [...]
+ 3. If argument is a Proxy exotic object, then
+ a. If the value of the [[ProxyHandler]] internal slot of argument is null,
+ throw a TypeError exception.
+ b. Let target be the value of the [[ProxyTarget]] internal slot of
+ argument.
+ c. Return ? IsArray(target).
+features: [Proxy]
+---*/
+
+var objectProxy = new Proxy({}, {});
+var arrayProxy = new Proxy([], {});
+var arrayProxyProxy = new Proxy(arrayProxy, {});
+
+assert.sameValue(
+ Object.prototype.toString.call(objectProxy), '[object Object]'
+);
+assert.sameValue(
+ Object.prototype.toString.call(arrayProxy), '[object Array]', 'array proxy'
+);
+assert.sameValue(
+ Object.prototype.toString.call(arrayProxyProxy),
+ '[object Array]',
+ 'proxy for array proxy'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/proxy-function-async.js b/js/src/tests/test262/built-ins/Object/prototype/toString/proxy-function-async.js
new file mode 100644
index 0000000000..094b7c0e70
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/proxy-function-async.js
@@ -0,0 +1,34 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.prototype.tostring
+description: Proxy of async function is treated as a function.
+info: |
+ ProxyCreate ( target, handler )
+
+ [...]
+ 7. If IsCallable(target) is true, then
+ a. Set P.[[Call]] as specified in 9.5.12.
+
+ Object.prototype.toString ( )
+
+ [...]
+ 7. Else if O has a [[Call]] internal method, let builtinTag be "Function".
+features: [async-functions, Proxy, Symbol.toStringTag]
+---*/
+
+var asyncProxy = new Proxy(async function() {}, {});
+var asyncProxyProxy = new Proxy(asyncProxy, {});
+
+assert.sameValue(
+ Object.prototype.toString.call(asyncProxy),
+ '[object AsyncFunction]',
+ 'async function proxy'
+);
+assert.sameValue(
+ Object.prototype.toString.call(asyncProxyProxy),
+ '[object AsyncFunction]',
+ 'proxy for async function proxy'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/proxy-function.js b/js/src/tests/test262/built-ins/Object/prototype/toString/proxy-function.js
new file mode 100644
index 0000000000..70633a87e4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/proxy-function.js
@@ -0,0 +1,67 @@
+// Copyright (C) 2016 Apple Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.prototype.tostring
+description: Proxy of an function is treated as an function
+info: |
+ [...]
+
+ 9.5.14 ProxyCreate(target, handler)
+
+ [...]
+ 7. If IsCallable(target) is true, then
+ a. Set the [[Call]] internal method of P as specified in 9.5.12.
+ [...]
+
+features: [generators, async-functions, Proxy, Symbol.toStringTag]
+---*/
+
+var functionProxy = new Proxy(function() {}, {});
+var functionProxyProxy = new Proxy(functionProxy, {});
+
+assert.sameValue(
+ Object.prototype.toString.call(functionProxy), '[object Function]', 'function proxy'
+);
+assert.sameValue(
+ Object.prototype.toString.call(functionProxyProxy),
+ '[object Function]',
+ 'proxy for function proxy'
+);
+
+var arrowProxy = new Proxy(() => {}, {});
+var arrowProxyProxy = new Proxy(arrowProxy, {});
+
+assert.sameValue(
+ Object.prototype.toString.call(arrowProxy), '[object Function]', 'arrow function proxy'
+);
+assert.sameValue(
+ Object.prototype.toString.call(arrowProxyProxy),
+ '[object Function]',
+ 'proxy for arrow function proxy'
+);
+
+var generatorProxy = new Proxy(function*() {}, {});
+var generatorProxyProxy = new Proxy(generatorProxy, {});
+
+assert.sameValue(
+ Object.prototype.toString.call(generatorProxy), '[object GeneratorFunction]', 'generator function proxy'
+);
+assert.sameValue(
+ Object.prototype.toString.call(generatorProxyProxy),
+ '[object GeneratorFunction]',
+ 'proxy for generator function proxy'
+);
+
+var asyncProxy = new Proxy(async function() {}, {});
+var asyncProxyProxy = new Proxy(asyncProxy, {});
+
+assert.sameValue(
+ Object.prototype.toString.call(asyncProxy), '[object AsyncFunction]', 'async function proxy'
+);
+assert.sameValue(
+ Object.prototype.toString.call(asyncProxyProxy),
+ '[object AsyncFunction]',
+ 'proxy for async function proxy'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/proxy-revoked-during-get-call.js b/js/src/tests/test262/built-ins/Object/prototype/toString/proxy-revoked-during-get-call.js
new file mode 100644
index 0000000000..a86fd54273
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/proxy-revoked-during-get-call.js
@@ -0,0 +1,52 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.prototype.tostring
+description: >
+ If Proxy is revoked during Get call, a string is returned.
+info: |
+ Object.prototype.toString ( )
+
+ [...]
+ 4. Let isArray be ? IsArray(O).
+ [...]
+ 14. Else, let builtinTag be "Object".
+ 15. Let tag be ? Get(O, @@toStringTag).
+ 16. If Type(tag) is not String, set tag to builtinTag.
+ 17. Return the string-concatenation of "[object ", tag, and "]".
+
+ IsArray ( argument )
+
+ [...]
+ 3. If argument.[[ProxyHandler]] is null, throw a TypeError exception.
+ a. If argument.[[ProxyHandler]] is null, throw a TypeError exception.
+ b. Let target be argument.[[ProxyTarget]].
+ c. Return ? IsArray(target).
+features: [Proxy]
+---*/
+
+var handle1 = Proxy.revocable([], {
+ get: function() {
+ handle1.revoke();
+ },
+});
+
+assert.sameValue(
+ Object.prototype.toString.call(handle1.proxy),
+ "[object Array]"
+);
+
+
+var handle2 = Proxy.revocable({}, {
+ get: function() {
+ handle2.revoke();
+ },
+});
+
+var handle2Proxy = new Proxy(handle2.proxy, {});
+assert.sameValue(
+ Object.prototype.toString.call(handle2Proxy),
+ "[object Object]"
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/proxy-revoked.js b/js/src/tests/test262/built-ins/Object/prototype/toString/proxy-revoked.js
new file mode 100644
index 0000000000..6422f1e5ea
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/proxy-revoked.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2016 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.prototype.tostring
+description: Revoked proxy value produces a TypeError
+info: |
+ [...]
+ 3. Let O be ToObject(this value).
+ 4. Let isArray be ? IsArray(O).
+ 5. If isArray is true, let builtinTag be "Array".
+ [...]
+
+ 7.2.2 IsArray
+
+ [...]
+ 3. If argument is a Proxy exotic object, then
+ a. If the value of the [[ProxyHandler]] internal slot of argument is null,
+ throw a TypeError exception.
+ b. Let target be the value of the [[ProxyTarget]] internal slot of
+ argument.
+ c. Return ? IsArray(target).
+features: [Proxy]
+---*/
+
+var handle = Proxy.revocable([], {});
+
+handle.revoke();
+
+assert.throws(TypeError, function() {
+ Object.prototype.toString.call(handle.proxy);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/shell.js b/js/src/tests/test262/built-ins/Object/prototype/toString/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-non-str-bigint.js b/js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-non-str-bigint.js
new file mode 100644
index 0000000000..e9c31905ad
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-non-str-bigint.js
@@ -0,0 +1,46 @@
+// Copyright (C) 2018 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.tostring
+description: Non-string values of `@@toStringTag` property are ignored
+info: |
+ 14. Else, let builtinTag be "Object".
+ 15. Let tag be ? Get(O, @@toStringTag).
+ 16. If Type(tag) is not String, let tag be builtinTag.
+ 17. Return the string-concatenation of "[object ", tag, and "]".
+features: [BigInt, Symbol.toStringTag]
+---*/
+
+let custom1 = BigInt(0);
+let custom2 = Object(BigInt(0));
+
+Object.defineProperty(BigInt.prototype, Symbol.toStringTag, {value: undefined});
+assert.sameValue(Object.prototype.toString.call(custom1), '[object Object]');
+assert.sameValue(Object.prototype.toString.call(custom2), '[object Object]');
+
+Object.defineProperty(BigInt.prototype, Symbol.toStringTag, {value: null});
+assert.sameValue(Object.prototype.toString.call(custom1), '[object Object]');
+assert.sameValue(Object.prototype.toString.call(custom2), '[object Object]');
+
+Object.defineProperty(BigInt.prototype, Symbol.toStringTag, {value: Symbol.toStringTag});
+assert.sameValue(Object.prototype.toString.call(custom1), '[object Object]');
+assert.sameValue(Object.prototype.toString.call(custom2), '[object Object]');
+
+Object.defineProperty(BigInt.prototype, Symbol.toStringTag, {value: 86});
+assert.sameValue(Object.prototype.toString.call(custom1), '[object Object]');
+assert.sameValue(Object.prototype.toString.call(custom2), '[object Object]');
+
+Object.defineProperty(BigInt.prototype, Symbol.toStringTag, {value: new String('test262')});
+assert.sameValue(Object.prototype.toString.call(custom1), '[object Object]');
+assert.sameValue(Object.prototype.toString.call(custom2), '[object Object]');
+
+Object.defineProperty(BigInt.prototype, Symbol.toStringTag, {value: {}});
+assert.sameValue(Object.prototype.toString.call(custom1), '[object Object]');
+assert.sameValue(Object.prototype.toString.call(custom2), '[object Object]');
+
+Object.defineProperty(BigInt.prototype, Symbol.toStringTag, {value: _ => 'str'});
+assert.sameValue(Object.prototype.toString.call(custom1), '[object Object]');
+assert.sameValue(Object.prototype.toString.call(custom2), '[object Object]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-non-str-builtin.js b/js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-non-str-builtin.js
new file mode 100644
index 0000000000..851d72ed84
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-non-str-builtin.js
@@ -0,0 +1,81 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.prototype.tostring
+description: >
+ Non-string values of `Symbol.toStringTag` property are ignored.
+info: |
+ Object.prototype.toString ( )
+
+ [...]
+ 15. Let tag be ? Get(O, @@toStringTag).
+ 16. If Type(tag) is not String, set tag to builtinTag.
+ 17. Return the string-concatenation of "[object ", tag, and "]".
+features: [Symbol.toStringTag, Symbol.iterator, generators, WeakMap]
+---*/
+
+var toString = Object.prototype.toString;
+
+delete Symbol.prototype[Symbol.toStringTag];
+assert.sameValue(toString.call(Symbol('desc')), '[object Object]');
+
+Object.defineProperty(Math, Symbol.toStringTag, {value: Symbol()});
+assert.sameValue(toString.call(Math), '[object Object]');
+
+var strIter = ''[Symbol.iterator]();
+var strIterProto = Object.getPrototypeOf(strIter);
+assert.sameValue(toString.call(strIter), '[object String Iterator]');
+delete strIterProto[Symbol.toStringTag];
+assert.sameValue(toString.call(strIter), '[object Object]');
+
+var arrIter = [][Symbol.iterator]();
+var arrIterProto = Object.getPrototypeOf(arrIter)
+assert.sameValue(toString.call(arrIter), '[object Array Iterator]');
+Object.defineProperty(arrIterProto, Symbol.toStringTag, {value: null});
+assert.sameValue(toString.call(arrIter), '[object Object]');
+
+var map = new Map();
+delete Map.prototype[Symbol.toStringTag];
+assert.sameValue(toString.call(map), '[object Object]');
+
+var mapIter = map[Symbol.iterator]();
+var mapIterProto = Object.getPrototypeOf(mapIter);
+assert.sameValue(toString.call(mapIter), '[object Map Iterator]');
+Object.defineProperty(mapIterProto, Symbol.toStringTag, {
+ get: function() { return new String('ShouldNotBeUnwrapped'); },
+});
+assert.sameValue(toString.call(mapIter), '[object Object]');
+
+var set = new Set();
+delete Set.prototype[Symbol.toStringTag];
+assert.sameValue(toString.call(set), '[object Object]');
+
+var setIter = set[Symbol.iterator]();
+var setIterProto = Object.getPrototypeOf(setIter);
+assert.sameValue(toString.call(setIter), '[object Set Iterator]');
+Object.defineProperty(setIterProto, Symbol.toStringTag, {value: false});
+assert.sameValue(toString.call(setIter), '[object Object]');
+
+var wm = new WeakMap();
+delete WeakMap.prototype[Symbol.toStringTag];
+assert.sameValue(toString.call(wm), '[object Object]');
+
+var ws = new WeakSet();
+Object.defineProperty(WeakSet.prototype, Symbol.toStringTag, {value: 0});
+assert.sameValue(toString.call(ws), '[object Object]');
+
+delete JSON[Symbol.toStringTag];
+assert.sameValue(toString.call(JSON), '[object Object]');
+
+var gen = (function* () {})();
+var genProto = Object.getPrototypeOf(gen);
+Object.defineProperty(genProto, Symbol.toStringTag, {
+ get: function() { return {}; },
+});
+assert.sameValue(toString.call(gen), '[object Object]');
+
+var promise = new Promise(function() {});
+delete Promise.prototype[Symbol.toStringTag];
+assert.sameValue(toString.call(promise), '[object Object]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-non-str-proxy-function.js b/js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-non-str-proxy-function.js
new file mode 100644
index 0000000000..9ede801177
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-non-str-proxy-function.js
@@ -0,0 +1,57 @@
+// Copyright (C) 2016 Apple Inc. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.prototype.tostring
+description: >
+ Non-string values of `Symbol.toStringTag` property are ignored.
+info: |
+ ProxyCreate ( target, handler )
+
+ [...]
+ 7. If IsCallable(target) is true, then
+ a. Set P.[[Call]] as specified in 9.5.12.
+
+ Object.prototype.toString ( )
+
+ [...]
+ 7. Else if O has a [[Call]] internal method, let builtinTag be "Function".
+ [...]
+ 15. Let tag be ? Get(O, @@toStringTag).
+ 16. If Type(tag) is not String, set tag to builtinTag.
+ 17. Return the string-concatenation of "[object ", tag, and "]".
+features: [generators, async-functions, Proxy, Symbol.toStringTag]
+---*/
+
+var generatorProxy = new Proxy(function* () {}, {});
+var generatorProxyProxy = new Proxy(generatorProxy, {});
+delete generatorProxy.constructor.prototype[Symbol.toStringTag];
+
+assert.sameValue(
+ Object.prototype.toString.call(generatorProxy),
+ '[object Function]',
+ 'generator function proxy without Symbol.toStringTag'
+);
+assert.sameValue(
+ Object.prototype.toString.call(generatorProxyProxy),
+ '[object Function]',
+ 'proxy for generator function proxy without Symbol.toStringTag'
+);
+
+var asyncProxy = new Proxy(async function() {}, {});
+var asyncProxyProxy = new Proxy(asyncProxy, {});
+Object.defineProperty(asyncProxy.constructor.prototype, Symbol.toStringTag, {
+ value: undefined,
+});
+
+assert.sameValue(
+ Object.prototype.toString.call(asyncProxy),
+ '[object Function]',
+ 'async function proxy without Symbol.toStringTag'
+);
+assert.sameValue(
+ Object.prototype.toString.call(asyncProxyProxy),
+ '[object Function]',
+ 'proxy for async function proxy without Symbol.toStringTag'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-non-str.js b/js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-non-str.js
new file mode 100644
index 0000000000..1269aba399
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-non-str.js
@@ -0,0 +1,44 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ Non-string values of `Symbol.toStringTag` property are ignored
+es6id: 19.1.3.6
+info: |
+ 16. Let tag be Get (O, @@toStringTag).
+ 17. ReturnIfAbrupt(tag).
+ 18. If Type(tag) is not String, let tag be builtinTag.
+ 19. Return the String that is the result of concatenating "[object ", tag,
+ and "]".
+features: [Symbol.toStringTag]
+---*/
+
+var custom = {};
+
+custom[Symbol.toStringTag] = undefined;
+assert.sameValue(Object.prototype.toString.call(custom), '[object Object]');
+
+custom[Symbol.toStringTag] = null;
+assert.sameValue(Object.prototype.toString.call(custom), '[object Object]');
+
+custom[Symbol.toStringTag] = Symbol.toStringTag;
+assert.sameValue(Object.prototype.toString.call(custom), '[object Object]');
+
+custom[Symbol.toStringTag] = 86;
+assert.sameValue(Object.prototype.toString.call(custom), '[object Object]');
+
+custom[Symbol.toStringTag] = new String('test262');
+assert.sameValue(Object.prototype.toString.call(custom), '[object Object]');
+
+custom[Symbol.toStringTag] = {};
+assert.sameValue(Object.prototype.toString.call(custom), '[object Object]');
+
+custom[Symbol.toStringTag] = {
+ toString: function() {
+ return 'str';
+ }
+};
+assert.sameValue(Object.prototype.toString.call(custom), '[object Object]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-override-bigint.js b/js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-override-bigint.js
new file mode 100644
index 0000000000..1e22d25685
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-override-bigint.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2018 Igalia, S.L. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.prototype.tostring
+description: String values of `@@toStringTag` property override built-in tags
+info: |
+ 15. Let tag be ? Get(O, @@toStringTag).
+ 16. If Type(tag) is not String, let tag be builtinTag.
+ 17. Return the string-concatenation of "[object ", tag, and "]".
+features: [BigInt, Symbol.toStringTag]
+---*/
+
+let custom1 = BigInt(0);
+let custom2 = Object(BigInt(0));
+
+Object.defineProperty(BigInt.prototype, Symbol.toStringTag, {value: 'test262'});
+assert.sameValue(Object.prototype.toString.call(custom1), '[object test262]');
+assert.sameValue(Object.prototype.toString.call(custom2), '[object test262]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-override-instances.js b/js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-override-instances.js
new file mode 100644
index 0000000000..5e4d31e4ce
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-override-instances.js
@@ -0,0 +1,57 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ String values of `Symbol.toStringTag` property override built-in tags
+es6id: 19.1.3.6
+info: |
+ 16. Let tag be Get (O, @@toStringTag).
+ 17. ReturnIfAbrupt(tag).
+ 18. If Type(tag) is not String, let tag be builtinTag.
+ 19. Return the String that is the result of concatenating "[object ", tag,
+ and "]".
+features: [Symbol.toStringTag]
+---*/
+
+var custom;
+
+custom = [];
+custom[Symbol.toStringTag] = 'test262';
+assert.sameValue(Object.prototype.toString.call(custom), '[object test262]');
+
+custom = new String();
+custom[Symbol.toStringTag] = 'test262';
+assert.sameValue(Object.prototype.toString.call(custom), '[object test262]');
+
+custom = (function() {
+ return arguments;
+}());
+custom[Symbol.toStringTag] = 'test262';
+assert.sameValue(Object.prototype.toString.call(custom), '[object test262]');
+
+custom = function() {};
+custom[Symbol.toStringTag] = 'test262';
+assert.sameValue(Object.prototype.toString.call(custom), '[object test262]');
+
+custom = new Error();
+custom[Symbol.toStringTag] = 'test262';
+assert.sameValue(Object.prototype.toString.call(custom), '[object test262]');
+
+custom = new Boolean();
+custom[Symbol.toStringTag] = 'test262';
+assert.sameValue(Object.prototype.toString.call(custom), '[object test262]');
+
+custom = new Number();
+custom[Symbol.toStringTag] = 'test262';
+assert.sameValue(Object.prototype.toString.call(custom), '[object test262]');
+
+custom = new Date();
+custom[Symbol.toStringTag] = 'test262';
+assert.sameValue(Object.prototype.toString.call(custom), '[object test262]');
+
+custom = /./;
+custom[Symbol.toStringTag] = 'test262';
+assert.sameValue(Object.prototype.toString.call(custom), '[object test262]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-override-primitives.js b/js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-override-primitives.js
new file mode 100644
index 0000000000..d7e77ec1ee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-override-primitives.js
@@ -0,0 +1,44 @@
+// Copyright (C) 2017 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ String values of `Symbol.toStringTag` property override built-in tags
+es6id: 19.1.3.6
+info: |
+ 1. If the this value is undefined, return "[object Undefined]".
+ 2. If the this value is null, return "[object Null]".
+
+ 14. Else, let builtinTag be "Object".
+ 15. Let tag be ? Get(O, @@toStringTag).
+ 16. If Type(tag) is not String, let tag be builtinTag.
+ 17. Return the String that is the result of concatenating "[object ", tag, and "]".
+
+ 4.3.2 primitive value
+
+ member of one of the types Undefined, Null, Boolean, Number, Symbol, or String as defined in clause 6
+
+features: [Symbol.toStringTag]
+---*/
+
+
+Boolean.prototype[Symbol.toStringTag] = 'test262';
+assert.sameValue(Object.prototype.toString.call(Boolean.prototype), '[object test262]');
+assert.sameValue(Object.prototype.toString.call(true), '[object test262]');
+
+Number.prototype[Symbol.toStringTag] = 'test262';
+assert.sameValue(Object.prototype.toString.call(Number.prototype), '[object test262]');
+assert.sameValue(Object.prototype.toString.call(0), '[object test262]');
+
+String.prototype[Symbol.toStringTag] = 'test262';
+assert.sameValue(Object.prototype.toString.call(String.prototype), '[object test262]');
+assert.sameValue(Object.prototype.toString.call(''), '[object test262]');
+
+
+Object.defineProperty(Symbol.prototype, Symbol.toStringTag, {
+ value: 'test262'
+});
+
+assert.sameValue(Object.prototype.toString.call(Symbol.prototype), '[object test262]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-str.js b/js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-str.js
new file mode 100644
index 0000000000..b3497808ed
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/toString/symbol-tag-str.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: >
+ String values of `Symbol.toStringTag` property are honored
+es6id: 19.1.3.6
+info: |
+ 16. Let tag be Get (O, @@toStringTag).
+ 17. ReturnIfAbrupt(tag).
+ 18. If Type(tag) is not String, let tag be builtinTag.
+ 19. Return the String that is the result of concatenating "[object ", tag,
+ and "]".
+features: [Symbol.toStringTag]
+---*/
+
+var custom = {};
+custom[Symbol.toStringTag] = 'test262';
+
+assert.sameValue(Object.prototype.toString.call(custom), '[object test262]');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/valueOf/15.2.4.4-1.js b/js/src/tests/test262/built-ins/Object/prototype/valueOf/15.2.4.4-1.js
new file mode 100644
index 0000000000..177f71462d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/valueOf/15.2.4.4-1.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.4.4-1
+description: >
+ Object.prototype.valueOf - typeof
+ Object.prototype.valueOf.call(true)==="object"
+---*/
+
+assert.sameValue(typeof Object.prototype.valueOf.call(true), "object", 'typeof Object.prototype.valueOf.call(true)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/valueOf/15.2.4.4-2.js b/js/src/tests/test262/built-ins/Object/prototype/valueOf/15.2.4.4-2.js
new file mode 100644
index 0000000000..4cc743c9c8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/valueOf/15.2.4.4-2.js
@@ -0,0 +1,13 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es5id: 15.2.4.4-2
+description: >
+ Object.prototype.valueOf - typeof
+ Object.prototype.valueOf.call(false)==="object"
+---*/
+
+assert.sameValue(typeof Object.prototype.valueOf.call(false), "object", 'typeof Object.prototype.valueOf.call(false)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A10.js b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A10.js
new file mode 100644
index 0000000000..ff4efa939a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A10.js
@@ -0,0 +1,31 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The Object.prototype.valueOf.length property has the attribute ReadOnly
+es5id: 15.2.4.4_A10
+description: >
+ Checking if varying the Object.prototype.valueOf.length property
+ fails
+includes: [propertyHelper.js]
+---*/
+assert(
+ !!Object.prototype.valueOf.hasOwnProperty('length'),
+ 'The value of !!Object.prototype.valueOf.hasOwnProperty("length") is expected to be true'
+);
+
+var obj = Object.prototype.valueOf.length;
+
+verifyNotWritable(Object.prototype.valueOf, "length", null, function() {
+ return "shifted";
+});
+
+assert.sameValue(
+ Object.prototype.valueOf.length,
+ obj,
+ 'The value of Object.prototype.valueOf.length is expected to equal the value of obj'
+);
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A11.js b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A11.js
new file mode 100644
index 0000000000..de2b758efb
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A11.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The length property of the valueOf method is 0
+es5id: 15.2.4.4_A11
+description: Checking the Object.prototype.valueOf.length
+---*/
+assert(
+ !!Object.prototype.valueOf.hasOwnProperty("length"),
+ 'The value of !!Object.prototype.valueOf.hasOwnProperty("length") is expected to be true'
+);
+
+assert.sameValue(
+ Object.prototype.valueOf.length,
+ 0,
+ 'The value of Object.prototype.valueOf.length is expected to be 0'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A12.js b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A12.js
new file mode 100644
index 0000000000..a95ea6e065
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A12.js
@@ -0,0 +1,16 @@
+// Copyright 2011 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Let O be the result of calling ToObject passing the this value as the
+ argument.
+es5id: 15.2.4.4_A12
+description: Checking Object.prototype.valueOf invoked by the 'call' property.
+---*/
+
+assert.throws(TypeError, function() {
+ Object.prototype.valueOf.call(undefined);
+}, 'Object.prototype.valueOf.call(undefined) throws a TypeError exception');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A13.js b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A13.js
new file mode 100644
index 0000000000..3a9d28b0f2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A13.js
@@ -0,0 +1,16 @@
+// Copyright 2011 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Let O be the result of calling ToObject passing the this value as the
+ argument.
+es5id: 15.2.4.4_A13
+description: Checking Object.prototype.valueOf invoked by the 'call' property.
+---*/
+
+assert.throws(TypeError, function() {
+ Object.prototype.valueOf.call(null);
+}, 'Object.prototype.valueOf.call(null) throws a TypeError exception');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A14.js b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A14.js
new file mode 100644
index 0000000000..2732240054
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A14.js
@@ -0,0 +1,16 @@
+// Copyright 2011 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Let O be the result of calling ToObject passing the this value as the
+ argument.
+es5id: 15.2.4.4_A14
+description: Checking Object.prototype.valueOf invoked by the 'call' property.
+---*/
+
+assert.throws(TypeError, function() {
+ (1, Object.prototype.valueOf)();
+}, '(1, Object.prototype.valueOf)() throws a TypeError exception');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A15.js b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A15.js
new file mode 100644
index 0000000000..c924da8b0f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A15.js
@@ -0,0 +1,17 @@
+// Copyright 2011 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ Let O be the result of calling ToObject passing the this value as the
+ argument.
+es5id: 15.2.4.4_A15
+description: Checking Object.prototype.valueOf when called as a global function.
+---*/
+
+assert.throws(TypeError, function() {
+ const valueOf = Object.prototype.valueOf;
+ valueOf();
+}, '`const valueOf = Object.prototype.valueOf; valueOf()` throws a TypeError exception');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T1.js b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T1.js
new file mode 100644
index 0000000000..e60e7afc9a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T1.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The valueOf method returns its "this" value
+es5id: 15.2.4.4_A1_T1
+description: "\"this\" value is a number"
+---*/
+assert.sameValue(
+ typeof Object.prototype.valueOf,
+ "function",
+ 'The value of `typeof Object.prototype.valueOf` is expected to be "function"'
+);
+
+var obj = new Object(1.1);
+
+assert.sameValue(typeof obj.valueOf, "function", 'The value of `typeof obj.valueOf` is expected to be "function"');
+assert.sameValue(obj.valueOf(), 1.1, 'obj.valueOf() must return 1.1');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T2.js b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T2.js
new file mode 100644
index 0000000000..fa83ef2650
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T2.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The valueOf method returns its "this" value
+es5id: 15.2.4.4_A1_T2
+description: "\"this\" value is a boolean"
+---*/
+assert.sameValue(
+ typeof Object.prototype.valueOf,
+ "function",
+ 'The value of `typeof Object.prototype.valueOf` is expected to be "function"'
+);
+
+var obj = new Object(true);
+
+assert.sameValue(typeof obj.valueOf, "function", 'The value of `typeof obj.valueOf` is expected to be "function"');
+assert.sameValue(obj.valueOf(), true, 'obj.valueOf() must return true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T3.js b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T3.js
new file mode 100644
index 0000000000..73933b535c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T3.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The valueOf method returns its "this" value
+es5id: 15.2.4.4_A1_T3
+description: "\"this\" value is a string"
+---*/
+assert.sameValue(
+ typeof Object.prototype.valueOf,
+ "function",
+ 'The value of `typeof Object.prototype.valueOf` is expected to be "function"'
+);
+
+var obj = new Object("greenfield");
+
+assert.sameValue(typeof obj.valueOf, "function", 'The value of `typeof obj.valueOf` is expected to be "function"');
+assert.sameValue(obj.valueOf(), "greenfield", 'obj.valueOf() must return "greenfield"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T4.js b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T4.js
new file mode 100644
index 0000000000..f5e20832e1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T4.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The valueOf method returns its "this" value
+es5id: 15.2.4.4_A1_T4
+description: "\"this\" value is an object"
+---*/
+assert.sameValue(
+ typeof Object.prototype.valueOf,
+ "function",
+ 'The value of `typeof Object.prototype.valueOf` is expected to be "function"'
+);
+
+var obj = new Object;
+
+assert.sameValue(typeof obj.valueOf, "function", 'The value of `typeof obj.valueOf` is expected to be "function"');
+assert.sameValue(obj.valueOf(), obj, 'obj.valueOf() returns obj');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T5.js b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T5.js
new file mode 100644
index 0000000000..76fbd4a6be
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T5.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The valueOf method returns its "this" value
+es5id: 15.2.4.4_A1_T5
+description: "\"this\" value is \"null\""
+---*/
+assert.sameValue(
+ typeof Object.prototype.valueOf,
+ "function",
+ 'The value of `typeof Object.prototype.valueOf` is expected to be "function"'
+);
+
+var obj = new Object(null);
+
+assert.sameValue(typeof obj.valueOf, "function", 'The value of `typeof obj.valueOf` is expected to be "function"');
+assert.sameValue(obj.valueOf(), obj, 'obj.valueOf() returns obj');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T6.js b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T6.js
new file mode 100644
index 0000000000..1272ae585a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T6.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The valueOf method returns its "this" value
+es5id: 15.2.4.4_A1_T6
+description: "\"this\" value is \"undefined\""
+---*/
+assert.sameValue(
+ typeof Object.prototype.valueOf,
+ "function",
+ 'The value of `typeof Object.prototype.valueOf` is expected to be "function"'
+);
+
+var obj = new Object(undefined);
+
+assert.sameValue(typeof obj.valueOf, "function", 'The value of `typeof obj.valueOf` is expected to be "function"');
+assert.sameValue(obj.valueOf(), obj, 'obj.valueOf() returns obj');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T7.js b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T7.js
new file mode 100644
index 0000000000..6c6f5a5059
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A1_T7.js
@@ -0,0 +1,20 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The valueOf method returns its "this" value
+es5id: 15.2.4.4_A1_T7
+description: "\"this\" value is \"void 0\""
+---*/
+assert.sameValue(
+ typeof Object.prototype.valueOf,
+ "function",
+ 'The value of `typeof Object.prototype.valueOf` is expected to be "function"'
+);
+
+var obj = new Object(void 0);
+
+assert.sameValue(typeof obj.valueOf, "function", 'The value of `typeof obj.valueOf` is expected to be "function"');
+assert.sameValue(obj.valueOf(), obj, 'obj.valueOf() returns obj');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A6.js b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A6.js
new file mode 100644
index 0000000000..846c25a5d1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A6.js
@@ -0,0 +1,17 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: Object.prototype.valueOf has not prototype property
+es5id: 15.2.4.4_A6
+description: >
+ Checking if obtaining the prototype property of
+ Object.prototype.valueOf fails
+---*/
+assert.sameValue(
+ Object.prototype.valueOf.prototype,
+ undefined,
+ 'The value of Object.prototype.valueOf.prototype is expected to equal undefined'
+);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A8.js b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A8.js
new file mode 100644
index 0000000000..07479f15e3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A8.js
@@ -0,0 +1,28 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: The Object.prototype.valueOf.length property has the attribute DontEnum
+es5id: 15.2.4.4_A8
+description: >
+ Checking if enumerating the Object.prototype.valueOf.length
+ property fails
+---*/
+assert(
+ !!Object.prototype.valueOf.hasOwnProperty('length'),
+ 'The value of !!Object.prototype.valueOf.hasOwnProperty("length") is expected to be true'
+);
+
+assert(
+ !Object.prototype.valueOf.propertyIsEnumerable('length'),
+ 'The value of !Object.prototype.valueOf.propertyIsEnumerable("length") is expected to be true'
+);
+
+for (var p in Object.prototype.valueOf) {
+ assert.notSameValue(p, "length", 'The value of p is not "length"');
+}
+//
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A9.js b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A9.js
new file mode 100644
index 0000000000..36eb233a06
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/valueOf/S15.2.4.4_A9.js
@@ -0,0 +1,30 @@
+// Copyright 2009 the Sputnik authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+info: |
+ The Object.prototype.valueOf.length property does not have the attribute
+ DontDelete
+es5id: 15.2.4.4_A9
+description: >
+ Checknig if deleting of the Object.prototype.valueOf.length
+ property fails
+---*/
+assert(
+ !!Object.prototype.valueOf.hasOwnProperty('length'),
+ 'The value of !!Object.prototype.valueOf.hasOwnProperty("length") is expected to be true'
+);
+
+assert(
+ !!delete Object.prototype.valueOf.length,
+ 'The value of !!delete Object.prototype.valueOf.length is expected to be true'
+);
+
+assert(
+ !Object.prototype.valueOf.hasOwnProperty('length'),
+ 'The value of !Object.prototype.valueOf.hasOwnProperty("length") is expected to be true'
+);
+
+// TODO: Convert to verifyProperty() format.
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/valueOf/browser.js b/js/src/tests/test262/built-ins/Object/prototype/valueOf/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/valueOf/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/prototype/valueOf/name.js b/js/src/tests/test262/built-ins/Object/prototype/valueOf/name.js
new file mode 100644
index 0000000000..7648b4002d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/valueOf/name.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+es6id: 19.1.3.7
+description: >
+ Object.prototype.valueOf.name is "valueOf".
+info: |
+ Object.prototype.valueOf ( )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.prototype.valueOf.name, "valueOf");
+
+verifyNotEnumerable(Object.prototype.valueOf, "name");
+verifyNotWritable(Object.prototype.valueOf, "name");
+verifyConfigurable(Object.prototype.valueOf, "name");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/valueOf/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/prototype/valueOf/not-a-constructor.js
new file mode 100644
index 0000000000..6db8b1c516
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/valueOf/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.prototype.valueOf does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(Object.prototype.valueOf),
+ false,
+ 'isConstructor(Object.prototype.valueOf) must return false'
+);
+
+assert.throws(TypeError, () => {
+ new Object.prototype.valueOf();
+}, '`new Object.prototype.valueOf()` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/prototype/valueOf/shell.js b/js/src/tests/test262/built-ins/Object/prototype/valueOf/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/prototype/valueOf/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/seal/abrupt-completion.js b/js/src/tests/test262/built-ins/Object/seal/abrupt-completion.js
new file mode 100644
index 0000000000..46bea02399
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/abrupt-completion.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2019 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ O.[[PreventExtensions]]() returns abrupt completion.
+info: |
+ Object.seal ( O )
+
+ ...
+ 2. Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ ...
+ 3. Let status be ? O.[[PreventExtensions]]().
+features: [Proxy]
+---*/
+
+var p = new Proxy({}, {
+ preventExtensions: function() {
+ throw new Test262Error();
+ },
+});
+
+assert.throws(Test262Error, function() {
+ Object.seal(p);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/browser.js b/js/src/tests/test262/built-ins/Object/seal/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/seal/configurable-attribute-all-own-properties-set-from-true-to-false-property-are-unaltered.js b/js/src/tests/test262/built-ins/Object/seal/configurable-attribute-all-own-properties-set-from-true-to-false-property-are-unaltered.js
new file mode 100644
index 0000000000..4b337ca128
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/configurable-attribute-all-own-properties-set-from-true-to-false-property-are-unaltered.js
@@ -0,0 +1,60 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+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: [propertyHelper.js]
+---*/
+
+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) {
+ throw new Test262Error('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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/configurable-attribute-own-accessor-property-set-from-true-to-false-property-are-unaltered.js b/js/src/tests/test262/built-ins/Object/seal/configurable-attribute-own-accessor-property-set-from-true-to-false-property-are-unaltered.js
new file mode 100644
index 0000000000..5c28cf68a4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/configurable-attribute-own-accessor-property-set-from-true-to-false-property-are-unaltered.js
@@ -0,0 +1,44 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+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: [propertyHelper.js]
+---*/
+
+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) {
+ throw new Test262Error('Expected preCheck to be true, actually ' + preCheck);
+}
+
+verifyEqualTo(obj, "foo", getFunc());
+
+verifyWritable(obj, "foo", "variableForHelpVerify");
+
+verifyEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/length.js b/js/src/tests/test262/built-ins/Object/seal/length.js
new file mode 100644
index 0000000000..114de5fd88
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/length.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: Object.seal '`length` property'
+info: |
+ ECMAScript Standard Built-in Objects
+
+ Every built-in function object, including constructors, has a "length" property whose value is an integer. Unless otherwise specified, this value is equal to the number of required parameters shown in the subclause headings for the function description. Optional parameters and rest parameters are not included in the parameter count.
+
+ Unless otherwise specified, the "length" property of a built-in function object has the attributes { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true }.
+
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.seal.length, 1);
+
+verifyNotEnumerable(Object.seal, "length");
+verifyNotWritable(Object.seal, "length");
+verifyConfigurable(Object.seal, "length");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/name.js b/js/src/tests/test262/built-ins/Object/seal/name.js
new file mode 100644
index 0000000000..3b7047d2c1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/name.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2015 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal.name is "seal".
+info: |
+ Object.seal ( O )
+
+ 17 ECMAScript Standard Built-in Objects:
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value
+ is a String.
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.seal.name, "seal");
+
+verifyNotEnumerable(Object.seal, "name");
+verifyNotWritable(Object.seal, "name");
+verifyConfigurable(Object.seal, "name");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/seal/not-a-constructor.js
new file mode 100644
index 0000000000..97ade868fe
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/not-a-constructor.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.seal does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(isConstructor(Object.seal), false, 'isConstructor(Object.seal) must return false');
+
+assert.throws(TypeError, () => {
+ new Object.seal();
+}, '`new Object.seal()` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-all-own-properties-of-o-are-already-non-configurable.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-all-own-properties-of-o-are-already-non-configurable.js
new file mode 100644
index 0000000000..563b4d318e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-all-own-properties-of-o-are-already-non-configurable.js
@@ -0,0 +1,61 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: >
+ Object.seal - all own properties of 'O' are already
+ non-configurable
+includes: [propertyHelper.js]
+---*/
+
+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)) {
+ throw new Test262Error('Expected obj to be extensible, actually ' + Object.isExtensible(obj));
+}
+
+Object.seal(obj);
+
+if (Object.isExtensible(obj)) {
+ throw new Test262Error('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");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-configurable-attribute-of-own-data-property-of-o-is-set-from-true-to-false-and-other-attributes-of-the-property-are-unaltered.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-configurable-attribute-of-own-data-property-of-o-is-set-from-true-to-false-and-other-attributes-of-the-property-are-unaltered.js
new file mode 100644
index 0000000000..0d59c51bca
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-configurable-attribute-of-own-data-property-of-o-is-set-from-true-to-false-and-other-attributes-of-the-property-are-unaltered.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+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: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 10,
+ writable: true,
+ enumerable: true,
+ configurable: true
+});
+var preCheck = Object.isExtensible(obj);
+Object.seal(obj);
+
+if (!preCheck) {
+ throw new Test262Error('Expected preCheck to be true, actually ' + preCheck);
+}
+
+verifyEqualTo(obj, "foo", 10);
+
+verifyWritable(obj, "foo");
+
+verifyEnumerable(obj, "foo");
+
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-extensible-of-o-is-set-as-false-even-if-o-has-no-own-property.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-extensible-of-o-is-set-as-false-even-if-o-has-no-own-property.js
new file mode 100644
index 0000000000..3175f5757c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-extensible-of-o-is-set-as-false-even-if-o-has-no-own-property.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal - extensible of 'O' is set as false even if 'O' has no
+ own property
+---*/
+
+var obj = {};
+
+var preCheck = Object.isExtensible(obj);
+
+Object.seal(obj);
+
+assert(preCheck, 'preCheck !== true');
+assert.sameValue(Object.isExtensible(obj), false, 'Object.isExtensible(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-inherited-accessor-properties-are-ignored.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-inherited-accessor-properties-are-ignored.js
new file mode 100644
index 0000000000..39f5aaeaa8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-inherited-accessor-properties-are-ignored.js
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: Object.seal - inherited accessor properties are ignored
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "Father", {
+ get: function() {
+ return 10;
+ },
+ configurable: true
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+var preCheck = Object.isExtensible(child);
+Object.seal(child);
+
+var beforeDeleted = proto.hasOwnProperty("Father");
+delete proto.Father;
+var afterDeleted = proto.hasOwnProperty("Father");
+
+assert(preCheck, 'preCheck !== true');
+assert(beforeDeleted, 'beforeDeleted !== true');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-inherited-data-properties-are-ignored.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-inherited-data-properties-are-ignored.js
new file mode 100644
index 0000000000..03d3748c42
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-inherited-data-properties-are-ignored.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: Object.seal - inherited data properties are ignored
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "Father", {
+ value: 10,
+ configurable: true
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var child = new ConstructFun();
+var preCheck = Object.isExtensible(child);
+Object.seal(child);
+
+var beforeDeleted = proto.hasOwnProperty("Father");
+delete proto.Father;
+var afterDeleted = proto.hasOwnProperty("Father");
+
+assert(preCheck, 'preCheck !== true');
+assert(beforeDeleted, 'beforeDeleted !== true');
+assert.sameValue(afterDeleted, false, 'afterDeleted');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-is-a-function.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-is-a-function.js
new file mode 100644
index 0000000000..0a596994e3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-is-a-function.js
@@ -0,0 +1,11 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: Object.seal is a function
+---*/
+
+assert.sameValue(typeof Object.seal, "function", 'typeof(f)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-non-enumerable-own-property-of-o-is-sealed.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-non-enumerable-own-property-of-o-is-sealed.js
new file mode 100644
index 0000000000..02501ec379
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-non-enumerable-own-property-of-o-is-sealed.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: Object.seal - non-enumerable own property of 'O' is sealed
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ value: 10,
+ enumerable: false,
+ configurable: true
+});
+
+assert(Object.isExtensible(obj));
+Object.seal(obj);
+
+assert(obj.hasOwnProperty("foo"));
+verifyNotConfigurable(obj, "foo");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-a-boolean-object.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-a-boolean-object.js
new file mode 100644
index 0000000000..0d26a332dc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-a-boolean-object.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: Object.seal - 'O' is a Boolean object
+---*/
+
+var boolObj = new Boolean(false);
+var preCheck = Object.isExtensible(boolObj);
+Object.seal(boolObj);
+
+assert(preCheck, 'preCheck !== true');
+assert(Object.isSealed(boolObj), 'Object.isSealed(boolObj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-a-date-object.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-a-date-object.js
new file mode 100644
index 0000000000..82fffe77d0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-a-date-object.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: Object.seal - 'O' is a Date object
+---*/
+
+var dateObj = new Date();
+var preCheck = Object.isExtensible(dateObj);
+Object.seal(dateObj);
+
+assert(preCheck, 'preCheck !== true');
+assert(Object.isSealed(dateObj), 'Object.isSealed(dateObj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-a-function-object.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-a-function-object.js
new file mode 100644
index 0000000000..b64d9d06e4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-a-function-object.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: Object.seal - 'O' is a Function object
+---*/
+
+var fun = function() {};
+var preCheck = Object.isExtensible(fun);
+Object.seal(fun);
+
+assert(preCheck, 'preCheck !== true');
+assert(Object.isSealed(fun), 'Object.isSealed(fun) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-a-number-object.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-a-number-object.js
new file mode 100644
index 0000000000..5d9afc0199
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-a-number-object.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: Object.seal - 'O' is a Number object
+---*/
+
+var numObj = new Number(3);
+var preCheck = Object.isExtensible(numObj);
+Object.seal(numObj);
+
+assert(preCheck, 'preCheck !== true');
+assert(Object.isSealed(numObj), 'Object.isSealed(numObj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-a-reg-exp-object.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-a-reg-exp-object.js
new file mode 100644
index 0000000000..ef0965c89e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-a-reg-exp-object.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: Object.seal - 'O' is a RegExp object
+---*/
+
+var regObj = new RegExp();
+var preCheck = Object.isExtensible(regObj);
+Object.seal(regObj);
+
+assert(preCheck, 'preCheck !== true');
+assert(Object.isSealed(regObj), 'Object.isSealed(regObj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-a-string-object.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-a-string-object.js
new file mode 100644
index 0000000000..ead6f43a93
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-a-string-object.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: Object.seal - 'O' is a String object
+---*/
+
+var strObj = new String("a");
+var preCheck = Object.isExtensible(strObj);
+Object.seal(strObj);
+
+assert(preCheck, 'preCheck !== true');
+assert(Object.isSealed(strObj), 'Object.isSealed(strObj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-an-arguments-object.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-an-arguments-object.js
new file mode 100644
index 0000000000..80696cd34e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-an-arguments-object.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: Object.seal - 'O' is an Arguments object
+---*/
+
+var argObj = (function() {
+ return arguments;
+})();
+
+var preCheck = Object.isExtensible(argObj);
+Object.seal(argObj);
+
+assert(preCheck, 'preCheck !== true');
+assert(Object.isSealed(argObj), 'Object.isSealed(argObj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-an-array-object.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-an-array-object.js
new file mode 100644
index 0000000000..d387979a78
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-an-array-object.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: Object.seal - 'O' is an Array object
+---*/
+
+var arr = [0, 1];
+var preCheck = Object.isExtensible(arr);
+Object.seal(arr);
+
+assert(preCheck, 'preCheck !== true');
+assert(Object.isSealed(arr), 'Object.isSealed(arr) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-an-error-object.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-an-error-object.js
new file mode 100644
index 0000000000..0d2c6c380d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-an-error-object.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: Object.seal - 'O' is an Error object
+---*/
+
+var errObj = new Error();
+var preCheck = Object.isExtensible(errObj);
+Object.seal(errObj);
+
+assert(preCheck, 'preCheck !== true');
+assert(Object.isSealed(errObj), 'Object.isSealed(errObj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-frozen-already.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-frozen-already.js
new file mode 100644
index 0000000000..3649394ce8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-frozen-already.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: Object.seal - 'O' is frozen already
+---*/
+
+var obj = {};
+
+obj.foo = 10; // default value of attributes: writable: true, configurable: true, enumerable: true
+var preCheck = Object.isExtensible(obj);
+Object.freeze(obj);
+
+Object.seal(obj);
+
+assert(preCheck, 'preCheck !== true');
+assert(Object.isSealed(obj), 'Object.isSealed(obj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-sealed-already.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-sealed-already.js
new file mode 100644
index 0000000000..a04eaf9c1e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-o-is-sealed-already.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: Object.seal - 'O' is sealed already
+---*/
+
+var obj = {};
+
+obj.foo = 10; // default value of attributes: writable: true, configurable: true, enumerable: true
+var preCheck = Object.isExtensible(obj);
+Object.seal(obj);
+
+Object.seal(obj);
+
+assert(preCheck, 'preCheck !== true');
+assert(Object.isSealed(obj), 'Object.isSealed(obj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-accessor-property-that-overrides-an-inherited-accessor-property.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-accessor-property-that-overrides-an-inherited-accessor-property.js
new file mode 100644
index 0000000000..7f5c68979e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-accessor-property-that-overrides-an-inherited-accessor-property.js
@@ -0,0 +1,39 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: >
+ Object.seal - 'P' is own accessor property that overrides an
+ inherited accessor property
+includes: [propertyHelper.js]
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "foo", {
+ get: function() {
+ return 0;
+ },
+ configurable: true
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var obj = new ConstructFun();
+
+Object.defineProperty(obj, "foo", {
+ get: function() {
+ return 10;
+ },
+ configurable: true
+});
+
+assert(Object.isExtensible(obj));
+Object.seal(obj);
+
+verifyNotConfigurable(obj, "foo");
+assert.sameValue(obj.foo, 10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-accessor-property-that-overrides-an-inherited-data-property.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-accessor-property-that-overrides-an-inherited-data-property.js
new file mode 100644
index 0000000000..e3a3707431
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-accessor-property-that-overrides-an-inherited-data-property.js
@@ -0,0 +1,37 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: >
+ Object.seal - 'P' is own accessor property that overrides an
+ inherited data property
+includes: [propertyHelper.js]
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "foo", {
+ value: 0,
+ configurable: true
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var obj = new ConstructFun();
+
+Object.defineProperty(obj, "foo", {
+ get: function() {
+ return 10;
+ },
+ configurable: true
+});
+
+assert(Object.isExtensible(obj));
+Object.seal(obj);
+
+verifyNotConfigurable(obj, "foo");
+assert.sameValue(obj.foo, 10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-accessor-property.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-accessor-property.js
new file mode 100644
index 0000000000..3704d492ba
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-accessor-property.js
@@ -0,0 +1,25 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: Object.seal - 'P' is own accessor property
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+Object.defineProperty(obj, "foo", {
+ get: function() {
+ return 10;
+ },
+ configurable: true
+});
+
+assert(Object.isExtensible(obj));
+Object.seal(obj);
+
+verifyNotConfigurable(obj, "foo");
+assert.sameValue(obj.foo, 10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-data-property-that-overrides-an-inherited-accessor-property.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-data-property-that-overrides-an-inherited-accessor-property.js
new file mode 100644
index 0000000000..e146af8558
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-data-property-that-overrides-an-inherited-accessor-property.js
@@ -0,0 +1,36 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: >
+ Object.seal - 'P' is own data property that overrides an inherited
+ accessor property
+includes: [propertyHelper.js]
+---*/
+
+var proto = {};
+
+Object.defineProperty(proto, "foo", {
+ get: function() {
+ return 0;
+ },
+ configurable: true
+});
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var obj = new ConstructFun();
+Object.defineProperty(obj, "foo", {
+ value: 10,
+ configurable: true
+});
+
+assert(Object.isExtensible(obj));
+Object.seal(obj);
+
+verifyNotConfigurable(obj, "foo");
+assert.sameValue(obj.foo, 10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-data-property-that-overrides-an-inherited-data-property.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-data-property-that-overrides-an-inherited-data-property.js
new file mode 100644
index 0000000000..e62e3fb902
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-data-property-that-overrides-an-inherited-data-property.js
@@ -0,0 +1,31 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: >
+ Object.seal - 'P' is own data property that overrides an inherited
+ data property
+includes: [propertyHelper.js]
+---*/
+
+var proto = {
+ foo: 0
+};
+
+var ConstructFun = function() {};
+ConstructFun.prototype = proto;
+
+var obj = new ConstructFun();
+Object.defineProperty(obj, "foo", {
+ value: 10,
+ configurable: true
+});
+
+assert(Object.isExtensible(obj));
+Object.seal(obj);
+
+verifyNotConfigurable(obj, "foo");
+assert.sameValue(obj.foo, 10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-data-property.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-data-property.js
new file mode 100644
index 0000000000..d19e947979
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-data-property.js
@@ -0,0 +1,20 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: Object.seal - 'P' is own data property
+includes: [propertyHelper.js]
+---*/
+
+var obj = {};
+
+obj.foo = 10; // default [[Configurable]] attribute value of foo: true
+
+assert(Object.isExtensible(obj));
+Object.seal(obj);
+
+verifyNotConfigurable(obj, "foo");
+assert.sameValue(obj.foo, 10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-a-boolean-object-that-uses-object-s-get-own-property.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-a-boolean-object-that-uses-object-s-get-own-property.js
new file mode 100644
index 0000000000..20d4898020
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-a-boolean-object-that-uses-object-s-get-own-property.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: >
+ Object.seal - 'P' is own property of a Boolean object that uses
+ Object's [[GetOwnProperty]]
+includes: [propertyHelper.js]
+---*/
+
+var obj = new Boolean(false);
+
+obj.foo = 10;
+
+assert(Object.isExtensible(obj));
+Object.seal(obj);
+
+verifyNotConfigurable(obj, "foo");
+assert.sameValue(obj.foo, 10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-a-date-object-that-uses-object-s-get-own-property.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-a-date-object-that-uses-object-s-get-own-property.js
new file mode 100644
index 0000000000..2517e70bc0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-a-date-object-that-uses-object-s-get-own-property.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: >
+ Object.seal - 'P' is own property of a Date object that uses
+ Object's [[GetOwnProperty]]
+includes: [propertyHelper.js]
+---*/
+
+var obj = new Date();
+
+obj.foo = 10;
+
+assert(Object.isExtensible(obj));
+Object.seal(obj);
+
+verifyNotConfigurable(obj, "foo");
+assert.sameValue(obj.foo, 10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-a-function-object-that-uses-object-s-get-own-property.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-a-function-object-that-uses-object-s-get-own-property.js
new file mode 100644
index 0000000000..18c786075d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-a-function-object-that-uses-object-s-get-own-property.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: >
+ Object.seal - 'P' is own property of a Function object that uses
+ Object's [[GetOwnProperty]]
+includes: [propertyHelper.js]
+---*/
+
+var obj = function() {};
+
+obj.foo = 10;
+
+assert(Object.isExtensible(obj));
+Object.seal(obj);
+
+verifyNotConfigurable(obj, "foo");
+assert.sameValue(obj.foo, 10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-a-number-object-that-uses-object-s-get-own-property.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-a-number-object-that-uses-object-s-get-own-property.js
new file mode 100644
index 0000000000..9db2104ff6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-a-number-object-that-uses-object-s-get-own-property.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: >
+ Object.seal - 'P' is own property of a Number object that uses
+ Object's [[GetOwnProperty]]
+includes: [propertyHelper.js]
+---*/
+
+var obj = new Number(-1);
+
+obj.foo = 10;
+
+assert(Object.isExtensible(obj));
+Object.seal(obj);
+
+verifyNotConfigurable(obj, "foo");
+assert.sameValue(obj.foo, 10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-a-reg-exp-object-that-uses-object-s-get-own-property.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-a-reg-exp-object-that-uses-object-s-get-own-property.js
new file mode 100644
index 0000000000..839ce7dd37
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-a-reg-exp-object-that-uses-object-s-get-own-property.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: >
+ Object.seal - 'P' is own property of a RegExp object that uses
+ Object's [[GetOwnProperty]]
+includes: [propertyHelper.js]
+---*/
+
+var obj = new RegExp();
+
+obj.foo = 10;
+
+assert(Object.isExtensible(obj));
+Object.seal(obj);
+
+verifyNotConfigurable(obj, "foo");
+assert.sameValue(obj.foo, 10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-a-string-object-which-implements-its-own-get-own-property.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-a-string-object-which-implements-its-own-get-own-property.js
new file mode 100644
index 0000000000..7561754fd0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-a-string-object-which-implements-its-own-get-own-property.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: >
+ Object.seal - 'P' is own property of a String object which
+ implements its own [[GetOwnProperty]]
+includes: [propertyHelper.js]
+---*/
+
+var obj = new String("abc");
+
+obj.foo = 10;
+
+assert(Object.isExtensible(obj));
+Object.seal(obj);
+
+verifyNotConfigurable(obj, "foo");
+assert.sameValue(obj.foo, 10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-an-arguments-object-which-implements-its-own-get-own-property.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-an-arguments-object-which-implements-its-own-get-own-property.js
new file mode 100644
index 0000000000..39853c155f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-an-arguments-object-which-implements-its-own-get-own-property.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: >
+ Object.seal - 'P' is own property of an Arguments object which
+ implements its own [[GetOwnProperty]]
+includes: [propertyHelper.js]
+---*/
+
+var obj = (function() {
+ return arguments;
+})();
+
+obj.foo = 10;
+
+assert(Object.isExtensible(obj));
+Object.seal(obj);
+
+verifyNotConfigurable(obj, "foo");
+assert.sameValue(obj.foo, 10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-an-array-object-that-uses-object-s-get-own-property.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-an-array-object-that-uses-object-s-get-own-property.js
new file mode 100644
index 0000000000..26e19643df
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-an-array-object-that-uses-object-s-get-own-property.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: >
+ Object.seal - 'P' is own property of an Array object that uses
+ Object's [[GetOwnProperty]]
+includes: [propertyHelper.js]
+---*/
+
+var obj = [];
+
+obj.foo = 10;
+
+assert(Object.isExtensible(obj));
+Object.seal(obj);
+
+verifyNotConfigurable(obj, "foo");
+assert.sameValue(obj.foo, 10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-an-error-object-that-uses-object-s-get-own-property.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-an-error-object-that-uses-object-s-get-own-property.js
new file mode 100644
index 0000000000..045b2c0248
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-p-is-own-property-of-an-error-object-that-uses-object-s-get-own-property.js
@@ -0,0 +1,22 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: >
+ Object.seal - 'P' is own property of an Error object that uses
+ Object's [[GetOwnProperty]]
+includes: [propertyHelper.js]
+---*/
+
+var obj = new Error();
+
+obj.foo = 10;
+
+assert(Object.isExtensible(obj));
+Object.seal(obj);
+
+verifyNotConfigurable(obj, "foo");
+assert.sameValue(obj.foo, 10);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-returned-object-is-not-extensible.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-returned-object-is-not-extensible.js
new file mode 100644
index 0000000000..6179bb9c60
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-returned-object-is-not-extensible.js
@@ -0,0 +1,16 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: Object.seal - returned object is not extensible
+---*/
+
+var obj = {};
+var preCheck = Object.isExtensible(obj);
+Object.seal(obj);
+
+assert(preCheck, 'preCheck !== true');
+assert.sameValue(Object.isExtensible(obj), false, 'Object.isExtensible(obj)');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/object-seal-the-extension-of-o-is-prevented-already.js b/js/src/tests/test262/built-ins/Object/seal/object-seal-the-extension-of-o-is-prevented-already.js
new file mode 100644
index 0000000000..1393ff78d5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/object-seal-the-extension-of-o-is-prevented-already.js
@@ -0,0 +1,19 @@
+// Copyright (c) 2012 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-setintegritylevel
+description: Object.seal - the extension of 'O' is prevented already
+---*/
+
+var obj = {};
+
+obj.foo = 10; // default value of attributes: writable: true, configurable: true, enumerable: true
+var preCheck = Object.isExtensible(obj);
+Object.preventExtensions(obj);
+Object.seal(obj);
+
+assert(preCheck, 'preCheck !== true');
+assert(Object.isSealed(obj), 'Object.isSealed(obj) !== true');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/proxy-no-ownkeys-returned-keys-order.js b/js/src/tests/test262/built-ins/Object/seal/proxy-no-ownkeys-returned-keys-order.js
new file mode 100644
index 0000000000..691ee9af86
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/proxy-no-ownkeys-returned-keys-order.js
@@ -0,0 +1,54 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.seal
+description: >
+ If Proxy "ownKeys" trap is missing, keys are sorted by type in ascending
+ chronological order.
+info: |
+ SetIntegrityLevel ( O, level )
+
+ [...]
+ 5. Let keys be ? O.[[OwnPropertyKeys]]().
+ 6. If level is sealed, then
+ a. For each element k of keys, do
+ i. Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+
+ [[OwnPropertyKeys]] ( )
+
+ [...]
+ 6. If trap is undefined, then
+ a. Return ? target.[[OwnPropertyKeys]]().
+
+ OrdinaryOwnPropertyKeys ( O )
+
+ [...]
+ 3. For each own property key P of O such that Type(P) is String and P is
+ not an array index, in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 4. For each own property key P of O such that Type(P) is Symbol,
+ in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ 5. Return keys.
+features: [Proxy, Symbol, Reflect]
+includes: [compareArray.js]
+---*/
+
+var target = {};
+var sym = Symbol();
+target[sym] = 1;
+target.foo = 2;
+target[0] = 3;
+
+var definePropertyKeys = [];
+var proxy = new Proxy(target, {
+ defineProperty: function(target, key, descriptor) {
+ definePropertyKeys.push(key);
+ return Reflect.defineProperty(target, key, descriptor);
+ },
+});
+
+Object.seal(proxy);
+assert.compareArray(definePropertyKeys, ["0", "foo", sym]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/proxy-with-defineProperty-handler.js b/js/src/tests/test262/built-ins/Object/seal/proxy-with-defineProperty-handler.js
new file mode 100644
index 0000000000..ef3480de65
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/proxy-with-defineProperty-handler.js
@@ -0,0 +1,43 @@
+// Copyright (C) 2021 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.seal
+description: >
+ [[DefineOwnProperty]] is called with partial descriptor with only [[Configurable]] field present.
+info: |
+ SetIntegrityLevel ( O, level )
+
+ [...]
+ 5. Let keys be ? O.[[OwnPropertyKeys]]().
+ 6. If level is sealed, then
+ a. For each element k of keys, do
+ i. Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+features: [Symbol, Proxy, Reflect]
+---*/
+
+var sym = Symbol();
+var seenDescriptors = {};
+var proxy = new Proxy({
+ [sym]: 1,
+ get foo() {},
+ set foo(_v) {},
+}, {
+ defineProperty: function(target, key, descriptor) {
+ seenDescriptors[key] = descriptor;
+ return Reflect.defineProperty(target, key, descriptor);
+ },
+});
+
+Object.seal(proxy);
+
+assert.sameValue(seenDescriptors[sym].value, undefined, "value");
+assert.sameValue(seenDescriptors[sym].writable, undefined, "writable");
+assert.sameValue(seenDescriptors[sym].enumerable, undefined, "enumerable");
+assert.sameValue(seenDescriptors[sym].configurable, false, "configurable");
+
+assert.sameValue(seenDescriptors.foo.get, undefined, "get");
+assert.sameValue(seenDescriptors.foo.set, undefined, "set");
+assert.sameValue(seenDescriptors.foo.enumerable, undefined, "enumerable");
+assert.sameValue(seenDescriptors.foo.configurable, false, "configurable");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-aggregateerror.js b/js/src/tests/test262/built-ins/Object/seal/seal-aggregateerror.js
new file mode 100644
index 0000000000..909979f3fe
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-aggregateerror.js
@@ -0,0 +1,39 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal AggregateError
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+features: [AggregateError]
+---*/
+
+Object.seal(new AggregateError([]));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-arraybuffer.js b/js/src/tests/test262/built-ins/Object/seal/seal-arraybuffer.js
new file mode 100644
index 0000000000..168d8fe135
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-arraybuffer.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal ArrayBuffer
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new ArrayBuffer());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-arrowfunction.js b/js/src/tests/test262/built-ins/Object/seal/seal-arrowfunction.js
new file mode 100644
index 0000000000..318716f0dd
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-arrowfunction.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal ArrowFunction
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new (Object.getPrototypeOf(() => {}).constructor)());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-asyncarrowfunction.js b/js/src/tests/test262/built-ins/Object/seal/seal-asyncarrowfunction.js
new file mode 100644
index 0000000000..72122b12a8
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-asyncarrowfunction.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal AsyncArrowFunction
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new (Object.getPrototypeOf(async () => {}).constructor)());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-asyncfunction.js b/js/src/tests/test262/built-ins/Object/seal/seal-asyncfunction.js
new file mode 100644
index 0000000000..1908f4a34b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-asyncfunction.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal AsyncFunction
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new (Object.getPrototypeOf(async function() {}).constructor)());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-asyncgeneratorfunction.js b/js/src/tests/test262/built-ins/Object/seal/seal-asyncgeneratorfunction.js
new file mode 100644
index 0000000000..d92e188b5d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-asyncgeneratorfunction.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal AsyncGeneratorFunction
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new (Object.getPrototypeOf(async function * () {}).constructor)());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-bigint64array.js b/js/src/tests/test262/built-ins/Object/seal/seal-bigint64array.js
new file mode 100644
index 0000000000..4ef09db623
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-bigint64array.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal BigInt64Array
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new BigInt64Array());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-biguint64array.js b/js/src/tests/test262/built-ins/Object/seal/seal-biguint64array.js
new file mode 100644
index 0000000000..42c0b001fa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-biguint64array.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal BigUint64Array
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new BigUint64Array());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-boolean-literal.js b/js/src/tests/test262/built-ins/Object/seal/seal-boolean-literal.js
new file mode 100644
index 0000000000..60e4db96a3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-boolean-literal.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal boolean literal
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(true);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-boolean.js b/js/src/tests/test262/built-ins/Object/seal/seal-boolean.js
new file mode 100644
index 0000000000..fae83d7a21
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-boolean.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal Boolean
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new Boolean());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-dataview.js b/js/src/tests/test262/built-ins/Object/seal/seal-dataview.js
new file mode 100644
index 0000000000..4840652567
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-dataview.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal DataView
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new DataView(new ArrayBuffer(4)));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-date.js b/js/src/tests/test262/built-ins/Object/seal/seal-date.js
new file mode 100644
index 0000000000..f383c96c5f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-date.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal Date
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new Date());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-error.js b/js/src/tests/test262/built-ins/Object/seal/seal-error.js
new file mode 100644
index 0000000000..1a9a6fcedf
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-error.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal Error
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new Error());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-evalerror.js b/js/src/tests/test262/built-ins/Object/seal/seal-evalerror.js
new file mode 100644
index 0000000000..0b5fb1ce4c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-evalerror.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal EvalError
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new EvalError());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-finalizationregistry.js b/js/src/tests/test262/built-ins/Object/seal/seal-finalizationregistry.js
new file mode 100644
index 0000000000..cf6207190c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-finalizationregistry.js
@@ -0,0 +1,39 @@
+// |reftest| skip-if(!this.hasOwnProperty('FinalizationRegistry')) -- FinalizationRegistry is not enabled unconditionally
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal FinalizationRegistry
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+features: [FinalizationRegistry]
+---*/
+
+Object.seal(new FinalizationRegistry(() => {}));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-float32array.js b/js/src/tests/test262/built-ins/Object/seal/seal-float32array.js
new file mode 100644
index 0000000000..280a43c4f3
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-float32array.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal Float32Array
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new Float32Array());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-float64array.js b/js/src/tests/test262/built-ins/Object/seal/seal-float64array.js
new file mode 100644
index 0000000000..cd1da089d5
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-float64array.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal Float64Array
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new Float64Array());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-function.js b/js/src/tests/test262/built-ins/Object/seal/seal-function.js
new file mode 100644
index 0000000000..4cabc36195
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-function.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal Function
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new Function());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-generatorfunction.js b/js/src/tests/test262/built-ins/Object/seal/seal-generatorfunction.js
new file mode 100644
index 0000000000..953ce21fc6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-generatorfunction.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal GeneratorFunction
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new (Object.getPrototypeOf(function * () {}).constructor)());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-infinity.js b/js/src/tests/test262/built-ins/Object/seal/seal-infinity.js
new file mode 100644
index 0000000000..51681fe70f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-infinity.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal Infinity
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(Infinity);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-int16array.js b/js/src/tests/test262/built-ins/Object/seal/seal-int16array.js
new file mode 100644
index 0000000000..9997d78cc4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-int16array.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal Int16Array
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new Int16Array());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-int32array.js b/js/src/tests/test262/built-ins/Object/seal/seal-int32array.js
new file mode 100644
index 0000000000..0d7fb971c4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-int32array.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal Int32Array
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new Int32Array());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-int8array.js b/js/src/tests/test262/built-ins/Object/seal/seal-int8array.js
new file mode 100644
index 0000000000..6aeb1d8250
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-int8array.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal Int8Array
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new Int8Array());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-map.js b/js/src/tests/test262/built-ins/Object/seal/seal-map.js
new file mode 100644
index 0000000000..1c02f213c1
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-map.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal Map
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new Map());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-nan.js b/js/src/tests/test262/built-ins/Object/seal/seal-nan.js
new file mode 100644
index 0000000000..3256719209
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-nan.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal NaN
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(NaN);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-null.js b/js/src/tests/test262/built-ins/Object/seal/seal-null.js
new file mode 100644
index 0000000000..244576211a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-null.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal null
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(null);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-number.js b/js/src/tests/test262/built-ins/Object/seal/seal-number.js
new file mode 100644
index 0000000000..33331c93ee
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-number.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal Number
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new Number(1));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-object.js b/js/src/tests/test262/built-ins/Object/seal/seal-object.js
new file mode 100644
index 0000000000..cccd2b1212
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-object.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal Object
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new Object());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-promise.js b/js/src/tests/test262/built-ins/Object/seal/seal-promise.js
new file mode 100644
index 0000000000..5db80ce789
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-promise.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal Promise
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new Promise(() => {}));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-proxy.js b/js/src/tests/test262/built-ins/Object/seal/seal-proxy.js
new file mode 100644
index 0000000000..0eb080e73b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-proxy.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal Proxy
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new Proxy({}, {}));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-rangeerror.js b/js/src/tests/test262/built-ins/Object/seal/seal-rangeerror.js
new file mode 100644
index 0000000000..0db3c96158
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-rangeerror.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal RangeError
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new RangeError());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-referenceerror.js b/js/src/tests/test262/built-ins/Object/seal/seal-referenceerror.js
new file mode 100644
index 0000000000..51dc89f29f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-referenceerror.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal ReferenceError
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new ReferenceError());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-regexp.js b/js/src/tests/test262/built-ins/Object/seal/seal-regexp.js
new file mode 100644
index 0000000000..b8a29e4647
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-regexp.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal RegExp
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new RegExp(""));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-set.js b/js/src/tests/test262/built-ins/Object/seal/seal-set.js
new file mode 100644
index 0000000000..1df01af338
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-set.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal Set
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new Set());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-sharedarraybuffer.js b/js/src/tests/test262/built-ins/Object/seal/seal-sharedarraybuffer.js
new file mode 100644
index 0000000000..b89bd0cbc2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-sharedarraybuffer.js
@@ -0,0 +1,39 @@
+// |reftest| skip-if(!this.hasOwnProperty('SharedArrayBuffer')) -- SharedArrayBuffer is not enabled unconditionally
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal SharedArrayBuffer
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+features: [SharedArrayBuffer]
+---*/
+
+Object.seal(new SharedArrayBuffer(4));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-string.js b/js/src/tests/test262/built-ins/Object/seal/seal-string.js
new file mode 100644
index 0000000000..419de2065f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-string.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal String
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new String(""));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-symbol.js b/js/src/tests/test262/built-ins/Object/seal/seal-symbol.js
new file mode 100644
index 0000000000..e925ab8458
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-symbol.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal Symbol
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(Symbol());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-syntaxerror.js b/js/src/tests/test262/built-ins/Object/seal/seal-syntaxerror.js
new file mode 100644
index 0000000000..882196bf8f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-syntaxerror.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal SyntaxError
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new SyntaxError());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-typeerror.js b/js/src/tests/test262/built-ins/Object/seal/seal-typeerror.js
new file mode 100644
index 0000000000..2c121a83c9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-typeerror.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal TypeError
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new TypeError());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-uint16array.js b/js/src/tests/test262/built-ins/Object/seal/seal-uint16array.js
new file mode 100644
index 0000000000..ff2fe2423b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-uint16array.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal Uint16Array
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new Uint16Array());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-uint32array.js b/js/src/tests/test262/built-ins/Object/seal/seal-uint32array.js
new file mode 100644
index 0000000000..09bd1068d7
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-uint32array.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal Uint32Array
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new Uint32Array());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-uint8array.js b/js/src/tests/test262/built-ins/Object/seal/seal-uint8array.js
new file mode 100644
index 0000000000..6a246b9f1b
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-uint8array.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal Uint8Array
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new Uint8Array());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-uint8clampedarray.js b/js/src/tests/test262/built-ins/Object/seal/seal-uint8clampedarray.js
new file mode 100644
index 0000000000..de2afe8695
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-uint8clampedarray.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal Uint8ClampedArray
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new Uint8ClampedArray());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-undefined.js b/js/src/tests/test262/built-ins/Object/seal/seal-undefined.js
new file mode 100644
index 0000000000..248bb4938d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-undefined.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal undefined
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(undefined);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-urierror.js b/js/src/tests/test262/built-ins/Object/seal/seal-urierror.js
new file mode 100644
index 0000000000..45f073929d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-urierror.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal URIError
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new URIError());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-weakmap.js b/js/src/tests/test262/built-ins/Object/seal/seal-weakmap.js
new file mode 100644
index 0000000000..cd6d5867fa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-weakmap.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal WeakMap
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new WeakMap());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-weakref.js b/js/src/tests/test262/built-ins/Object/seal/seal-weakref.js
new file mode 100644
index 0000000000..5ae7ae0cea
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-weakref.js
@@ -0,0 +1,39 @@
+// |reftest| skip-if(!this.hasOwnProperty('WeakRef')) -- WeakRef is not enabled unconditionally
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal WeakRef
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+features: [WeakRef]
+---*/
+
+Object.seal(new WeakRef({}));
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/seal-weakset.js b/js/src/tests/test262/built-ins/Object/seal/seal-weakset.js
new file mode 100644
index 0000000000..0670e68857
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/seal-weakset.js
@@ -0,0 +1,38 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal WeakSet
+info: |
+ If Type(O) is not Object, return O.
+ Let status be ? SetIntegrityLevel(O, sealed).
+
+ SetIntegrityLevel ( O, level )
+
+ Assert: Type(O) is Object.
+ Assert: level is either sealed or frozen.
+ Let status be ? O.[[PreventExtensions]]().
+ If status is false, return false.
+ Let keys be ? O.[[OwnPropertyKeys]]().
+ If level is sealed, then
+ For each element k of keys, do
+ Perform ? DefinePropertyOrThrow(O, k, PropertyDescriptor { [[Configurable]]: false }).
+ Else,
+ Assert: level is frozen.
+ For each element k of keys, do
+ Let currentDesc be ? O.[[GetOwnProperty]](k).
+ If currentDesc is not undefined, then
+ If IsAccessorDescriptor(currentDesc) is true, then
+ Let desc be the PropertyDescriptor { [[Configurable]]: false }.
+ Else,
+ Let desc be the PropertyDescriptor { [[Configurable]]: false, [[Writable]]: false }.
+ Perform ? DefinePropertyOrThrow(O, k, desc).
+ Return true.
+
+---*/
+
+Object.seal(new WeakSet());
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/shell.js b/js/src/tests/test262/built-ins/Object/seal/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/seal/symbol-object-contains-symbol-properties-non-strict.js b/js/src/tests/test262/built-ins/Object/seal/symbol-object-contains-symbol-properties-non-strict.js
new file mode 100644
index 0000000000..8ac06f108c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/symbol-object-contains-symbol-properties-non-strict.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2013 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal(obj) where obj contains symbol properties.
+flags: [noStrict]
+features: [Symbol]
+---*/
+var symA = Symbol("A");
+var symB = Symbol("B");
+var obj = {};
+obj[symA] = 1;
+Object.seal(obj);
+obj[symA] = 2;
+obj[symB] = 1;
+
+assert.sameValue(obj[symA], 2, "The value of `obj[symA]` is `2`");
+assert.sameValue(delete obj[symA], false, "`delete obj[symA]` is `false`");
+assert.sameValue(obj[symB], undefined, "The value of `obj[symB]` is `undefined`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/symbol-object-contains-symbol-properties-strict-strict.js b/js/src/tests/test262/built-ins/Object/seal/symbol-object-contains-symbol-properties-strict-strict.js
new file mode 100644
index 0000000000..1c2715e311
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/symbol-object-contains-symbol-properties-strict-strict.js
@@ -0,0 +1,28 @@
+'use strict';
+// Copyright (C) 2013 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal(obj) where obj contains symbol properties.
+flags: [onlyStrict]
+features: [Symbol]
+---*/
+var symA = Symbol("A");
+var symB = Symbol("B");
+var obj = {};
+obj[symA] = 1;
+Object.seal(obj);
+obj[symA] = 2;
+
+assert.sameValue(obj[symA], 2, "The value of `obj[symA]` is `2`");
+
+assert.throws(TypeError, function() {
+ delete obj[symA];
+});
+
+assert.throws(TypeError, function() {
+ obj[symB] = 1;
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/seal/throws-when-false.js b/js/src/tests/test262/built-ins/Object/seal/throws-when-false.js
new file mode 100644
index 0000000000..810fcb590d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/seal/throws-when-false.js
@@ -0,0 +1,30 @@
+// Copyright (C) 2019 Ecma International. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.seal
+description: >
+ Object.seal throws if SetIntegrityLevel(O, sealed) returns false.
+info: |
+ Object.seal ( O )
+ ...
+ 2. Let status be ? SetIntegrityLevel(O, sealed).
+ 3. If status is false, throw a TypeError exception.
+
+ SetIntegrityLevel ( O, level )
+ ...
+ 3. Let status be ? O.[[PreventExtensions]]().
+ 4. If status is false, return false.
+---*/
+
+const p = new Proxy({}, {
+ preventExtensions() {
+ return false;
+ },
+});
+
+assert.throws(TypeError, () => {
+ Object.seal(p);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/setPrototypeOf/bigint.js b/js/src/tests/test262/built-ins/Object/setPrototypeOf/bigint.js
new file mode 100644
index 0000000000..36477cd529
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/setPrototypeOf/bigint.js
@@ -0,0 +1,18 @@
+// Copyright (C) 2017 Robin Templeton. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: RequireObjectCoercible for BigInt values
+esid: pending
+features: [BigInt]
+---*/
+
+try {
+ let {} = 0n;
+} catch (e) {
+ throw new Test262Error('Expected RequireObjectCoercible to succeed for BigInt values');
+}
+
+assert.sameValue(Object.setPrototypeOf(0n, null), 0n);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/setPrototypeOf/browser.js b/js/src/tests/test262/built-ins/Object/setPrototypeOf/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/setPrototypeOf/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/setPrototypeOf/length.js b/js/src/tests/test262/built-ins/Object/setPrototypeOf/length.js
new file mode 100644
index 0000000000..f2f8d611b9
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/setPrototypeOf/length.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.18
+description: Object.setPrototypeOf '`length` property'
+info: |
+ ES6 Section 17:
+ Every built-in Function object, including constructors, has a length
+ property whose value is an integer. Unless otherwise specified, this value
+ is equal to the largest number of named arguments shown in the subclause
+ headings for the function description, including optional parameters.
+
+ [...]
+
+ Unless otherwise specified, the length property of a built-in Function
+ object has the attributes { [[Writable]]: false, [[Enumerable]]: false,
+ [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(
+ Object.setPrototypeOf.length,
+ 2,
+ 'The value of `Object.setPrototypeOf.length` is `2`'
+);
+
+verifyNotEnumerable(Object.setPrototypeOf, 'length');
+verifyNotWritable(Object.setPrototypeOf, 'length');
+verifyConfigurable(Object.setPrototypeOf, 'length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/setPrototypeOf/name.js b/js/src/tests/test262/built-ins/Object/setPrototypeOf/name.js
new file mode 100644
index 0000000000..1c9ab55a58
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/setPrototypeOf/name.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.18
+description: Object.setPrototypeOf '`name` property'
+info: |
+ ES6 Section 17:
+
+ Every built-in Function object, including constructors, that is not
+ identified as an anonymous function has a name property whose value is a
+ String. Unless otherwise specified, this value is the name that is given to
+ the function in this specification.
+
+ [...]
+
+ Unless otherwise specified, the name property of a built-in Function
+ object, if it exists, has the attributes { [[Writable]]: false,
+ [[Enumerable]]: false, [[Configurable]]: true }.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(
+ Object.setPrototypeOf.name,
+ 'setPrototypeOf',
+ 'The value of `Object.setPrototypeOf.name` is `"setPrototypeOf"`'
+);
+
+verifyNotEnumerable(Object.setPrototypeOf, 'name');
+verifyNotWritable(Object.setPrototypeOf, 'name');
+verifyConfigurable(Object.setPrototypeOf, 'name');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/setPrototypeOf/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/setPrototypeOf/not-a-constructor.js
new file mode 100644
index 0000000000..625f438f4a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/setPrototypeOf/not-a-constructor.js
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.setPrototypeOf does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(
+ isConstructor(Object.setPrototypeOf),
+ false,
+ 'isConstructor(Object.setPrototypeOf) must return false'
+);
+
+assert.throws(TypeError, () => {
+ new Object.setPrototypeOf({}, {});
+}, '`new Object.setPrototypeOf({}, {})` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/setPrototypeOf/o-not-obj-coercible.js b/js/src/tests/test262/built-ins/Object/setPrototypeOf/o-not-obj-coercible.js
new file mode 100644
index 0000000000..242fbed95a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/setPrototypeOf/o-not-obj-coercible.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.18
+description: Object.setPrototypeOf invoked with a non-object-coercible value
+info: |
+ 1. Let O be RequireObjectCoercible(O).
+ 2. ReturnIfAbrupt(O).
+---*/
+
+assert.throws(TypeError, function() {
+ Object.setPrototypeOf(null);
+});
+
+assert.throws(TypeError, function() {
+ Object.setPrototypeOf(undefined);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/setPrototypeOf/o-not-obj.js b/js/src/tests/test262/built-ins/Object/setPrototypeOf/o-not-obj.js
new file mode 100644
index 0000000000..e269b9a809
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/setPrototypeOf/o-not-obj.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.18
+description: Object.setPrototypeOf invoked with a non-object value
+info: |
+ 1. Let O be RequireObjectCoercible(O).
+ 2. ReturnIfAbrupt(O).
+ 3. If Type(proto) is neither Object nor Null, throw a TypeError exception.
+ 4. If Type(O) is not Object, return O.
+features: [Symbol]
+---*/
+
+var symbol;
+
+assert.sameValue(Object.setPrototypeOf(true, null), true);
+assert.sameValue(Object.setPrototypeOf(3, null), 3);
+assert.sameValue(Object.setPrototypeOf('string', null), 'string');
+
+symbol = Symbol('s');
+assert.sameValue(Object.setPrototypeOf(symbol, null), symbol);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/setPrototypeOf/property-descriptor.js b/js/src/tests/test262/built-ins/Object/setPrototypeOf/property-descriptor.js
new file mode 100644
index 0000000000..946db0ad9c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/setPrototypeOf/property-descriptor.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.18
+description: Object.setPrototypeOf property descriptor
+info: |
+ Every other data property described in clauses 18 through 26 and in Annex
+ B.2 has the attributes { [[Writable]]: true, [[Enumerable]]: false,
+ [[Configurable]]: true } unless otherwise specified.
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(typeof Object.setPrototypeOf, 'function');
+
+verifyNotEnumerable(Object, 'setPrototypeOf');
+verifyWritable(Object, 'setPrototypeOf');
+verifyConfigurable(Object, 'setPrototypeOf');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/setPrototypeOf/proto-not-obj.js b/js/src/tests/test262/built-ins/Object/setPrototypeOf/proto-not-obj.js
new file mode 100644
index 0000000000..6d8e70c14d
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/setPrototypeOf/proto-not-obj.js
@@ -0,0 +1,37 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.18
+description: Object.setPrototypeOf invoked with an invalid prototype value
+info: |
+ 1. Let O be RequireObjectCoercible(O).
+ 2. ReturnIfAbrupt(O).
+ 3. If Type(proto) is neither Object nor Null, throw a TypeError exception.
+features: [Symbol]
+---*/
+
+assert.throws(TypeError, function() {
+ Object.setPrototypeOf({});
+});
+
+assert.throws(TypeError, function() {
+ Object.setPrototypeOf({}, undefined);
+});
+
+assert.throws(TypeError, function() {
+ Object.setPrototypeOf({}, true);
+});
+
+assert.throws(TypeError, function() {
+ Object.setPrototypeOf({}, 1);
+});
+
+assert.throws(TypeError, function() {
+ Object.setPrototypeOf({}, 'string');
+});
+
+assert.throws(TypeError, function() {
+ Object.setPrototypeOf({}, Symbol('s'));
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/setPrototypeOf/set-error.js b/js/src/tests/test262/built-ins/Object/setPrototypeOf/set-error.js
new file mode 100644
index 0000000000..c15891e442
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/setPrototypeOf/set-error.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.18
+description: >
+ Object.setPrototypeOf invoked with an object whose prototype cannot be set
+info: |
+ 1. Let O be RequireObjectCoercible(O).
+ 2. ReturnIfAbrupt(O).
+ 3. If Type(proto) is neither Object nor Null, throw a TypeError exception.
+ 4. If Type(O) is not Object, return O.
+ 5. Let status be O.[[SetPrototypeOf]](proto).
+ 6. ReturnIfAbrupt(status).
+features: [Proxy]
+---*/
+
+var obj = new Proxy({}, {
+ setPrototypeOf: function() {
+ throw new Test262Error();
+ }
+});
+
+assert.throws(Test262Error, function() {
+ Object.setPrototypeOf(obj, null);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/setPrototypeOf/set-failure-cycle.js b/js/src/tests/test262/built-ins/Object/setPrototypeOf/set-failure-cycle.js
new file mode 100644
index 0000000000..0e8a664f21
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/setPrototypeOf/set-failure-cycle.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.18
+description: >
+ Object.setPrototypeOf invoked with a value that would create a cycle
+info: |
+ 1. Let O be RequireObjectCoercible(O).
+ 2. ReturnIfAbrupt(O).
+ 3. If Type(proto) is neither Object nor Null, throw a TypeError exception.
+ 4. If Type(O) is not Object, return O.
+ 5. Let status be O.[[SetPrototypeOf]](proto).
+ 6. ReturnIfAbrupt(status).
+ 7. If status is false, throw a TypeError exception.
+---*/
+
+var obj = {};
+
+assert.throws(TypeError, function() {
+ Object.setPrototypeOf(Object.prototype, Array.prototype);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/setPrototypeOf/set-failure-non-extensible.js b/js/src/tests/test262/built-ins/Object/setPrototypeOf/set-failure-non-extensible.js
new file mode 100644
index 0000000000..168cad6773
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/setPrototypeOf/set-failure-non-extensible.js
@@ -0,0 +1,24 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.18
+description: Object.setPrototypeOf invoked with a non-extensible object
+info: |
+ 1. Let O be RequireObjectCoercible(O).
+ 2. ReturnIfAbrupt(O).
+ 3. If Type(proto) is neither Object nor Null, throw a TypeError exception.
+ 4. If Type(O) is not Object, return O.
+ 5. Let status be O.[[SetPrototypeOf]](proto).
+ 6. ReturnIfAbrupt(status).
+ 7. If status is false, throw a TypeError exception.
+---*/
+
+var obj = {};
+
+Object.preventExtensions(obj);
+
+assert.throws(TypeError, function() {
+ Object.setPrototypeOf(obj, null);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/setPrototypeOf/shell.js b/js/src/tests/test262/built-ins/Object/setPrototypeOf/shell.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/setPrototypeOf/shell.js
diff --git a/js/src/tests/test262/built-ins/Object/setPrototypeOf/success.js b/js/src/tests/test262/built-ins/Object/setPrototypeOf/success.js
new file mode 100644
index 0000000000..34442ccbed
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/setPrototypeOf/success.js
@@ -0,0 +1,33 @@
+// Copyright (C) 2015 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.2.18
+description: Object.setPrototypeOf invoked with a non-extensible object
+info: |
+ 1. Let O be RequireObjectCoercible(O).
+ 2. ReturnIfAbrupt(O).
+ 3. If Type(proto) is neither Object nor Null, throw a TypeError exception.
+ 4. If Type(O) is not Object, return O.
+ 5. Let status be O.[[SetPrototypeOf]](proto).
+ 6. ReturnIfAbrupt(status).
+ 7. If status is false, throw a TypeError exception.
+ 8. Return O.
+---*/
+
+var propValue = {};
+var newProto = {
+ test262prop: propValue
+};
+var obj = {};
+var result;
+
+result = Object.setPrototypeOf(obj, newProto);
+
+assert.sameValue(result, obj, 'Return value');
+assert(
+ !Object.prototype.hasOwnProperty.call(obj, 'test262prop'),
+ "'test262prop' isn't copied to an own property"
+);
+assert.sameValue(obj.test262prop, propValue);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/shell.js b/js/src/tests/test262/built-ins/Object/shell.js
new file mode 100644
index 0000000000..eda1477282
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/shell.js
@@ -0,0 +1,24 @@
+// GENERATED, DO NOT EDIT
+// file: isConstructor.js
+// Copyright (C) 2017 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+description: |
+ Test if a given function is a constructor function.
+defines: [isConstructor]
+features: [Reflect.construct]
+---*/
+
+function isConstructor(f) {
+ if (typeof f !== "function") {
+ throw new Test262Error("isConstructor invoked with a non-function value");
+ }
+
+ try {
+ Reflect.construct(function(){}, [], f);
+ } catch (e) {
+ return false;
+ }
+ return true;
+}
diff --git a/js/src/tests/test262/built-ins/Object/subclass-object-arg.js b/js/src/tests/test262/built-ins/Object/subclass-object-arg.js
new file mode 100644
index 0000000000..e4eab7b92e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/subclass-object-arg.js
@@ -0,0 +1,28 @@
+// Copyright (C) 2019 Aleksey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+esid: sec-object-value
+author: Matthew Phillips <matthew@matthewphillips.info>
+description: >
+ NewTarget is active function and subclass of Object
+info: |
+ Object ( [ value ] )
+
+ 1. If NewTarget is neither undefined nor the active function, then
+ a. Return ? OrdinaryCreateFromConstructor(NewTarget, "%ObjectPrototype%").
+ [...]
+features: [class, Reflect, Reflect.construct]
+---*/
+
+class O extends Object {}
+
+var o1 = new O({a: 1});
+var o2 = Reflect.construct(Object, [{b: 2}], O);
+
+assert.sameValue(o1.a, undefined);
+assert.sameValue(o2.b, undefined);
+
+assert.sameValue(Object.getPrototypeOf(o1), O.prototype);
+assert.sameValue(Object.getPrototypeOf(o2), O.prototype);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/symbol_object-returns-fresh-symbol.js b/js/src/tests/test262/built-ins/Object/symbol_object-returns-fresh-symbol.js
new file mode 100644
index 0000000000..49ea3658f0
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/symbol_object-returns-fresh-symbol.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2013 the V8 project authors. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+es6id: 19.1.1.1_S3
+description: >
+ Object(sym) returns a fresh Symbol object
+features: [Symbol]
+---*/
+var symA = Symbol('A');
+var symB = Symbol();
+
+assert.notSameValue(Object(symA), symA, "The value of `Object(symA)` is not `symA`");
+assert.notSameValue(Object(symB), symB, "The value of `Object(symB)` is not `symB`");
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/values/browser.js b/js/src/tests/test262/built-ins/Object/values/browser.js
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/values/browser.js
diff --git a/js/src/tests/test262/built-ins/Object/values/exception-during-enumeration.js b/js/src/tests/test262/built-ins/Object/values/exception-during-enumeration.js
new file mode 100644
index 0000000000..fa6c9c73bc
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/values/exception-during-enumeration.js
@@ -0,0 +1,23 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.values
+description: Object.values should terminate if getting a value throws an exception
+author: Jordan Harband
+---*/
+
+var trappedKey = {
+ get a() {
+ throw new RangeError('This error should be re-thrown');
+ },
+ get b() {
+ throw new Test262Error('Should not try to get the second element');
+ }
+};
+
+assert.throws(RangeError, function() {
+ Object.values(trappedKey);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/values/exception-not-object-coercible.js b/js/src/tests/test262/built-ins/Object/values/exception-not-object-coercible.js
new file mode 100644
index 0000000000..f52d333010
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/values/exception-not-object-coercible.js
@@ -0,0 +1,18 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.values
+description: Object.values should fail if given a null or undefined value
+author: Jordan Harband
+---*/
+
+assert.throws(TypeError, function() {
+ Object.values(null);
+});
+
+assert.throws(TypeError, function() {
+ Object.values(undefined);
+});
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/values/function-length.js b/js/src/tests/test262/built-ins/Object/values/function-length.js
new file mode 100644
index 0000000000..bb3ede0e3c
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/values/function-length.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.values
+description: Object.values should have length 1
+author: Jordan Harband
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(Object.values.length, 1, 'Expected Object.values.length to be 1');
+
+verifyNotEnumerable(Object.values, 'length');
+verifyNotWritable(Object.values, 'length');
+verifyConfigurable(Object.values, 'length');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/values/function-name.js b/js/src/tests/test262/built-ins/Object/values/function-name.js
new file mode 100644
index 0000000000..6535fd2db4
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/values/function-name.js
@@ -0,0 +1,21 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.values
+description: Object.values should have name property with value 'values'
+author: Jordan Harband
+includes: [propertyHelper.js]
+---*/
+
+assert.sameValue(
+ Object.values.name,
+ 'values',
+ 'Expected Object.values.name to be "values"'
+);
+
+verifyNotEnumerable(Object.values, 'name');
+verifyNotWritable(Object.values, 'name');
+verifyConfigurable(Object.values, 'name');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/values/function-property-descriptor.js b/js/src/tests/test262/built-ins/Object/values/function-property-descriptor.js
new file mode 100644
index 0000000000..ebd062c347
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/values/function-property-descriptor.js
@@ -0,0 +1,15 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.values
+description: Object.values should be writable, non-enumerable, and configurable
+author: Jordan Harband
+includes: [propertyHelper.js]
+---*/
+
+verifyNotEnumerable(Object, 'values');
+verifyWritable(Object, 'values');
+verifyConfigurable(Object, 'values');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/values/getter-adding-key.js b/js/src/tests/test262/built-ins/Object/values/getter-adding-key.js
new file mode 100644
index 0000000000..e4beea017a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/values/getter-adding-key.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.values
+description: Object.values does not see a new element added by a getter that is hit during iteration
+author: Jordan Harband
+---*/
+
+var bAddsC = {
+ a: 'A',
+ get b() {
+ this.c = 'C';
+ return 'B';
+ }
+};
+
+var result = Object.values(bAddsC);
+
+assert.sameValue(Array.isArray(result), true, 'result is an array');
+assert.sameValue(result.length, 2, 'result has 2 items');
+
+assert.sameValue(result[0], 'A', 'first value is "A"');
+assert.sameValue(result[1], 'B', 'second value is "B"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/values/getter-making-future-key-nonenumerable.js b/js/src/tests/test262/built-ins/Object/values/getter-making-future-key-nonenumerable.js
new file mode 100644
index 0000000000..a1ee5fab2a
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/values/getter-making-future-key-nonenumerable.js
@@ -0,0 +1,29 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.values
+description: Object.values does not see an element made non-enumerable by a getter that is hit during iteration
+author: Jordan Harband
+---*/
+
+var bDeletesC = {
+ a: 'A',
+ get b() {
+ Object.defineProperty(this, 'c', {
+ enumerable: false
+ });
+ return 'B';
+ },
+ c: 'C'
+};
+
+var result = Object.values(bDeletesC);
+
+assert.sameValue(Array.isArray(result), true, 'result is an array');
+assert.sameValue(result.length, 2, 'result has 2 items');
+
+assert.sameValue(result[0], 'A', 'first value is "A"');
+assert.sameValue(result[1], 'B', 'second value is "B"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/values/getter-removing-future-key.js b/js/src/tests/test262/built-ins/Object/values/getter-removing-future-key.js
new file mode 100644
index 0000000000..dab41f8536
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/values/getter-removing-future-key.js
@@ -0,0 +1,27 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.values
+description: Object.values does not see an element removed by a getter that is hit during iteration
+author: Jordan Harband
+---*/
+
+var bDeletesC = {
+ a: 'A',
+ get b() {
+ delete this.c;
+ return 'B';
+ },
+ c: 'C'
+};
+
+var result = Object.values(bDeletesC);
+
+assert.sameValue(Array.isArray(result), true, 'result is an array');
+assert.sameValue(result.length, 2, 'result has 2 items');
+
+assert.sameValue(result[0], 'A', 'first value is "A"');
+assert.sameValue(result[1], 'B', 'second value is "B"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/values/inherited-properties-omitted.js b/js/src/tests/test262/built-ins/Object/values/inherited-properties-omitted.js
new file mode 100644
index 0000000000..e5a18c0f21
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/values/inherited-properties-omitted.js
@@ -0,0 +1,26 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.values
+description: Object.values does not see inherited properties.
+author: Jordan Harband
+---*/
+
+var F = function G() {};
+F.prototype.a = {};
+F.prototype.b = {};
+
+var f = new F();
+f.b = {}; // shadow the prototype
+f.c = {}; // solely an own property
+
+var result = Object.values(f);
+
+assert.sameValue(Array.isArray(result), true, 'result is an array');
+assert.sameValue(result.length, 2, 'result has 2 items');
+
+assert.sameValue(result[0], f.b, 'first value is f.b');
+assert.sameValue(result[1], f.c, 'second value is f.c');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/values/not-a-constructor.js b/js/src/tests/test262/built-ins/Object/values/not-a-constructor.js
new file mode 100644
index 0000000000..632d285a49
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/values/not-a-constructor.js
@@ -0,0 +1,31 @@
+// Copyright (C) 2020 Rick Waldron. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-ecmascript-standard-built-in-objects
+description: >
+ Object.values does not implement [[Construct]], is not new-able
+info: |
+ ECMAScript Function Objects
+
+ Built-in function objects that are not identified as constructors do not
+ implement the [[Construct]] internal method unless otherwise specified in
+ the description of a particular function.
+
+ sec-evaluatenew
+
+ ...
+ 7. If IsConstructor(constructor) is false, throw a TypeError exception.
+ ...
+includes: [isConstructor.js]
+features: [Reflect.construct, arrow-function]
+---*/
+
+assert.sameValue(isConstructor(Object.values), false, 'isConstructor(Object.values) must return false');
+
+assert.throws(TypeError, () => {
+ new Object.values({});
+}, '`new Object.values({})` throws TypeError');
+
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/values/observable-operations.js b/js/src/tests/test262/built-ins/Object/values/observable-operations.js
new file mode 100644
index 0000000000..a1dc4baa5f
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/values/observable-operations.js
@@ -0,0 +1,46 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.values
+description: Object.values should perform observable operations in the correct order
+author: Jordan Harband
+features: [Proxy]
+includes: [proxyTrapsHelper.js]
+---*/
+
+var log = "";
+var object = {
+ a: 0,
+ b: 0,
+ c: 0
+};
+var handler = allowProxyTraps({
+ get: function(target, propertyKey, receiver) {
+ assert.sameValue(target, object, "get target");
+ assert.sameValue(receiver, proxy, "get receiver");
+ log += "|get:" + propertyKey;
+ return target[propertyKey];
+ },
+ getOwnPropertyDescriptor: function(target, propertyKey) {
+ assert.sameValue(target, object, "getOwnPropertyDescriptor");
+ log += "|getOwnPropertyDescriptor:" + propertyKey;
+ return Object.getOwnPropertyDescriptor(target, propertyKey);
+ },
+ ownKeys: function(target) {
+ assert.sameValue(target, object, "ownKeys");
+ log += "|ownKeys";
+ return Object.getOwnPropertyNames(target);
+ }
+});
+var check = allowProxyTraps({
+ get: function(target, propertyKey, receiver) {
+ assert(propertyKey in target, "handler check: " + propertyKey);
+ return target[propertyKey];
+ }
+});
+var proxy = new Proxy(object, new Proxy(handler, check));
+var result = Object.values(proxy);
+assert.sameValue(log, "|ownKeys|getOwnPropertyDescriptor:a|get:a|getOwnPropertyDescriptor:b|get:b|getOwnPropertyDescriptor:c|get:c", log);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/values/order-after-define-property.js b/js/src/tests/test262/built-ins/Object/values/order-after-define-property.js
new file mode 100644
index 0000000000..ac1da3174e
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/values/order-after-define-property.js
@@ -0,0 +1,57 @@
+// Copyright (C) 2020 Alexey Shvayka. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.values
+description: >
+ Property names are returned in ascending chronological order of creation
+ that is unaffected by [[DefineOwnProperty]].
+info: |
+ Object.values ( O )
+
+ [...]
+ 2. Let nameList be ? EnumerableOwnPropertyNames(obj, value).
+ 3. Return CreateArrayFromList(nameList).
+
+ EnumerableOwnPropertyNames ( O, kind )
+
+ [...]
+ 2. Let ownKeys be ? O.[[OwnPropertyKeys]]().
+ [...]
+
+ OrdinaryOwnPropertyKeys ( O )
+
+ [...]
+ 3. For each own property key P of O that is a String but is not an array index,
+ in ascending chronological order of property creation, do
+ a. Add P as the last element of keys.
+ [...]
+ 5. Return keys.
+includes: [compareArray.js]
+---*/
+
+var obj = {};
+Object.defineProperty(obj, "a", {
+ get: function() {},
+ enumerable: true,
+ configurable: true,
+});
+obj.b = "b";
+Object.defineProperty(obj, "a", {
+ get: function() {
+ return "a";
+ },
+});
+assert.compareArray(Object.values(obj), ["a", "b"]);
+
+var proxy = new Proxy({}, {});
+Object.defineProperty(proxy, "a", {
+ get: function() {},
+ enumerable: true,
+ configurable: true,
+});
+proxy.b = "b";
+Object.defineProperty(proxy, "a", {value: "a"});
+assert.compareArray(Object.values(proxy), ["a", "b"]);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/values/primitive-booleans.js b/js/src/tests/test262/built-ins/Object/values/primitive-booleans.js
new file mode 100644
index 0000000000..da224c2163
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/values/primitive-booleans.js
@@ -0,0 +1,20 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.values
+description: Object.values accepts boolean primitives.
+author: Jordan Harband
+---*/
+
+var trueResult = Object.values(true);
+
+assert.sameValue(Array.isArray(trueResult), true, 'trueResult is an array');
+assert.sameValue(trueResult.length, 0, 'trueResult has 0 items');
+
+var falseResult = Object.values(false);
+
+assert.sameValue(Array.isArray(falseResult), true, 'falseResult is an array');
+assert.sameValue(falseResult.length, 0, 'falseResult has 0 items');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/values/primitive-numbers.js b/js/src/tests/test262/built-ins/Object/values/primitive-numbers.js
new file mode 100644
index 0000000000..2ed4fe4758
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/values/primitive-numbers.js
@@ -0,0 +1,17 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.values
+description: Object.values accepts number primitives.
+author: Jordan Harband
+---*/
+
+assert.sameValue(Object.values(0).length, 0, '0 has zero values');
+assert.sameValue(Object.values(-0).length, 0, '-0 has zero values');
+assert.sameValue(Object.values(Infinity).length, 0, 'Infinity has zero values');
+assert.sameValue(Object.values(-Infinity).length, 0, '-Infinity has zero values');
+assert.sameValue(Object.values(NaN).length, 0, 'NaN has zero values');
+assert.sameValue(Object.values(Math.PI).length, 0, 'Math.PI has zero values');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/values/primitive-strings.js b/js/src/tests/test262/built-ins/Object/values/primitive-strings.js
new file mode 100644
index 0000000000..c7beaf6ef6
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/values/primitive-strings.js
@@ -0,0 +1,19 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.values
+description: Object.values accepts string primitives.
+author: Jordan Harband
+---*/
+
+var result = Object.values('abc');
+
+assert.sameValue(Array.isArray(result), true, 'result is an array');
+assert.sameValue(result.length, 3, 'result has 3 items');
+
+assert.sameValue(result[0], 'a', 'first value is "a"');
+assert.sameValue(result[1], 'b', 'second value is "b"');
+assert.sameValue(result[2], 'c', 'third value is "c"');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/values/primitive-symbols.js b/js/src/tests/test262/built-ins/Object/values/primitive-symbols.js
new file mode 100644
index 0000000000..3696dc3e99
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/values/primitive-symbols.js
@@ -0,0 +1,16 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.values
+description: Object.values accepts Symbol primitives.
+author: Jordan Harband
+features: [Symbol]
+---*/
+
+var result = Object.values(Symbol());
+
+assert.sameValue(Array.isArray(result), true, 'result is an array');
+assert.sameValue(result.length, 0, 'result has 0 items');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/values/return-order.js b/js/src/tests/test262/built-ins/Object/values/return-order.js
new file mode 100644
index 0000000000..073baf8b38
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/values/return-order.js
@@ -0,0 +1,43 @@
+// Copyright 2019 Kevin Gibbons. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.values
+description: Object.values enumeration order
+features: [for-in-order]
+includes: [compareArray.js]
+---*/
+
+var o = {
+ p1: 'p1',
+ p2: 'p2',
+ p3: 'p3',
+};
+
+// This getter will be triggered during enumeration, but the property it adds should not be enumerated.
+Object.defineProperty(o, 'add', {
+ enumerable: true,
+ get: function () {
+ o.extra = 'extra';
+ return 'add';
+ }
+});
+
+o.p4 = 'p4';
+
+o[2] = '2';
+o[0] = '0';
+o[1] = '1';
+
+delete o.p1;
+delete o.p3;
+o.p1 = 'p1';
+
+
+var actual = Object.values(o);
+
+var expected = ['0', '1', '2', 'p2', 'add', 'p4', 'p1'];
+
+assert.compareArray(actual, expected);
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/values/shell.js b/js/src/tests/test262/built-ins/Object/values/shell.js
new file mode 100644
index 0000000000..bc72493f03
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/values/shell.js
@@ -0,0 +1,33 @@
+// GENERATED, DO NOT EDIT
+// file: proxyTrapsHelper.js
+// Copyright (C) 2016 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+/*---
+description: |
+ Used to assert the correctness of object behavior in the presence
+ and context of Proxy objects.
+defines: [allowProxyTraps]
+---*/
+
+function allowProxyTraps(overrides) {
+ function throwTest262Error(msg) {
+ return function () { throw new Test262Error(msg); };
+ }
+ if (!overrides) { overrides = {}; }
+ return {
+ getPrototypeOf: overrides.getPrototypeOf || throwTest262Error('[[GetPrototypeOf]] trap called'),
+ setPrototypeOf: overrides.setPrototypeOf || throwTest262Error('[[SetPrototypeOf]] trap called'),
+ isExtensible: overrides.isExtensible || throwTest262Error('[[IsExtensible]] trap called'),
+ preventExtensions: overrides.preventExtensions || throwTest262Error('[[PreventExtensions]] trap called'),
+ getOwnPropertyDescriptor: overrides.getOwnPropertyDescriptor || throwTest262Error('[[GetOwnProperty]] trap called'),
+ has: overrides.has || throwTest262Error('[[HasProperty]] trap called'),
+ get: overrides.get || throwTest262Error('[[Get]] trap called'),
+ set: overrides.set || throwTest262Error('[[Set]] trap called'),
+ deleteProperty: overrides.deleteProperty || throwTest262Error('[[Delete]] trap called'),
+ defineProperty: overrides.defineProperty || throwTest262Error('[[DefineOwnProperty]] trap called'),
+ enumerate: throwTest262Error('[[Enumerate]] trap called: this trap has been removed'),
+ ownKeys: overrides.ownKeys || throwTest262Error('[[OwnPropertyKeys]] trap called'),
+ apply: overrides.apply || throwTest262Error('[[Call]] trap called'),
+ construct: overrides.construct || throwTest262Error('[[Construct]] trap called')
+ };
+}
diff --git a/js/src/tests/test262/built-ins/Object/values/symbols-omitted.js b/js/src/tests/test262/built-ins/Object/values/symbols-omitted.js
new file mode 100644
index 0000000000..2ac7d22bfa
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/values/symbols-omitted.js
@@ -0,0 +1,32 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.values
+description: Object.values does not include Symbol keys.
+author: Jordan Harband
+features: [Symbol]
+---*/
+
+var value = {};
+var enumSym = Symbol('enum');
+var nonEnumSym = Symbol('nonenum');
+var symValue = Symbol('value');
+
+var obj = {
+ key: symValue
+};
+obj[enumSym] = value;
+Object.defineProperty(obj, nonEnumSym, {
+ enumerable: false,
+ value: value
+});
+
+var result = Object.values(obj);
+
+assert.sameValue(Array.isArray(result), true, 'result is an array');
+assert.sameValue(result.length, 1, 'result has 1 item');
+
+assert.sameValue(result[0], symValue, 'first value is `symValue`');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/values/tamper-with-global-object.js b/js/src/tests/test262/built-ins/Object/values/tamper-with-global-object.js
new file mode 100644
index 0000000000..d7bda78351
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/values/tamper-with-global-object.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.values
+description: >
+ Object.values should not have its behavior impacted by modifications to the global property Object
+author: Jordan Harband
+---*/
+
+function fakeObject() {
+ throw new Test262Error('The overriden version of Object was called!');
+}
+fakeObject.values = Object.values;
+
+var global = Function('return this;')();
+global.Object = fakeObject;
+
+assert.sameValue(Object, fakeObject, 'Sanity check failed: could not modify the global Object');
+assert.sameValue(Object.values(1).length, 0, 'Expected number primitive to have zero values');
+
+reportCompare(0, 0);
diff --git a/js/src/tests/test262/built-ins/Object/values/tamper-with-object-keys.js b/js/src/tests/test262/built-ins/Object/values/tamper-with-object-keys.js
new file mode 100644
index 0000000000..66c1047004
--- /dev/null
+++ b/js/src/tests/test262/built-ins/Object/values/tamper-with-object-keys.js
@@ -0,0 +1,22 @@
+// Copyright (C) 2015 Jordan Harband. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-object.values
+description: >
+ Object.values should not have its behavior impacted by modifications to Object.keys
+author: Jordan Harband
+---*/
+
+function fakeObjectKeys() {
+ throw new Test262Error('The overriden version of Object.keys was called!');
+}
+
+Object.keys = fakeObjectKeys;
+
+assert.sameValue(Object.keys, fakeObjectKeys, 'Sanity check failed: could not modify the global Object.keys');
+assert.sameValue(Object.values({
+ a: 1
+}).length, 1, 'Expected object with 1 key to have 1 value');
+
+reportCompare(0, 0);