Migrate to new test status file syntax
authorjkummerow@chromium.org <jkummerow@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 24 Sep 2013 12:08:33 +0000 (12:08 +0000)
committerjkummerow@chromium.org <jkummerow@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 24 Sep 2013 12:08:33 +0000 (12:08 +0000)
R=machenbach@chromium.org

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

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@16919 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

12 files changed:
.gitignore
test/benchmarks/benchmarks.status
test/cctest/cctest.status
test/intl/intl.status
test/message/message.status
test/mjsunit/mjsunit.status
test/mozilla/mozilla.status
test/preparser/preparser.status
test/test262/test262.status
test/webkit/webkit.status
tools/testrunner/local/old_statusfile.py [deleted file]
tools/testrunner/local/statusfile.py

index ee4e02f..d554ec6 100644 (file)
@@ -37,25 +37,16 @@ shell_g
 /out
 /perf.data
 /perf.data.old
-/test/benchmarks/benchmarks.status2
 /test/benchmarks/CHECKED_OUT_*
 /test/benchmarks/downloaded_*
 /test/benchmarks/kraken
 /test/benchmarks/octane
 /test/benchmarks/sunspider
-/test/cctest/cctest.status2
-/test/intl/intl.status2
-/test/message/message.status2
-/test/mjsunit/mjsunit.status2
 /test/mozilla/CHECKED_OUT_VERSION
 /test/mozilla/data
 /test/mozilla/downloaded_*
-/test/mozilla/mozilla.status2
-/test/preparser/preparser.status2
 /test/test262/data
 /test/test262/test262-*
-/test/test262/test262.status2
-/test/webkit/webkit.status2
 /third_party
 /tools/jsfunfuzz
 /tools/jsfunfuzz.zip
index 651b8d7..103eaeb 100644 (file)
@@ -25,5 +25,9 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-# Too slow in Debug mode.
-octane/mandreel: PASS, SKIP if $mode == debug
+[
+['mode == debug', {
+  # Too slow in Debug mode.
+  'octane/mandreel': [SKIP],
+}],  # 'mode == debug'
+]
index db04d58..5480f4c 100644 (file)
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-prefix cctest
+[
+[ALWAYS, {
+  # All tests prefixed with 'Bug' are expected to fail.
+  'test-api/Bug*': [FAIL],
 
-# All tests prefixed with 'Bug' are expected to fail.
-test-api/Bug*: FAIL
+  ##############################################################################
+  # BUG(382): Weird test. Can't guarantee that it never times out.
+  'test-api/ApplyInterruption': [PASS, TIMEOUT],
 
-##############################################################################
-# BUG(382): Weird test. Can't guarantee that it never times out.
-test-api/ApplyInterruption: PASS || TIMEOUT
-
-# BUG(2907): Allocation while in DisallowHeapAllocation scope.
-test-object-observe/NamedAccessCheck: SKIP
-test-object-observe/DisallowAllForAccessKeys: SKIP
-test-object-observe/AccessCheckDisallowApiModifications: SKIP
+  # BUG(2907): Allocation while in DisallowHeapAllocation scope.
+  'test-object-observe/NamedAccessCheck': [SKIP],
+  'test-object-observe/DisallowAllForAccessKeys': [SKIP],
+  'test-object-observe/AccessCheckDisallowApiModifications': [SKIP],
 
-# TODO(mstarzinger): Fail gracefully on multiple V8::Dispose calls.
-test-api/InitializeAndDisposeOnce: SKIP
-test-api/InitializeAndDisposeMultiple: SKIP
+  # TODO(mstarzinger): Fail gracefully on multiple V8::Dispose calls.
+  'test-api/InitializeAndDisposeOnce': [SKIP],
+  'test-api/InitializeAndDisposeMultiple': [SKIP],
 
-# These tests always fail.  They are here to test test.py.  If
-# they don't fail then test.py has failed.
-test-serialize/TestThatAlwaysFails: FAIL
-test-serialize/DependentTestThatAlwaysFails: FAIL
+  # These tests always fail.  They are here to test test.py.  If
+  # they don't fail then test.py has failed.
+  'test-serialize/TestThatAlwaysFails': [FAIL],
+  'test-serialize/DependentTestThatAlwaysFails': [FAIL],
 
-# This test always fails.  It tests that LiveEdit causes abort when turned off.
-test-debug/LiveEditDisabled: FAIL
+  # This test always fails.  It tests that LiveEdit causes abort when turned off.
+  'test-debug/LiveEditDisabled': [FAIL],
 
-# TODO(gc): Temporarily disabled in the GC branch.
-test-log/EquivalenceOfLoggingAndTraversal: PASS || FAIL
+  # TODO(gc): Temporarily disabled in the GC branch.
+  'test-log/EquivalenceOfLoggingAndTraversal': [PASS, FAIL],
 
-# We do not yet shrink weak maps after they have been emptied by the GC
-test-weakmaps/Shrinking: FAIL
-test-weaksets/WeakSet_Shrinking: FAIL
+  # We do not yet shrink weak maps after they have been emptied by the GC
+  'test-weakmaps/Shrinking': [FAIL],
+  'test-weaksets/WeakSet_Shrinking': [FAIL],
 
-# Boot up memory use is bloated in debug mode.
-test-mark-compact/BootUpMemoryUse: PASS, PASS || FAIL if $mode == debug
+  # Boot up memory use is bloated in debug mode.
+  'test-mark-compact/BootUpMemoryUse': [PASS, PASS, ['mode == debug', FAIL]],
 
-# Some CPU profiler tests are flaky.
-test-cpu-profiler/*: PASS || FLAKY
+  # Some CPU profiler tests are flaky.
+  'test-cpu-profiler/*': [PASS, FLAKY],
+}],  # ALWAYS
 
 ##############################################################################
-[ $arch == arm ]
-
-# We cannot assume that we can throw OutOfMemory exceptions in all situations.
-# Apparently our ARM box is in such a state. Skip the test as it also runs for
-# a long time.
-test-api/OutOfMemory: SKIP
-test-api/OutOfMemoryNested: SKIP
-
-# BUG(355): Test crashes on ARM.
-test-log/ProfLazyMode: SKIP
-
-# BUG(1075): Unresolved crashes.
-test-serialize/Deserialize: SKIP
-test-serialize/DeserializeFromSecondSerializationAndRunScript2: SKIP
-test-serialize/DeserializeAndRunScript2: SKIP
-test-serialize/DeserializeFromSecondSerialization: SKIP
-
-# BUG(2874): Threading problems.
-test-api/*: PASS || FLAKY
+['arch == arm', {
+
+  # We cannot assume that we can throw OutOfMemory exceptions in all situations.
+  # Apparently our ARM box is in such a state. Skip the test as it also runs for
+  # a long time.
+  'test-api/OutOfMemory': [SKIP],
+  'test-api/OutOfMemoryNested': [SKIP],
+
+  # BUG(355): Test crashes on ARM.
+  'test-log/ProfLazyMode': [SKIP],
+
+  # BUG(1075): Unresolved crashes.
+  'test-serialize/Deserialize': [SKIP],
+  'test-serialize/DeserializeFromSecondSerializationAndRunScript2': [SKIP],
+  'test-serialize/DeserializeAndRunScript2': [SKIP],
+  'test-serialize/DeserializeFromSecondSerialization': [SKIP],
+
+  # BUG(2874): Threading problems.
+  'test-api/*': [PASS, FLAKY],
+}],  # 'arch == arm'
 ##############################################################################
-[ $arch == mipsel ]
+['arch == mipsel', {
 
-# BUG(2657): Test sometimes times out on MIPS simulator.
-test-thread-termination/TerminateMultipleV8ThreadsDefaultIsolate: PASS || TIMEOUT
+  # BUG(2657): Test sometimes times out on MIPS simulator.
+  'test-thread-termination/TerminateMultipleV8ThreadsDefaultIsolate': [PASS, TIMEOUT],
 
-# BUG(1075): Unresolved crashes on MIPS also.
-test-serialize/Deserialize: SKIP
-test-serialize/DeserializeFromSecondSerializationAndRunScript2: SKIP
-test-serialize/DeserializeAndRunScript2: SKIP
-test-serialize/DeserializeFromSecondSerialization: SKIP
+  # BUG(1075): Unresolved crashes on MIPS also.
+  'test-serialize/Deserialize': [SKIP],
+  'test-serialize/DeserializeFromSecondSerializationAndRunScript2': [SKIP],
+  'test-serialize/DeserializeAndRunScript2': [SKIP],
+  'test-serialize/DeserializeFromSecondSerialization': [SKIP],
+}],  # 'arch == mipsel'
 
 ##############################################################################
-[ $arch == android_arm || $arch == android_ia32 ]
+['arch == android_arm or arch == android_ia32', {
 
-# Tests crash as there is no /tmp directory in Android.
-test-log/LogAccessorCallbacks: SKIP
-test-log/LogCallbacks: SKIP
-test-log/ProfLazyMode: SKIP
+  # Tests crash as there is no /tmp directory in Android.
+  'test-log/LogAccessorCallbacks': [SKIP],
+  'test-log/LogCallbacks': [SKIP],
+  'test-log/ProfLazyMode': [SKIP],
 
-# platform-tls.h does not contain an ANDROID-related header.
-test-platform-tls/FastTLS: SKIP
+  # platform-tls.h does not contain an ANDROID-related header.
+  'test-platform-tls/FastTLS': [SKIP],
 
-# This test times out.
-test-threads/ThreadJoinSelf: SKIP
+  # This test times out.
+  'test-threads/ThreadJoinSelf': [SKIP],
+}],  # 'arch == android_arm or arch == android_ia32'
 
 ##############################################################################
-[ $arch == nacl_ia32 || $arch == nacl_x64 ]
-
-# NaCl builds have problems with threaded tests since Pepper_28.
-# V8 Issue 2786
-test-api/Threading1: SKIP
-test-lockers/MultithreadedParallelIsolates: SKIP
-test-lockers/ExtensionsRegistration: SKIP
-
-# These tests fail as there is no /tmp directory in Native Client.
-test-log/LogAccessorCallbacks: SKIP
-test-log/LogCallbacks: SKIP
-test-log/ProfLazyMode: SKIP
-
-# Native Client doesn't support sockets.
-test-debug/DebuggerAgent: SKIP
-test-debug/DebuggerAgentProtocolOverflowHeader: SKIP
-test-socket/Socket: SKIP
-
-# Profiling doesn't work on Native Client.
-test-cpu-profiler/*: SKIP
-
-# Fails since 16322 (new test).
-test-code-stubs-arm/ConvertDToI: SKIP
+['arch == nacl_ia32 or arch == nacl_x64', {
+
+  # NaCl builds have problems with threaded tests since Pepper_28.
+  # V8 Issue 2786
+  'test-api/Threading1': [SKIP],
+  'test-lockers/MultithreadedParallelIsolates': [SKIP],
+  'test-lockers/ExtensionsRegistration': [SKIP],
+
+  # These tests fail as there is no /tmp directory in Native Client.
+  'test-log/LogAccessorCallbacks': [SKIP],
+  'test-log/LogCallbacks': [SKIP],
+  'test-log/ProfLazyMode': [SKIP],
+
+  # Native Client doesn't support sockets.
+  'test-debug/DebuggerAgent': [SKIP],
+  'test-debug/DebuggerAgentProtocolOverflowHeader': [SKIP],
+  'test-socket/Socket': [SKIP],
+
+  # Profiling doesn't work on Native Client.
+  'test-cpu-profiler/*': [SKIP],
+
+  # Fails since 16322 (new test).
+  'test-code-stubs-arm/ConvertDToI': [SKIP],
+}],  # 'arch == nacl_ia32 or arch == nacl_x64'
+]
index 4967eb0..fc3c66b 100644 (file)
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-prefix intl
+[
+[ALWAYS, {
+  # The following tests use getDefaultTimeZone().
+  'date-format/resolved-options': [FAIL],
+  'date-format/timezone': [FAIL],
+  'general/v8Intl-exists': [FAIL],
 
-# The following tests use getDefaultTimeZone().
-date-format/resolved-options: FAIL
-date-format/timezone: FAIL
-general/v8Intl-exists: FAIL
+  # TODO(jochen): The following test is flaky.
+  'overrides/caching': [PASS, FAIL],
 
-# TODO(jochen): The following test is flaky.
-overrides/caching: PASS || FAIL
-
-# BUG(2899): default locale for search fails on mac and on android.
-collator/default-locale: FAIL if ($system == macos || $arch == android_arm || $arch == android_ia32)
+  # BUG(2899): default locale for search fails on mac and on android.
+  'collator/default-locale': [['system == macos or arch == android_arm or arch == android_ia32', FAIL]],
+}],  # ALWAYS
+]
index 441f8ed..234bf0f 100644 (file)
@@ -25,7 +25,9 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-prefix message
-
-# All tests in the bug directory are expected to fail.
-bugs/*: FAIL
+[
+[ALWAYS, {
+  # All tests in the bug directory are expected to fail.
+  'bugs/*': [FAIL],
+}],  # ALWAYS
+]
index ee35af5..ec780e5 100644 (file)
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-prefix mjsunit
-
-# All tests in the bug directory are expected to fail.
-bugs/*: FAIL
-
-##############################################################################
-# Fails.
-regress/regress-1119: FAIL
-
-# Issue 1719: Slow to collect arrays over several contexts.
-regress/regress-524: SKIP
-# When that bug is fixed, revert the expectation to:
-# Skip long running test in debug and allow it to timeout in release mode.
-# regress/regress-524: (PASS || TIMEOUT), SKIP if $mode == debug
-
-# This test non-deterministically runs out of memory on Windows ia32.
-regress/regress-crbug-160010: SKIP
-
-##############################################################################
-# Too slow in debug mode with --stress-opt mode.
-compiler/regress-stacktrace-methods: PASS, SKIP if $mode == debug
-compiler/regress-funcaller: PASS, SKIP if $mode == debug
-regress/regress-2318: PASS, SKIP if $mode == debug
-regress/regress-create-exception: PASS, SKIP if $mode == debug
-regress/regress-2612: PASS, SKIP if $mode == debug
-
-##############################################################################
-# Too slow in debug mode for GC stress mode.
-regress/regress-crbug-217858: PASS, SKIP if $mode == debug
-
-##############################################################################
-# These use a built-in that's only present in debug mode. They take
-# too long to run in debug mode on ARM and MIPS.
-fuzz-natives-part*: PASS, SKIP if ($mode == release || $arch == arm || $arch == android_arm || $arch == mipsel)
-
-big-object-literal: PASS, SKIP if ($arch == arm || $arch == android_arm)
-
-# Issue 488: this test sometimes times out.
-array-constructor: PASS || TIMEOUT
-
-# Very slow on ARM and MIPS, contains no architecture dependent code.
-unicode-case-overoptimization: PASS, TIMEOUT if ($arch == arm || $arch == android_arm || $arch == mipsel)
-
-##############################################################################
-# This test expects to reach a certain recursion depth, which may not work
-# for debug mode.
-json-recursive: PASS, (PASS || FAIL) if $mode == debug
-
-##############################################################################
-# Skip long running tests that time out in debug mode.
-generated-transition-stub: PASS, SKIP if $mode == debug
-
-##############################################################################
-# This test sets the umask on a per-process basis and hence cannot be
-# used in multi-threaded runs.
-# On android there is no /tmp directory.
-d8-os: PASS, SKIP if ($isolates || $arch == android_arm || $arch == android_ia32)
-tools/tickprocessor: PASS, SKIP if ($arch == android_arm || $arch == android_ia32)
-
-##############################################################################
-# Long running test that reproduces memory leak and should be run manually.
-regress/regress-2073: SKIP
+[
+[ALWAYS, {
+  # All tests in the bug directory are expected to fail.
+  'bugs/*': [FAIL],
+
+  ##############################################################################
+  # Fails.
+  'regress/regress-1119': [FAIL],
+
+  # Issue 1719: Slow to collect arrays over several contexts.
+  'regress/regress-524': [SKIP],
+  # When that bug is fixed, revert the expectation to:
+  # Skip long running test in debug and allow it to timeout in release mode.
+  # regress/regress-524: [PASS, TIMEOUT, ['mode == debug', SKIP]],
+
+  # This test non-deterministically runs out of memory on Windows ia32.
+  'regress/regress-crbug-160010': [SKIP],
+
+  ##############################################################################
+  # Too slow in debug mode with --stress-opt mode.
+  'compiler/regress-stacktrace-methods': [PASS, ['mode == debug', SKIP]],
+  'compiler/regress-funcaller': [PASS, ['mode == debug', SKIP]],
+  'regress/regress-2318': [PASS, ['mode == debug', SKIP]],
+  'regress/regress-create-exception': [PASS, ['mode == debug', SKIP]],
+  'regress/regress-2612': [PASS, ['mode == debug', SKIP]],
+
+  ##############################################################################
+  # Too slow in debug mode for GC stress mode.
+  'regress/regress-crbug-217858': [PASS, ['mode == debug', SKIP]],
+
+  ##############################################################################
+  # These use a built-in that's only present in debug mode. They take
+  # too long to run in debug mode on ARM and MIPS.
+  'fuzz-natives-part*': [PASS, ['mode == release or arch == arm or arch == android_arm or arch == mipsel', SKIP]],
+
+  'big-object-literal': [PASS, ['arch == arm or arch == android_arm', SKIP]],
+
+  # Issue 488: this test sometimes times out.
+  'array-constructor': [PASS, TIMEOUT],
+
+  # Very slow on ARM and MIPS, contains no architecture dependent code.
+  'unicode-case-overoptimization': [PASS, ['arch == arm or arch == android_arm or arch == mipsel', TIMEOUT]],
+
+  ##############################################################################
+  # This test expects to reach a certain recursion depth, which may not work
+  # for debug mode.
+  'json-recursive': [PASS, ['mode == debug', PASS, FAIL]],
+
+  ##############################################################################
+  # Skip long running tests that time out in debug mode.
+  'generated-transition-stub': [PASS, ['mode == debug', SKIP]],
+
+  ##############################################################################
+  # This test sets the umask on a per-process basis and hence cannot be
+  # used in multi-threaded runs.
+  # On android there is no /tmp directory.
+  'd8-os': [PASS, ['isolates or arch == android_arm or arch == android_ia32', SKIP]],
+  'tools/tickprocessor': [PASS, ['arch == android_arm or arch == android_ia32', SKIP]],
+
+  ##############################################################################
+  # Long running test that reproduces memory leak and should be run manually.
+  'regress/regress-2073': [SKIP],
+}],  # ALWAYS
 
 ##############################################################################
-[ $arch == arm || $arch == android_arm ]
-
-# Slow tests which times out in debug mode.
-try: PASS, SKIP if $mode == debug
-debug-scripts-request: PASS, SKIP if $mode == debug
-array-constructor: PASS, SKIP if $mode == debug
-regress/regress-1122: PASS, SKIP if ($mode == debug && $arch == android_arm)
-
-# Flaky test that can hit compilation-time stack overflow in debug mode.
-unicode-test: PASS, (PASS || FAIL) if $mode == debug
-
-# Times out often in release mode on ARM.
-compiler/regress-stacktrace-methods: PASS, PASS || TIMEOUT if $mode == release
-array-splice: PASS || TIMEOUT
-
-# Long running test.
-string-indexof-2: PASS || TIMEOUT
-mirror-object: PASS || TIMEOUT
-
-# BUG(3251035): Timeouts in long looping crankshaft optimization
-# tests. Skipping because having them timeout takes too long on the
-# buildbot.
-compiler/alloc-number: SKIP
-compiler/array-length: SKIP
-compiler/assignment-deopt: SKIP
-compiler/deopt-args: SKIP
-compiler/inline-compare: SKIP
-compiler/inline-global-access: SKIP
-compiler/optimized-function-calls: SKIP
-compiler/pic: SKIP
-compiler/property-calls: SKIP
-compiler/recursive-deopt: SKIP
-compiler/regress-4: SKIP
-compiler/regress-funcaller: SKIP
-compiler/regress-rep-change: SKIP
-compiler/regress-arguments: SKIP
-compiler/regress-funarguments: SKIP
-compiler/regress-3249650: SKIP
-compiler/simple-deopt: SKIP
-regress/regress-490: SKIP
-regress/regress-634: SKIP
-regress/regress-create-exception: SKIP
-regress/regress-3218915: SKIP
-regress/regress-3247124: SKIP
-
-# Requires bigger stack size in the Genesis and if stack size is increased,
-# the test requires too much time to run.  However, the problem test covers
-# should be platform-independent.
-regress/regress-1132: SKIP
-
-# Stack manipulations in LiveEdit is not implemented for this arch.
-debug-liveedit-check-stack: SKIP
-debug-liveedit-stack-padding: SKIP
-debug-liveedit-restart-frame: SKIP
-debug-liveedit-double-call: SKIP
-
-# Currently always deopt on minus zero
-math-floor-of-div-minus-zero: SKIP
+['arch == arm or arch == android_arm', {
+
+  # Slow tests which times out in debug mode.
+  'try': [PASS, ['mode == debug', SKIP]],
+  'debug-scripts-request': [PASS, ['mode == debug', SKIP]],
+  'array-constructor': [PASS, ['mode == debug', SKIP]],
+  'regress/regress-1122': [PASS, ['mode == debug and arch == android_arm', SKIP]],
+
+  # Flaky test that can hit compilation-time stack overflow in debug mode.
+  'unicode-test': [PASS, ['mode == debug', PASS, FAIL]],
+
+  # Times out often in release mode on ARM.
+  'compiler/regress-stacktrace-methods': [PASS, PASS, ['mode == release', TIMEOUT]],
+  'array-splice': [PASS, TIMEOUT],
+
+  # Long running test.
+  'string-indexof-2': [PASS, TIMEOUT],
+  'mirror-object': [PASS, TIMEOUT],
+
+  # BUG(3251035): Timeouts in long looping crankshaft optimization
+  # tests. Skipping because having them timeout takes too long on the
+  # buildbot.
+  'compiler/alloc-number': [SKIP],
+  'compiler/array-length': [SKIP],
+  'compiler/assignment-deopt': [SKIP],
+  'compiler/deopt-args': [SKIP],
+  'compiler/inline-compare': [SKIP],
+  'compiler/inline-global-access': [SKIP],
+  'compiler/optimized-function-calls': [SKIP],
+  'compiler/pic': [SKIP],
+  'compiler/property-calls': [SKIP],
+  'compiler/recursive-deopt': [SKIP],
+  'compiler/regress-4': [SKIP],
+  'compiler/regress-funcaller': [SKIP],
+  'compiler/regress-rep-change': [SKIP],
+  'compiler/regress-arguments': [SKIP],
+  'compiler/regress-funarguments': [SKIP],
+  'compiler/regress-3249650': [SKIP],
+  'compiler/simple-deopt': [SKIP],
+  'regress/regress-490': [SKIP],
+  'regress/regress-634': [SKIP],
+  'regress/regress-create-exception': [SKIP],
+  'regress/regress-3218915': [SKIP],
+  'regress/regress-3247124': [SKIP],
+
+  # Requires bigger stack size in the Genesis and if stack size is increased,
+  # the test requires too much time to run.  However, the problem test covers
+  # should be platform-independent.
+  'regress/regress-1132': [SKIP],
+
+  # Stack manipulations in LiveEdit is not implemented for this arch.
+  'debug-liveedit-check-stack': [SKIP],
+  'debug-liveedit-stack-padding': [SKIP],
+  'debug-liveedit-restart-frame': [SKIP],
+  'debug-liveedit-double-call': [SKIP],
+
+  # Currently always deopt on minus zero
+  'math-floor-of-div-minus-zero': [SKIP],
+}],  # 'arch == arm or arch == android_arm'
 
 ##############################################################################
-[ $arch == mipsel ]
-
-# Slow tests which times out in debug mode.
-try: PASS, SKIP if $mode == debug
-debug-scripts-request: PASS, SKIP if $mode == debug
-array-constructor: PASS, SKIP if $mode == debug
-
-# Times out often in release mode on MIPS.
-compiler/regress-stacktrace-methods: PASS, PASS || TIMEOUT if $mode == release
-array-splice: PASS || TIMEOUT
-
-# Long running test.
-mirror-object: PASS || TIMEOUT
-string-indexof-2: PASS || TIMEOUT
-
-# BUG(3251035): Timeouts in long looping crankshaft optimization
-# tests. Skipping because having them timeout takes too long on the
-# buildbot.
-compiler/alloc-number: SKIP
-compiler/array-length: SKIP
-compiler/assignment-deopt: SKIP
-compiler/deopt-args: SKIP
-compiler/inline-compare: SKIP
-compiler/inline-global-access: SKIP
-compiler/optimized-function-calls: SKIP
-compiler/pic: SKIP
-compiler/property-calls: SKIP
-compiler/recursive-deopt: SKIP
-compiler/regress-4: SKIP
-compiler/regress-funcaller: SKIP
-compiler/regress-rep-change: SKIP
-compiler/regress-arguments: SKIP
-compiler/regress-funarguments: SKIP
-compiler/regress-3249650: SKIP
-compiler/simple-deopt: SKIP
-regress/regress-490: SKIP
-regress/regress-634: SKIP
-regress/regress-create-exception: SKIP
-regress/regress-3218915: SKIP
-regress/regress-3247124: SKIP
-
-# Requires bigger stack size in the Genesis and if stack size is increased,
-# the test requires too much time to run.  However, the problem test covers
-# should be platform-independent.
-regress/regress-1132: SKIP
-
-# Stack manipulations in LiveEdit is not implemented for this arch.
-debug-liveedit-check-stack: SKIP
-debug-liveedit-stack-padding: SKIP
-debug-liveedit-restart-frame: SKIP
-debug-liveedit-double-call: SKIP
-
-# Currently always deopt on minus zero
-math-floor-of-div-minus-zero: SKIP
+['arch == mipsel', {
+
+  # Slow tests which times out in debug mode.
+  'try': [PASS, ['mode == debug', SKIP]],
+  'debug-scripts-request': [PASS, ['mode == debug', SKIP]],
+  'array-constructor': [PASS, ['mode == debug', SKIP]],
+
+  # Times out often in release mode on MIPS.
+  'compiler/regress-stacktrace-methods': [PASS, PASS, ['mode == release', TIMEOUT]],
+  'array-splice': [PASS, TIMEOUT],
+
+  # Long running test.
+  'mirror-object': [PASS, TIMEOUT],
+  'string-indexof-2': [PASS, TIMEOUT],
+
+  # BUG(3251035): Timeouts in long looping crankshaft optimization
+  # tests. Skipping because having them timeout takes too long on the
+  # buildbot.
+  'compiler/alloc-number': [SKIP],
+  'compiler/array-length': [SKIP],
+  'compiler/assignment-deopt': [SKIP],
+  'compiler/deopt-args': [SKIP],
+  'compiler/inline-compare': [SKIP],
+  'compiler/inline-global-access': [SKIP],
+  'compiler/optimized-function-calls': [SKIP],
+  'compiler/pic': [SKIP],
+  'compiler/property-calls': [SKIP],
+  'compiler/recursive-deopt': [SKIP],
+  'compiler/regress-4': [SKIP],
+  'compiler/regress-funcaller': [SKIP],
+  'compiler/regress-rep-change': [SKIP],
+  'compiler/regress-arguments': [SKIP],
+  'compiler/regress-funarguments': [SKIP],
+  'compiler/regress-3249650': [SKIP],
+  'compiler/simple-deopt': [SKIP],
+  'regress/regress-490': [SKIP],
+  'regress/regress-634': [SKIP],
+  'regress/regress-create-exception': [SKIP],
+  'regress/regress-3218915': [SKIP],
+  'regress/regress-3247124': [SKIP],
+
+  # Requires bigger stack size in the Genesis and if stack size is increased,
+  # the test requires too much time to run.  However, the problem test covers
+  # should be platform-independent.
+  'regress/regress-1132': [SKIP],
+
+  # Stack manipulations in LiveEdit is not implemented for this arch.
+  'debug-liveedit-check-stack': [SKIP],
+  'debug-liveedit-stack-padding': [SKIP],
+  'debug-liveedit-restart-frame': [SKIP],
+  'debug-liveedit-double-call': [SKIP],
+
+  # Currently always deopt on minus zero
+  'math-floor-of-div-minus-zero': [SKIP],
+}],  # 'arch == mipsel'
 
 ##############################################################################
 # Native Client uses the ARM simulator so will behave similarly to arm
@@ -210,46 +213,49 @@ math-floor-of-div-minus-zero: SKIP
 # TODO(bradchen): enable more tests for NaCl V8 when it stops using
 # the ARM simulator.
 ##############################################################################
-[ $arch == nacl_ia32 || $arch == nacl_x64 ]
-# There is no /tmp directory for NaCl runs
-d8-os: SKIP
+['arch == nacl_ia32 or arch == nacl_x64', {
+  # There is no /tmp directory for NaCl runs
+  'd8-os': [SKIP],
 
-# Stack manipulations in LiveEdit is not implemented for this arch.
-debug-liveedit-check-stack: SKIP
-debug-liveedit-stack-padding: SKIP
-debug-liveedit-restart-frame: SKIP
-debug-liveedit-double-call: SKIP
+  # Stack manipulations in LiveEdit is not implemented for this arch.
+  'debug-liveedit-check-stack': [SKIP],
+  'debug-liveedit-stack-padding': [SKIP],
+  'debug-liveedit-restart-frame': [SKIP],
+  'debug-liveedit-double-call': [SKIP],
 
-# This test dumps core for arm.debug, so no reason to expect it to work
-# for NaCl. The other three fuzz-natives tests seem to run fine.
-# As noted above none of them are run in the arm.debug case.
-fuzz-natives-part4: SKIP
+  # This test dumps core for arm.debug, so no reason to expect it to work
+  # for NaCl. The other three fuzz-natives tests seem to run fine.
+  # As noted above none of them are run in the arm.debug case.
+  'fuzz-natives-part4': [SKIP],
 
-# NaCl builds have problems with this test since Pepper_28.
-# V8 Issue 2786
-math-exp-precision: SKIP
+  # NaCl builds have problems with this test since Pepper_28.
+  # V8 Issue 2786
+  'math-exp-precision': [SKIP],
 
-# Requires bigger stack size in the Genesis and if stack size is increased,
-# the test requires too much time to run.  However, the problem test covers
-# should be platform-independent.
-regress/regress-1132: SKIP
+  # Requires bigger stack size in the Genesis and if stack size is increased,
+  # the test requires too much time to run.  However, the problem test covers
+  # should be platform-independent.
+  'regress/regress-1132': [SKIP],
 
-# Poor performance for NaCl V8 causes an assertion failure for this test.
-regress/regress-165637: SKIP
+  # Poor performance for NaCl V8 causes an assertion failure for this test.
+  'regress/regress-165637': [SKIP],
 
-# Skip long running test that times out in debug mode and goes OOM on NaCl.
-regress/regress-crbug-160010: SKIP
+  # Skip long running test that times out in debug mode and goes OOM on NaCl.
+  'regress/regress-crbug-160010': [SKIP],
+}],  # 'arch == nacl_ia32 or arch == nacl_x64'
 
 ##############################################################################
-[ $deopt_fuzzer == True ]
-
-# Skip tests that are not suitable for deoptimization fuzzing.
-assert-opt-and-deopt: SKIP
-never-optimize: SKIP
-regress/regress-2185-2: SKIP
-harmony/object-observe: SKIP
-readonly: SKIP
-array-feedback: SKIP
-
-# Deopt every n garbage collections collides with the deopt every n times flag.
-regress/regress-2653: SKIP
+['deopt_fuzzer == True', {
+
+  # Skip tests that are not suitable for deoptimization fuzzing.
+  'assert-opt-and-deopt': [SKIP],
+  'never-optimize': [SKIP],
+  'regress/regress-2185-2': [SKIP],
+  'harmony/object-observe': [SKIP],
+  'readonly': [SKIP],
+  'array-feedback': [SKIP],
+
+  # Deopt every n garbage collections collides with deopt every n times.
+  'regress/regress-2653': [SKIP],
+}],  # 'deopt_fuzzer == True'
+]
index bf1578f..b27e991 100644 (file)
 # debugging.
 # --------------------------------------------------------------------
 
-prefix mozilla
-def FAIL_OK = FAIL, OKAY
-
-##################### NEEDS INVESTIGATION ##############
-
-# BUG(2893): These tests started to fail after i18n support was turned on. Need
-# to investigate why.
-ecma_3/Number/15.7.4.3-02: PASS || FAIL
-ecma_3/Date/15.9.5.5-02: PASS || FAIL
-
-##################### SKIPPED TESTS #####################
-
-# This test checks that we behave properly in an out-of-memory
-# situation.  The test fails in V8 with an exception and takes a long
-# time to do so.
-js1_5/Regress/regress-271716-n: SKIP
-
-# BUG(960): This test has an insane amount of output when it times out,
-# messing up ability to see other failures on the waterfall.
-js1_5/extensions/regress-342960: SKIP
-
-# This test uses a unitialized variable. A Bug has been filed:
-# https://bugzilla.mozilla.org/show_bug.cgi?id=575575
-js1_5/Array/regress-465980-02: SKIP
-
-# These tests are simply wrong (i.e., they do not test what they intend
-# to test).
-# In particular, these two compare numbers to NaN with != in the current
-# version of the Mozilla tests. This is *fixed* in a later version.
-# The tests should be re-enabled when switching to a new version.
-ecma_3/Date/15.9.3.2-1: SKIP
-js1_2/function/Number: SKIP
-
-# TODO(2018): Temporarily allow timeout in debug mode.
-js1_5/GC/regress-203278-2: PASS || (TIMEOUT || FAIL) if $mode == debug
-
-##################### SLOW TESTS #####################
-
-# This takes a long time to run (~100 seconds). It should only be run
-# by the really patient.
-js1_5/GC/regress-324278: SLOW
-
-# This takes a long time to run because our indexOf operation is
-# pretty slow - it causes a lot of GCs; see issue
-# #926379. We could consider marking this SKIP because it takes a
-# while to run to completion.
-js1_5/GC/regress-338653: SLOW
-
-# This test is designed to run until it runs out of memory. This takes
-# a very long time because it builds strings character by character
-# and compiles a lot of regular expressions. We could consider marking
-# this SKIP because it takes a while to run to completion.
-js1_5/GC/regress-346794: SLOW
-
-# Runs out of memory while trying to build huge string of 'x'
-# characters. This takes a long time to run (~32 seconds).
-js1_5/GC/regress-348532: SLOW
-
+[
+[ALWAYS, {
+  ##################### NEEDS INVESTIGATION ##############
+
+  # BUG(2893): These tests started to fail after i18n support was turned on.
+  # Need to investigate why.
+  'ecma_3/Number/15.7.4.3-02': [PASS, FAIL],
+  'ecma_3/Date/15.9.5.5-02': [PASS, FAIL],
+
+  ##################### SKIPPED TESTS #####################
+
+  # This test checks that we behave properly in an out-of-memory
+  # situation.  The test fails in V8 with an exception and takes a long
+  # time to do so.
+  'js1_5/Regress/regress-271716-n': [SKIP],
+
+  # BUG(960): This test has an insane amount of output when it times out,
+  # messing up ability to see other failures on the waterfall.
+  'js1_5/extensions/regress-342960': [SKIP],
+
+  # This test uses a unitialized variable. A Bug has been filed:
+  # https://bugzilla.mozilla.org/show_bug.cgi?id=575575
+  'js1_5/Array/regress-465980-02': [SKIP],
+
+  # These tests are simply wrong (i.e., they do not test what they intend
+  # to test).
+  # In particular, these two compare numbers to NaN with != in the current
+  # version of the Mozilla tests. This is *fixed* in a later version.
+  # The tests should be re-enabled when switching to a new version.
+  'ecma_3/Date/15.9.3.2-1': [SKIP],
+  'js1_2/function/Number': [SKIP],
+
+  # TODO(2018): Temporarily allow timeout in debug mode.
+  'js1_5/GC/regress-203278-2': [PASS, ['mode == debug', TIMEOUT, FAIL]],
+
+  ##################### SLOW TESTS #####################
+
+  # This takes a long time to run (~100 seconds). It should only be run
+  # by the really patient.
+  'js1_5/GC/regress-324278': [SLOW],
+
+  # This takes a long time to run because our indexOf operation is
+  # pretty slow - it causes a lot of GCs; see issue
+  # #926379. We could consider marking this SKIP because it takes a
+  # while to run to completion.
+  'js1_5/GC/regress-338653': [SLOW],
+
+  # This test is designed to run until it runs out of memory. This takes
+  # a very long time because it builds strings character by character
+  # and compiles a lot of regular expressions. We could consider marking
+  # this SKIP because it takes a while to run to completion.
+  'js1_5/GC/regress-346794': [SLOW],
+
+  # Runs out of memory while trying to build huge string of 'x'
+  # characters. This takes a long time to run (~32 seconds).
+  'js1_5/GC/regress-348532': [SLOW],
+
+
+  ##################### FLAKY TESTS #####################
+
+  # These tests time out in debug mode but pass in product mode
+  'js1_5/Regress/regress-360969-03': [PASS, ['mode == debug', TIMEOUT]],
+  'js1_5/Regress/regress-360969-04': [PASS, ['mode == debug', TIMEOUT]],
+  'js1_5/Regress/regress-360969-05': [PASS, ['mode == debug', TIMEOUT]],
+  'js1_5/Regress/regress-360969-06': [PASS, ['mode == debug', TIMEOUT]],
+  'js1_5/extensions/regress-365527': [PASS, ['mode == debug', TIMEOUT]],
 
-##################### FLAKY TESTS #####################
+  'js1_5/Regress/regress-280769-3': [PASS, ['mode == debug', FAIL]],
+  'js1_5/Regress/regress-203278-1': [PASS, ['mode == debug', FAIL]],
+  'js1_5/Regress/regress-244470': [PASS, ['mode == debug', FAIL]],
+  'ecma_3/RegExp/regress-209067': [PASS, ['mode == debug', FAIL]],
+  'js1_5/GC/regress-278725': [PASS, ['mode == debug', FAIL]],
+  # http://b/issue?id=1206983
+  'js1_5/Regress/regress-367561-03': [PASS, ['mode == debug', FAIL]],
+  'ecma/Date/15.9.5.10-2': [PASS, FAIL, ['mode == debug', TIMEOUT]],
 
-# These tests time out in debug mode but pass in product mode
-js1_5/Regress/regress-360969-03: PASS || TIMEOUT if $mode == debug
-js1_5/Regress/regress-360969-04: PASS || TIMEOUT if $mode == debug
-js1_5/Regress/regress-360969-05: PASS || TIMEOUT if $mode == debug
-js1_5/Regress/regress-360969-06: PASS || TIMEOUT if $mode == debug
-js1_5/extensions/regress-365527: PASS || TIMEOUT if $mode == debug
+  # These tests create two Date objects just after each other and
+  # expects them to match.  Sometimes this happens on the border
+  # between one second and the next.
+  'ecma/Date/15.9.2.1': [PASS, FAIL],
+  'ecma/Date/15.9.2.2-1': [PASS, FAIL],
+  'ecma/Date/15.9.2.2-2': [PASS, FAIL],
+  'ecma/Date/15.9.2.2-3': [PASS, FAIL],
+  'ecma/Date/15.9.2.2-4': [PASS, FAIL],
+  'ecma/Date/15.9.2.2-5': [PASS, FAIL],
+  'ecma/Date/15.9.2.2-6': [PASS, FAIL],
 
-js1_5/Regress/regress-280769-3: PASS || FAIL if $mode == debug
-js1_5/Regress/regress-203278-1: PASS || FAIL if $mode == debug
-js1_5/Regress/regress-244470: PASS || FAIL if $mode == debug
-ecma_3/RegExp/regress-209067: PASS || FAIL if $mode == debug
-js1_5/GC/regress-278725: PASS || FAIL if $mode == debug
-# http://b/issue?id=1206983
-js1_5/Regress/regress-367561-03: PASS || FAIL if $mode == debug
-ecma/Date/15.9.5.10-2: PASS || (FAIL || TIMEOUT if $mode == debug)
+  # 1026139: These date tests fail on arm and mips
+  'ecma/Date/15.9.5.29-1': [PASS, ['arch == arm or arch == mipsel', FAIL]],
+  'ecma/Date/15.9.5.28-1': [PASS, ['arch == arm or arch == mipsel', FAIL]],
 
-# These tests create two Date objects just after each other and
-# expects them to match.  Sometimes this happens on the border
-# between one second and the next.
-ecma/Date/15.9.2.1: PASS || FAIL
-ecma/Date/15.9.2.2-1: PASS || FAIL
-ecma/Date/15.9.2.2-2: PASS || FAIL
-ecma/Date/15.9.2.2-3: PASS || FAIL
-ecma/Date/15.9.2.2-4: PASS || FAIL
-ecma/Date/15.9.2.2-5: PASS || FAIL
-ecma/Date/15.9.2.2-6: PASS || FAIL
+  # 1050186: Arm/MIPS vm is broken; probably unrelated to dates
+  'ecma/Array/15.4.4.5-3': [PASS, ['arch == arm or arch == mipsel', FAIL]],
+  'ecma/Date/15.9.5.22-2': [PASS, ['arch == arm or arch == mipsel', FAIL]],
 
-# 1026139: These date tests fail on arm and mips
-ecma/Date/15.9.5.29-1: PASS || FAIL if ($arch == arm || $arch == mipsel)
-ecma/Date/15.9.5.28-1: PASS || FAIL if ($arch == arm || $arch == mipsel)
+  # Flaky test that fails due to what appears to be a bug in the test.
+  # Occurs depending on current time
+  'ecma/Date/15.9.5.8': [PASS, FAIL],
 
-# 1050186: Arm/MIPS vm is broken; probably unrelated to dates
-ecma/Array/15.4.4.5-3: PASS || FAIL if ($arch == arm || $arch == mipsel)
-ecma/Date/15.9.5.22-2: PASS || FAIL if ($arch == arm || $arch == mipsel)
+  # Severely brain-damaged test. Access to local variables must not
+  # be more than 2.5 times faster than access to global variables? WTF?
+  'js1_5/Regress/regress-169559': [PASS, FAIL],
 
-# Flaky test that fails due to what appears to be a bug in the test.
-# Occurs depending on current time
-ecma/Date/15.9.5.8: PASS || FAIL
 
-# Severely brain-damaged test. Access to local variables must not
-# be more than 2.5 times faster than access to global variables? WTF?
-js1_5/Regress/regress-169559: PASS || FAIL
+  # Test that rely on specific timezone (not working in Denmark).
+  'js1_5/Regress/regress-58116': [PASS, FAIL],
 
 
-# Test that rely on specific timezone (not working in Denmark).
-js1_5/Regress/regress-58116: PASS || FAIL
+  # Flaky random() test. Tests the distribution of calls to Math.random().
+  'js1_5/Regress/regress-211590': [PASS, FAIL],
 
 
-# Flaky random() test. Tests the distribution of calls to Math.random().
-js1_5/Regress/regress-211590: PASS || FAIL
+  # Flaky tests; expect BigO-order computations to yield 1, but the code
+  # cannot handle outliers. See bug #925864.
+  'ecma_3/RegExp/regress-311414': [PASS, FAIL],
+  'ecma_3/RegExp/regress-289669': [PASS, FAIL],
+  'js1_5/String/regress-314890': [PASS, FAIL],
+  'js1_5/String/regress-56940-01': [PASS, FAIL],
+  'js1_5/String/regress-56940-02': [PASS, FAIL],
+  'js1_5/String/regress-157334-01': [PASS, FAIL],
+  'js1_5/String/regress-322772': [PASS, FAIL],
+  'js1_5/Array/regress-99120-01': [PASS, FAIL],
+  'js1_5/Array/regress-99120-02': [PASS, FAIL],
+  'js1_5/Regress/regress-347306-01': [PASS, FAIL],
+  'js1_5/Regress/regress-416628': [PASS, FAIL, ['mode == debug', TIMEOUT]],
 
 
-# Flaky tests; expect BigO-order computations to yield 1, but the code
-# cannot handle outliers. See bug #925864.
-ecma_3/RegExp/regress-311414: PASS || FAIL
-ecma_3/RegExp/regress-289669: PASS || FAIL
-js1_5/String/regress-314890: PASS || FAIL
-js1_5/String/regress-56940-01: PASS || FAIL
-js1_5/String/regress-56940-02: PASS || FAIL
-js1_5/String/regress-157334-01: PASS || FAIL
-js1_5/String/regress-322772: PASS || FAIL
-js1_5/Array/regress-99120-01: PASS || FAIL
-js1_5/Array/regress-99120-02: PASS || FAIL
-js1_5/Regress/regress-347306-01: PASS || FAIL
-js1_5/Regress/regress-416628: PASS || FAIL || TIMEOUT if $mode == debug
+  # The following two tests assume that daylight savings time starts first
+  # Sunday in April. This is not true when executing the tests outside
+  # California! In Denmark the adjustment starts one week earlier.
+  # Tests based on shell that use dates in this gap are flaky.
+  'ecma/Date/15.9.5.10-1': [PASS, FAIL],
+  'ecma/Date/15.9.5.12-1': [PASS, FAIL],
+  'ecma/Date/15.9.5.14': [PASS, FAIL],
+  'ecma/Date/15.9.5.34-1': [PASS, FAIL],
 
 
-# The following two tests assume that daylight savings time starts first Sunday
-# in April. This is not true when executing the tests outside California!
-# In Denmark the adjustment starts one week earlier!.
-# Tests based on shell that use dates in this gap are flaky.
-ecma/Date/15.9.5.10-1: PASS || FAIL
-ecma/Date/15.9.5.12-1: PASS || FAIL
-ecma/Date/15.9.5.14: PASS || FAIL
-ecma/Date/15.9.5.34-1: PASS || FAIL
+  # These tests sometimes pass (in particular on Windows). They build up
+  # a lot of stuff on the stack, which normally causes a stack overflow,
+  # but sometimes it makes it through?
+  'js1_5/Regress/regress-98901': [PASS, FAIL],
 
 
-# These tests sometimes pass (in particular on Windows). They build up
-# a lot of stuff on the stack, which normally causes a stack overflow,
-# but sometimes it makes it through?
-js1_5/Regress/regress-98901: PASS || FAIL
+  # Tests that sorting arrays of ints is less than 3 times as fast
+  # as sorting arrays of strings.
+  'js1_5/extensions/regress-371636': [PASS, FAIL, ['mode == debug', TIMEOUT]],
 
 
-# Tests that sorting arrays of ints is less than 3 times as fast
-# as sorting arrays of strings.
-js1_5/extensions/regress-371636: PASS || FAIL || TIMEOUT if $mode == debug
+  # Tests depend on GC timings. Inherently flaky.
+  'js1_5/GC/regress-383269-01': [PASS, FAIL],
+  'js1_5/GC/regress-383269-02': [PASS, FAIL],
+  'js1_5/Regress/regress-404755': [PASS, FAIL],
 
 
-# Tests depend on GC timings. Inherently flaky.
-js1_5/GC/regress-383269-01: PASS || FAIL
-js1_5/GC/regress-383269-02: PASS || FAIL
-js1_5/Regress/regress-404755: PASS || FAIL
+  # Test that depends on timer resolution. Fails every now and then
+  # if we're unlucky enough to get a context switch at a bad time.
+  'js1_5/extensions/regress-363258': [PASS, FAIL],
 
 
-# Test that depends on timer resolution. Fails every now and then
-# if we're unlucky enough to get a context switch at a bad time.
-js1_5/extensions/regress-363258: PASS || FAIL
+  # Test that assumes specific runtime for a regexp, flaky in debug mode.
+  'ecma_3/RegExp/regress-85721': [PASS, ['mode == debug', FAIL]],
 
 
-# Test that assumes specific runtime for a regexp, flaky in debug mode.
-ecma_3/RegExp/regress-85721: PASS || FAIL if $mode == debug
+  # Test that assumes specific execution time, flaky in debug mode.
+  'js1_5/Array/regress-101964': [PASS, ['mode == debug', FAIL]],
 
 
-# Test that assumes specific execution time, flaky in debug mode.
-js1_5/Array/regress-101964: PASS || FAIL if $mode == debug
+  ##################### INCOMPATIBLE TESTS #####################
 
+  # This section is for tests that fail in both V8 and JSC.  Thus they
+  # have been determined to be incompatible between Mozilla and V8/JSC.
 
-##################### INCOMPATIBLE TESTS #####################
+  # toPrecision argument restricted to range 1..21 in JSC/V8 and ECMA-262
+  'js1_5/Regress/regress-452346': [FAIL_OK],
 
-# This section is for tests that fail in both V8 and JSC.  Thus they
-# have been determined to be incompatible between Mozilla and V8/JSC.
+  # Fail because it calls builtins as functions and do not expect the
+  # builtin to have undefined as the receiver.
+  'ecma/String/15.5.4.6-2': [FAIL_OK],
 
-# toPrecision argument restricted to range 1..21 in JSC/V8 and ECMA-262
-js1_5/Regress/regress-452346: FAIL_OK
+  # Fail because it expects String.prototype.split to distinguish whether
+  # separator was undefined or not passed at all.
+  'ecma/String/15.5.4.8-2': [FAIL_OK],
 
-# Fail because it calls builtins as functions and do not expect the
-# builtin to have undefined as the receiver.
-ecma/String/15.5.4.6-2: FAIL_OK
+  # Fail because of toLowerCase and toUpperCase conversion.
+  'ecma/String/15.5.4.11-2': [FAIL_OK],
+  'ecma/String/15.5.4.11-5': [FAIL_OK],
+  'ecma/String/15.5.4.12-1': [FAIL_OK],
+  'ecma/String/15.5.4.12-4': [FAIL_OK],
 
-# Fail because it expects String.prototype.split to distinguish whether
-# separator was undefined or not passed at all.
-ecma/String/15.5.4.8-2: FAIL_OK
+  # This test uses an older version of the unicode standard that fails
+  # us because we correctly convert the armenian small ligature ech-yiwn
+  # to the two upper-case characters ECH and YIWN, whereas the older
+  # unicode version converts it to itself.
+  'ecma/String/15.5.4.12-5': [FAIL_OK],
 
-# Fail because of toLowerCase and toUpperCase conversion.
-ecma/String/15.5.4.11-2: FAIL_OK
-ecma/String/15.5.4.11-5: FAIL_OK
-ecma/String/15.5.4.12-1: FAIL_OK
-ecma/String/15.5.4.12-4: FAIL_OK
+  # Creates a linked list of arrays until we run out of memory or timeout.
+  'js1_5/Regress/regress-312588': [SKIP],
 
-# This test uses an older version of the unicode standard that fails
-# us because we correctly convert the armenian small ligature ech-yiwn
-# to the two upper-case characters ECH and YIWN, whereas the older
-# unicode version converts it to itself.
-ecma/String/15.5.4.12-5: FAIL_OK
 
-# Creates a linked list of arrays until we run out of memory or timeout.
-js1_5/Regress/regress-312588: SKIP
+  # Runs out of memory because it compiles huge functions.
+  'js1_5/Function/regress-338001': [FAIL_OK],
+  'js1_5/Function/regress-338121-01': [FAIL_OK],
+  'js1_5/Function/regress-338121-02': [FAIL_OK],
+  'js1_5/Function/regress-338121-03': [FAIL_OK],
 
+  # Expectes 'prototype' property of functions to be enumerable.
+  'js1_5/Function/10.1.6-01': [FAIL_OK],
 
-# Runs out of memory because it compiles huge functions.
-js1_5/Function/regress-338001: FAIL_OK
-js1_5/Function/regress-338121-01: FAIL_OK
-js1_5/Function/regress-338121-02: FAIL_OK
-js1_5/Function/regress-338121-03: FAIL_OK
+  #:=== RegExp:===
+  # We don't match the syntax error message of Mozilla for invalid
+  # RegExp flags.
+  'ecma_3/RegExp/15.10.4.1-6': [FAIL_OK],
 
-# Expectes 'prototype' property of functions to be enumerable.
-js1_5/Function/10.1.6-01: FAIL_OK
+  # PCRE doesn't allow subpattern nesting deeper than 200, this tests
+  # depth 500.  JSC detects the case, and return null from the match,
+  # and passes this test (the test doesn't check for a correct return
+  # value).
+  'ecma_3/RegExp/regress-119909': [PASS, FAIL_OK],
 
-#:=== RegExp:===
-# We don't match the syntax error message of Mozilla for invalid
-# RegExp flags.
-ecma_3/RegExp/15.10.4.1-6: FAIL_OK
 
-# PCRE doesn't allow subpattern nesting deeper than 200, this tests
-# depth 500.  JSC detects the case, and return null from the match,
-# and passes this test (the test doesn't check for a correct return
-# value).
-ecma_3/RegExp/regress-119909: PASS || FAIL_OK
+  # Difference in the way capturing subpatterns work.  In JS, when the
+  # 'minimum repeat count' is reached, the empty string must not match.
+  # In this case, we are similar but not identical to JSC.  Hard to
+  # support the JS behavior with PCRE, so maybe emulate JSC?
+  'ecma_3/RegExp/regress-209919': [PASS, FAIL_OK],
+  'js1_5/extensions/regress-459606': [PASS, FAIL_OK],
 
 
-# Difference in the way capturing subpatterns work.  In JS, when the
-# 'minimum repeat count' is reached, the empty string must not match.
-# In this case, we are similar but not identical to JSC.  Hard to
-# support the JS behavior with PCRE, so maybe emulate JSC?
-ecma_3/RegExp/regress-209919: PASS || FAIL_OK
-js1_5/extensions/regress-459606: PASS || FAIL_OK
+  # PCRE's match limit is reached.  SpiderMonkey hangs on the first one,
+  # JSC returns true somehow.  Maybe they up the match limit?  There is
+  # an open V8 bug 676063 about this.
+  'ecma_3/RegExp/regress-330684': [TIMEOUT],
 
 
-# PCRE's match limit is reached.  SpiderMonkey hangs on the first one,
-# JSC returns true somehow.  Maybe they up the match limit?  There is
-# an open V8 bug 676063 about this.
-ecma_3/RegExp/regress-330684: TIMEOUT
+  # This test contains a regexp that runs exponentially long.  Spidermonkey
+  # standalone will hang, though apparently inside Firefox it will trigger a
+  # long-running-script timeout.  JSCRE passes by hitting the matchLimit and
+  # just pretending that an exhaustive search found no match.
+  'ecma_3/RegExp/regress-307456': [PASS, TIMEOUT],
 
 
-# This test contains a regexp that runs exponentially long.  Spidermonkey
-# standalone will hang, though apparently inside Firefox it will trigger a
-# long-running-script timeout.  JSCRE passes by hitting the matchLimit and
-# just pretending that an exhaustive search found no match.
-ecma_3/RegExp/regress-307456: PASS || TIMEOUT
+  # We do not detect overflow in bounds for back references and {}
+  # quantifiers.  Might fix by parsing numbers differently?
+  'js1_5/Regress/regress-230216-2': [FAIL_OK],
 
 
-# We do not detect overflow in bounds for back references and {}
-# quantifiers.  Might fix by parsing numbers differently?
-js1_5/Regress/regress-230216-2: FAIL_OK
+  # Regexp too long for PCRE.
+  'js1_5/Regress/regress-280769': [PASS, FAIL],
+  'js1_5/Regress/regress-280769-1': [PASS, FAIL],
+  'js1_5/Regress/regress-280769-2': [PASS, FAIL],
+  'js1_5/Regress/regress-280769-4': [PASS, FAIL],
+  'js1_5/Regress/regress-280769-5': [PASS, FAIL],
 
 
-# Regexp too long for PCRE.
-js1_5/Regress/regress-280769: PASS || FAIL
-js1_5/Regress/regress-280769-1: PASS || FAIL
-js1_5/Regress/regress-280769-2: PASS || FAIL
-js1_5/Regress/regress-280769-4: PASS || FAIL
-js1_5/Regress/regress-280769-5: PASS || FAIL
+  # We do not support static RegExp.multiline - should we?.
+  'js1_2/regexp/RegExp_multiline': [FAIL_OK],
+  'js1_2/regexp/RegExp_multiline_as_array': [FAIL_OK],
+  'js1_2/regexp/beginLine': [FAIL_OK],
+  'js1_2/regexp/endLine': [FAIL_OK],
 
+  # We no longer let calls to test and exec with no argument implicitly
+  # use the previous input.
+  'js1_2/regexp/RegExp_input': [FAIL_OK],
+  'js1_2/regexp/RegExp_input_as_array': [FAIL_OK],
 
-# We do not support static RegExp.multiline - should we?.
-js1_2/regexp/RegExp_multiline: FAIL_OK
-js1_2/regexp/RegExp_multiline_as_array: FAIL_OK
-js1_2/regexp/beginLine: FAIL_OK
-js1_2/regexp/endLine: FAIL_OK
 
-# We no longer let calls to test and exec with no argument implicitly
-# use the previous input.
-js1_2/regexp/RegExp_input: FAIL_OK
-js1_2/regexp/RegExp_input_as_array: FAIL_OK
+  # To be compatible with safari typeof a regexp yields 'function';
+  # in firefox it yields 'object'.
+  'js1_2/function/regexparg-1': [FAIL_OK],
 
 
-# To be compatible with safari typeof a regexp yields 'function';
-# in firefox it yields 'object'.
-js1_2/function/regexparg-1: FAIL_OK
+  # Date trouble?
+  'js1_5/Date/regress-301738-02': [FAIL_OK],
 
 
-# Date trouble?
-js1_5/Date/regress-301738-02: FAIL_OK
+  # This test fails for all browsers on in the CET timezone.
+  'ecma/Date/15.9.5.35-1': [PASS, FAIL_OK],
 
 
-# This test fails for all browsers on in the CET timezone.
-ecma/Date/15.9.5.35-1: PASS || FAIL_OK
+  # Spidermonkey allows stuff in parenthesis directly after the minutes
+  # in a date.  JSC does not, so we don't either.
+  'js1_5/Date/regress-309925-02': [FAIL_OK],
 
 
-# Spidermonkey allows stuff in parenthesis directly after the minutes
-# in a date.  JSC does not, so we don't either.
-js1_5/Date/regress-309925-02: FAIL_OK
+  # Print string after deleting array element?
+  'js1_5/Expressions/regress-96526-delelem': [FAIL_OK],
 
 
-# Print string after deleting array element?
-js1_5/Expressions/regress-96526-delelem: FAIL_OK
+  # Stack overflows should be InternalError: too much recursion?
+  'js1_5/Regress/regress-234389': [FAIL_OK],
 
 
-# Stack overflows should be InternalError: too much recursion?
-js1_5/Regress/regress-234389: FAIL_OK
+  # This may very well be a bogus test. I'm not sure yet.
+  'js1_5/Regress/regress-320119': [FAIL_OK],
 
 
-# This may very well be a bogus test. I'm not sure yet.
-js1_5/Regress/regress-320119: FAIL_OK
+  # No support for toSource().
+  'js1_5/Regress/regress-248444': [FAIL_OK],
+  'js1_5/Regress/regress-313967-01': [FAIL_OK],
+  'js1_5/Regress/regress-313967-02': [FAIL_OK],
 
+  # This fails because we don't have stack space for Function.prototype.apply
+  # with very large numbers of arguments.  The test uses 2^24 arguments.
+  'js1_5/Array/regress-350256-03': [FAIL_OK],
 
-# No support for toSource().
-js1_5/Regress/regress-248444: FAIL_OK
-js1_5/Regress/regress-313967-01: FAIL_OK
-js1_5/Regress/regress-313967-02: FAIL_OK
 
-# This fails because we don't have stack space for Function.prototype.apply
-# with very large numbers of arguments.  The test uses 2^24 arguments.
-js1_5/Array/regress-350256-03: FAIL_OK
+  # Extra arguments not handled properly in String.prototype.match
+  'js1_5/Regress/regress-179524': [FAIL_OK],
 
 
-# Extra arguments not handled properly in String.prototype.match
-js1_5/Regress/regress-179524: FAIL_OK
+  # Uncategorized failures. Please help categorize (or fix) these failures.
+  'js1_5/Regress/regress-172699': [FAIL_OK],
 
 
-# Uncategorized failures. Please help categorize (or fix) these failures.
-js1_5/Regress/regress-172699: FAIL_OK
+  # Assumes that the prototype of a function is enumerable. Non-ECMA,
+  # see section 15.3.3.1, page 86.
+  'ecma/GlobalObject/15.1.2.2-1': [FAIL_OK],
+  'ecma/GlobalObject/15.1.2.3-1': [FAIL_OK],
+  'ecma/GlobalObject/15.1.2.4': [FAIL_OK],
+  'ecma/GlobalObject/15.1.2.5-1': [FAIL_OK],
+  'ecma/GlobalObject/15.1.2.6': [FAIL_OK],
+  'ecma/GlobalObject/15.1.2.7': [FAIL_OK],
 
 
-# Assumes that the prototype of a function is enumerable. Non-ECMA,
-# see section 15.3.3.1, page 86.
-ecma/GlobalObject/15.1.2.2-1: FAIL_OK
-ecma/GlobalObject/15.1.2.3-1: FAIL_OK
-ecma/GlobalObject/15.1.2.4: FAIL_OK
-ecma/GlobalObject/15.1.2.5-1: FAIL_OK
-ecma/GlobalObject/15.1.2.6: FAIL_OK
-ecma/GlobalObject/15.1.2.7: FAIL_OK
+  # Leading zero no longer signal octal numbers (ECMA-262 Annex E 15.1.2.2).
+  'ecma/GlobalObject/15.1.2.2-2': [FAIL_OK],
 
 
-# Leading zero no longer signal octal numbers (ECMA-262 Annex E 15.1.2.2).
-ecma/GlobalObject/15.1.2.2-2: FAIL_OK
+  # Tests that rely on specific details of function decompilation or
+  # print strings for errors. Non-ECMA behavior.
+  'js1_2/function/tostring-2': [FAIL_OK],
+  'js1_2/Objects/toString-001': [FAIL_OK],
+  'js1_5/LexicalConventions/regress-469940': [FAIL_OK],
+  'js1_5/Exceptions/regress-332472': [FAIL_OK],
+  'js1_5/Regress/regress-173067': [FAIL_OK],
+  'js1_5/Regress/regress-355556': [FAIL_OK],
+  'js1_5/Regress/regress-328664': [FAIL_OK],
+  'js1_5/Regress/regress-252892': [FAIL_OK],
+  'js1_5/Regress/regress-352208': [FAIL_OK],
+  'ecma_3/Array/15.4.5.1-01': [FAIL_OK],
+  'ecma_3/Array/regress-387501': [FAIL_OK],
+  'ecma_3/LexicalConventions/7.9.1': [FAIL_OK],
+  'ecma_3/RegExp/regress-375711': [FAIL_OK],
+  'ecma_3/Unicode/regress-352044-01': [FAIL_OK],
+  'ecma_3/extensions/regress-274152': [FAIL_OK],
+  'js1_5/Regress/regress-372364': [FAIL_OK],
+  'js1_5/Regress/regress-420919': [FAIL_OK],
+  'js1_5/Regress/regress-422348': [FAIL_OK],
+  'js1_5/Regress/regress-410852': [FAIL_OK],
+  'ecma_3/RegExp/regress-375715-04': [FAIL_OK],
+  'js1_5/decompilation/regress-456964-01': [FAIL_OK],
+  'js1_5/decompilation/regress-437288-02': [FAIL_OK],
+  'js1_5/decompilation/regress-457824': [FAIL_OK],
+  'js1_5/decompilation/regress-460116-01': [FAIL_OK],
+  'js1_5/decompilation/regress-460116-02': [FAIL_OK],
+  'js1_5/decompilation/regress-460501': [FAIL_OK],
+  'js1_5/decompilation/regress-460116-03': [FAIL_OK],
+  'js1_5/decompilation/regress-461110': [FAIL_OK],
 
 
-# Tests that rely on specific details of function decompilation or
-# print strings for errors. Non-ECMA behavior.
-js1_2/function/tostring-2: FAIL_OK
-js1_2/Objects/toString-001: FAIL_OK
-js1_5/LexicalConventions/regress-469940: FAIL_OK
-js1_5/Exceptions/regress-332472: FAIL_OK
-js1_5/Regress/regress-173067: FAIL_OK
-js1_5/Regress/regress-355556: FAIL_OK
-js1_5/Regress/regress-328664: FAIL_OK
-js1_5/Regress/regress-252892: FAIL_OK
-js1_5/Regress/regress-352208: FAIL_OK
-ecma_3/Array/15.4.5.1-01: FAIL_OK
-ecma_3/Array/regress-387501: FAIL_OK
-ecma_3/LexicalConventions/7.9.1: FAIL_OK
-ecma_3/RegExp/regress-375711: FAIL_OK
-ecma_3/Unicode/regress-352044-01: FAIL_OK
-ecma_3/extensions/regress-274152: FAIL_OK
-js1_5/Regress/regress-372364: FAIL_OK
-js1_5/Regress/regress-420919: FAIL_OK
-js1_5/Regress/regress-422348: FAIL_OK
-js1_5/Regress/regress-410852: FAIL_OK
-ecma_3/RegExp/regress-375715-04: FAIL_OK
-js1_5/decompilation/regress-456964-01: FAIL_OK
-js1_5/decompilation/regress-437288-02: FAIL_OK
-js1_5/decompilation/regress-457824: FAIL_OK
-js1_5/decompilation/regress-460116-01: FAIL_OK
-js1_5/decompilation/regress-460116-02: FAIL_OK
-js1_5/decompilation/regress-460501: FAIL_OK
-js1_5/decompilation/regress-460116-03: FAIL_OK
-js1_5/decompilation/regress-461110: FAIL_OK
+  # Tests that use uneval.  Non-ECMA.
+  'js1_5/GC/regress-418128': [FAIL_OK],
+  'js1_5/extensions/regress-465276': [FAIL_OK],
+  'js1_5/Error/regress-465377': [FAIL_OK],
 
+  # Tests that use the watch method.  Non-ECMA.
+  'js1_5/extensions/regress-435345-01': [FAIL_OK],
+  'js1_5/extensions/regress-455413': [FAIL_OK],
 
-# Tests that use uneval.  Non-ECMA.
-js1_5/GC/regress-418128: FAIL_OK
-js1_5/extensions/regress-465276: FAIL_OK
-js1_5/Error/regress-465377: FAIL_OK
 
-# Tests that use the watch method.  Non-ECMA.
-js1_5/extensions/regress-435345-01: FAIL_OK
-js1_5/extensions/regress-455413: FAIL_OK
+  # Uses Mozilla-specific QName, XML, XMLList and Iterator.
+  'js1_5/Regress/regress-407323': [FAIL_OK],
+  'js1_5/Regress/regress-407957': [FAIL_OK],
 
 
-# Uses Mozilla-specific QName, XML, XMLList and Iterator.
-js1_5/Regress/regress-407323: FAIL_OK
-js1_5/Regress/regress-407957: FAIL_OK
+  # Relies on JavaScript 1.2 / 1.3 deprecated features.
+  'js1_2/function/String': [FAIL_OK],
+  'js1_2/operator/equality': [FAIL_OK],
+  'js1_2/version120/boolean-001': [FAIL_OK],
+  'js1_2/String/concat': [FAIL_OK],
+  'js1_2/function/Function_object': [FAIL_OK],
+  'js1_2/function/tostring-1': [FAIL_OK],
+  'js1_2/version120/regress-99663': [FAIL_OK],
+  'js1_2/regexp/RegExp_lastIndex': [FAIL_OK],
+  'js1_2/regexp/string_split': [FAIL_OK],
 
 
-# Relies on JavaScript 1.2 / 1.3 deprecated features.
-js1_2/function/String: FAIL_OK
-js1_2/operator/equality: FAIL_OK
-js1_2/version120/boolean-001: FAIL_OK
-js1_2/String/concat: FAIL_OK
-js1_2/function/Function_object: FAIL_OK
-js1_2/function/tostring-1: FAIL_OK
-js1_2/version120/regress-99663: FAIL_OK
-js1_2/regexp/RegExp_lastIndex: FAIL_OK
-js1_2/regexp/string_split: FAIL_OK
+  # RegExps are not callable.
+  'js1_2/regexp/simple_form': [FAIL_OK],
+  'js1_2/regexp/regress-6359': [FAIL_OK],
+  'js1_2/regexp/regress-9141': [FAIL_OK],
+  'js1_5/Regress/regress-224956': [FAIL_OK],
+  'js1_5/Regress/regress-325925': [FAIL_OK],
+  'ecma_2/RegExp/regress-001': [FAIL_OK],
 
+  # We do not check for bad surrogate pairs when quoting strings.
+  'js1_5/Regress/regress-315974': [FAIL_OK],
 
-# RegExps are not callable.
-js1_2/regexp/simple_form: FAIL_OK
-js1_2/regexp/regress-6359: FAIL_OK
-js1_2/regexp/regress-9141: FAIL_OK
-js1_5/Regress/regress-224956: FAIL_OK
-js1_5/Regress/regress-325925: FAIL_OK
-ecma_2/RegExp/regress-001: FAIL_OK
 
-# We do not check for bad surrogate pairs when quoting strings.
-js1_5/Regress/regress-315974: FAIL_OK
+  # Use unsupported "watch".
+  'js1_5/Regress/regress-213482': [FAIL_OK],
+  'js1_5/Regress/regress-240577': [FAIL_OK],
+  'js1_5/Regress/regress-355344': [FAIL_OK],
+  'js1_5/Object/regress-362872-01': [FAIL_OK],
+  'js1_5/Object/regress-362872-02': [FAIL_OK],
+  'js1_5/Regress/regress-361467': [FAIL_OK],
+  'js1_5/Regress/regress-385393-06': [FAIL_OK],
+  'js1_5/Regress/regress-506567': [FAIL_OK],
 
 
-# Use unsupported "watch".
-js1_5/Regress/regress-213482: FAIL_OK
-js1_5/Regress/regress-240577: FAIL_OK
-js1_5/Regress/regress-355344: FAIL_OK
-js1_5/Object/regress-362872-01: FAIL_OK
-js1_5/Object/regress-362872-02: FAIL_OK
-js1_5/Regress/regress-361467: FAIL_OK
-js1_5/Regress/regress-385393-06: FAIL_OK
-js1_5/Regress/regress-506567: FAIL_OK
+  # Use special Mozilla getter/setter syntax
+  'js1_5/Regress/regress-354924': [FAIL_OK],
+  'js1_5/Regress/regress-355341': [FAIL_OK],
+  'js1_5/GC/regress-316885-01': [FAIL_OK],
+  'js1_5/GetSet/getset-002': [FAIL_OK],
+  'js1_5/GetSet/regress-353264': [FAIL_OK],
+  'js1_5/Regress/regress-361617': [FAIL_OK],
+  'js1_5/Regress/regress-362583': [FAIL_OK],
+  'js1_5/extensions/regress-356378': [FAIL_OK],
+  'js1_5/extensions/regress-452178': [FAIL_OK],
 
 
-# Use special Mozilla getter/setter syntax
-js1_5/Regress/regress-354924: FAIL_OK
-js1_5/Regress/regress-355341: FAIL_OK
-js1_5/GC/regress-316885-01: FAIL_OK
-js1_5/GetSet/getset-002: FAIL_OK
-js1_5/GetSet/regress-353264: FAIL_OK
-js1_5/Regress/regress-361617: FAIL_OK
-js1_5/Regress/regress-362583: FAIL_OK
-js1_5/extensions/regress-356378: FAIL_OK
-js1_5/extensions/regress-452178: FAIL_OK
+  # Requires Mozilla-specific strict mode or options() function.
+  'ecma_3/Object/8.6.1-01': [FAIL_OK],
+  'js1_5/Exceptions/regress-315147': [FAIL_OK],
+  'js1_5/Regress/regress-106244': [FAIL_OK],
+  'js1_5/Regress/regress-317533': [FAIL_OK],
+  'js1_5/Regress/regress-323314-1': [FAIL_OK],
+  'js1_5/Regress/regress-352197': [FAIL_OK],
 
 
-# Requires Mozilla-specific strict mode or options() function.
-ecma_3/Object/8.6.1-01: FAIL_OK
-js1_5/Exceptions/regress-315147: FAIL_OK
-js1_5/Regress/regress-106244: FAIL_OK
-js1_5/Regress/regress-317533: FAIL_OK
-js1_5/Regress/regress-323314-1: FAIL_OK
-js1_5/Regress/regress-352197: FAIL_OK
+  # Equivalent to assert(false).
+  'ecma_2/RegExp/exec-001': [FAIL_OK],
+  'ecma_2/String/replace-001': [FAIL_OK],
 
 
-# Equivalent to assert(false).
-ecma_2/RegExp/exec-001: FAIL_OK
-ecma_2/String/replace-001: FAIL_OK
+  # We do not strip unicode format control characters. This is really
+  # required for working with non-latin character sets.  We match JSC
+  # and IE here.  Firefox matches the spec (section 7.1).
+  'ecma_3/Unicode/uc-001': [FAIL_OK],
 
 
-# We do not strip unicode format control characters. This is really
-# required for working with non-latin character sets.  We match JSC
-# and IE here.  Firefox matches the spec (section 7.1).
-ecma_3/Unicode/uc-001: FAIL_OK
+  # A non-breaking space doesn't match \s in a regular expression.  This
+  # behaviour matches JSC.  All the VMs have different behaviours in which
+  # characters match \s so we do the same as JSC until they change.
+  'ecma_3/Unicode/uc-002': [PASS, FAIL_OK],
 
 
-# A non-breaking space doesn't match \s in a regular expression.  This behaviour
-# matches JSC.  All the VMs have different behaviours in which characters match
-# \s so we do the same as JSC until they change.
-ecma_3/Unicode/uc-002: PASS || FAIL_OK
+  # String.prototype.split on empty strings always returns an array
+  # with one element (as specified in ECMA-262).
+  'js1_2/Array/array_split_1': [FAIL_OK],
 
 
-# String.prototype.split on empty strings always returns an array
-# with one element (as specified in ECMA-262).
-js1_2/Array/array_split_1: FAIL_OK
+  # The concat() method is defined in Array.prototype; not Array.
+  'js1_5/Array/regress-313153': [FAIL_OK],
 
+  # The join() method is defined on Array.prototype; not Array.
+  'js1_5/Array/regress-474529': [FAIL_OK],
 
-# The concat() method is defined in Array.prototype; not Array.
-js1_5/Array/regress-313153: FAIL_OK
+  # The lastIndexOf() method is defined on Array.prototype, not Array.
+  'ecma_3/Array/15.5.4.8-01': [FAIL_OK],
 
-# The join() method is defined on Array.prototype; not Array.
-js1_5/Array/regress-474529: FAIL_OK
+  # Properties fileName, and lineNumber of Error instances are
+  # not supported. Mozilla specific extension.
+  'js1_5/Exceptions/errstack-001': [FAIL_OK],
+  'js1_5/Exceptions/regress-257751': [FAIL_OK],
+  'js1_5/Regress/regress-119719': [FAIL_OK],
+  'js1_5/Regress/regress-167328': [FAIL_OK],
+  'js1_5/Regress/regress-243869': [FAIL_OK],
 
-# The lastIndexOf() method is defined on Array.prototype, not Array.
-ecma_3/Array/15.5.4.8-01: FAIL_OK
 
-# Properties fileName, and lineNumber of Error instances are
-# not supported. Mozilla specific extension.
-js1_5/Exceptions/errstack-001: FAIL_OK
-js1_5/Exceptions/regress-257751: FAIL_OK
-js1_5/Regress/regress-119719: FAIL_OK
-js1_5/Regress/regress-167328: FAIL_OK
-js1_5/Regress/regress-243869: FAIL_OK
+  # Unsupported import/export and <xml> literals. Mozilla extensions.
+  'js1_5/Regress/regress-249211': [FAIL_OK],
+  'js1_5/Regress/regress-309242': [FAIL_OK],
+  'js1_5/Regress/regress-350692': [FAIL_OK],
+  'js1_5/extensions/regress-421621': [FAIL_OK],
+  'js1_5/extensions/regress-432075': [FAIL_OK],
 
 
-# Unsupported import/export and <xml> literals. Mozilla extensions.
-js1_5/Regress/regress-249211: FAIL_OK
-js1_5/Regress/regress-309242: FAIL_OK
-js1_5/Regress/regress-350692: FAIL_OK
-js1_5/extensions/regress-421621: FAIL_OK
-js1_5/extensions/regress-432075: FAIL_OK
+  # The length of Error functions is 1 not 3.
+  'js1_5/Exceptions/regress-123002': [FAIL_OK],
 
 
-# The length of Error functions is 1 not 3.
-js1_5/Exceptions/regress-123002: FAIL_OK
+  # Reserved keywords as function names, etc is not supported.
+  'js1_5/LexicalConventions/regress-343675': [FAIL_OK],
 
 
-# Reserved keywords as function names, etc is not supported.
-js1_5/LexicalConventions/regress-343675: FAIL_OK
+  # Tests if future reserved keywords of ECMA-262, edition 3 emit warnings. We
+  # implement the edition 5 behaviour and fail on use of edition 5 future
+  # reserved keywords as identifiers.
+  'js1_5/Regress/regress-240317': [FAIL_OK],
 
 
-# Tests if future reserved keywords of ECMA-262, edition 3 emit warnings. We
-# implement the edition 5 behaviour and fail on use of edition 5 future reserved
-# keywords as identifiers.
-js1_5/Regress/regress-240317: FAIL_OK
+  # Unsupported list comprehensions: [ ... for ... ] and for each.
+  'js1_5/Regress/regress-352009': [FAIL_OK],
+  'js1_5/Regress/regress-349648': [FAIL_OK],
 
 
-# Unsupported list comprehensions: [ ... for ... ] and for each.
-js1_5/Regress/regress-352009: FAIL_OK
-js1_5/Regress/regress-349648: FAIL_OK
+  # Expects top level arguments (passed on command line?) to be
+  # the empty string?
+  'js1_5/Regress/regress-336100': [FAIL_OK],
 
 
-# Expects top level arguments (passed on command line?) to be
-# the empty string?
-js1_5/Regress/regress-336100: FAIL_OK
+  # Regular expression test failures due to PCRE. We match JSC (ie, perl)
+  # behavior and not the ECMA spec.
+  'ecma_3/RegExp/perlstress-001': [PASS, FAIL_OK],
+  'ecma_3/RegExp/regress-334158': [PASS, FAIL],
 
+  # This test fails due to http://code.google.com/p/v8/issues/detail?id=187
+  # Failure to clear captures when a lookahead is unwound.
+  'ecma_3/RegExp/15.10.2-1': [PASS, FAIL_OK],
 
-# Regular expression test failures due to PCRE. We match JSC (ie, perl)
-# behavior and not the ECMA spec.
-ecma_3/RegExp/perlstress-001: PASS || FAIL_OK
-ecma_3/RegExp/regress-334158: PASS || FAIL
+  # This test requires a failure if we try to compile a function with more
+  # than 65536 arguments.  This seems to be a Mozilla restriction.
+  'js1_5/Regress/regress-290575': [PASS, FAIL_OK],
 
-# This test fails due to http://code.google.com/p/v8/issues/detail?id=187
-# Failure to clear captures when a lookahead is unwound.
-ecma_3/RegExp/15.10.2-1: PASS || FAIL_OK
 
-# This test requires a failure if we try to compile a function with more
-# than 65536 arguments.  This seems to be a Mozilla restriction.
-js1_5/Regress/regress-290575: PASS || FAIL_OK
+  # Fails because of the way function declarations are
+  # handled in V8/JSC. V8 follows IE behavior and introduce
+  # all nested function declarations when entering the
+  # surrounding function, whereas Spidermonkey declares
+  # them dynamically when the statement is executed.
+  'ecma_3/Function/scope-001': [FAIL_OK],
+  'ecma_3/FunExpr/fe-001': [FAIL_OK],
+  'js1_5/Scope/regress-184107': [FAIL_OK],
 
 
-# Fails because of the way function declarations are
-# handled in V8/JSC. V8 follows IE behavior and introduce
-# all nested function declarations when entering the
-# surrounding function, whereas Spidermonkey declares
-# them dynamically when the statement is executed.
-ecma_3/Function/scope-001: FAIL_OK
-ecma_3/FunExpr/fe-001: FAIL_OK
-js1_5/Scope/regress-184107: FAIL_OK
+  # Function is deletable in V8 and JSC.
+  'js1_5/Regress/regress-352604': [FAIL_OK],
 
 
-# Function is deletable in V8 and JSC.
-js1_5/Regress/regress-352604: FAIL_OK
+  # Cannot call strings as functions. Expects not to crash.
+  'js1_5/Regress/regress-417893': [FAIL_OK],
 
 
-# Cannot call strings as functions. Expects not to crash.
-js1_5/Regress/regress-417893: FAIL_OK
+  # Unsupported use of "[]" as function parameter. We match JSC.
+  'js1_5/Regress/regress-416737-01': [FAIL_OK],
+  'js1_5/Regress/regress-416737-02': [FAIL_OK],
 
 
-# Unsupported use of "[]" as function parameter. We match JSC.
-js1_5/Regress/regress-416737-01: FAIL_OK
-js1_5/Regress/regress-416737-02: FAIL_OK
+  # Illegal escape-sequences in string literals. Has already been fixed
+  # by most engines (i.e. V8, JSC, Opera and FF).
+  'ecma/Array/15.4.5.1-1': [FAIL_OK],
+  'ecma/LexicalConventions/7.7.4': [FAIL_OK],
+  'ecma_2/RegExp/hex-001': [FAIL_OK],
+  'js1_2/regexp/hexadecimal': [FAIL_OK],
 
 
-# Illegal escape-sequences in string literals. Has already been fixed
-# by most engines (i.e. V8, JSC, Opera and FF).
-ecma/Array/15.4.5.1-1: FAIL_OK
-ecma/LexicalConventions/7.7.4: FAIL_OK
-ecma_2/RegExp/hex-001: FAIL_OK
-js1_2/regexp/hexadecimal: FAIL_OK
-
-
-# The source field of RegExp objects is properly escaped. We match JSC.
-ecma_2/RegExp/constructor-001: FAIL_OK
-ecma_2/RegExp/function-001: FAIL_OK
-ecma_2/RegExp/properties-001: FAIL_OK
-
-
-# Negative hexadecimal literals are parsed as NaN. This test is outdated.
-ecma/TypeConversion/9.3.1-3: FAIL_OK
-
-
-##################### FAILING TESTS #####################
-
-# This section is for tests that fail in V8 and pass in JSC.
-# Tests that fail in both V8 and JSC belong in the FAIL_OK
-# category.
-
-# This fails because we don't handle Function.prototype.apply with very large
-# numbers of arguments (depending on max stack size).  350256-02 needs more than
-# 4Mbytes of stack space.
-js1_5/Array/regress-350256-02: FAIL
-
-
-# This test seems designed to fail (it produces a 700Mbyte string).
-# We fail on out of memory.  The important thing is not to crash.
-js1_5/Regress/regress-303213: FAIL || TIMEOUT if $mode == debug
-
-# This test fails since we now throw in String.prototype.match when apply
-# is given null or undefined as this argument (and so does firefox nightly).
-js1_5/Regress/regress-295052: FAIL
-
-# Bug 1202592: New ecma_3/String/15.5.4.11 is failing.
-ecma_3/String/15.5.4.11: FAIL
-
-# Bug 1202597: New js1_5/Expressions/regress-394673 is failing.
-# Marked as: Will not fix. V8 throws an acceptable RangeError.
-js1_5/Expressions/regress-394673: FAIL
-
-
-# Bug 762: http://code.google.com/p/v8/issues/detail?id=762
-# We do not correctly handle assignments within "with"
-ecma_3/Statements/12.10-01: FAIL
-
-# We do not throw an exception when a const is redeclared.
-# (We only fail section 1 of the test.)
-js1_5/Regress/regress-103602: FAIL
-
-##################### MOZILLA EXTENSION TESTS #####################
-
-ecma/extensions/15.1.2.1-1: FAIL_OK
-ecma_3/extensions/regress-385393-03: FAIL_OK
-ecma_3/extensions/7.9.1: FAIL_OK
-js1_5/extensions/catchguard-001: FAIL_OK
-js1_5/extensions/catchguard-002: FAIL_OK
-js1_5/extensions/catchguard-003: FAIL_OK
-js1_5/extensions/getset-001: FAIL_OK
-js1_5/extensions/getset-003: FAIL_OK
-js1_5/extensions/no-such-method: FAIL_OK
-js1_5/extensions/regress-104077: FAIL_OK
-js1_5/extensions/regress-226078: FAIL_OK
-js1_5/extensions/regress-303277: FAIL_OK
-js1_5/extensions/regress-304897: FAIL_OK
-js1_5/extensions/regress-306738: FAIL_OK
-js1_5/extensions/regress-311161: FAIL_OK
-js1_5/extensions/regress-311583: FAIL_OK
-js1_5/extensions/regress-311792-01: FAIL_OK
-js1_5/extensions/regress-312278: FAIL_OK
-js1_5/extensions/regress-313630: FAIL_OK
-js1_5/extensions/regress-313763: FAIL_OK
-js1_5/extensions/regress-313803: FAIL_OK
-js1_5/extensions/regress-314874: FAIL_OK
-js1_5/extensions/regress-322957: FAIL_OK
-js1_5/extensions/regress-328556: FAIL_OK
-js1_5/extensions/regress-333541: FAIL_OK
-js1_5/extensions/regress-335700: FAIL_OK
-js1_5/extensions/regress-336409-1: FAIL_OK
-js1_5/extensions/regress-336409-2: FAIL_OK
-js1_5/extensions/regress-336410-2: FAIL_OK
-js1_5/extensions/regress-341956-01: FAIL_OK
-js1_5/extensions/regress-345967: FAIL_OK
-js1_5/extensions/regress-346494-01: FAIL_OK
-js1_5/extensions/regress-346494: FAIL_OK
-js1_5/extensions/regress-347306-02: FAIL_OK
-js1_5/extensions/regress-348986: FAIL_OK
-js1_5/extensions/regress-349616: FAIL_OK
-js1_5/extensions/regress-350312-02: FAIL_OK
-js1_5/extensions/regress-350312-03: FAIL_OK
-js1_5/extensions/regress-350531: FAIL_OK
-js1_5/extensions/regress-351102-01: FAIL_OK
-js1_5/extensions/regress-351102-02: FAIL_OK
-js1_5/extensions/regress-351102-06: FAIL_OK
-js1_5/extensions/regress-351973: FAIL_OK
-js1_5/extensions/regress-352060: FAIL_OK
-js1_5/extensions/regress-352094: FAIL_OK
-js1_5/extensions/regress-352261: FAIL_OK
-js1_5/extensions/regress-352281: FAIL_OK
-js1_5/extensions/regress-352455: FAIL_OK
-js1_5/extensions/regress-352604: FAIL_OK
-js1_5/extensions/regress-353214: FAIL_OK
-js1_5/extensions/regress-355339: FAIL_OK
-js1_5/extensions/regress-355497: FAIL_OK
-js1_5/extensions/regress-355622: FAIL_OK
-js1_5/extensions/regress-355736: FAIL_OK
-js1_5/extensions/regress-356085: FAIL_OK
-js1_5/extensions/regress-356106: FAIL_OK
-js1_5/extensions/regress-358594-01: FAIL_OK
-js1_5/extensions/regress-358594-02: FAIL_OK
-js1_5/extensions/regress-358594-03: FAIL_OK
-js1_5/extensions/regress-358594-04: FAIL_OK
-js1_5/extensions/regress-358594-05: FAIL_OK
-js1_5/extensions/regress-358594-06: FAIL_OK
-js1_5/extensions/regress-361346: FAIL_OK
-js1_5/extensions/regress-361360: FAIL_OK
-js1_5/extensions/regress-361558: FAIL_OK
-js1_5/extensions/regress-361571: FAIL_OK
-js1_5/extensions/regress-361856: FAIL_OK
-js1_5/extensions/regress-361964: FAIL_OK
-js1_5/extensions/regress-363988: FAIL_OK
-js1_5/extensions/regress-365869: FAIL_OK
-js1_5/extensions/regress-367630: FAIL_OK
-js1_5/extensions/regress-367923: FAIL_OK
-js1_5/extensions/regress-368859: FAIL_OK
-js1_5/extensions/regress-369696-01: FAIL_OK
-js1_5/extensions/regress-369696-02: FAIL_OK
-js1_5/extensions/regress-369696-03: FAIL_OK
-js1_5/extensions/regress-374589: FAIL_OK
-js1_5/extensions/regress-375801: FAIL_OK
-js1_5/extensions/regress-376052: FAIL_OK
-js1_5/extensions/regress-379523: FAIL_OK
-js1_5/extensions/regress-380581: FAIL_OK
-js1_5/extensions/regress-380831: FAIL_OK
-js1_5/extensions/regress-381205: FAIL_OK
-js1_5/extensions/regress-381211: FAIL_OK
-js1_5/extensions/regress-381304: FAIL_OK
-js1_5/extensions/regress-382509: FAIL_OK
-js1_5/extensions/regress-383965: FAIL_OK
-js1_5/extensions/regress-384680: FAIL_OK
-js1_5/extensions/regress-385393-09: FAIL_OK
-js1_5/extensions/regress-407501: FAIL_OK
-js1_5/extensions/regress-418730: FAIL_OK
-js1_5/extensions/regress-420612: FAIL_OK
-js1_5/extensions/regress-420869-01: FAIL_OK
-js1_5/extensions/regress-424257: FAIL_OK
-js1_5/extensions/regress-424683-01: FAIL_OK
-js1_5/extensions/regress-429739: FAIL_OK
-js1_5/extensions/regress-454142: FAIL_OK
-js1_5/extensions/regress-465145: FAIL_OK
-js1_5/extensions/regress-469625: FAIL_OK
-js1_5/extensions/regress-472787: FAIL_OK
-js1_5/extensions/regress-44009: FAIL_OK
-js1_5/extensions/regress-50447-1: FAIL_OK
-js1_5/extensions/regress-50447: FAIL_OK
-js1_5/extensions/regress-90596-001: FAIL_OK
-js1_5/extensions/regress-90596-002: FAIL_OK
-js1_5/extensions/regress-96284-001: FAIL_OK
-js1_5/extensions/regress-96284-002: FAIL_OK
-js1_5/extensions/toLocaleFormat-01: FAIL_OK
-js1_5/extensions/toLocaleFormat-02: FAIL_OK
-
-js1_5/extensions/regress-330569: TIMEOUT
-js1_5/extensions/regress-351448: TIMEOUT
-# In the 64-bit version, this test takes longer to run out of memory
-# than it does in the 32-bit version when attempting to generate a huge
-# error message in debug mode.
-js1_5/extensions/regress-336410-1: FAIL_OK || TIMEOUT if ($mode == debug && $arch == x64)
-
-##################### DECOMPILATION TESTS #####################
-
-# We don't really about the outcome of running the
-# decompilation tests as long as they don't crash or
-# timeout.
-
-js1_5/decompilation/regress-344120: PASS || FAIL
-js1_5/decompilation/regress-346892: PASS || FAIL
-js1_5/decompilation/regress-346902: PASS || FAIL
-js1_5/decompilation/regress-346904: PASS || FAIL
-js1_5/decompilation/regress-346915: PASS || FAIL
-js1_5/decompilation/regress-349484: PASS || FAIL
-js1_5/decompilation/regress-349489: PASS || FAIL
-js1_5/decompilation/regress-349491: PASS || FAIL
-js1_5/decompilation/regress-349596: PASS || FAIL
-js1_5/decompilation/regress-349650: PASS || FAIL
-js1_5/decompilation/regress-349663: PASS || FAIL
-js1_5/decompilation/regress-350242: PASS || FAIL
-js1_5/decompilation/regress-350263: PASS || FAIL
-js1_5/decompilation/regress-350271: PASS || FAIL
-js1_5/decompilation/regress-350666: PASS || FAIL
-js1_5/decompilation/regress-350670: PASS || FAIL
-js1_5/decompilation/regress-351104: PASS || FAIL
-js1_5/decompilation/regress-351219: PASS || FAIL
-js1_5/decompilation/regress-351336: PASS || FAIL
-js1_5/decompilation/regress-351597: PASS || FAIL
-js1_5/decompilation/regress-351625: PASS || FAIL
-js1_5/decompilation/regress-351626: PASS || FAIL
-js1_5/decompilation/regress-351693: PASS || FAIL
-js1_5/decompilation/regress-351705: PASS || FAIL
-js1_5/decompilation/regress-351793: PASS || FAIL
-js1_5/decompilation/regress-352013: PASS || FAIL
-js1_5/decompilation/regress-352022: PASS || FAIL
-js1_5/decompilation/regress-352073: PASS || FAIL
-js1_5/decompilation/regress-352202: PASS || FAIL
-js1_5/decompilation/regress-352312: PASS || FAIL
-js1_5/decompilation/regress-352360: PASS || FAIL
-js1_5/decompilation/regress-352375: PASS || FAIL
-js1_5/decompilation/regress-352453: PASS || FAIL
-js1_5/decompilation/regress-352649: PASS || FAIL
-js1_5/decompilation/regress-352873-01: PASS || FAIL
-js1_5/decompilation/regress-352873-02: PASS || FAIL
-js1_5/decompilation/regress-353000: PASS || FAIL
-js1_5/decompilation/regress-353120: PASS || FAIL
-js1_5/decompilation/regress-353146: PASS || FAIL
-js1_5/decompilation/regress-354878: PASS || FAIL
-js1_5/decompilation/regress-354910: PASS || FAIL
-js1_5/decompilation/regress-355992: PASS || FAIL
-js1_5/decompilation/regress-356083: PASS || FAIL
-js1_5/decompilation/regress-356248: PASS || FAIL
-js1_5/decompilation/regress-371692: PASS || FAIL
-js1_5/decompilation/regress-373678: PASS || FAIL
-js1_5/decompilation/regress-375639: PASS || FAIL
-js1_5/decompilation/regress-375882: PASS || FAIL
-js1_5/decompilation/regress-376564: PASS || FAIL
-js1_5/decompilation/regress-383721: PASS || FAIL
-js1_5/decompilation/regress-406555: PASS || FAIL
-js1_5/decompilation/regress-460870: PASS || FAIL
-
-
-[ $arch == arm ]
-
-# BUG(3251229): Times out when running new crankshaft test script.
-ecma_3/RegExp/regress-311414: SKIP
-ecma/Date/15.9.5.8: SKIP
-ecma/Date/15.9.5.10-2: SKIP
-ecma/Date/15.9.5.11-2: SKIP
-ecma/Date/15.9.5.12-2: SKIP
-js1_5/Array/regress-99120-02: SKIP
-js1_5/extensions/regress-371636: SKIP
-js1_5/Regress/regress-203278-1: SKIP
-js1_5/Regress/regress-404755:  SKIP
-js1_5/Regress/regress-451322: SKIP
-
-
-# BUG(1040): Allow this test to timeout.
-js1_5/GC/regress-203278-2: PASS || TIMEOUT
-
-
-[ $arch == mipsel ]
-
-# BUG(3251229): Times out when running new crankshaft test script.
-ecma_3/RegExp/regress-311414: SKIP
-ecma/Date/15.9.5.8: SKIP
-ecma/Date/15.9.5.10-2: SKIP
-ecma/Date/15.9.5.11-2: SKIP
-ecma/Date/15.9.5.12-2: SKIP
-js1_5/Array/regress-99120-02: SKIP
-js1_5/extensions/regress-371636: SKIP
-js1_5/Regress/regress-203278-1: SKIP
-js1_5/Regress/regress-404755:  SKIP
-js1_5/Regress/regress-451322: SKIP
-
-
-# BUG(1040): Allow this test to timeout.
-js1_5/GC/regress-203278-2: PASS || TIMEOUT
+  # The source field of RegExp objects is properly escaped. We match JSC.
+  'ecma_2/RegExp/constructor-001': [FAIL_OK],
+  'ecma_2/RegExp/function-001': [FAIL_OK],
+  'ecma_2/RegExp/properties-001': [FAIL_OK],
+
+
+  # Negative hexadecimal literals are parsed as NaN. This test is outdated.
+  'ecma/TypeConversion/9.3.1-3': [FAIL_OK],
+
+
+  ##################### FAILING TESTS #####################
+
+  # This section is for tests that fail in V8 and pass in JSC.
+  # Tests that fail in both V8 and JSC belong in the FAIL_OK
+  # category.
+
+  # This fails because we don't handle Function.prototype.apply with very large
+  # numbers of arguments (depending on max stack size).  350256-02 needs more
+  # than 4Mbytes of stack space.
+  'js1_5/Array/regress-350256-02': [FAIL],
+
+
+  # This test seems designed to fail (it produces a 700Mbyte string).
+  # We fail on out of memory.  The important thing is not to crash.
+  'js1_5/Regress/regress-303213': [FAIL, ['mode == debug', TIMEOUT]],
+
+  # This test fails since we now throw in String.prototype.match when apply
+  # is given null or undefined as this argument (and so does firefox nightly).
+  'js1_5/Regress/regress-295052': [FAIL],
+
+  # Bug 1202592: New ecma_3/String/15.5.4.11 is failing.
+  'ecma_3/String/15.5.4.11': [FAIL],
+
+  # Bug 1202597: New js1_5/Expressions/regress-394673 is failing.
+  # Marked as: Will not fix. V8 throws an acceptable RangeError.
+  'js1_5/Expressions/regress-394673': [FAIL],
+
+
+  # Bug 762: http://code.google.com/p/v8/issues/detail?id=762
+  # We do not correctly handle assignments within "with"
+  'ecma_3/Statements/12.10-01': [FAIL],
+
+  # We do not throw an exception when a const is redeclared.
+  # (We only fail section 1 of the test.)
+  'js1_5/Regress/regress-103602': [FAIL],
+
+  ##################### MOZILLA EXTENSION TESTS #####################
+
+  'ecma/extensions/15.1.2.1-1': [FAIL_OK],
+  'ecma_3/extensions/regress-385393-03': [FAIL_OK],
+  'ecma_3/extensions/7.9.1': [FAIL_OK],
+  'js1_5/extensions/catchguard-001': [FAIL_OK],
+  'js1_5/extensions/catchguard-002': [FAIL_OK],
+  'js1_5/extensions/catchguard-003': [FAIL_OK],
+  'js1_5/extensions/getset-001': [FAIL_OK],
+  'js1_5/extensions/getset-003': [FAIL_OK],
+  'js1_5/extensions/no-such-method': [FAIL_OK],
+  'js1_5/extensions/regress-104077': [FAIL_OK],
+  'js1_5/extensions/regress-226078': [FAIL_OK],
+  'js1_5/extensions/regress-303277': [FAIL_OK],
+  'js1_5/extensions/regress-304897': [FAIL_OK],
+  'js1_5/extensions/regress-306738': [FAIL_OK],
+  'js1_5/extensions/regress-311161': [FAIL_OK],
+  'js1_5/extensions/regress-311583': [FAIL_OK],
+  'js1_5/extensions/regress-311792-01': [FAIL_OK],
+  'js1_5/extensions/regress-312278': [FAIL_OK],
+  'js1_5/extensions/regress-313630': [FAIL_OK],
+  'js1_5/extensions/regress-313763': [FAIL_OK],
+  'js1_5/extensions/regress-313803': [FAIL_OK],
+  'js1_5/extensions/regress-314874': [FAIL_OK],
+  'js1_5/extensions/regress-322957': [FAIL_OK],
+  'js1_5/extensions/regress-328556': [FAIL_OK],
+  'js1_5/extensions/regress-333541': [FAIL_OK],
+  'js1_5/extensions/regress-335700': [FAIL_OK],
+  'js1_5/extensions/regress-336409-1': [FAIL_OK],
+  'js1_5/extensions/regress-336409-2': [FAIL_OK],
+  'js1_5/extensions/regress-336410-2': [FAIL_OK],
+  'js1_5/extensions/regress-341956-01': [FAIL_OK],
+  'js1_5/extensions/regress-345967': [FAIL_OK],
+  'js1_5/extensions/regress-346494-01': [FAIL_OK],
+  'js1_5/extensions/regress-346494': [FAIL_OK],
+  'js1_5/extensions/regress-347306-02': [FAIL_OK],
+  'js1_5/extensions/regress-348986': [FAIL_OK],
+  'js1_5/extensions/regress-349616': [FAIL_OK],
+  'js1_5/extensions/regress-350312-02': [FAIL_OK],
+  'js1_5/extensions/regress-350312-03': [FAIL_OK],
+  'js1_5/extensions/regress-350531': [FAIL_OK],
+  'js1_5/extensions/regress-351102-01': [FAIL_OK],
+  'js1_5/extensions/regress-351102-02': [FAIL_OK],
+  'js1_5/extensions/regress-351102-06': [FAIL_OK],
+  'js1_5/extensions/regress-351973': [FAIL_OK],
+  'js1_5/extensions/regress-352060': [FAIL_OK],
+  'js1_5/extensions/regress-352094': [FAIL_OK],
+  'js1_5/extensions/regress-352261': [FAIL_OK],
+  'js1_5/extensions/regress-352281': [FAIL_OK],
+  'js1_5/extensions/regress-352455': [FAIL_OK],
+  'js1_5/extensions/regress-352604': [FAIL_OK],
+  'js1_5/extensions/regress-353214': [FAIL_OK],
+  'js1_5/extensions/regress-355339': [FAIL_OK],
+  'js1_5/extensions/regress-355497': [FAIL_OK],
+  'js1_5/extensions/regress-355622': [FAIL_OK],
+  'js1_5/extensions/regress-355736': [FAIL_OK],
+  'js1_5/extensions/regress-356085': [FAIL_OK],
+  'js1_5/extensions/regress-356106': [FAIL_OK],
+  'js1_5/extensions/regress-358594-01': [FAIL_OK],
+  'js1_5/extensions/regress-358594-02': [FAIL_OK],
+  'js1_5/extensions/regress-358594-03': [FAIL_OK],
+  'js1_5/extensions/regress-358594-04': [FAIL_OK],
+  'js1_5/extensions/regress-358594-05': [FAIL_OK],
+  'js1_5/extensions/regress-358594-06': [FAIL_OK],
+  'js1_5/extensions/regress-361346': [FAIL_OK],
+  'js1_5/extensions/regress-361360': [FAIL_OK],
+  'js1_5/extensions/regress-361558': [FAIL_OK],
+  'js1_5/extensions/regress-361571': [FAIL_OK],
+  'js1_5/extensions/regress-361856': [FAIL_OK],
+  'js1_5/extensions/regress-361964': [FAIL_OK],
+  'js1_5/extensions/regress-363988': [FAIL_OK],
+  'js1_5/extensions/regress-365869': [FAIL_OK],
+  'js1_5/extensions/regress-367630': [FAIL_OK],
+  'js1_5/extensions/regress-367923': [FAIL_OK],
+  'js1_5/extensions/regress-368859': [FAIL_OK],
+  'js1_5/extensions/regress-369696-01': [FAIL_OK],
+  'js1_5/extensions/regress-369696-02': [FAIL_OK],
+  'js1_5/extensions/regress-369696-03': [FAIL_OK],
+  'js1_5/extensions/regress-374589': [FAIL_OK],
+  'js1_5/extensions/regress-375801': [FAIL_OK],
+  'js1_5/extensions/regress-376052': [FAIL_OK],
+  'js1_5/extensions/regress-379523': [FAIL_OK],
+  'js1_5/extensions/regress-380581': [FAIL_OK],
+  'js1_5/extensions/regress-380831': [FAIL_OK],
+  'js1_5/extensions/regress-381205': [FAIL_OK],
+  'js1_5/extensions/regress-381211': [FAIL_OK],
+  'js1_5/extensions/regress-381304': [FAIL_OK],
+  'js1_5/extensions/regress-382509': [FAIL_OK],
+  'js1_5/extensions/regress-383965': [FAIL_OK],
+  'js1_5/extensions/regress-384680': [FAIL_OK],
+  'js1_5/extensions/regress-385393-09': [FAIL_OK],
+  'js1_5/extensions/regress-407501': [FAIL_OK],
+  'js1_5/extensions/regress-418730': [FAIL_OK],
+  'js1_5/extensions/regress-420612': [FAIL_OK],
+  'js1_5/extensions/regress-420869-01': [FAIL_OK],
+  'js1_5/extensions/regress-424257': [FAIL_OK],
+  'js1_5/extensions/regress-424683-01': [FAIL_OK],
+  'js1_5/extensions/regress-429739': [FAIL_OK],
+  'js1_5/extensions/regress-454142': [FAIL_OK],
+  'js1_5/extensions/regress-465145': [FAIL_OK],
+  'js1_5/extensions/regress-469625': [FAIL_OK],
+  'js1_5/extensions/regress-472787': [FAIL_OK],
+  'js1_5/extensions/regress-44009': [FAIL_OK],
+  'js1_5/extensions/regress-50447-1': [FAIL_OK],
+  'js1_5/extensions/regress-50447': [FAIL_OK],
+  'js1_5/extensions/regress-90596-001': [FAIL_OK],
+  'js1_5/extensions/regress-90596-002': [FAIL_OK],
+  'js1_5/extensions/regress-96284-001': [FAIL_OK],
+  'js1_5/extensions/regress-96284-002': [FAIL_OK],
+  'js1_5/extensions/toLocaleFormat-01': [FAIL_OK],
+  'js1_5/extensions/toLocaleFormat-02': [FAIL_OK],
+
+  'js1_5/extensions/regress-330569': [TIMEOUT],
+  'js1_5/extensions/regress-351448': [TIMEOUT],
+  # In the 64-bit version, this test takes longer to run out of memory
+  # than it does in the 32-bit version when attempting to generate a huge
+  # error message in debug mode.
+  'js1_5/extensions/regress-336410-1': [FAIL_OK, ['mode == debug and arch == x64', TIMEOUT]],
+
+  ##################### DECOMPILATION TESTS #####################
+
+  # We don't really about the outcome of running the
+  # decompilation tests as long as they don't crash or
+  # timeout.
+
+  'js1_5/decompilation/regress-344120': [PASS, FAIL],
+  'js1_5/decompilation/regress-346892': [PASS, FAIL],
+  'js1_5/decompilation/regress-346902': [PASS, FAIL],
+  'js1_5/decompilation/regress-346904': [PASS, FAIL],
+  'js1_5/decompilation/regress-346915': [PASS, FAIL],
+  'js1_5/decompilation/regress-349484': [PASS, FAIL],
+  'js1_5/decompilation/regress-349489': [PASS, FAIL],
+  'js1_5/decompilation/regress-349491': [PASS, FAIL],
+  'js1_5/decompilation/regress-349596': [PASS, FAIL],
+  'js1_5/decompilation/regress-349650': [PASS, FAIL],
+  'js1_5/decompilation/regress-349663': [PASS, FAIL],
+  'js1_5/decompilation/regress-350242': [PASS, FAIL],
+  'js1_5/decompilation/regress-350263': [PASS, FAIL],
+  'js1_5/decompilation/regress-350271': [PASS, FAIL],
+  'js1_5/decompilation/regress-350666': [PASS, FAIL],
+  'js1_5/decompilation/regress-350670': [PASS, FAIL],
+  'js1_5/decompilation/regress-351104': [PASS, FAIL],
+  'js1_5/decompilation/regress-351219': [PASS, FAIL],
+  'js1_5/decompilation/regress-351336': [PASS, FAIL],
+  'js1_5/decompilation/regress-351597': [PASS, FAIL],
+  'js1_5/decompilation/regress-351625': [PASS, FAIL],
+  'js1_5/decompilation/regress-351626': [PASS, FAIL],
+  'js1_5/decompilation/regress-351693': [PASS, FAIL],
+  'js1_5/decompilation/regress-351705': [PASS, FAIL],
+  'js1_5/decompilation/regress-351793': [PASS, FAIL],
+  'js1_5/decompilation/regress-352013': [PASS, FAIL],
+  'js1_5/decompilation/regress-352022': [PASS, FAIL],
+  'js1_5/decompilation/regress-352073': [PASS, FAIL],
+  'js1_5/decompilation/regress-352202': [PASS, FAIL],
+  'js1_5/decompilation/regress-352312': [PASS, FAIL],
+  'js1_5/decompilation/regress-352360': [PASS, FAIL],
+  'js1_5/decompilation/regress-352375': [PASS, FAIL],
+  'js1_5/decompilation/regress-352453': [PASS, FAIL],
+  'js1_5/decompilation/regress-352649': [PASS, FAIL],
+  'js1_5/decompilation/regress-352873-01': [PASS, FAIL],
+  'js1_5/decompilation/regress-352873-02': [PASS, FAIL],
+  'js1_5/decompilation/regress-353000': [PASS, FAIL],
+  'js1_5/decompilation/regress-353120': [PASS, FAIL],
+  'js1_5/decompilation/regress-353146': [PASS, FAIL],
+  'js1_5/decompilation/regress-354878': [PASS, FAIL],
+  'js1_5/decompilation/regress-354910': [PASS, FAIL],
+  'js1_5/decompilation/regress-355992': [PASS, FAIL],
+  'js1_5/decompilation/regress-356083': [PASS, FAIL],
+  'js1_5/decompilation/regress-356248': [PASS, FAIL],
+  'js1_5/decompilation/regress-371692': [PASS, FAIL],
+  'js1_5/decompilation/regress-373678': [PASS, FAIL],
+  'js1_5/decompilation/regress-375639': [PASS, FAIL],
+  'js1_5/decompilation/regress-375882': [PASS, FAIL],
+  'js1_5/decompilation/regress-376564': [PASS, FAIL],
+  'js1_5/decompilation/regress-383721': [PASS, FAIL],
+  'js1_5/decompilation/regress-406555': [PASS, FAIL],
+  'js1_5/decompilation/regress-460870': [PASS, FAIL],
+}],  # ALWAYS
+
+
+['arch == arm', {
+
+  # BUG(3251229): Times out when running new crankshaft test script.
+  'ecma_3/RegExp/regress-311414': [SKIP],
+  'ecma/Date/15.9.5.8': [SKIP],
+  'ecma/Date/15.9.5.10-2': [SKIP],
+  'ecma/Date/15.9.5.11-2': [SKIP],
+  'ecma/Date/15.9.5.12-2': [SKIP],
+  'js1_5/Array/regress-99120-02': [SKIP],
+  'js1_5/extensions/regress-371636': [SKIP],
+  'js1_5/Regress/regress-203278-1': [SKIP],
+  'js1_5/Regress/regress-404755': [SKIP],
+  'js1_5/Regress/regress-451322': [SKIP],
+
+
+  # BUG(1040): Allow this test to timeout.
+  'js1_5/GC/regress-203278-2': [PASS, TIMEOUT],
+}],  # 'arch == arm'
+
+
+['arch == mipsel', {
+
+  # BUG(3251229): Times out when running new crankshaft test script.
+  'ecma_3/RegExp/regress-311414': [SKIP],
+  'ecma/Date/15.9.5.8': [SKIP],
+  'ecma/Date/15.9.5.10-2': [SKIP],
+  'ecma/Date/15.9.5.11-2': [SKIP],
+  'ecma/Date/15.9.5.12-2': [SKIP],
+  'js1_5/Array/regress-99120-02': [SKIP],
+  'js1_5/extensions/regress-371636': [SKIP],
+  'js1_5/Regress/regress-203278-1': [SKIP],
+  'js1_5/Regress/regress-404755': [SKIP],
+  'js1_5/Regress/regress-451322': [SKIP],
+
+
+  # BUG(1040): Allow this test to timeout.
+  'js1_5/GC/regress-203278-2': [PASS, TIMEOUT],
+}],  # 'arch == mipsel'
+]
index 40c5caf..e66251b 100644 (file)
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-prefix preparser
+[
+[ALWAYS, {
+  # We don't parse RegExps at scanning time, so we can't fail on octal
+  # escapes (we need to parse to distinguish octal escapes from valid
+  # back-references).
+  'strict-octal-regexp': [FAIL],
+}],  # ALWAYS
 
-# We don't parse RegExps at scanning time, so we can't fail on octal
-# escapes (we need to parse to distinguish octal escapes from valid
-# back-references).
-strict-octal-regexp: FAIL
-
-[ $arch == android_arm || $arch == android_ia32 ]
-# Remove this once the issue above is fixed. Android test runner does not
-# handle "FAIL" test expectation correctly.
-strict-octal-regexp: SKIP
+['arch == android_arm or arch == android_ia32', {
+  # Remove this once the issue above is fixed. Android test runner does not
+  # handle "FAIL" test expectation correctly.
+  'strict-octal-regexp': [SKIP],
+}],  # 'arch == android_arm or arch == android_ia32'
+]
index 2f4b77f..e546266 100644 (file)
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-prefix test262
-def FAIL_OK = FAIL, OKAY
-
-############################### BUGS ###################################
-
-# Sequencing of getter side effects on receiver and argument properties
-# is wrong. The receiver callback should be called before any arguments
-# are evaluated.
-# V8 Bug: http://code.google.com/p/v8/issues/detail?id=691
-11.2.3-3_3: FAIL
-
-15.5.4.9_CE: SKIP if $no_i18n
-
-######################## 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.5_11_g_ii_2: FAIL
-9.2.6_2: FAIL
-10.1.1_a: FAIL
-10.1.1_19_c: PASS || FAIL
-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.2_TRP: 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
-
-##################### DELIBERATE INCOMPATIBILITIES #####################
-
-# This tests precision of Math functions.  The implementation for those
-# trigonometric functions are platform/compiler dependent.  Furthermore, the
-# expectation values by far deviates from the actual result given by an
-# arbitrary-precision calculator, making those tests partly bogus.
-S15.8.2.8_A6: PASS || FAIL_OK   # Math.exp (less precise with --fast-math)
-S15.8.2.16_A7: PASS || FAIL_OK  # Math.sin
-S15.8.2.18_A7: PASS || FAIL_OK  # Math.tan
-
-# 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
-
-############################ INVALID TESTS #############################
-
-# The reference value calculated by Test262 is incorrect if you run these 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
-
-############################ SKIPPED TESTS #############################
-
-# These tests take a looong time to run in debug mode.
-S15.1.3.1_A2.5_T1: PASS, SKIP if $mode == debug
-S15.1.3.2_A2.5_T1: PASS, SKIP if $mode == debug
-
-[ $arch == arm || $arch == mipsel ]
-
-# TODO(mstarzinger): Causes stack overflow on simulators due to eager
-# compilation of parenthesized function literals. Needs investigation.
-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
+[
+[ALWAYS, {
+  ############################### BUGS ###################################
+
+  # Sequencing of getter side effects on receiver and argument properties
+  # is wrong. The receiver callback should be called before any arguments
+  # are evaluated.
+  # V8 Bug: http://code.google.com/p/v8/issues/detail?id=691
+  '11.2.3-3_3': [FAIL],
+
+  '15.5.4.9_CE': [['no_i18n', SKIP]],
+
+  ######################## 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.5_11_g_ii_2': [FAIL],
+  '9.2.6_2': [FAIL],
+  '10.1.1_a': [FAIL],
+  '10.1.1_19_c': [PASS, FAIL],
+  '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.2_TRP': [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],
+
+  ##################### DELIBERATE INCOMPATIBILITIES #####################
+
+  # This tests precision of Math functions.  The implementation for those
+  # trigonometric functions are platform/compiler dependent.  Furthermore, the
+  # expectation values by far deviates from the actual result given by an
+  # arbitrary-precision calculator, making those tests partly bogus.
+  'S15.8.2.8_A6': [PASS, FAIL_OK],  # Math.exp (less precise with --fast-math)
+  'S15.8.2.16_A7': [PASS, FAIL_OK],  # Math.sin
+  'S15.8.2.18_A7': [PASS, FAIL_OK],  # Math.tan
+
+  # 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],
+
+  ############################ INVALID TESTS #############################
+
+  # The reference value calculated by Test262 is incorrect if you run these
+  # 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],
+
+  ############################ 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]],
+}],  # ALWAYS
+
+['arch == arm or arch == mipsel', {
+
+  # TODO(mstarzinger): Causes stack overflow on simulators due to eager
+  # compilation of parenthesized function literals. Needs investigation.
+  '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],
+}],  # 'arch == arm or arch == mipsel'
+]
index 4aaf8a9..eba1be3 100644 (file)
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
-# Too slow in debug mode.
-dfg-int-overflow-in-loop: PASS, SKIP if $mode == debug
-dfg-double-vote-fuzz: PASS, SKIP if $mode == debug
-reentrant-caching: PASS, SKIP if $mode == debug
-sort-large-array: PASS, SKIP if $mode == debug
-
-##############################################################################
-[ $deopt_fuzzer == True ]
+[
+['mode == debug', {
+  # Too slow in debug mode.
+  'dfg-int-overflow-in-loop': [SKIP],
+  'dfg-double-vote-fuzz': [SKIP],
+  'reentrant-caching': [SKIP],
+  'sort-large-array': [SKIP],
+}],  # 'mode == debug'
+]
diff --git a/tools/testrunner/local/old_statusfile.py b/tools/testrunner/local/old_statusfile.py
deleted file mode 100644 (file)
index d634e3e..0000000
+++ /dev/null
@@ -1,462 +0,0 @@
-# Copyright 2012 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
-# met:
-#
-#     * Redistributions of source code must retain the above copyright
-#       notice, this list of conditions and the following disclaimer.
-#     * Redistributions in binary form must reproduce the above
-#       copyright notice, this list of conditions and the following
-#       disclaimer in the documentation and/or other materials provided
-#       with the distribution.
-#     * Neither the name of Google Inc. nor the names of its
-#       contributors may be used to endorse or promote products derived
-#       from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-
-import cStringIO
-import re
-
-# These outcomes can occur in a TestCase's outcomes list:
-SKIP = 'SKIP'
-FAIL = 'FAIL'
-PASS = 'PASS'
-OKAY = 'OKAY'
-TIMEOUT = 'TIMEOUT'
-CRASH = 'CRASH'
-SLOW = 'SLOW'
-FLAKY = 'FLAKY'
-# These are just for the status files and are mapped below in DEFS:
-FAIL_OK = 'FAIL_OK'
-PASS_OR_FAIL = 'PASS_OR_FAIL'
-
-KEYWORDS = {SKIP: SKIP,
-            FAIL: FAIL,
-            PASS: PASS,
-            OKAY: OKAY,
-            TIMEOUT: TIMEOUT,
-            CRASH: CRASH,
-            SLOW: SLOW,
-            FLAKY: FLAKY,
-            FAIL_OK: FAIL_OK,
-            PASS_OR_FAIL: PASS_OR_FAIL}
-
-class Expression(object):
-  pass
-
-
-class Constant(Expression):
-
-  def __init__(self, value):
-    self.value = value
-
-  def Evaluate(self, env, defs):
-    return self.value
-
-
-class Variable(Expression):
-
-  def __init__(self, name):
-    self.name = name
-
-  def GetOutcomes(self, env, defs):
-    if self.name in env: return set([env[self.name]])
-    else: return set([])
-
-  def Evaluate(self, env, defs):
-    return env[self.name]
-
-  def __str__(self):
-    return self.name
-
-  def string(self, logical):
-    return self.__str__()
-
-
-class Outcome(Expression):
-
-  def __init__(self, name):
-    self.name = name
-
-  def GetOutcomes(self, env, defs):
-    if self.name in defs:
-      return defs[self.name].GetOutcomes(env, defs)
-    else:
-      return set([self.name])
-
-  def __str__(self):
-    if self.name in KEYWORDS:
-      return "%s" % KEYWORDS[self.name]
-    return "'%s'" % self.name
-
-  def string(self, logical):
-    if logical:
-      return "%s" % self.name
-    return self.__str__()
-
-
-class Operation(Expression):
-
-  def __init__(self, left, op, right):
-    self.left = left
-    self.op = op
-    self.right = right
-
-  def Evaluate(self, env, defs):
-    if self.op == '||' or self.op == ',':
-      return self.left.Evaluate(env, defs) or self.right.Evaluate(env, defs)
-    elif self.op == 'if':
-      return False
-    elif self.op == '==':
-      return not self.left.GetOutcomes(env, defs).isdisjoint(self.right.GetOutcomes(env, defs))
-    elif self.op == '!=':
-      return self.left.GetOutcomes(env, defs).isdisjoint(self.right.GetOutcomes(env, defs))
-    else:
-      assert self.op == '&&'
-      return self.left.Evaluate(env, defs) and self.right.Evaluate(env, defs)
-
-  def GetOutcomes(self, env, defs):
-    if self.op == '||' or self.op == ',':
-      return self.left.GetOutcomes(env, defs) | self.right.GetOutcomes(env, defs)
-    elif self.op == 'if':
-      if self.right.Evaluate(env, defs): return self.left.GetOutcomes(env, defs)
-      else: return set([])
-    else:
-      assert self.op == '&&'
-      return self.left.GetOutcomes(env, defs) & self.right.GetOutcomes(env, defs)
-
-  def __str__(self):
-    return self.string(False)
-
-  def string(self, logical=False):
-    if self.op == 'if':
-      return "['%s', %s]" % (self.right.string(True), self.left.string(logical))
-    elif self.op == "||" or self.op == ",":
-      if logical:
-        return "%s or %s" % (self.left.string(True), self.right.string(True))
-      else:
-        return "%s, %s" % (self.left, self.right)
-    elif self.op == "&&":
-      return "%s and %s" % (self.left.string(True), self.right.string(True))
-    return "%s %s %s" % (self.left.string(logical), self.op,
-                         self.right.string(logical))
-
-
-def IsAlpha(string):
-  for char in string:
-    if not (char.isalpha() or char.isdigit() or char == '_'):
-      return False
-  return True
-
-
-class Tokenizer(object):
-  """A simple string tokenizer that chops expressions into variables,
-  parens and operators"""
-
-  def __init__(self, expr):
-    self.index = 0
-    self.expr = expr
-    self.length = len(expr)
-    self.tokens = None
-
-  def Current(self, length=1):
-    if not self.HasMore(length): return ""
-    return self.expr[self.index:self.index + length]
-
-  def HasMore(self, length=1):
-    return self.index < self.length + (length - 1)
-
-  def Advance(self, count=1):
-    self.index = self.index + count
-
-  def AddToken(self, token):
-    self.tokens.append(token)
-
-  def SkipSpaces(self):
-    while self.HasMore() and self.Current().isspace():
-      self.Advance()
-
-  def Tokenize(self):
-    self.tokens = [ ]
-    while self.HasMore():
-      self.SkipSpaces()
-      if not self.HasMore():
-        return None
-      if self.Current() == '(':
-        self.AddToken('(')
-        self.Advance()
-      elif self.Current() == ')':
-        self.AddToken(')')
-        self.Advance()
-      elif self.Current() == '$':
-        self.AddToken('$')
-        self.Advance()
-      elif self.Current() == ',':
-        self.AddToken(',')
-        self.Advance()
-      elif IsAlpha(self.Current()):
-        buf = ""
-        while self.HasMore() and IsAlpha(self.Current()):
-          buf += self.Current()
-          self.Advance()
-        self.AddToken(buf)
-      elif self.Current(2) == '&&':
-        self.AddToken('&&')
-        self.Advance(2)
-      elif self.Current(2) == '||':
-        self.AddToken('||')
-        self.Advance(2)
-      elif self.Current(2) == '==':
-        self.AddToken('==')
-        self.Advance(2)
-      elif self.Current(2) == '!=':
-        self.AddToken('!=')
-        self.Advance(2)
-      else:
-        return None
-    return self.tokens
-
-
-class Scanner(object):
-  """A simple scanner that can serve out tokens from a given list"""
-
-  def __init__(self, tokens):
-    self.tokens = tokens
-    self.length = len(tokens)
-    self.index = 0
-
-  def HasMore(self):
-    return self.index < self.length
-
-  def Current(self):
-    return self.tokens[self.index]
-
-  def Advance(self):
-    self.index = self.index + 1
-
-
-def ParseAtomicExpression(scan):
-  if scan.Current() == "true":
-    scan.Advance()
-    return Constant(True)
-  elif scan.Current() == "false":
-    scan.Advance()
-    return Constant(False)
-  elif IsAlpha(scan.Current()):
-    name = scan.Current()
-    scan.Advance()
-    return Outcome(name)
-  elif scan.Current() == '$':
-    scan.Advance()
-    if not IsAlpha(scan.Current()):
-      return None
-    name = scan.Current()
-    scan.Advance()
-    return Variable(name.lower())
-  elif scan.Current() == '(':
-    scan.Advance()
-    result = ParseLogicalExpression(scan)
-    if (not result) or (scan.Current() != ')'):
-      return None
-    scan.Advance()
-    return result
-  else:
-    return None
-
-
-BINARIES = ['==', '!=']
-def ParseOperatorExpression(scan):
-  left = ParseAtomicExpression(scan)
-  if not left: return None
-  while scan.HasMore() and (scan.Current() in BINARIES):
-    op = scan.Current()
-    scan.Advance()
-    right = ParseOperatorExpression(scan)
-    if not right:
-      return None
-    left = Operation(left, op, right)
-  return left
-
-
-def ParseConditionalExpression(scan):
-  left = ParseOperatorExpression(scan)
-  if not left: return None
-  while scan.HasMore() and (scan.Current() == 'if'):
-    scan.Advance()
-    right = ParseOperatorExpression(scan)
-    if not right:
-      return None
-    left = Operation(left, 'if', right)
-  return left
-
-
-LOGICALS = ["&&", "||", ","]
-def ParseLogicalExpression(scan):
-  left = ParseConditionalExpression(scan)
-  if not left: return None
-  while scan.HasMore() and (scan.Current() in LOGICALS):
-    op = scan.Current()
-    scan.Advance()
-    right = ParseConditionalExpression(scan)
-    if not right:
-      return None
-    left = Operation(left, op, right)
-  return left
-
-
-def ParseCondition(expr):
-  """Parses a logical expression into an Expression object"""
-  tokens = Tokenizer(expr).Tokenize()
-  if not tokens:
-    print "Malformed expression: '%s'" % expr
-    return None
-  scan = Scanner(tokens)
-  ast = ParseLogicalExpression(scan)
-  if not ast:
-    print "Malformed expression: '%s'" % expr
-    return None
-  if scan.HasMore():
-    print "Malformed expression: '%s'" % expr
-    return None
-  return ast
-
-
-class Section(object):
-  """A section of the configuration file.  Sections are enabled or
-  disabled prior to running the tests, based on their conditions"""
-
-  def __init__(self, condition):
-    self.condition = condition
-    self.rules = [ ]
-
-  def AddRule(self, rule):
-    self.rules.append(rule)
-
-
-class Rule(object):
-  """A single rule that specifies the expected outcome for a single
-  test."""
-
-  def __init__(self, raw_path, path, value):
-    self.raw_path = raw_path
-    self.path = path
-    self.value = value
-
-  def GetOutcomes(self, env, defs):
-    return self.value.GetOutcomes(env, defs)
-
-  def Contains(self, path):
-    if len(self.path) > len(path):
-      return False
-    for i in xrange(len(self.path)):
-      if not self.path[i].match(path[i]):
-        return False
-    return True
-
-
-HEADER_PATTERN = re.compile(r'\[([^]]+)\]')
-RULE_PATTERN = re.compile(r'\s*([^: ]*)\s*:(.*)')
-DEF_PATTERN = re.compile(r'^def\s*(\w+)\s*=(.*)$')
-PREFIX_PATTERN = re.compile(r'^\s*prefix\s+([\w\_\.\-\/]+)$')
-
-
-class ConvertNotation(object):
-  def __init__(self, path):
-    self.path = path
-    self.indent = ""
-    self.comment = []
-    self.init = False
-    self.section = False
-    self.out = cStringIO.StringIO()
-
-  def OpenGlobal(self):
-    if self.init: return
-    self.WriteComment()
-    print >> self.out, "["
-    self.init = True
-
-  def CloseGlobal(self):
-    if not self.init: self.OpenGlobal()
-    print >> self.out, "]"
-    self.init = False
-
-  def OpenSection(self, condition="ALWAYS"):
-    if self.section: return
-    self.OpenGlobal()
-    if type(condition) != str:
-      condition = "'%s'" % condition.string(True)
-    print >> self.out, "%s[%s, {" % (self.indent, condition)
-    self.indent += " " * 2
-    self.section = condition
-
-  def CloseSection(self):
-    if not self.section: return
-    self.indent = self.indent[:-2]
-    print >> self.out, "%s}],  # %s" % (self.indent, self.section)
-    self.section = False
-
-  def WriteComment(self):
-    if not self.comment: return
-    for c in self.comment:
-      if len(c.strip()) == 0:
-        print >> self.out, ""
-      else:
-        print >> self.out, "%s%s" % (self.indent, c),
-    self.comment = []
-
-  def GetOutput(self):
-    with open(self.path) as f:
-      for line in f:
-        if line[0] == '#':
-          self.comment += [line]
-          continue
-        if len(line.strip()) == 0:
-          self.comment += [line]
-          continue
-        header_match = HEADER_PATTERN.match(line)
-        if header_match:
-          condition = ParseCondition(header_match.group(1).strip())
-          self.CloseSection()
-          self.WriteComment()
-          self.OpenSection(condition)
-          continue
-        rule_match = RULE_PATTERN.match(line)
-        if rule_match:
-          self.OpenSection()
-          self.WriteComment()
-          path = rule_match.group(1).strip()
-          value_str = rule_match.group(2).strip()
-          comment = ""
-          if '#' in value_str:
-            pos = value_str.find('#')
-            comment = "  %s" % value_str[pos:].strip()
-            value_str = value_str[:pos].strip()
-          value = ParseCondition(value_str)
-          print >> self.out, ("%s'%s': [%s],%s" %
-                              (self.indent, path, value, comment))
-          continue
-        def_match = DEF_PATTERN.match(line)
-        if def_match:
-          # Custom definitions are deprecated.
-          continue
-        prefix_match = PREFIX_PATTERN.match(line)
-        if prefix_match:
-          continue
-        print "Malformed line: '%s'." % line
-    self.CloseSection()
-    self.CloseGlobal()
-    result = self.out.getvalue()
-    self.out.close()
-    return result
index dcb7fd5..7e01d3b 100644 (file)
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
 
-# These imports are required for the on-demand conversion from
-# old to new status file format.
-from os.path import exists
-from os.path import getmtime
-
-from . import old_statusfile
-
-
 # These outcomes can occur in a TestCase's outcomes list:
 SKIP = "SKIP"
 FAIL = "FAIL"
@@ -116,18 +108,6 @@ def _ParseOutcomeList(rule, outcomes, target_dict, variables):
 
 
 def ReadStatusFile(path, variables):
-  # As long as the old-format .status files are authoritative, just
-  # create the converted version on demand and cache it to speed up
-  # subsequent runs.
-  if path.endswith(".status"):
-    newpath = path + "2"
-    if not exists(newpath) or getmtime(newpath) < getmtime(path):
-      print "Converting status file."
-      converted = old_statusfile.ConvertNotation(path).GetOutput()
-      with open(newpath, 'w') as f:
-        f.write(converted)
-    path = newpath
-
   with open(path) as f:
     global KEYWORDS
     contents = eval(f.read(), KEYWORDS)