[test] Copy test262-es6 into test262.
authormachenbach <machenbach@chromium.org>
Fri, 25 Sep 2015 13:03:27 +0000 (06:03 -0700)
committerCommit bot <commit-bot@chromium.org>
Fri, 25 Sep 2015 13:03:36 +0000 (13:03 +0000)
BUG=v8:4254
LOG=n
NOTRY=true

Review URL: https://codereview.chromium.org/1365293002

Cr-Commit-Position: refs/heads/master@{#30936}

test/test262/README
test/test262/harness-adapt.js
test/test262/test262.status
test/test262/testcfg.py

index e975fbb..fe3ab23 100644 (file)
@@ -4,13 +4,13 @@ tests from
 
   https://github.com/tc39/test262
 
-at revision 365 (hash fbba29f) as 'data' in this directory.  Using later
+at hash c6ac390 (2015/07/06 revision) as 'data' in this directory.  Using later
 version may be possible but the tests are only known to pass (and indeed run)
 with that revision.
 
   git clone https://github.com/tc39/test262 data
   cd data
-  git checkout fbba29f
+  git checkout c6ac390
 
 If you do update to a newer revision you may have to change the test
 harness adapter code since it uses internal functionality from the
index 52b5de7..60c0858 100644 (file)
@@ -80,3 +80,12 @@ var ES5Harness = (function() {
     registerTest: registerTest
   }
 })();
+
+function $DONE(arg){
+    if (arg) {
+        print('FAILED! Error: ' + arg);
+        quit(1);
+    }
+
+    quit(0);
+};
index dd854d0..0a8f4e8 100644 (file)
@@ -1,4 +1,3 @@
-
 # Copyright 2011 the V8 project authors. All rights reserved.
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are
 [ALWAYS, {
   ############################### BUGS ###################################
 
-  '15.5.4.9_CE': [['no_i18n', SKIP]],
-
   # BUG(v8:3455)
-  '11.2.3_b': [FAIL],
-  '12.2.3_b': [FAIL],
+  'intl402/11.2.3_b': [FAIL],
+  'intl402/12.2.3_b': [FAIL],
 
   # BUG(v8:4267)
-  '15.2.3.6-4-116': [FAIL],
-  '15.2.3.6-4-117': [FAIL],
-  '15.2.3.6-4-168': [FAIL],
-  '15.2.3.6-4-169': [FAIL],
-  '15.2.3.6-4-170': [FAIL],
-  '15.2.3.6-4-172': [FAIL],
-  '15.2.3.6-4-173': [FAIL],
-  '15.2.3.6-4-174': [FAIL],
-  '15.2.3.6-4-176': [FAIL],
-  '15.2.3.6-4-177': [FAIL],
-  '15.2.3.7-6-a-112': [FAIL],
-  '15.2.3.7-6-a-113': [FAIL],
-  '15.2.3.7-6-a-164': [FAIL],
-  '15.2.3.7-6-a-165': [FAIL],
-  '15.2.3.7-6-a-166': [FAIL],
-  '15.2.3.7-6-a-168': [FAIL],
-  '15.2.3.7-6-a-169': [FAIL],
-  '15.2.3.7-6-a-170': [FAIL],
-  '15.2.3.7-6-a-172': [FAIL],
-  '15.2.3.7-6-a-173': [FAIL],
-  '15.2.3.7-6-a-175': [FAIL],
-  '15.2.3.7-6-a-176': [FAIL],
-
-  ############################### ES6 ###################################
-  # ES6 allows block-local functions.
-  'Sbp_A1_T1': [PASS, FAIL_OK],
-  'Sbp_A2_T1': [PASS, FAIL_OK],
-  'Sbp_A2_T2': [PASS, FAIL_OK],
-  'Sbp_A3_T1': [PASS, FAIL_OK],
-  'Sbp_A3_T2': [PASS, FAIL_OK],
-  'Sbp_A4_T1': [PASS, FAIL_OK],
-  'Sbp_A4_T2': [PASS, FAIL_OK],
-  'Sbp_A5_T1': [PASS], # Test is broken (strict reference to unbound variable)
-  'Sbp_A5_T2': [PASS, FAIL_OK],
-
-  # Passes in ES6 since {__arr} syntax is parsed as object literal.
-  'S12.1_A4_T2': [PASS, FAIL_OK],
-  'S12.6.4_A15': [PASS, FAIL_OK],
-
-  # ES6 allows duplicate properties
-  '11.1.5-4-4-a-1-s': [FAIL],
-  '11.1.5_4-4-b-1': [FAIL],
-  '11.1.5_4-4-b-2': [FAIL],
-  '11.1.5_4-4-c-1': [FAIL],
-  '11.1.5_4-4-c-2': [FAIL],
-  '11.1.5_4-4-d-1': [FAIL],
-  '11.1.5_4-4-d-2': [FAIL],
-  '11.1.5_4-4-d-3': [FAIL],
-  '11.1.5_4-4-d-4': [FAIL],
-
-  # NativeError has Error as its [[Prototype]]
-  '15.2.3.2-2-12': [FAIL],
-  '15.2.3.2-2-13': [FAIL],
-  '15.2.3.2-2-14': [FAIL],
-  '15.2.3.2-2-15': [FAIL],
-  '15.2.3.2-2-16': [FAIL],
-  '15.2.3.2-2-17': [FAIL],
-
-  # Function length properties are configurable in ES6
-  '10.1_L15': [FAIL],
-  '10.2.2_L15': [FAIL],
-  '10.3.2_1_a_L15': [FAIL],
-  '10.3.2_L15': [FAIL],
-  '10.3.3_L15': [FAIL],
-  '11.1_L15': [FAIL],
-  '11.2.2_L15': [FAIL],
-  '11.3.2_1_a_L15': [FAIL],
-  '11.3.2_L15': [FAIL],
-  '11.3.3_L15': [FAIL],
-  '11.4.1-5-a-28-s': [FAIL],
-  '12.1_L15': [FAIL],
-  '12.2.2_L15': [FAIL],
-  '12.3.2_1_a_L15': [FAIL],
-  '12.3.2_L15': [FAIL],
-  '12.3.3_L15': [FAIL],
-  '13.1.1_L15': [FAIL],
-  '13.2-15-1': [FAIL],
-  '13.2.1_L15': [FAIL],
-  '13.3.1_L15': [FAIL],
-  '13.3.2_L15': [FAIL],
-  '13.3.3_L15': [FAIL],
-  '15.2.3.3-4-186': [FAIL],
-  '15.2.3.3-4-187': [FAIL],
-  '15.2.3.3-4-191': [FAIL],
-  '15.2.3.3-4-194': [FAIL],
-  '15.2.3.3-4-201': [FAIL],
-  '15.3.3.2-1': [FAIL],
-  'S15.1.2.1_A4.2': [FAIL],
-  'S15.1.2.2_A9.2': [FAIL],
-  'S15.1.2.3_A7.2': [FAIL],
-  'S15.1.2.4_A2.2': [FAIL],
-  'S15.1.2.5_A2.2': [FAIL],
-  'S15.1.3.1_A5.2': [FAIL],
-  'S15.1.3.2_A5.2': [FAIL],
-  'S15.1.3.3_A5.2': [FAIL],
-  'S15.1.3.4_A5.2': [FAIL],
-  'S15.10.6.2_A9': [FAIL],
-  'S15.10.6.3_A9': [FAIL],
-  'S15.10.6.4_A9': [FAIL],
-  'S15.2.4.2_A9': [FAIL],
-  'S15.2.4.3_A9': [FAIL],
-  'S15.2.4.4_A9': [FAIL],
-  'S15.2.4.5_A9': [FAIL],
-  'S15.2.4.6_A9': [FAIL],
-  'S15.2.4.7_A9': [FAIL],
-  'S15.3.4.2_A9': [FAIL],
-  'S15.3.4.3_A9': [FAIL],
-  'S15.3.4.4_A9': [FAIL],
-  'S15.3.5.1_A2_T1': [FAIL],
-  'S15.3.5.1_A2_T2': [FAIL],
-  'S15.3.5.1_A2_T3': [FAIL],
-  'S15.4.3_A2.2': [FAIL],
-  'S15.4.4.10_A5.2': [FAIL],
-  'S15.4.4.11_A7.2': [FAIL],
-  'S15.4.4.12_A5.2': [FAIL],
-  'S15.4.4.13_A5.2': [FAIL],
-  'S15.4.4.2_A4.2': [FAIL],
-  'S15.4.4.3_A4.2': [FAIL],
-  'S15.4.4.4_A4.2': [FAIL],
-  'S15.4.4.5_A6.2': [FAIL],
-  'S15.4.4.6_A5.2': [FAIL],
-  'S15.4.4.7_A6.2': [FAIL],
-  'S15.4.4.8_A5.2': [FAIL],
-  'S15.4.4.9_A5.2': [FAIL],
-  'S15.5.4.10_A9': [FAIL],
-  'S15.5.4.11_A9': [FAIL],
-  'S15.5.4.12_A9': [FAIL],
-  'S15.5.4.13_A9': [FAIL],
-  'S15.5.4.14_A9': [FAIL],
-  'S15.5.4.15_A9': [FAIL],
-  'S15.5.4.16_A9': [FAIL],
-  'S15.5.4.17_A9': [FAIL],
-  'S15.5.4.18_A9': [FAIL],
-  'S15.5.4.19_A9': [FAIL],
-  'S15.5.4.4_A9': [FAIL],
-  'S15.5.4.5_A9': [FAIL],
-  'S15.5.4.6_A9': [FAIL],
-  'S15.5.4.7_A9': [FAIL],
-  'S15.5.4.8_A9': [FAIL],
-  'S15.5.4.9_A9': [FAIL],
-  'S15.9.4.2_A3_T2': [FAIL],
-  'S15.9.4.3_A3_T2': [FAIL],
-  'S15.9.5.10_A3_T2': [FAIL],
-  'S15.9.5.11_A3_T2': [FAIL],
-  'S15.9.5.12_A3_T2': [FAIL],
-  'S15.9.5.13_A3_T2': [FAIL],
-  'S15.9.5.14_A3_T2': [FAIL],
-  'S15.9.5.15_A3_T2': [FAIL],
-  'S15.9.5.16_A3_T2': [FAIL],
-  'S15.9.5.17_A3_T2': [FAIL],
-  'S15.9.5.18_A3_T2': [FAIL],
-  'S15.9.5.19_A3_T2': [FAIL],
-  'S15.9.5.1_A3_T2': [FAIL],
-  'S15.9.5.20_A3_T2': [FAIL],
-  'S15.9.5.21_A3_T2': [FAIL],
-  'S15.9.5.22_A3_T2': [FAIL],
-  'S15.9.5.23_A3_T2': [FAIL],
-  'S15.9.5.24_A3_T2': [FAIL],
-  'S15.9.5.25_A3_T2': [FAIL],
-  'S15.9.5.26_A3_T2': [FAIL],
-  'S15.9.5.27_A3_T2': [FAIL],
-  'S15.9.5.28_A3_T2': [FAIL],
-  'S15.9.5.29_A3_T2': [FAIL],
-  'S15.9.5.2_A3_T2': [FAIL],
-  'S15.9.5.30_A3_T2': [FAIL],
-  'S15.9.5.31_A3_T2': [FAIL],
-  'S15.9.5.32_A3_T2': [FAIL],
-  'S15.9.5.33_A3_T2': [FAIL],
-  'S15.9.5.34_A3_T2': [FAIL],
-  'S15.9.5.35_A3_T2': [FAIL],
-  'S15.9.5.36_A3_T2': [FAIL],
-  'S15.9.5.37_A3_T2': [FAIL],
-  'S15.9.5.38_A3_T2': [FAIL],
-  'S15.9.5.39_A3_T2': [FAIL],
-  'S15.9.5.3_A3_T2': [FAIL],
-  'S15.9.5.40_A3_T2': [FAIL],
-  'S15.9.5.41_A3_T2': [FAIL],
-  'S15.9.5.42_A3_T2': [FAIL],
-  'S15.9.5.4_A3_T2': [FAIL],
-  'S15.9.5.5_A3_T2': [FAIL],
-  'S15.9.5.6_A3_T2': [FAIL],
-  'S15.9.5.7_A3_T2': [FAIL],
-  'S15.9.5.8_A3_T2': [FAIL],
-  'S15.9.5.9_A3_T2': [FAIL],
-  '15.3.4.5-15-2': [FAIL],
-
-  # Object.getPrototypeOf wraps primitive values in ES6.
-  '15.2.3.2-1': [FAIL],
-  '15.2.3.2-1-3': [FAIL],
-  '15.2.3.2-1-4': [FAIL],
-
-  # Object.getOwnPropertyDescriptor wraps primitives in ES6.
-  '15.2.3.3-1': [FAIL],
-  '15.2.3.3-1-3': [FAIL],
-  '15.2.3.3-1-4': [FAIL],
-
-  # Function restricted "caller" and "arguments" properties are defined only on
-  # the intrinsic %FunctionPrototype% (and sloppy functions) in ES6
-  '13.2-29-s': [FAIL],
-  '13.2-30-s': [FAIL],
-  '13.2-31-s': [FAIL],
-  '13.2-32-s': [FAIL],
-  '13.2-33-s': [FAIL],
-  '13.2-34-s': [FAIL],
-  '13.2-35-s': [FAIL],
-  '13.2-36-s': [FAIL],
-  'S13.2.3_A1': [FAIL],
-  '15.3.4.5-20-1': [FAIL],
-  '15.3.4.5-20-4': [FAIL],
-  '15.3.4.5-20-5': [FAIL],
-  '15.3.4.5-21-1': [FAIL],
-  '15.3.4.5-21-4': [FAIL],
-  '15.3.4.5-21-5': [FAIL],
-
-  # Object.freeze(O), Object.seal(O), and Object.preventExtensions(O),
-  # Object.isFrozen(O), Object.isSealed(O), and Object.isExtensible(O) no longer
-  # throw when passed a non-object value in ES6.
-  '15.2.3.8-1': [FAIL],
-  '15.2.3.8-1-1': [FAIL],
-  '15.2.3.8-1-2': [FAIL],
-  '15.2.3.8-1-3': [FAIL],
-  '15.2.3.8-1-4': [FAIL],
-  '15.2.3.9-1': [FAIL],
-  '15.2.3.9-1-1': [FAIL],
-  '15.2.3.9-1-2': [FAIL],
-  '15.2.3.9-1-3': [FAIL],
-  '15.2.3.9-1-4': [FAIL],
-  '15.2.3.10-1': [FAIL],
-  '15.2.3.10-1-1': [FAIL],
-  '15.2.3.10-1-2': [FAIL],
-  '15.2.3.10-1-3': [FAIL],
-  '15.2.3.10-1-4': [FAIL],
-  '15.2.3.11-1': [FAIL],
-  '15.2.3.12-1': [FAIL],
-  '15.2.3.12-1-1': [FAIL],
-  '15.2.3.12-1-2': [FAIL],
-  '15.2.3.12-1-3': [FAIL],
-  '15.2.3.12-1-4': [FAIL],
-  '15.2.3.13-1': [FAIL],
-  '15.2.3.13-1-1': [FAIL],
-  '15.2.3.13-1-2': [FAIL],
-  '15.2.3.13-1-3': [FAIL],
-  '15.2.3.13-1-4': [FAIL],
-
-  # ES6 says for dates to default to the local timezone if none is specified
-  '15.9.1.15-1': [FAIL],
-
-  # ES6 makes Date.prototype an Object, not a Date
-  '15.9.5.40_1': [FAIL],
+  'built-ins/Object/defineProperties/15.2.3.7-6-a-112': [FAIL],
+  'built-ins/Object/defineProperties/15.2.3.7-6-a-113': [FAIL],
+  'built-ins/Object/defineProperties/15.2.3.7-6-a-164': [FAIL],
+  'built-ins/Object/defineProperties/15.2.3.7-6-a-165': [FAIL],
+  'built-ins/Object/defineProperties/15.2.3.7-6-a-166': [FAIL],
+  'built-ins/Object/defineProperties/15.2.3.7-6-a-168': [FAIL],
+  'built-ins/Object/defineProperties/15.2.3.7-6-a-169': [FAIL],
+  'built-ins/Object/defineProperties/15.2.3.7-6-a-170': [FAIL],
+  'built-ins/Object/defineProperties/15.2.3.7-6-a-172': [FAIL],
+  'built-ins/Object/defineProperties/15.2.3.7-6-a-173': [FAIL],
+  'built-ins/Object/defineProperties/15.2.3.7-6-a-175': [FAIL],
+  'built-ins/Object/defineProperties/15.2.3.7-6-a-176': [FAIL],
+  'built-ins/Object/defineProperty/15.2.3.6-4-116': [FAIL],
+  'built-ins/Object/defineProperty/15.2.3.6-4-117': [FAIL],
+  'built-ins/Object/defineProperty/15.2.3.6-4-168': [FAIL],
+  'built-ins/Object/defineProperty/15.2.3.6-4-169': [FAIL],
+  'built-ins/Object/defineProperty/15.2.3.6-4-170': [FAIL],
+  'built-ins/Object/defineProperty/15.2.3.6-4-172': [FAIL],
+  'built-ins/Object/defineProperty/15.2.3.6-4-173': [FAIL],
+  'built-ins/Object/defineProperty/15.2.3.6-4-174': [FAIL],
+  'built-ins/Object/defineProperty/15.2.3.6-4-176': [FAIL],
+  'built-ins/Object/defineProperty/15.2.3.6-4-177': [FAIL],
+
+  # Unicode canonicalization is not available with i18n turned off.
+  'built-ins/String/prototype/localeCompare/15.5.4.9_CE': [['no_i18n', SKIP]],
+
+  ###################### NEEDS INVESTIGATION #######################
+
+  # Possibly same cause as S8.5_A2.1, below: floating-point tests.
+  'built-ins/Math/cos/S15.8.2.7_A7': [PASS, FAIL_OK],
+  'built-ins/Math/sin/S15.8.2.16_A7': [PASS, FAIL_OK],
+  'built-ins/Math/tan/S15.8.2.18_A7': [PASS, FAIL_OK],
+
+  # This is an incompatibility between ES5 and V8 on enumerating
+  # shadowed elements in a for..in loop.
+  # https://code.google.com/p/v8/issues/detail?id=705
+  'language/statements/for-in/12.6.4-2': [PASS, FAIL_OK],
+
+  ###################### MISSING ES6 FEATURES #######################
+
+  # Const is still interpreted as legacy const in sloppy mode
+  # https://code.google.com/p/v8/issues/detail?id=3305
+  'language/block-scope/shadowing/const-declaration-shadowing-catch-parameter': [PASS, FAIL_SLOPPY],
+  'language/block-scope/shadowing/const-declarations-shadowing-parameter-name-let-const-and-var-variables': [PASS, FAIL_SLOPPY],
+  'language/statements/const/block-local-closure-get-before-initialization': [PASS, FAIL_SLOPPY],
+  'language/statements/const/block-local-use-before-initialization-in-declaration-statement': [PASS, FAIL_SLOPPY],
+  'language/statements/const/block-local-use-before-initialization-in-prior-statement': [PASS, FAIL_SLOPPY],
+  'language/statements/const/function-local-closure-get-before-initialization': [PASS, FAIL_SLOPPY],
+  'language/statements/const/function-local-use-before-initialization-in-declaration-statement': [PASS, FAIL_SLOPPY],
+  'language/statements/const/function-local-use-before-initialization-in-prior-statement': [PASS, FAIL_SLOPPY],
+  'language/statements/const/global-closure-get-before-initialization': [PASS, FAIL_SLOPPY],
+  'language/statements/const/global-use-before-initialization-in-declaration-statement': [PASS, FAIL_SLOPPY],
+  'language/statements/const/global-use-before-initialization-in-prior-statement': [PASS, FAIL_SLOPPY],
+  'language/statements/const/syntax/block-scope-syntax-const-declarations-mixed-with-without-initialiser': [PASS, FAIL_SLOPPY],
+  'language/statements/const/syntax/block-scope-syntax-const-declarations-mixed-without-with-initialiser': [PASS, FAIL_SLOPPY],
+  'language/statements/const/syntax/block-scope-syntax-const-declarations-without-initialiser': [PASS, FAIL_SLOPPY],
+  'language/statements/const/syntax/const': [PASS, FAIL_SLOPPY],
+  'language/statements/const/syntax/const-invalid-assignment-statement-body-for-in': [PASS, FAIL_SLOPPY],
+  'language/statements/const/syntax/const-invalid-assignment-statement-body-for-of': [PASS, FAIL_SLOPPY],
+  'language/statements/const/syntax/const-outer-inner-let-bindings': [PASS, FAIL_SLOPPY],
+  'language/statements/const/syntax/with-initializer-do-statement-while-expression': [PASS, FAIL_SLOPPY],
+  'language/statements/const/syntax/with-initializer-for-statement': [PASS, FAIL_SLOPPY],
+  'language/statements/const/syntax/with-initializer-if-expression-statement': [PASS, FAIL_SLOPPY],
+  'language/statements/const/syntax/with-initializer-if-expression-statement-else-statement': [PASS, FAIL_SLOPPY],
+  'language/statements/const/syntax/with-initializer-label-statement': [PASS, FAIL_SLOPPY],
+  'language/statements/const/syntax/with-initializer-while-expression-statement': [PASS, FAIL_SLOPPY],
+  'language/statements/const/syntax/without-initializer-case-expression-statement-list': [PASS, FAIL_SLOPPY],
+  'language/statements/const/syntax/without-initializer-default-statement-list': [PASS, FAIL_SLOPPY],
+  'language/statements/const/syntax/without-initializer-do-statement-while-expression': [PASS, FAIL_SLOPPY],
+  'language/statements/const/syntax/without-initializer-for-statement': [PASS, FAIL_SLOPPY],
+  'language/statements/const/syntax/without-initializer-if-expression-statement': [PASS, FAIL_SLOPPY],
+  'language/statements/const/syntax/without-initializer-if-expression-statement-else-statement': [PASS, FAIL_SLOPPY],
+  'language/statements/const/syntax/without-initializer-label-statement': [PASS, FAIL_SLOPPY],
+  'language/statements/const/syntax/without-initializer-while-expression-statement': [PASS, FAIL_SLOPPY],
+  'language/statements/for-in/const-bound-names-fordecl-tdz-for-in': [PASS, FAIL_SLOPPY],
+  'language/statements/for-in/const-fresh-binding-per-iteration-for-in': [PASS, FAIL_SLOPPY],
+  'language/statements/for-of/const-bound-names-fordecl-tdz-for-of': [PASS, FAIL_SLOPPY],
+  'language/statements/for-of/const-fresh-binding-per-iteration-for-of': [PASS, FAIL_SLOPPY],
+
+  # https://code.google.com/p/v8/issues/detail?id=4405
+  'language/block-scope/leave/outermost-binding-updated-in-catch-block-nested-block-let-declaration-unseen-outside-of-block': [PASS, FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=3305
+  # This times out in sloppy mode because sloppy const assignment does not throw.
+  'language/statements/const/syntax/const-invalid-assignment-next-expression-for': [PASS, FAIL, TIMEOUT],
+
+  # https://code.google.com/p/v8/issues/detail?id=4403
+  'language/statements/let/syntax/identifier-let-disallowed-as-boundname': [PASS, FAIL_SLOPPY],
+
+  # Number/Boolean.prototype is a plain object in ES6
+  # https://code.google.com/p/v8/issues/detail?id=4001
+  'built-ins/Boolean/prototype/S15.6.3.1_A1': [FAIL],
+  'built-ins/Boolean/prototype/S15.6.4_A1': [FAIL],
+  'built-ins/Boolean/prototype/toString/S15.6.4.2_A1_T1': [FAIL],
+  'built-ins/Boolean/prototype/toString/S15.6.4.2_A1_T2': [FAIL],
+  'built-ins/Boolean/prototype/valueOf/S15.6.4.3_A1_T1': [FAIL],
+  'built-ins/Boolean/prototype/valueOf/S15.6.4.3_A1_T2': [FAIL],
+  'built-ins/Number/15.7.4-1': [FAIL],
+  'built-ins/Number/prototype/S15.7.3.1_A2_*': [FAIL],
+  'built-ins/Number/prototype/S15.7.3.1_A3': [FAIL],
+  'built-ins/Number/prototype/S15.7.4_A1': [FAIL],
+  'built-ins/Number/prototype/toFixed/S15.7.4.5_A1.1_T01': [FAIL],
+  'built-ins/Number/prototype/toString/S15.7.4.2_A1_*': [FAIL],
+  'built-ins/Number/prototype/toString/S15.7.4.2_A2_*': [FAIL],
+  'built-ins/Number/prototype/valueOf/S15.7.4.4_A1_*': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=3087
+  'built-ins/Array/prototype/every/15.4.4.16-3-12': [FAIL],
+  'built-ins/Array/prototype/every/15.4.4.16-3-14': [FAIL],
+  'built-ins/Array/prototype/every/15.4.4.16-3-25': [FAIL],
+  'built-ins/Array/prototype/every/15.4.4.16-3-29': [FAIL],
+  'built-ins/Array/prototype/every/15.4.4.16-3-7': [FAIL],
+  'built-ins/Array/prototype/every/15.4.4.16-3-8': [FAIL],
+  'built-ins/Array/prototype/filter/15.4.4.20-3-12': [FAIL],
+  'built-ins/Array/prototype/filter/15.4.4.20-3-25': [FAIL],
+  'built-ins/Array/prototype/filter/15.4.4.20-3-7': [FAIL],
+  'built-ins/Array/prototype/forEach/15.4.4.18-3-12': [FAIL],
+  'built-ins/Array/prototype/forEach/15.4.4.18-3-25': [FAIL],
+  'built-ins/Array/prototype/forEach/15.4.4.18-3-7': [FAIL],
+  'built-ins/Array/prototype/indexOf/15.4.4.14-3-12': [FAIL],
+  'built-ins/Array/prototype/indexOf/15.4.4.14-3-14': [FAIL],
+  'built-ins/Array/prototype/indexOf/15.4.4.14-3-25': [FAIL],
+  'built-ins/Array/prototype/indexOf/15.4.4.14-3-28': [FAIL],
+  'built-ins/Array/prototype/indexOf/15.4.4.14-3-29': [FAIL],
+  'built-ins/Array/prototype/indexOf/15.4.4.14-3-7': [FAIL],
+  'built-ins/Array/prototype/indexOf/15.4.4.14-3-8': [FAIL],
+  'built-ins/Array/prototype/join/S15.4.4.5_A4_T3': [FAIL],
+  'built-ins/Array/prototype/lastIndexOf/15.4.4.15-3-12': [FAIL],
+  'built-ins/Array/prototype/lastIndexOf/15.4.4.15-3-25': [FAIL],
+  'built-ins/Array/prototype/lastIndexOf/15.4.4.15-3-28': [FAIL],
+  'built-ins/Array/prototype/lastIndexOf/15.4.4.15-3-7': [FAIL],
+  'built-ins/Array/prototype/map/15.4.4.19-3-12': [FAIL],
+  'built-ins/Array/prototype/map/15.4.4.19-3-14': [FAIL],
+  'built-ins/Array/prototype/map/15.4.4.19-3-25': [FAIL],
+  'built-ins/Array/prototype/map/15.4.4.19-3-28': [FAIL],
+  'built-ins/Array/prototype/map/15.4.4.19-3-29': [FAIL],
+  'built-ins/Array/prototype/map/15.4.4.19-3-7': [FAIL],
+  'built-ins/Array/prototype/map/15.4.4.19-3-8': [FAIL],
+  'built-ins/Array/prototype/pop/S15.4.4.6_A2_T2': [FAIL],
+  'built-ins/Array/prototype/pop/S15.4.4.6_A3_T1': [FAIL],
+  'built-ins/Array/prototype/pop/S15.4.4.6_A3_T2': [FAIL],
+  'built-ins/Array/prototype/pop/S15.4.4.6_A3_T3': [FAIL],
+  'built-ins/Array/prototype/push/S15.4.4.7_A2_T2': [FAIL],
+  'built-ins/Array/prototype/push/S15.4.4.7_A4_T1': [FAIL],
+  'built-ins/Array/prototype/push/S15.4.4.7_A4_T3': [FAIL],
+  'built-ins/Array/prototype/reduce/15.4.4.21-3-12': [FAIL],
+  'built-ins/Array/prototype/reduce/15.4.4.21-3-25': [FAIL],
+  'built-ins/Array/prototype/reduce/15.4.4.21-3-7': [FAIL],
+  'built-ins/Array/prototype/reduceRight/15.4.4.22-3-12': [FAIL],
+  'built-ins/Array/prototype/reduceRight/15.4.4.22-3-25': [FAIL],
+  'built-ins/Array/prototype/reduceRight/15.4.4.22-3-7': [FAIL],
+  'built-ins/Array/prototype/reverse/S15.4.4.8_A3_T3': [FAIL],
+  'built-ins/Array/prototype/shift/S15.4.4.9_A3_T3': [FAIL],
+  'built-ins/Array/prototype/slice/S15.4.4.10_A3_T1': [FAIL],
+  'built-ins/Array/prototype/slice/S15.4.4.10_A3_T2': [FAIL],
+  'built-ins/Array/prototype/slice/S15.4.4.10_A3_T3': [FAIL],
+  'built-ins/Array/prototype/some/15.4.4.17-3-12': [FAIL],
+  'built-ins/Array/prototype/some/15.4.4.17-3-14': [FAIL],
+  'built-ins/Array/prototype/some/15.4.4.17-3-25': [FAIL],
+  'built-ins/Array/prototype/some/15.4.4.17-3-28': [FAIL],
+  'built-ins/Array/prototype/some/15.4.4.17-3-29': [FAIL],
+  'built-ins/Array/prototype/some/15.4.4.17-3-7': [FAIL],
+  'built-ins/Array/prototype/some/15.4.4.17-3-8': [FAIL],
+  'built-ins/Array/prototype/sort/S15.4.4.11_A4_T3': [FAIL],
+  'built-ins/Array/prototype/splice/S15.4.4.12_A3_T1': [FAIL],
+  'built-ins/Array/prototype/splice/S15.4.4.12_A3_T3': [FAIL],
+  'built-ins/Array/prototype/unshift/S15.4.4.13_A3_T2': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=1543
+  'built-ins/Proxy/*': [FAIL],
+  'built-ins/Array/prototype/find/Array.prototype.find_callable-Proxy-1': [FAIL],
+  'built-ins/Array/prototype/find/Array.prototype.find_callable-Proxy-2': [FAIL],
+  'built-ins/Object/assign/source-own-prop-desc-missing': [FAIL],
+  'built-ins/Object/assign/source-own-prop-error': [FAIL],
+  'built-ins/Object/assign/source-own-prop-keys-error': [FAIL],
+  'built-ins/Object/setPrototypeOf/set-error': [FAIL],
+  'language/expressions/object/prop-def-id-eval-error-2': [FAIL],
+  'language/statements/for-of/iterator-as-proxy': [FAIL],
+  'language/statements/for-of/iterator-next-result-type': [FAIL],
+  'built-ins/Array/of/return-abrupt-from-data-property-using-proxy': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=4093
+  'built-ins/Array/symbol-species': [FAIL],
+  'built-ins/Array/symbol-species-name': [FAIL],
+  'built-ins/ArrayBuffer/symbol-species': [FAIL],
+  'built-ins/ArrayBuffer/symbol-species-name': [FAIL],
+  'built-ins/Map/symbol-species': [FAIL],
+  'built-ins/Map/symbol-species-name': [FAIL],
+  'built-ins/Promise/Symbol.species/prop-desc': [FAIL],
+  'built-ins/Promise/Symbol.species/return-value': [FAIL],
+  'built-ins/Promise/all/species-get-error': [FAIL],
+  'built-ins/Promise/prototype/then/ctor-custom': [FAIL],
+  'built-ins/Promise/race/species-get-error': [FAIL],
+  'built-ins/Promise/symbol-species': [FAIL],
+  'built-ins/Promise/symbol-species-name': [FAIL],
+  'built-ins/RegExp/symbol-species': [FAIL],
+  'built-ins/RegExp/symbol-species-name': [FAIL],
+  'built-ins/Set/symbol-species': [FAIL],
+  'built-ins/Set/symbol-species-name': [FAIL],
+  'built-ins/Symbol/species/basic': [FAIL],
+  'built-ins/Symbol/species/builtin-getter-name': [FAIL],
+  'built-ins/Symbol/species/subclassing': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=4002
+  'built-ins/Error/prototype/S15.11.4_A2': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=4163
+  'built-ins/GeneratorPrototype/next/context-constructor-invocation': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=3566
+  'built-ins/Array/from/iter-map-fn-err': [FAIL],
+  'built-ins/Array/from/iter-set-elem-prop-err': [FAIL],
+  'built-ins/Map/iterator-close-after-set-failure': [FAIL],
+  'built-ins/Map/iterator-item-first-entry-returns-abrupt': [FAIL],
+  'built-ins/Map/iterator-item-second-entry-returns-abrupt': [FAIL],
+  'built-ins/Map/iterator-items-are-not-object-close-iterator': [FAIL],
+  'built-ins/Promise/all/iter-close': [FAIL],
+  'built-ins/Set/set-iterator-close-after-add-failure': [FAIL],
+  'built-ins/WeakMap/iterator-close-after-set-failure': [FAIL],
+  'built-ins/WeakMap/iterator-item-first-entry-returns-abrupt': [FAIL],
+  'built-ins/WeakMap/iterator-item-second-entry-returns-abrupt': [FAIL],
+  'built-ins/WeakMap/iterator-items-are-not-object-close-iterator': [FAIL],
+  'built-ins/WeakSet/iterator-close-after-add-failure': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=3715
+  'built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-212': [FAIL],
+  'built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-213': [FAIL],
+  'built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-214': [FAIL],
+  'built-ins/Object/getOwnPropertyDescriptor/15.2.3.3-4-215': [FAIL],
+  'built-ins/RegExp/prototype/global/15.10.7.2-1': [FAIL],
+  'built-ins/RegExp/prototype/global/15.10.7.2-2': [FAIL],
+  'built-ins/RegExp/prototype/global/S15.10.7.2_A9': [FAIL],
+  'built-ins/RegExp/prototype/ignoreCase/15.10.7.3-1': [FAIL],
+  'built-ins/RegExp/prototype/ignoreCase/15.10.7.3-2': [FAIL],
+  'built-ins/RegExp/prototype/ignoreCase/S15.10.7.3_A9': [FAIL],
+  'built-ins/RegExp/prototype/lastIndex/15.10.7.5-1': [FAIL],
+  'built-ins/RegExp/prototype/lastIndex/15.10.7.5-2': [FAIL],
+  'built-ins/RegExp/prototype/multiline/15.10.7.4-1': [FAIL],
+  'built-ins/RegExp/prototype/multiline/15.10.7.4-2': [FAIL],
+  'built-ins/RegExp/prototype/multiline/S15.10.7.4_A9': [FAIL],
+  'built-ins/RegExp/prototype/source/15.10.7.1-1': [FAIL],
+  'built-ins/RegExp/prototype/source/15.10.7.1-2': [FAIL],
+  'built-ins/RegExp/prototype/source/S15.10.7.1_A9': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=4243
+  'built-ins/Promise/race/S25.4.4.3_A3.1_T2': [FAIL],
+  'built-ins/Promise/reject/S25.4.4.4_A3.1_T1': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=4341
+  'built-ins/Promise/resolve/arg-uniq-ctor': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=4119
+  'built-ins/RegExp/15.10.4.1-1': [FAIL],
+  'built-ins/RegExp/S15.10.3.1_A2_T1': [FAIL],
+  'built-ins/RegExp/S15.10.3.1_A2_T2': [FAIL],
+  'built-ins/RegExp/S15.10.4.1_A2_T1': [FAIL],
+  'built-ins/RegExp/S15.10.4.1_A2_T2': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=4003
+  'built-ins/RegExp/prototype/15.10.6': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=4244
+  'built-ins/RegExp/prototype/exec/S15.10.6.2_A5_T3': [FAIL],
+  'built-ins/RegExp/prototype/test/S15.10.6.3_A1_T22': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=4006
+  'built-ins/String/prototype/S15.5.4_A1': [FAIL],
+  'built-ins/String/prototype/S15.5.4_A2': [FAIL],
+  'built-ins/String/prototype/S15.5.4_A3': [FAIL],
+  'language/expressions/property-accessors/S11.2.1_A4_T5': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=4245
+  'built-ins/String/prototype/split/S15.5.4.14_A2_T37': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=4348
+  'built-ins/String/prototype/Symbol.iterator/this-val-non-obj-coercible': [FAIL],
+
+  # The order of adding the name property is wrong
+  # https://code.google.com/p/v8/issues/detail?id=4199
+  'language/computed-property-names/class/static/method-number': [FAIL, FAIL_SLOPPY],
+  'language/computed-property-names/class/static/method-symbol': [FAIL, FAIL_SLOPPY],
+  'language/computed-property-names/class/static/method-string': [FAIL, FAIL_SLOPPY],
+
+  # This should work as soon as rest parameters are re-implemented via desaguring.
+  'language/expressions/arrow-function/syntax/early-errors/arrowparameters-cover-no-duplicates-rest': [PASS, FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=2160
+  'language/expressions/arrow-function/syntax/arrowparameters-cover-initialize-1': [FAIL],
+  'language/expressions/arrow-function/syntax/arrowparameters-cover-initialize-2': [FAIL],
+  'language/expressions/object/method-definition/generator-super-prop-param': [FAIL],
+  'language/expressions/object/method-definition/name-param-init-yield': [FAIL],
+  'language/expressions/object/method-definition/name-super-prop-param': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=3673
+  'language/statements/class/definition/basics': [FAIL],
+
+  # Destructuring
+  # https://code.google.com/p/v8/issues/detail?id=811
+  'language/statements/for-of/body-dstr-assign': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=3566
+  'language/statements/for-of/body-dstr-assign-error': [FAIL],
+  'language/statements/for-of/body-put-error': [FAIL],
+  'language/statements/for-of/generator-close-via-break': [FAIL],
+  'language/statements/for-of/generator-close-via-return': [FAIL],
+  'language/statements/for-of/generator-close-via-throw': [FAIL],
+  'language/statements/for-of/iterator-close-get-method-error': [FAIL],
+  'language/statements/for-of/iterator-close-non-object': [FAIL],
+  'language/statements/for-of/iterator-close-via-break': [FAIL],
+  'language/statements/for-of/iterator-close-via-return': [FAIL],
+  'language/statements/for-of/iterator-close-via-throw': [FAIL],
+
+  # We do not expose Array.prototype.values
+  # https://code.google.com/p/v8/issues/detail?id=4247
+  'built-ins/Array/prototype/Symbol.iterator': [FAIL],
+  'built-ins/Array/prototype/values/returns-iterator': [FAIL],
+  'built-ins/Array/prototype/values/returns-iterator-from-object': [FAIL],
+  'built-ins/Array/prototype/values/prop-desc': [FAIL],
+  'built-ins/Array/prototype/values/name': [FAIL],
+  'built-ins/Array/prototype/values/length': [FAIL],
+  'built-ins/Array/prototype/values/iteration': [FAIL],
+  'built-ins/Array/prototype/values/iteration-mutable': [FAIL],
+
+  #https://code.google.com/p/v8/issues/detail?id=3983
+  'language/expressions/generators/yield-as-function-expression-binding-identifier': [FAIL],
+  'language/expressions/generators/yield-as-generator-expression-binding-identifier': [FAIL],
+  'language/expressions/object/method-definition/generator-argSuperProperty': [FAIL],
+  'language/expressions/object/method-definition/yield-as-function-expression-binding-identifier': [FAIL],
+  'language/statements/generators/yield-as-function-expression-binding-identifier': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=3566
+  'built-ins/GeneratorPrototype/return/from-state-completed': [FAIL],
+  'built-ins/GeneratorPrototype/return/from-state-suspended-start': [FAIL],
+  'built-ins/GeneratorPrototype/return/property-descriptor': [FAIL],
+  'built-ins/GeneratorPrototype/return/try-catch-before-try': [FAIL],
+  'built-ins/GeneratorPrototype/return/try-catch-following-catch': [FAIL],
+  'built-ins/GeneratorPrototype/return/try-catch-within-catch': [FAIL],
+  'built-ins/GeneratorPrototype/return/try-catch-within-try': [FAIL],
+  'built-ins/GeneratorPrototype/return/try-finally-before-try': [FAIL],
+  'built-ins/GeneratorPrototype/return/try-finally-following-finally': [FAIL],
+  'built-ins/GeneratorPrototype/return/try-finally-nested-try-catch-within-catch': [FAIL],
+  'built-ins/GeneratorPrototype/return/try-finally-nested-try-catch-within-finally': [FAIL],
+  'built-ins/GeneratorPrototype/return/try-finally-nested-try-catch-within-inner-try': [FAIL],
+  'built-ins/GeneratorPrototype/return/try-finally-nested-try-catch-within-outer-try-after-nested': [FAIL],
+  'built-ins/GeneratorPrototype/return/try-finally-nested-try-catch-within-outer-try-before-nested': [FAIL],
+  'built-ins/GeneratorPrototype/return/try-finally-within-finally': [FAIL],
+  'built-ins/GeneratorPrototype/return/try-finally-within-try': [FAIL],
+
+   # https://code.google.com/p/v8/issues/detail?id=811
+  'language/expressions/assignment/destructuring/*': [SKIP],
+
+  # https://code.google.com/p/v8/issues/detail?id=4248
+  'language/expressions/compound-assignment/S11.13.2_A5.*': [FAIL],
+  'language/expressions/compound-assignment/S11.13.2_A6.*': [FAIL],
+  'language/expressions/compound-assignment/S11.13.2_A7.10_T4': [FAIL],
+  'language/expressions/compound-assignment/S11.13.2_A7.11_T4': [FAIL],
+  'language/expressions/compound-assignment/S11.13.2_A7.1_T4': [FAIL],
+  'language/expressions/compound-assignment/S11.13.2_A7.2_T4': [FAIL],
+  'language/expressions/compound-assignment/S11.13.2_A7.3_T4': [FAIL],
+  'language/expressions/compound-assignment/S11.13.2_A7.4_T4': [FAIL],
+  'language/expressions/compound-assignment/S11.13.2_A7.5_T4': [FAIL],
+  'language/expressions/compound-assignment/S11.13.2_A7.6_T4': [FAIL],
+  'language/expressions/compound-assignment/S11.13.2_A7.7_T4': [FAIL],
+  'language/expressions/compound-assignment/S11.13.2_A7.8_T4': [FAIL],
+  'language/expressions/compound-assignment/S11.13.2_A7.9_T4': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=4249
+  'language/expressions/assignment/S11.13.1_A7_T1': [FAIL],
+  'language/expressions/assignment/S11.13.1_A7_T2': [FAIL],
+  'language/expressions/assignment/S11.13.1_A7_T3': [FAIL],
+  'language/expressions/postfix-increment/S11.3.1_A6_T3': [FAIL],
+  'language/expressions/postfix-decrement/S11.3.2_A6_T3': [FAIL],
+  'language/expressions/prefix-decrement/S11.4.5_A6_T3': [FAIL],
+  'language/expressions/prefix-increment/S11.4.4_A6_T3': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=4250
+  'language/expressions/assignment/S11.13.1_A5*': [FAIL],
+  'language/expressions/assignment/S11.13.1_A6*': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=3699
+  'built-ins/Function/instance-name': [FAIL],
+  'built-ins/GeneratorFunction/instance-name': [FAIL],
+  'language/expressions/assignment/fn-name-arrow': [FAIL],
+  'language/expressions/assignment/fn-name-class': [FAIL],
+  'language/expressions/assignment/fn-name-cover': [FAIL],
+  'language/expressions/assignment/fn-name-fn': [FAIL],
+  'language/expressions/assignment/fn-name-gen': [FAIL],
+  'language/expressions/assignment/fn-name-lhs-cover': [FAIL],
+  'language/expressions/assignment/fn-name-lhs-member': [FAIL],
+  'language/expressions/class/name': [FAIL],
+  'language/expressions/function/name': [FAIL],
+  'language/expressions/generators/implicit-name': [FAIL],
+  'language/expressions/generators/name': [FAIL],
+  'language/expressions/generators/name-property-descriptor': [FAIL],
+  'language/expressions/object/fn-name-accessor-get': [FAIL],
+  'language/expressions/object/fn-name-accessor-set': [FAIL],
+  'language/expressions/object/fn-name-arrow': [FAIL],
+  'language/expressions/object/fn-name-class': [FAIL],
+  'language/expressions/object/fn-name-cover': [FAIL],
+  'language/expressions/object/fn-name-fn': [FAIL],
+  'language/expressions/object/fn-name-gen': [FAIL],
+  'language/expressions/object/fn-name-lhs-cover': [FAIL],
+  'language/expressions/object/fn-name-lhs-member': [FAIL],
+  'language/expressions/object/method-definition/fn-name-accessor-get': [FAIL],
+  'language/expressions/object/method-definition/fn-name-accessor-set': [FAIL],
+  'language/expressions/object/method-definition/fn-name-arrow': [FAIL],
+  'language/expressions/object/method-definition/fn-name-class': [FAIL],
+  'language/expressions/object/method-definition/fn-name-cover': [FAIL],
+  'language/expressions/object/method-definition/fn-name-fn': [FAIL],
+  'language/expressions/object/method-definition/fn-name-gen': [FAIL],
+  'language/statements/class/definition/fn-name-accessor-get': [FAIL],
+  'language/statements/class/definition/fn-name-accessor-set': [FAIL],
+  'language/statements/class/definition/fn-name-gen-method': [FAIL],
+  'language/statements/class/definition/fn-name-method': [FAIL],
+  'language/statements/const/fn-name-arrow': [FAIL],
+  'language/statements/const/fn-name-class': [FAIL],
+  'language/statements/const/fn-name-cover': [FAIL],
+  'language/statements/const/fn-name-fn': [FAIL],
+  'language/statements/const/fn-name-gen': [FAIL],
+  'language/statements/let/fn-name-arrow': [FAIL],
+  'language/statements/let/fn-name-class': [FAIL],
+  'language/statements/let/fn-name-cover': [FAIL],
+  'language/statements/let/fn-name-fn': [FAIL],
+  'language/statements/let/fn-name-gen': [FAIL],
+  'language/statements/variable/fn-name-arrow': [FAIL],
+  'language/statements/variable/fn-name-class': [FAIL],
+  'language/statements/variable/fn-name-cover': [FAIL],
+  'language/statements/variable/fn-name-fn': [FAIL],
+  'language/statements/variable/fn-name-gen': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=4251
+  'language/expressions/postfix-increment/S11.3.1_A5_T1': [FAIL],
+  'language/expressions/postfix-increment/S11.3.1_A5_T2': [FAIL],
+  'language/expressions/postfix-increment/S11.3.1_A5_T3': [FAIL],
+  'language/expressions/postfix-increment/S11.3.1_A5_T4': [FAIL],
+  'language/expressions/postfix-increment/S11.3.1_A5_T5': [FAIL],
+  'language/expressions/postfix-decrement/S11.3.2_A5_*': [FAIL],
+  'language/expressions/prefix-decrement/S11.4.5_A5_*': [FAIL],
+  'language/expressions/prefix-increment/S11.4.4_A5_*': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=4253
+  'language/asi/S7.9_A5.7_T1': [PASS, FAIL_OK],
+
+  # https://code.google.com/p/v8/issues/detail?id=3761
+  'language/expressions/object/method-definition/generator-name-prop-symbol': [FAIL],
+  'language/expressions/object/method-definition/name-name-prop-symbol': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=2952
+  'built-ins/RegExp/prototype/exec/u-lastindex-adv': [FAIL],
+  'built-ins/RegExp/prototype/exec/u-captured-value': [FAIL],
+  'built-ins/RegExp/prototype/exec/u-lastindex-value': [FAIL],
+  'built-ins/RegExp/prototype/test/u-captured-value': [FAIL],
+  'built-ins/RegExp/prototype/test/u-lastindex-adv': [FAIL],
+  'built-ins/RegExp/prototype/test/u-lastindex-value': [FAIL],
+  'built-ins/RegExp/prototype/unicode/length': [FAIL],
+  'built-ins/RegExp/prototype/unicode/name': [FAIL],
+  'built-ins/RegExp/prototype/unicode/prop-desc': [FAIL],
+  'built-ins/RegExp/prototype/unicode/this-invald-obj': [FAIL],
+  'built-ins/RegExp/prototype/unicode/this-non-obj': [FAIL],
+  'built-ins/RegExp/prototype/unicode/this-regexp': [FAIL],
+  'built-ins/RegExp/unicode_identity_escape': [FAIL],
+  'language/literals/regexp/u-unicode-esc': [FAIL],
+  'language/literals/regexp/u-surrogate-pairs': [FAIL],
+  'language/literals/regexp/u-case-mapping': [FAIL],
+  'language/literals/regexp/u-astral': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=4342
+  'built-ins/RegExp/prototype/exec/get-sticky-coerce': [FAIL],
+  'built-ins/RegExp/prototype/exec/get-sticky-err': [FAIL],
+  'built-ins/RegExp/prototype/exec/y-fail-lastindex': [FAIL],
+  'built-ins/RegExp/prototype/exec/y-fail-lastindex-no-write': [FAIL],
+  'built-ins/RegExp/prototype/exec/y-fail-return': [FAIL],
+  'built-ins/RegExp/prototype/exec/y-fail-lastindex': [FAIL],
+  'built-ins/RegExp/prototype/exec/y-init-lastindex': [FAIL],
+  'built-ins/RegExp/prototype/exec/y-set-lastindex': [FAIL],
+  'built-ins/RegExp/prototype/sticky/prop-desc': [FAIL],
+  'built-ins/RegExp/prototype/sticky/this-invalid-obj': [FAIL],
+  'built-ins/RegExp/prototype/sticky/this-non-obj': [FAIL],
+  'built-ins/RegExp/prototype/sticky/this-regexp': [FAIL],
+  'built-ins/RegExp/prototype/test/get-sticky-coerce': [FAIL],
+  'built-ins/RegExp/prototype/test/get-sticky-err': [FAIL],
+  'built-ins/RegExp/prototype/test/y-fail-lastindex-no-write': [FAIL],
+  'built-ins/RegExp/prototype/test/y-fail-return': [FAIL],
+  'built-ins/RegExp/prototype/test/y-fail-lastindex': [FAIL],
+  'built-ins/RegExp/prototype/test/y-init-lastindex': [FAIL],
+  'built-ins/RegExp/prototype/test/y-set-lastindex': [FAIL],
+  'built-ins/RegExp/valid-flags-y': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=4305
+  'built-ins/RegExp/prototype/Symbol.match/*': [FAIL],
+  'built-ins/String/prototype/endsWith/return-abrupt-from-searchstring-regexp-test': [FAIL],
+  'built-ins/String/prototype/includes/return-abrupt-from-searchstring-regexp-test': [FAIL],
+  'built-ins/String/prototype/startsWith/return-abrupt-from-searchstring-regexp-test': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=4343
+  'built-ins/RegExp/prototype/Symbol.replace/*': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=4344
+  'built-ins/RegExp/prototype/Symbol.search/*': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=4345
+  'built-ins/RegExp/prototype/Symbol.split/*': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=4346
+  'built-ins/RegExp/prototype/flags/*': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=4347
+  'built-ins/RegExp/prototype/global/name': [FAIL],
+  'built-ins/RegExp/prototype/ignoreCase/name': [FAIL],
+  'built-ins/RegExp/prototype/multiline/name': [FAIL],
+  'built-ins/RegExp/prototype/source/name': [FAIL],
+  'built-ins/RegExp/prototype/sticky/name': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=4360
+  'intl402/Collator/10.1.1_1': [FAIL],
+  'intl402/DateTimeFormat/12.1.1_1': [FAIL],
+  'intl402/NumberFormat/11.1.1_1': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=4361
+  'intl402/Collator/10.1.1_a': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=1972
+  'language/identifiers/val-break-via-escape-hex': [FAIL],
+  'language/identifiers/val-break-via-escape-hex4': [FAIL],
+  'language/identifiers/val-case-via-escape-hex': [FAIL],
+  'language/identifiers/val-case-via-escape-hex4': [FAIL],
+  'language/identifiers/val-catch-via-escape-hex': [FAIL],
+  'language/identifiers/val-catch-via-escape-hex4': [FAIL],
+  'language/identifiers/val-class-via-escape-hex': [FAIL],
+  'language/identifiers/val-class-via-escape-hex4': [FAIL],
+  'language/identifiers/val-const-via-escape-hex': [FAIL],
+  'language/identifiers/val-const-via-escape-hex4': [FAIL],
+  'language/identifiers/val-continue-via-escape-hex': [FAIL],
+  'language/identifiers/val-continue-via-escape-hex4': [FAIL],
+  'language/identifiers/val-debugger-via-escape-hex': [FAIL],
+  'language/identifiers/val-debugger-via-escape-hex4': [FAIL],
+  'language/identifiers/val-default-via-escape-hex': [FAIL],
+  'language/identifiers/val-default-via-escape-hex4': [FAIL],
+  'language/identifiers/val-delete-via-escape-hex': [FAIL],
+  'language/identifiers/val-delete-via-escape-hex4': [FAIL],
+  'language/identifiers/val-do-via-escape-hex': [FAIL],
+  'language/identifiers/val-do-via-escape-hex4': [FAIL],
+  'language/identifiers/val-else-via-escape-hex': [FAIL],
+  'language/identifiers/val-else-via-escape-hex4': [FAIL],
+  'language/identifiers/val-enum-via-escape-hex': [FAIL],
+  'language/identifiers/val-enum-via-escape-hex4': [FAIL],
+  'language/identifiers/val-export-via-escape-hex': [FAIL],
+  'language/identifiers/val-export-via-escape-hex4': [FAIL],
+  'language/identifiers/val-extends-via-escape-hex': [FAIL],
+  'language/identifiers/val-extends-via-escape-hex4': [FAIL],
+  'language/identifiers/val-false-via-escape-hex': [FAIL],
+  'language/identifiers/val-false-via-escape-hex4': [FAIL],
+  'language/identifiers/val-finally-via-escape-hex': [FAIL],
+  'language/identifiers/val-finally-via-escape-hex4': [FAIL],
+  'language/identifiers/val-for-via-escape-hex': [FAIL],
+  'language/identifiers/val-for-via-escape-hex4': [FAIL],
+  'language/identifiers/val-function-via-escape-hex': [FAIL],
+  'language/identifiers/val-function-via-escape-hex4': [FAIL],
+  'language/identifiers/val-if-via-escape-hex': [FAIL],
+  'language/identifiers/val-if-via-escape-hex4': [FAIL],
+  'language/identifiers/val-import-via-escape-hex': [FAIL],
+  'language/identifiers/val-import-via-escape-hex4': [FAIL],
+  'language/identifiers/val-in-via-escape-hex': [FAIL],
+  'language/identifiers/val-in-via-escape-hex4': [FAIL],
+  'language/identifiers/val-instanceof-via-escape-hex': [FAIL],
+  'language/identifiers/val-instanceof-via-escape-hex4': [FAIL],
+  'language/identifiers/val-new-via-escape-hex': [FAIL],
+  'language/identifiers/val-new-via-escape-hex4': [FAIL],
+  'language/identifiers/val-null-via-escape-hex': [FAIL],
+  'language/identifiers/val-null-via-escape-hex4': [FAIL],
+  'language/identifiers/val-return-via-escape-hex': [FAIL],
+  'language/identifiers/val-return-via-escape-hex4': [FAIL],
+  'language/identifiers/val-super-via-escape-hex': [FAIL],
+  'language/identifiers/val-super-via-escape-hex4': [FAIL],
+  'language/identifiers/val-switch-via-escape-hex': [FAIL],
+  'language/identifiers/val-switch-via-escape-hex4': [FAIL],
+  'language/identifiers/val-throw-via-escape-hex': [FAIL],
+  'language/identifiers/val-throw-via-escape-hex4': [FAIL],
+  'language/identifiers/val-true-via-escape-hex': [FAIL],
+  'language/identifiers/val-true-via-escape-hex4': [FAIL],
+  'language/identifiers/val-try-via-escape-hex': [FAIL],
+  'language/identifiers/val-try-via-escape-hex4': [FAIL],
+  'language/identifiers/val-typeof-via-escape-hex': [FAIL],
+  'language/identifiers/val-typeof-via-escape-hex4': [FAIL],
+  'language/identifiers/val-var-via-escape-hex': [FAIL],
+  'language/identifiers/val-var-via-escape-hex4': [FAIL],
+  'language/identifiers/val-void-via-escape-hex': [FAIL],
+  'language/identifiers/val-void-via-escape-hex4': [FAIL],
+  'language/identifiers/val-while-via-escape-hex': [FAIL],
+  'language/identifiers/val-while-via-escape-hex4': [FAIL],
+  'language/identifiers/val-with-via-escape-hex': [FAIL],
+  'language/identifiers/val-with-via-escape-hex4': [FAIL],
+
+  # https://code.google.com/p/v8/issues/detail?id=4362
+  'built-ins/String/prototype/repeat/empty-string-returns-empty': [PASS, FAIL],
 
   ######################## NEEDS INVESTIGATION ###########################
 
   # These test failures are specific to the intl402 suite and need investigation
   # to be either marked as bugs with issues filed for them or as deliberate
   # incompatibilities if the test cases turn out to be broken or ambiguous.
-  '6.2.3': [FAIL],
-  '9.2.1_2': [FAIL],
-  '9.2.6_2': [FAIL],
-  '10.1.1_a': [FAIL],
-  '10.1.1_19_c': [PASS, FAIL, NO_VARIANTS],
-  '10.1.2.1_4': [FAIL],
-  '10.2.3_b': [PASS, FAIL],
-  '10.3_a': [FAIL],
-  '11.1.1_17': [PASS, FAIL],
-  '11.1.1_19': [PASS, FAIL],
-  '11.1.1_20_c': [FAIL],
-  '11.1.1_a': [FAIL],
-  '11.1.2.1_4': [FAIL],
-  '11.3.2_FN_2': [PASS, FAIL],
-  '11.3.2_TRF': [PASS, FAIL],
-  '11.3_a': [FAIL],
-  '12.1.1_a': [FAIL],
-  '12.1.2.1_4': [FAIL],
-  '12.3.2_FDT_7_a_iv': [FAIL],
-  '12.3.3': [FAIL],
-  '12.3_a': [FAIL],
-  '15.5.4.9_3': [PASS, FAIL],
+  # Some of these are related to v8:4361 in being visible side effects from Intl.
+  'intl402/6.2.3': [FAIL],
+  'intl402/9.2.1_2': [FAIL],
+  'intl402/9.2.6_2': [FAIL],
+  'intl402/Collator/10.1.2.1_4': [FAIL],
+  'intl402/Collator/10.1.2_a': [PASS, FAIL],
+  'intl402/Collator/10.2.3_b': [PASS, FAIL],
+  'intl402/Collator/prototype/10.3_a': [FAIL],
+  'intl402/Date/prototype/13.3.0_7': [FAIL],
+  'intl402/DateTimeFormat/12.1.1': [FAIL],
+  'intl402/DateTimeFormat/12.1.1_a': [FAIL],
+  'intl402/DateTimeFormat/12.1.1_1': [FAIL],
+  'intl402/DateTimeFormat/12.1.2': [PASS, FAIL],
+  'intl402/DateTimeFormat/12.1.2.1_4': [FAIL],
+  'intl402/DateTimeFormat/12.2.3_b': [FAIL],
+  'intl402/DateTimeFormat/prototype/12.3.2_FDT_7_a_iv': [FAIL],
+  'intl402/DateTimeFormat/prototype/12.3.3': [FAIL],
+  'intl402/DateTimeFormat/prototype/12.3_a': [FAIL],
+  'intl402/DateTimeFormat/prototype/format/12.3.2_FDT_7_a_iv': [FAIL],
+  'intl402/Number/prototype/toLocaleString/13.2.1_5': [PASS, FAIL],
+  'intl402/NumberFormat/11.1.1_20_c': [FAIL],
+  'intl402/NumberFormat/11.1.1_a': [FAIL],
+  'intl402/NumberFormat/11.1.1': [FAIL],
+  'intl402/NumberFormat/11.1.2': [PASS, FAIL],
+  'intl402/NumberFormat/11.1.2.1_4': [FAIL],
+  'intl402/NumberFormat/11.2.3_b': [FAIL],
+  'intl402/NumberFormat/prototype/11.3_a': [FAIL],
+  'intl402/String/prototype/localeCompare/13.1.1_7': [PASS, FAIL],
 
   ##################### DELIBERATE INCOMPATIBILITIES #####################
 
-  'S15.8.2.8_A6': [PASS, FAIL_OK],  # Math.exp (less precise with --fast-math)
+  'built-ins/Math/exp/S15.8.2.8_A6': [PASS, FAIL_OK],  # Math.exp (less precise with --fast-math)
 
   # Linux for ia32 (and therefore simulators) default to extended 80 bit
   # floating point formats, so these tests checking 64-bit FP precision fail.
   # The other platforms/arch's pass these tests.
   # We follow the other major JS engines by keeping this default.
-  'S8.5_A2.1': [PASS, FAIL_OK],
-  'S8.5_A2.2': [PASS, FAIL_OK],
+  'language/types/number/S8.5_A2.1': [PASS, FAIL_OK],
+  'language/types/number/S8.5_A2.2': [PASS, FAIL_OK],
 
   ############################ INVALID TESTS #############################
 
   # tests in PST/PDT between first Sunday in March and first Sunday in April.
   # The DST switch was moved in 2007 whereas Test262 bases the reference value
   # on 2000. Test262 Bug: https://bugs.ecmascript.org/show_bug.cgi?id=293
-  'S15.9.3.1_A5_T1': [PASS, FAIL_OK],
-  'S15.9.3.1_A5_T2': [PASS, FAIL_OK],
-  'S15.9.3.1_A5_T3': [PASS, FAIL_OK],
-  'S15.9.3.1_A5_T4': [PASS, FAIL_OK],
-  'S15.9.3.1_A5_T5': [PASS, FAIL_OK],
-  'S15.9.3.1_A5_T6': [PASS, FAIL_OK],
-
-  # ObjectKeys() no longer throws TypeError when passed a primitive value which
-  # is not null or undefined (per ES6).
-  '15.2.3.14-1-1': [FAIL_OK],
-  '15.2.3.14-1-2': [FAIL_OK],
-  '15.2.3.14-1-3': [FAIL_OK],
-
-  # Object.getOwnPropertyNames(O) no longer throws when passed a primitive value.
-  '15.2.3.4-1-4': [FAIL_OK],
-  '15.2.3.4-1-5': [FAIL_OK],
-  '15.2.3.4-1': [FAIL_OK],
+  'built-ins/Date/S15.9.3.1_A5_T1': [PASS, FAIL_OK],
+  'built-ins/Date/S15.9.3.1_A5_T2': [PASS, FAIL_OK],
+  'built-ins/Date/S15.9.3.1_A5_T3': [PASS, FAIL_OK],
+  'built-ins/Date/S15.9.3.1_A5_T4': [PASS, FAIL_OK],
+  'built-ins/Date/S15.9.3.1_A5_T5': [PASS, FAIL_OK],
+  'built-ins/Date/S15.9.3.1_A5_T6': [PASS, FAIL_OK],
+
+  # Test makes unjustified assumptions about the number of calls to SortCompare.
+  # Test262 Bug: https://bugs.ecmascript.org/show_bug.cgi?id=596
+  'built-ins/Array/prototype/sort/bug_596_1': [PASS, FAIL_OK],
+
+  # Tests do not return boolean.
+  'built-ins/Object/keys/15.2.3.14-1-1': [PASS, FAIL_OK],
+  'built-ins/Object/keys/15.2.3.14-1-2': [PASS, FAIL_OK],
+  'built-ins/Object/keys/15.2.3.14-1-3': [PASS, FAIL_OK],
+
+  # Test bug https://github.com/tc39/test262/issues/405
+  'intl402/Collator/prototype/compare/10.3.2_1_c': [PASS, FAIL_OK],
+  'intl402/Collator/prototype/compare/10.3.2_CS_b_NN': [PASS, FAIL_OK],
+  'intl402/Collator/prototype/compare/10.3.2_CS_c_NN': [PASS, FAIL_OK],
+  'intl402/Collator/prototype/compare/10.3.2_CS_d_NN': [PASS, FAIL_OK],
+  'intl402/Date/prototype/13.3.0_7': [PASS, FAIL_OK],
 
   ############################ SKIPPED TESTS #############################
 
-  # These tests take a looong time to run in debug mode.
-  'S15.1.3.1_A2.5_T1': [PASS, ['mode == debug', SKIP]],
-  'S15.1.3.2_A2.5_T1': [PASS, ['mode == debug', SKIP]],
+  # These tests take a looong time to run.
+  'built-ins/decodeURI/S15.1.3.1_A1.10_T1': [SKIP],
+  'built-ins/decodeURI/S15.1.3.1_A1.11_T1': [SKIP],
+  'built-ins/decodeURI/S15.1.3.1_A1.11_T2': [SKIP],
+  'built-ins/decodeURI/S15.1.3.1_A1.12_T1': [SKIP],
+  'built-ins/decodeURI/S15.1.3.1_A1.12_T2': [SKIP],
+  'built-ins/decodeURI/S15.1.3.1_A2.5_T1': [SKIP],
+  'built-ins/decodeURIComponent/S15.1.3.2_A1.11_T1': [SKIP],
+  'built-ins/decodeURIComponent/S15.1.3.2_A1.12_T1': [SKIP],
+  'built-ins/decodeURIComponent/S15.1.3.2_A2.5_T1': [SKIP],
+  'built-ins/RegExp/S15.10.2.12_A3_T1': [SKIP],
+  'intl402/9.2.6_4_b': [SKIP],
+  'language/literals/regexp/S7.8.5_A1.1_T2': [SKIP],
+  'language/literals/regexp/S7.8.5_A1.4_T2': [SKIP],
+  'language/literals/regexp/S7.8.5_A2.1_T2': [SKIP],
+  'language/literals/regexp/S7.8.5_A2.4_T2': [SKIP],
+  'language/statements/const/syntax/const-invalid-assignment-next-expression-for': [SKIP],
 }],  # ALWAYS
 
 ['system == macos', {
-  '11.3.2_TRP': [FAIL],
-  '9.2.5_11_g_ii_2': [FAIL],
+  'intl402/11.3.2_TRP': [FAIL],
+  'intl402/9.2.5_11_g_ii_2': [FAIL],
 }],  # system == macos
 
 ['arch == arm or arch == mipsel or arch == mips or arch == arm64 or arch == mips64el', {
 
   # TODO(mstarzinger): Causes stack overflow on simulators due to eager
   # compilation of parenthesized function literals. Needs investigation.
-  'S13.2.1_A1_T1': [SKIP],
+  'language/statements/function/S13.2.1_A1_T1': [SKIP],
 
   # BUG(3251225): Tests that timeout with --nocrankshaft.
-  'S15.1.3.1_A2.4_T1': [SKIP],
-  'S15.1.3.1_A2.5_T1': [SKIP],
-  'S15.1.3.2_A2.4_T1': [SKIP],
-  'S15.1.3.2_A2.5_T1': [SKIP],
-  'S15.1.3.3_A2.3_T1': [SKIP],
-  'S15.1.3.4_A2.3_T1': [SKIP],
+  'built-ins/decodeURI/S15.1.3.1_A2.4_T1': [SKIP],
+  'built-ins/decodeURI/S15.1.3.1_A2.5_T1': [SKIP],
+  'built-ins/decodeURIComponent/S15.1.3.2_A2.4_T1': [SKIP],
+  'built-ins/decodeURIComponent/S15.1.3.2_A2.5_T1': [SKIP],
+  'built-ins/encodeURI/S15.1.3.3_A2.3_T1': [SKIP],
+  'built-ins/encodeURIComponent/S15.1.3.4_A2.3_T1': [SKIP],
 }],  # 'arch == arm or arch == mipsel or arch == mips or arch == arm64'
 ]
index 835c1ff..d02ad07 100644 (file)
 
 
 import hashlib
+import imp
 import os
 import shutil
 import sys
 import tarfile
 
+
+from testrunner.local import statusfile
 from testrunner.local import testsuite
 from testrunner.local import utils
 from testrunner.objects import testcase
 
-
-TEST_262_ARCHIVE_REVISION = "fbba29f"  # This is the r365 revision.
-TEST_262_ARCHIVE_MD5 = "e1ff0db438cc12de8fb6da80621b4ef6"
+# The revision hash needs to be 7 characters?
+TEST_262_ARCHIVE_REVISION = "6137f75"  # This is the 2015-08-25 revision.
+TEST_262_ARCHIVE_MD5 = "c1eaf890d46e73d6c7e05ab21f76e668"
 TEST_262_URL = "https://github.com/tc39/test262/tarball/%s"
-TEST_262_HARNESS = ["sta.js", "testBuiltInObject.js", "testIntl.js"]
+TEST_262_HARNESS_FILES = ["sta.js", "assert.js"]
+
+TEST_262_SUITE_PATH = ["data", "test"]
+TEST_262_HARNESS_PATH = ["data", "harness"]
+TEST_262_TOOLS_PATH = ["data", "tools", "packaging"]
+
+ALL_VARIANT_FLAGS_STRICT = dict(
+    (v, [flags + ["--use-strict"] for flags in flag_sets])
+    for v, flag_sets in testsuite.ALL_VARIANT_FLAGS.iteritems()
+)
+
+FAST_VARIANT_FLAGS_STRICT = dict(
+    (v, [flags + ["--use-strict"] for flags in flag_sets])
+    for v, flag_sets in testsuite.FAST_VARIANT_FLAGS.iteritems()
+)
+
+ALL_VARIANT_FLAGS_BOTH = dict(
+    (v, [flags for flags in testsuite.ALL_VARIANT_FLAGS[v] +
+                            ALL_VARIANT_FLAGS_STRICT[v]])
+    for v in testsuite.ALL_VARIANT_FLAGS
+)
+
+FAST_VARIANT_FLAGS_BOTH = dict(
+    (v, [flags for flags in testsuite.FAST_VARIANT_FLAGS[v] +
+                            FAST_VARIANT_FLAGS_STRICT[v]])
+    for v in testsuite.FAST_VARIANT_FLAGS
+)
+
+ALL_VARIANTS = {
+  'nostrict': testsuite.ALL_VARIANT_FLAGS,
+  'strict': ALL_VARIANT_FLAGS_STRICT,
+  'both': ALL_VARIANT_FLAGS_BOTH,
+}
+
+FAST_VARIANTS = {
+  'nostrict': testsuite.FAST_VARIANT_FLAGS,
+  'strict': FAST_VARIANT_FLAGS_STRICT,
+  'both': FAST_VARIANT_FLAGS_BOTH,
+}
+
+class Test262VariantGenerator(testsuite.VariantGenerator):
+  def GetFlagSets(self, testcase, variant):
+    if testcase.outcomes and statusfile.OnlyFastVariants(testcase.outcomes):
+      variant_flags = FAST_VARIANTS
+    else:
+      variant_flags = ALL_VARIANTS
+
+    test_record = self.suite.GetTestRecord(testcase)
+    if "noStrict" in test_record:
+      return variant_flags["nostrict"][variant]
+    if "onlyStrict" in test_record:
+      return variant_flags["strict"][variant]
+    return variant_flags["both"][variant]
 
 
 class Test262TestSuite(testsuite.TestSuite):
 
   def __init__(self, name, root):
     super(Test262TestSuite, self).__init__(name, root)
-    self.testroot = os.path.join(root, "data", "test", "suite")
-    self.harness = [os.path.join(self.root, "data", "test", "harness", f)
-                    for f in TEST_262_HARNESS]
+    self.testroot = os.path.join(self.root, *TEST_262_SUITE_PATH)
+    self.harnesspath = os.path.join(self.root, *TEST_262_HARNESS_PATH)
+    self.harness = [os.path.join(self.harnesspath, f)
+                    for f in TEST_262_HARNESS_FILES]
     self.harness += [os.path.join(self.root, "harness-adapt.js")]
-
-  def CommonTestName(self, testcase):
-    return testcase.path.split(os.path.sep)[-1]
+    self.ParseTestRecord = None
 
   def ListTests(self, context):
     tests = []
@@ -75,21 +129,65 @@ class Test262TestSuite(testsuite.TestSuite):
 
   def GetFlagsForTestCase(self, testcase, context):
     return (testcase.flags + context.mode_flags + self.harness +
+            self.GetIncludesForTest(testcase) + ["--harmony"] +
             [os.path.join(self.testroot, testcase.path + ".js")])
 
+  def _VariantGeneratorFactory(self):
+    return Test262VariantGenerator
+
+  def LoadParseTestRecord(self):
+    if not self.ParseTestRecord:
+      root = os.path.join(self.root, *TEST_262_TOOLS_PATH)
+      f = None
+      try:
+        (f, pathname, description) = imp.find_module("parseTestRecord", [root])
+        module = imp.load_module("parseTestRecord", f, pathname, description)
+        self.ParseTestRecord = module.parseTestRecord
+      except:
+        raise ImportError("Cannot load parseTestRecord; you may need to "
+                          "--download-data for test262")
+      finally:
+        if f:
+          f.close()
+    return self.ParseTestRecord
+
+  def GetTestRecord(self, testcase):
+    if not hasattr(testcase, "test_record"):
+      ParseTestRecord = self.LoadParseTestRecord()
+      testcase.test_record = ParseTestRecord(self.GetSourceForTest(testcase),
+                                             testcase.path)
+    return testcase.test_record
+
+  def GetIncludesForTest(self, testcase):
+    test_record = self.GetTestRecord(testcase)
+    if "includes" in test_record:
+      includes = [os.path.join(self.harnesspath, f)
+                  for f in test_record["includes"]]
+    else:
+      includes = []
+    return includes
+
   def GetSourceForTest(self, testcase):
     filename = os.path.join(self.testroot, testcase.path + ".js")
     with open(filename) as f:
       return f.read()
 
   def IsNegativeTest(self, testcase):
-    return "@negative" in self.GetSourceForTest(testcase)
+    test_record = self.GetTestRecord(testcase)
+    return "negative" in test_record
 
   def IsFailureOutput(self, output, testpath):
     if output.exit_code != 0:
       return True
     return "FAILED!" in output.stdout
 
+  def HasUnexpectedOutput(self, testcase):
+    outcome = self.GetOutcome(testcase)
+    if (statusfile.FAIL_SLOPPY in testcase.outcomes and
+        "--use-strict" not in testcase.flags):
+      return outcome != statusfile.FAIL
+    return not outcome in (testcase.outcomes or [statusfile.PASS])
+
   def DownloadData(self):
     revision = TEST_262_ARCHIVE_REVISION
     archive_url = TEST_262_URL % revision
@@ -124,7 +222,7 @@ class Test262TestSuite(testsuite.TestSuite):
       if md5.hexdigest() != TEST_262_ARCHIVE_MD5:
         os.remove(archive_name)
         print "MD5 expected %s" % TEST_262_ARCHIVE_MD5
-        raise Exception("Hash mismatch of test data file")
+        raise Exception("MD5 hash mismatch of test data file")
       archive = tarfile.open(archive_name, "r:gz")
       if sys.platform in ("win32", "cygwin"):
         # Magic incantation to allow longer path names on Windows.