Migrate to new test status file syntax

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
parent 9de57484
...@@ -37,25 +37,16 @@ shell_g ...@@ -37,25 +37,16 @@ shell_g
/out /out
/perf.data /perf.data
/perf.data.old /perf.data.old
/test/benchmarks/benchmarks.status2
/test/benchmarks/CHECKED_OUT_* /test/benchmarks/CHECKED_OUT_*
/test/benchmarks/downloaded_* /test/benchmarks/downloaded_*
/test/benchmarks/kraken /test/benchmarks/kraken
/test/benchmarks/octane /test/benchmarks/octane
/test/benchmarks/sunspider /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/CHECKED_OUT_VERSION
/test/mozilla/data /test/mozilla/data
/test/mozilla/downloaded_* /test/mozilla/downloaded_*
/test/mozilla/mozilla.status2
/test/preparser/preparser.status2
/test/test262/data /test/test262/data
/test/test262/test262-* /test/test262/test262-*
/test/test262/test262.status2
/test/webkit/webkit.status2
/third_party /third_party
/tools/jsfunfuzz /tools/jsfunfuzz
/tools/jsfunfuzz.zip /tools/jsfunfuzz.zip
......
...@@ -25,5 +25,9 @@ ...@@ -25,5 +25,9 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # 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'
]
...@@ -25,112 +25,118 @@ ...@@ -25,112 +25,118 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # 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(2907): Allocation while in DisallowHeapAllocation scope.
# BUG(382): Weird test. Can't guarantee that it never times out. 'test-object-observe/NamedAccessCheck': [SKIP],
test-api/ApplyInterruption: PASS || TIMEOUT '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. # TODO(mstarzinger): Fail gracefully on multiple V8::Dispose calls.
test-api/InitializeAndDisposeOnce: SKIP 'test-api/InitializeAndDisposeOnce': [SKIP],
test-api/InitializeAndDisposeMultiple: SKIP 'test-api/InitializeAndDisposeMultiple': [SKIP],
# These tests always fail. They are here to test test.py. If # These tests always fail. They are here to test test.py. If
# they don't fail then test.py has failed. # they don't fail then test.py has failed.
test-serialize/TestThatAlwaysFails: FAIL 'test-serialize/TestThatAlwaysFails': [FAIL],
test-serialize/DependentTestThatAlwaysFails: FAIL 'test-serialize/DependentTestThatAlwaysFails': [FAIL],
# This test always fails. It tests that LiveEdit causes abort when turned off. # This test always fails. It tests that LiveEdit causes abort when turned off.
test-debug/LiveEditDisabled: FAIL 'test-debug/LiveEditDisabled': [FAIL],
# TODO(gc): Temporarily disabled in the GC branch. # TODO(gc): Temporarily disabled in the GC branch.
test-log/EquivalenceOfLoggingAndTraversal: PASS || FAIL 'test-log/EquivalenceOfLoggingAndTraversal': [PASS, FAIL],
# We do not yet shrink weak maps after they have been emptied by the GC # We do not yet shrink weak maps after they have been emptied by the GC
test-weakmaps/Shrinking: FAIL 'test-weakmaps/Shrinking': [FAIL],
test-weaksets/WeakSet_Shrinking: FAIL 'test-weaksets/WeakSet_Shrinking': [FAIL],
# Boot up memory use is bloated in debug mode. # Boot up memory use is bloated in debug mode.
test-mark-compact/BootUpMemoryUse: PASS, PASS || FAIL if $mode == debug 'test-mark-compact/BootUpMemoryUse': [PASS, PASS, ['mode == debug', FAIL]],
# Some CPU profiler tests are flaky. # Some CPU profiler tests are flaky.
test-cpu-profiler/*: PASS || FLAKY 'test-cpu-profiler/*': [PASS, FLAKY],
}], # ALWAYS
############################################################################## ##############################################################################
[ $arch == arm ] ['arch == arm', {
# We cannot assume that we can throw OutOfMemory exceptions in all situations. # 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 # Apparently our ARM box is in such a state. Skip the test as it also runs for
# a long time. # a long time.
test-api/OutOfMemory: SKIP 'test-api/OutOfMemory': [SKIP],
test-api/OutOfMemoryNested: SKIP 'test-api/OutOfMemoryNested': [SKIP],
# BUG(355): Test crashes on ARM. # BUG(355): Test crashes on ARM.
test-log/ProfLazyMode: SKIP 'test-log/ProfLazyMode': [SKIP],
# BUG(1075): Unresolved crashes. # BUG(1075): Unresolved crashes.
test-serialize/Deserialize: SKIP 'test-serialize/Deserialize': [SKIP],
test-serialize/DeserializeFromSecondSerializationAndRunScript2: SKIP 'test-serialize/DeserializeFromSecondSerializationAndRunScript2': [SKIP],
test-serialize/DeserializeAndRunScript2: SKIP 'test-serialize/DeserializeAndRunScript2': [SKIP],
test-serialize/DeserializeFromSecondSerialization: SKIP 'test-serialize/DeserializeFromSecondSerialization': [SKIP],
# BUG(2874): Threading problems. # BUG(2874): Threading problems.
test-api/*: PASS || FLAKY 'test-api/*': [PASS, FLAKY],
}], # 'arch == arm'
############################################################################## ##############################################################################
[ $arch == mipsel ] ['arch == mipsel', {
# BUG(2657): Test sometimes times out on MIPS simulator. # BUG(2657): Test sometimes times out on MIPS simulator.
test-thread-termination/TerminateMultipleV8ThreadsDefaultIsolate: PASS || TIMEOUT 'test-thread-termination/TerminateMultipleV8ThreadsDefaultIsolate': [PASS, TIMEOUT],
# BUG(1075): Unresolved crashes on MIPS also. # BUG(1075): Unresolved crashes on MIPS also.
test-serialize/Deserialize: SKIP 'test-serialize/Deserialize': [SKIP],
test-serialize/DeserializeFromSecondSerializationAndRunScript2: SKIP 'test-serialize/DeserializeFromSecondSerializationAndRunScript2': [SKIP],
test-serialize/DeserializeAndRunScript2: SKIP 'test-serialize/DeserializeAndRunScript2': [SKIP],
test-serialize/DeserializeFromSecondSerialization: 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. # Tests crash as there is no /tmp directory in Android.
test-log/LogAccessorCallbacks: SKIP 'test-log/LogAccessorCallbacks': [SKIP],
test-log/LogCallbacks: SKIP 'test-log/LogCallbacks': [SKIP],
test-log/ProfLazyMode: SKIP 'test-log/ProfLazyMode': [SKIP],
# platform-tls.h does not contain an ANDROID-related header. # platform-tls.h does not contain an ANDROID-related header.
test-platform-tls/FastTLS: SKIP 'test-platform-tls/FastTLS': [SKIP],
# This test times out. # This test times out.
test-threads/ThreadJoinSelf: SKIP 'test-threads/ThreadJoinSelf': [SKIP],
}], # 'arch == android_arm or arch == android_ia32'
############################################################################## ##############################################################################
[ $arch == nacl_ia32 || $arch == nacl_x64 ] ['arch == nacl_ia32 or arch == nacl_x64', {
# NaCl builds have problems with threaded tests since Pepper_28. # NaCl builds have problems with threaded tests since Pepper_28.
# V8 Issue 2786 # V8 Issue 2786
test-api/Threading1: SKIP 'test-api/Threading1': [SKIP],
test-lockers/MultithreadedParallelIsolates: SKIP 'test-lockers/MultithreadedParallelIsolates': [SKIP],
test-lockers/ExtensionsRegistration: SKIP 'test-lockers/ExtensionsRegistration': [SKIP],
# These tests fail as there is no /tmp directory in Native Client. # These tests fail as there is no /tmp directory in Native Client.
test-log/LogAccessorCallbacks: SKIP 'test-log/LogAccessorCallbacks': [SKIP],
test-log/LogCallbacks: SKIP 'test-log/LogCallbacks': [SKIP],
test-log/ProfLazyMode: SKIP 'test-log/ProfLazyMode': [SKIP],
# Native Client doesn't support sockets. # Native Client doesn't support sockets.
test-debug/DebuggerAgent: SKIP 'test-debug/DebuggerAgent': [SKIP],
test-debug/DebuggerAgentProtocolOverflowHeader: SKIP 'test-debug/DebuggerAgentProtocolOverflowHeader': [SKIP],
test-socket/Socket: SKIP 'test-socket/Socket': [SKIP],
# Profiling doesn't work on Native Client. # Profiling doesn't work on Native Client.
test-cpu-profiler/*: SKIP 'test-cpu-profiler/*': [SKIP],
# Fails since 16322 (new test). # Fails since 16322 (new test).
test-code-stubs-arm/ConvertDToI: SKIP 'test-code-stubs-arm/ConvertDToI': [SKIP],
}], # 'arch == nacl_ia32 or arch == nacl_x64'
]
...@@ -25,15 +25,17 @@ ...@@ -25,15 +25,17 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # 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(). # TODO(jochen): The following test is flaky.
date-format/resolved-options: FAIL 'overrides/caching': [PASS, FAIL],
date-format/timezone: FAIL
general/v8Intl-exists: FAIL
# TODO(jochen): The following test is flaky. # BUG(2899): default locale for search fails on mac and on android.
overrides/caching: PASS || FAIL 'collator/default-locale': [['system == macos or arch == android_arm or arch == android_ia32', FAIL]],
}], # ALWAYS
# 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)
...@@ -25,7 +25,9 @@ ...@@ -25,7 +25,9 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
prefix message [
[ALWAYS, {
# All tests in the bug directory are expected to fail. # All tests in the bug directory are expected to fail.
bugs/*: FAIL 'bugs/*': [FAIL],
}], # ALWAYS
]
...@@ -25,184 +25,187 @@ ...@@ -25,184 +25,187 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
prefix mjsunit [
[ALWAYS, {
# All tests in the bug directory are expected to fail. # All tests in the bug directory are expected to fail.
bugs/*: FAIL 'bugs/*': [FAIL],
############################################################################## ##############################################################################
# Fails. # Fails.
regress/regress-1119: FAIL 'regress/regress-1119': [FAIL],
# Issue 1719: Slow to collect arrays over several contexts. # Issue 1719: Slow to collect arrays over several contexts.
regress/regress-524: SKIP 'regress/regress-524': [SKIP],
# When that bug is fixed, revert the expectation to: # When that bug is fixed, revert the expectation to:
# Skip long running test in debug and allow it to timeout in release mode. # Skip long running test in debug and allow it to timeout in release mode.
# regress/regress-524: (PASS || TIMEOUT), SKIP if $mode == debug # regress/regress-524: [PASS, TIMEOUT, ['mode == debug', SKIP]],
# This test non-deterministically runs out of memory on Windows ia32. # This test non-deterministically runs out of memory on Windows ia32.
regress/regress-crbug-160010: SKIP 'regress/regress-crbug-160010': [SKIP],
############################################################################## ##############################################################################
# Too slow in debug mode with --stress-opt mode. # Too slow in debug mode with --stress-opt mode.
compiler/regress-stacktrace-methods: PASS, SKIP if $mode == debug 'compiler/regress-stacktrace-methods': [PASS, ['mode == debug', SKIP]],
compiler/regress-funcaller: PASS, SKIP if $mode == debug 'compiler/regress-funcaller': [PASS, ['mode == debug', SKIP]],
regress/regress-2318: PASS, SKIP if $mode == debug 'regress/regress-2318': [PASS, ['mode == debug', SKIP]],
regress/regress-create-exception: PASS, SKIP if $mode == debug 'regress/regress-create-exception': [PASS, ['mode == debug', SKIP]],
regress/regress-2612: PASS, SKIP if $mode == debug 'regress/regress-2612': [PASS, ['mode == debug', SKIP]],
############################################################################## ##############################################################################
# Too slow in debug mode for GC stress mode. # Too slow in debug mode for GC stress mode.
regress/regress-crbug-217858: PASS, SKIP if $mode == debug 'regress/regress-crbug-217858': [PASS, ['mode == debug', SKIP]],
############################################################################## ##############################################################################
# These use a built-in that's only present in debug mode. They take # 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. # 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) 'fuzz-natives-part*': [PASS, ['mode == release or arch == arm or arch == android_arm or arch == mipsel', SKIP]],
big-object-literal: PASS, SKIP if ($arch == arm || $arch == android_arm) 'big-object-literal': [PASS, ['arch == arm or arch == android_arm', SKIP]],
# Issue 488: this test sometimes times out. # Issue 488: this test sometimes times out.
array-constructor: PASS || TIMEOUT 'array-constructor': [PASS, TIMEOUT],
# Very slow on ARM and MIPS, contains no architecture dependent code. # Very slow on ARM and MIPS, contains no architecture dependent code.
unicode-case-overoptimization: PASS, TIMEOUT if ($arch == arm || $arch == android_arm || $arch == mipsel) '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 # This test expects to reach a certain recursion depth, which may not work
# for debug mode. # for debug mode.
json-recursive: PASS, (PASS || FAIL) if $mode == debug 'json-recursive': [PASS, ['mode == debug', PASS, FAIL]],
############################################################################## ##############################################################################
# Skip long running tests that time out in debug mode. # Skip long running tests that time out in debug mode.
generated-transition-stub: PASS, SKIP if $mode == debug 'generated-transition-stub': [PASS, ['mode == debug', SKIP]],
############################################################################## ##############################################################################
# This test sets the umask on a per-process basis and hence cannot be # This test sets the umask on a per-process basis and hence cannot be
# used in multi-threaded runs. # used in multi-threaded runs.
# On android there is no /tmp directory. # On android there is no /tmp directory.
d8-os: PASS, SKIP if ($isolates || $arch == android_arm || $arch == android_ia32) 'd8-os': [PASS, ['isolates or arch == android_arm or arch == android_ia32', SKIP]],
tools/tickprocessor: PASS, SKIP if ($arch == android_arm || $arch == android_ia32) 'tools/tickprocessor': [PASS, ['arch == android_arm or arch == android_ia32', SKIP]],
############################################################################## ##############################################################################
# Long running test that reproduces memory leak and should be run manually. # Long running test that reproduces memory leak and should be run manually.
regress/regress-2073: SKIP 'regress/regress-2073': [SKIP],
}], # ALWAYS
############################################################################## ##############################################################################
[ $arch == arm || $arch == android_arm ] ['arch == arm or arch == android_arm', {
# Slow tests which times out in debug mode. # Slow tests which times out in debug mode.
try: PASS, SKIP if $mode == debug 'try': [PASS, ['mode == debug', SKIP]],
debug-scripts-request: PASS, SKIP if $mode == debug 'debug-scripts-request': [PASS, ['mode == debug', SKIP]],
array-constructor: PASS, SKIP if $mode == debug 'array-constructor': [PASS, ['mode == debug', SKIP]],
regress/regress-1122: PASS, SKIP if ($mode == debug && $arch == android_arm) 'regress/regress-1122': [PASS, ['mode == debug and arch == android_arm', SKIP]],
# Flaky test that can hit compilation-time stack overflow in debug mode. # Flaky test that can hit compilation-time stack overflow in debug mode.
unicode-test: PASS, (PASS || FAIL) if $mode == debug 'unicode-test': [PASS, ['mode == debug', PASS, FAIL]],
# Times out often in release mode on ARM. # Times out often in release mode on ARM.
compiler/regress-stacktrace-methods: PASS, PASS || TIMEOUT if $mode == release 'compiler/regress-stacktrace-methods': [PASS, PASS, ['mode == release', TIMEOUT]],
array-splice: PASS || TIMEOUT 'array-splice': [PASS, TIMEOUT],
# Long running test. # Long running test.
string-indexof-2: PASS || TIMEOUT 'string-indexof-2': [PASS, TIMEOUT],
mirror-object: PASS || TIMEOUT 'mirror-object': [PASS, TIMEOUT],
# BUG(3251035): Timeouts in long looping crankshaft optimization # BUG(3251035): Timeouts in long looping crankshaft optimization
# tests. Skipping because having them timeout takes too long on the # tests. Skipping because having them timeout takes too long on the
# buildbot. # buildbot.
compiler/alloc-number: SKIP 'compiler/alloc-number': [SKIP],
compiler/array-length: SKIP 'compiler/array-length': [SKIP],
compiler/assignment-deopt: SKIP 'compiler/assignment-deopt': [SKIP],
compiler/deopt-args: SKIP 'compiler/deopt-args': [SKIP],
compiler/inline-compare: SKIP 'compiler/inline-compare': [SKIP],
compiler/inline-global-access: SKIP 'compiler/inline-global-access': [SKIP],
compiler/optimized-function-calls: SKIP 'compiler/optimized-function-calls': [SKIP],
compiler/pic: SKIP 'compiler/pic': [SKIP],
compiler/property-calls: SKIP 'compiler/property-calls': [SKIP],
compiler/recursive-deopt: SKIP 'compiler/recursive-deopt': [SKIP],
compiler/regress-4: SKIP 'compiler/regress-4': [SKIP],
compiler/regress-funcaller: SKIP 'compiler/regress-funcaller': [SKIP],
compiler/regress-rep-change: SKIP 'compiler/regress-rep-change': [SKIP],
compiler/regress-arguments: SKIP 'compiler/regress-arguments': [SKIP],
compiler/regress-funarguments: SKIP 'compiler/regress-funarguments': [SKIP],
compiler/regress-3249650: SKIP 'compiler/regress-3249650': [SKIP],
compiler/simple-deopt: SKIP 'compiler/simple-deopt': [SKIP],
regress/regress-490: SKIP 'regress/regress-490': [SKIP],
regress/regress-634: SKIP 'regress/regress-634': [SKIP],
regress/regress-create-exception: SKIP 'regress/regress-create-exception': [SKIP],
regress/regress-3218915: SKIP 'regress/regress-3218915': [SKIP],
regress/regress-3247124: SKIP 'regress/regress-3247124': [SKIP],
# Requires bigger stack size in the Genesis and if stack size is increased, # 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 # the test requires too much time to run. However, the problem test covers
# should be platform-independent. # should be platform-independent.
regress/regress-1132: SKIP 'regress/regress-1132': [SKIP],
# Stack manipulations in LiveEdit is not implemented for this arch. # Stack manipulations in LiveEdit is not implemented for this arch.
debug-liveedit-check-stack: SKIP 'debug-liveedit-check-stack': [SKIP],
debug-liveedit-stack-padding: SKIP 'debug-liveedit-stack-padding': [SKIP],
debug-liveedit-restart-frame: SKIP 'debug-liveedit-restart-frame': [SKIP],
debug-liveedit-double-call: SKIP 'debug-liveedit-double-call': [SKIP],
# Currently always deopt on minus zero # Currently always deopt on minus zero
math-floor-of-div-minus-zero: SKIP 'math-floor-of-div-minus-zero': [SKIP],
}], # 'arch == arm or arch == android_arm'
############################################################################## ##############################################################################
[ $arch == mipsel ] ['arch == mipsel', {
# Slow tests which times out in debug mode. # Slow tests which times out in debug mode.
try: PASS, SKIP if $mode == debug 'try': [PASS, ['mode == debug', SKIP]],
debug-scripts-request: PASS, SKIP if $mode == debug 'debug-scripts-request': [PASS, ['mode == debug', SKIP]],
array-constructor: PASS, SKIP if $mode == debug 'array-constructor': [PASS, ['mode == debug', SKIP]],
# Times out often in release mode on MIPS. # Times out often in release mode on MIPS.
compiler/regress-stacktrace-methods: PASS, PASS || TIMEOUT if $mode == release 'compiler/regress-stacktrace-methods': [PASS, PASS, ['mode == release', TIMEOUT]],
array-splice: PASS || TIMEOUT 'array-splice': [PASS, TIMEOUT],
# Long running test. # Long running test.
mirror-object: PASS || TIMEOUT 'mirror-object': [PASS, TIMEOUT],
string-indexof-2: PASS || TIMEOUT 'string-indexof-2': [PASS, TIMEOUT],
# BUG(3251035): Timeouts in long looping crankshaft optimization # BUG(3251035): Timeouts in long looping crankshaft optimization
# tests. Skipping because having them timeout takes too long on the # tests. Skipping because having them timeout takes too long on the
# buildbot. # buildbot.
compiler/alloc-number: SKIP 'compiler/alloc-number': [SKIP],
compiler/array-length: SKIP 'compiler/array-length': [SKIP],
compiler/assignment-deopt: SKIP 'compiler/assignment-deopt': [SKIP],
compiler/deopt-args: SKIP 'compiler/deopt-args': [SKIP],
compiler/inline-compare: SKIP 'compiler/inline-compare': [SKIP],
compiler/inline-global-access: SKIP 'compiler/inline-global-access': [SKIP],
compiler/optimized-function-calls: SKIP 'compiler/optimized-function-calls': [SKIP],
compiler/pic: SKIP 'compiler/pic': [SKIP],
compiler/property-calls: SKIP 'compiler/property-calls': [SKIP],
compiler/recursive-deopt: SKIP 'compiler/recursive-deopt': [SKIP],
compiler/regress-4: SKIP 'compiler/regress-4': [SKIP],
compiler/regress-funcaller: SKIP 'compiler/regress-funcaller': [SKIP],
compiler/regress-rep-change: SKIP 'compiler/regress-rep-change': [SKIP],
compiler/regress-arguments: SKIP 'compiler/regress-arguments': [SKIP],
compiler/regress-funarguments: SKIP 'compiler/regress-funarguments': [SKIP],
compiler/regress-3249650: SKIP 'compiler/regress-3249650': [SKIP],
compiler/simple-deopt: SKIP 'compiler/simple-deopt': [SKIP],
regress/regress-490: SKIP 'regress/regress-490': [SKIP],
regress/regress-634: SKIP 'regress/regress-634': [SKIP],
regress/regress-create-exception: SKIP 'regress/regress-create-exception': [SKIP],
regress/regress-3218915: SKIP 'regress/regress-3218915': [SKIP],
regress/regress-3247124: SKIP 'regress/regress-3247124': [SKIP],
# Requires bigger stack size in the Genesis and if stack size is increased, # 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 # the test requires too much time to run. However, the problem test covers
# should be platform-independent. # should be platform-independent.
regress/regress-1132: SKIP 'regress/regress-1132': [SKIP],
# Stack manipulations in LiveEdit is not implemented for this arch. # Stack manipulations in LiveEdit is not implemented for this arch.
debug-liveedit-check-stack: SKIP 'debug-liveedit-check-stack': [SKIP],
debug-liveedit-stack-padding: SKIP 'debug-liveedit-stack-padding': [SKIP],
debug-liveedit-restart-frame: SKIP 'debug-liveedit-restart-frame': [SKIP],
debug-liveedit-double-call: SKIP 'debug-liveedit-double-call': [SKIP],
# Currently always deopt on minus zero # Currently always deopt on minus zero
math-floor-of-div-minus-zero: SKIP 'math-floor-of-div-minus-zero': [SKIP],
}], # 'arch == mipsel'
############################################################################## ##############################################################################
# Native Client uses the ARM simulator so will behave similarly to arm # Native Client uses the ARM simulator so will behave similarly to arm
...@@ -210,46 +213,49 @@ math-floor-of-div-minus-zero: SKIP ...@@ -210,46 +213,49 @@ math-floor-of-div-minus-zero: SKIP
# TODO(bradchen): enable more tests for NaCl V8 when it stops using # TODO(bradchen): enable more tests for NaCl V8 when it stops using
# the ARM simulator. # the ARM simulator.
############################################################################## ##############################################################################
[ $arch == nacl_ia32 || $arch == nacl_x64 ] ['arch == nacl_ia32 or arch == nacl_x64', {
# There is no /tmp directory for NaCl runs # There is no /tmp directory for NaCl runs
d8-os: SKIP 'd8-os': [SKIP],
# Stack manipulations in LiveEdit is not implemented for this arch. # Stack manipulations in LiveEdit is not implemented for this arch.
debug-liveedit-check-stack: SKIP 'debug-liveedit-check-stack': [SKIP],
debug-liveedit-stack-padding: SKIP 'debug-liveedit-stack-padding': [SKIP],
debug-liveedit-restart-frame: SKIP 'debug-liveedit-restart-frame': [SKIP],
debug-liveedit-double-call: SKIP 'debug-liveedit-double-call': [SKIP],
# This test dumps core for arm.debug, so no reason to expect it to work # 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. # 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. # As noted above none of them are run in the arm.debug case.
fuzz-natives-part4: SKIP 'fuzz-natives-part4': [SKIP],
# NaCl builds have problems with this test since Pepper_28. # NaCl builds have problems with this test since Pepper_28.
# V8 Issue 2786 # V8 Issue 2786
math-exp-precision: SKIP 'math-exp-precision': [SKIP],
# Requires bigger stack size in the Genesis and if stack size is increased, # 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 # the test requires too much time to run. However, the problem test covers
# should be platform-independent. # should be platform-independent.
regress/regress-1132: SKIP 'regress/regress-1132': [SKIP],
# Poor performance for NaCl V8 causes an assertion failure for this test. # Poor performance for NaCl V8 causes an assertion failure for this test.
regress/regress-165637: SKIP 'regress/regress-165637': [SKIP],
# Skip long running test that times out in debug mode and goes OOM on NaCl. # Skip long running test that times out in debug mode and goes OOM on NaCl.
regress/regress-crbug-160010: SKIP 'regress/regress-crbug-160010': [SKIP],
}], # 'arch == nacl_ia32 or arch == nacl_x64'
############################################################################## ##############################################################################
[ $deopt_fuzzer == True ] ['deopt_fuzzer == True', {
# Skip tests that are not suitable for deoptimization fuzzing. # Skip tests that are not suitable for deoptimization fuzzing.
assert-opt-and-deopt: SKIP 'assert-opt-and-deopt': [SKIP],
never-optimize: SKIP 'never-optimize': [SKIP],
regress/regress-2185-2: SKIP 'regress/regress-2185-2': [SKIP],
harmony/object-observe: SKIP 'harmony/object-observe': [SKIP],
readonly: SKIP 'readonly': [SKIP],
array-feedback: SKIP 'array-feedback': [SKIP],
# Deopt every n garbage collections collides with the deopt every n times flag. # Deopt every n garbage collections collides with deopt every n times.
regress/regress-2653: SKIP 'regress/regress-2653': [SKIP],
}], # 'deopt_fuzzer == True'
]
...@@ -42,813 +42,816 @@ ...@@ -42,813 +42,816 @@
# debugging. # debugging.
# -------------------------------------------------------------------- # --------------------------------------------------------------------
prefix mozilla [
def FAIL_OK = FAIL, OKAY [ALWAYS, {
##################### NEEDS INVESTIGATION ##############
##################### NEEDS INVESTIGATION ##############
# BUG(2893): These tests started to fail after i18n support was turned on.
# BUG(2893): These tests started to fail after i18n support was turned on. Need # Need to investigate why.
# to investigate why. 'ecma_3/Number/15.7.4.3-02': [PASS, FAIL],
ecma_3/Number/15.7.4.3-02: PASS || FAIL 'ecma_3/Date/15.9.5.5-02': [PASS, FAIL],
ecma_3/Date/15.9.5.5-02: PASS || FAIL
##################### SKIPPED TESTS #####################
##################### SKIPPED TESTS #####################
# This test checks that we behave properly in an out-of-memory
# 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
# situation. The test fails in V8 with an exception and takes a long # time to do so.
# time to do so. 'js1_5/Regress/regress-271716-n': [SKIP],
js1_5/Regress/regress-271716-n: SKIP
# BUG(960): This test has an insane amount of output when it times out,
# BUG(960): This test has an insane amount of output when it times out, # messing up ability to see other failures on the waterfall.
# messing up ability to see other failures on the waterfall. 'js1_5/extensions/regress-342960': [SKIP],
js1_5/extensions/regress-342960: SKIP
# This test uses a unitialized variable. A Bug has been filed:
# This test uses a unitialized variable. A Bug has been filed: # https://bugzilla.mozilla.org/show_bug.cgi?id=575575
# https://bugzilla.mozilla.org/show_bug.cgi?id=575575 'js1_5/Array/regress-465980-02': [SKIP],
js1_5/Array/regress-465980-02: SKIP
# These tests are simply wrong (i.e., they do not test what they intend
# These tests are simply wrong (i.e., they do not test what they intend # to test).
# to test). # In particular, these two compare numbers to NaN with != in the current
# In particular, these two compare numbers to NaN with != in the current # version of the Mozilla tests. This is *fixed* in a later version.
# version of the Mozilla tests. This is *fixed* in a later version. # The tests should be re-enabled when switching to a new version.
# The tests should be re-enabled when switching to a new version. 'ecma_3/Date/15.9.3.2-1': [SKIP],
ecma_3/Date/15.9.3.2-1: SKIP 'js1_2/function/Number': [SKIP],
js1_2/function/Number: SKIP
# TODO(2018): Temporarily allow timeout in debug mode.
# TODO(2018): Temporarily allow timeout in debug mode. 'js1_5/GC/regress-203278-2': [PASS, ['mode == debug', TIMEOUT, FAIL]],
js1_5/GC/regress-203278-2: PASS || (TIMEOUT || FAIL) if $mode == debug
##################### SLOW TESTS #####################
##################### SLOW TESTS #####################
# This takes a long time to run (~100 seconds). It should only be run
# This takes a long time to run (~100 seconds). It should only be run # by the really patient.
# by the really patient. 'js1_5/GC/regress-324278': [SLOW],
js1_5/GC/regress-324278: SLOW
# This takes a long time to run because our indexOf operation is
# This takes a long time to run because our indexOf operation is # pretty slow - it causes a lot of GCs; see issue
# pretty slow - it causes a lot of GCs; see issue # #926379. We could consider marking this SKIP because it takes a
# #926379. We could consider marking this SKIP because it takes a # while to run to completion.
# while to run to completion. 'js1_5/GC/regress-338653': [SLOW],
js1_5/GC/regress-338653: SLOW
# This test is designed to run until it runs out of memory. This takes
# 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
# a very long time because it builds strings character by character # and compiles a lot of regular expressions. We could consider marking
# and compiles a lot of regular expressions. We could consider marking # this SKIP because it takes a while to run to completion.
# this SKIP because it takes a while to run to completion. 'js1_5/GC/regress-346794': [SLOW],
js1_5/GC/regress-346794: SLOW
# Runs out of memory while trying to build huge string of 'x'
# Runs out of memory while trying to build huge string of 'x' # characters. This takes a long time to run (~32 seconds).
# characters. This takes a long time to run (~32 seconds). 'js1_5/GC/regress-348532': [SLOW],
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 # These tests create two Date objects just after each other and
js1_5/Regress/regress-360969-03: PASS || TIMEOUT if $mode == debug # expects them to match. Sometimes this happens on the border
js1_5/Regress/regress-360969-04: PASS || TIMEOUT if $mode == debug # between one second and the next.
js1_5/Regress/regress-360969-05: PASS || TIMEOUT if $mode == debug 'ecma/Date/15.9.2.1': [PASS, FAIL],
js1_5/Regress/regress-360969-06: PASS || TIMEOUT if $mode == debug 'ecma/Date/15.9.2.2-1': [PASS, FAIL],
js1_5/extensions/regress-365527: PASS || TIMEOUT if $mode == debug '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 # 1026139: These date tests fail on arm and mips
js1_5/Regress/regress-203278-1: PASS || FAIL if $mode == debug 'ecma/Date/15.9.5.29-1': [PASS, ['arch == arm or arch == mipsel', FAIL]],
js1_5/Regress/regress-244470: PASS || FAIL if $mode == debug 'ecma/Date/15.9.5.28-1': [PASS, ['arch == arm or arch == mipsel', FAIL]],
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)
# These tests create two Date objects just after each other and # 1050186: Arm/MIPS vm is broken; probably unrelated to dates
# expects them to match. Sometimes this happens on the border 'ecma/Array/15.4.4.5-3': [PASS, ['arch == arm or arch == mipsel', FAIL]],
# between one second and the next. 'ecma/Date/15.9.5.22-2': [PASS, ['arch == arm or arch == mipsel', FAIL]],
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
# 1026139: These date tests fail on arm and mips # Flaky test that fails due to what appears to be a bug in the test.
ecma/Date/15.9.5.29-1: PASS || FAIL if ($arch == arm || $arch == mipsel) # Occurs depending on current time
ecma/Date/15.9.5.28-1: PASS || FAIL if ($arch == arm || $arch == mipsel) 'ecma/Date/15.9.5.8': [PASS, FAIL],
# 1050186: Arm/MIPS vm is broken; probably unrelated to dates # Severely brain-damaged test. Access to local variables must not
ecma/Array/15.4.4.5-3: PASS || FAIL if ($arch == arm || $arch == mipsel) # be more than 2.5 times faster than access to global variables? WTF?
ecma/Date/15.9.5.22-2: PASS || FAIL if ($arch == arm || $arch == mipsel) '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 # Test that rely on specific timezone (not working in Denmark).
# be more than 2.5 times faster than access to global variables? WTF? 'js1_5/Regress/regress-58116': [PASS, FAIL],
js1_5/Regress/regress-169559: PASS || FAIL
# Test that rely on specific timezone (not working in Denmark). # Flaky random() test. Tests the distribution of calls to Math.random().
js1_5/Regress/regress-58116: PASS || FAIL 'js1_5/Regress/regress-211590': [PASS, FAIL],
# Flaky random() test. Tests the distribution of calls to Math.random(). # Flaky tests; expect BigO-order computations to yield 1, but the code
js1_5/Regress/regress-211590: PASS || FAIL # 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 # The following two tests assume that daylight savings time starts first
# cannot handle outliers. See bug #925864. # Sunday in April. This is not true when executing the tests outside
ecma_3/RegExp/regress-311414: PASS || FAIL # California! In Denmark the adjustment starts one week earlier.
ecma_3/RegExp/regress-289669: PASS || FAIL # Tests based on shell that use dates in this gap are flaky.
js1_5/String/regress-314890: PASS || FAIL 'ecma/Date/15.9.5.10-1': [PASS, FAIL],
js1_5/String/regress-56940-01: PASS || FAIL 'ecma/Date/15.9.5.12-1': [PASS, FAIL],
js1_5/String/regress-56940-02: PASS || FAIL 'ecma/Date/15.9.5.14': [PASS, FAIL],
js1_5/String/regress-157334-01: PASS || FAIL 'ecma/Date/15.9.5.34-1': [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 # These tests sometimes pass (in particular on Windows). They build up
# in April. This is not true when executing the tests outside California! # a lot of stuff on the stack, which normally causes a stack overflow,
# In Denmark the adjustment starts one week earlier!. # but sometimes it makes it through?
# Tests based on shell that use dates in this gap are flaky. 'js1_5/Regress/regress-98901': [PASS, FAIL],
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 # Tests that sorting arrays of ints is less than 3 times as fast
# a lot of stuff on the stack, which normally causes a stack overflow, # as sorting arrays of strings.
# but sometimes it makes it through? 'js1_5/extensions/regress-371636': [PASS, FAIL, ['mode == debug', TIMEOUT]],
js1_5/Regress/regress-98901: PASS || FAIL
# Tests that sorting arrays of ints is less than 3 times as fast # Tests depend on GC timings. Inherently flaky.
# as sorting arrays of strings. 'js1_5/GC/regress-383269-01': [PASS, FAIL],
js1_5/extensions/regress-371636: PASS || FAIL || TIMEOUT if $mode == debug 'js1_5/GC/regress-383269-02': [PASS, FAIL],
'js1_5/Regress/regress-404755': [PASS, FAIL],
# Tests depend on GC timings. Inherently flaky. # Test that depends on timer resolution. Fails every now and then
js1_5/GC/regress-383269-01: PASS || FAIL # if we're unlucky enough to get a context switch at a bad time.
js1_5/GC/regress-383269-02: PASS || FAIL 'js1_5/extensions/regress-363258': [PASS, FAIL],
js1_5/Regress/regress-404755: PASS || FAIL
# Test that depends on timer resolution. Fails every now and then # Test that assumes specific runtime for a regexp, flaky in debug mode.
# if we're unlucky enough to get a context switch at a bad time. 'ecma_3/RegExp/regress-85721': [PASS, ['mode == debug', FAIL]],
js1_5/extensions/regress-363258: PASS || FAIL
# Test that assumes specific runtime for a regexp, flaky in debug mode. # Test that assumes specific execution time, flaky in debug mode.
ecma_3/RegExp/regress-85721: PASS || FAIL if $mode == debug 'js1_5/Array/regress-101964': [PASS, ['mode == debug', FAIL]],
# Test that assumes specific execution time, flaky in debug mode. ##################### INCOMPATIBLE TESTS #####################
js1_5/Array/regress-101964: PASS || FAIL if $mode == debug
# 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 # Fail because it calls builtins as functions and do not expect the
# have been determined to be incompatible between Mozilla and V8/JSC. # 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 # Fail because it expects String.prototype.split to distinguish whether
js1_5/Regress/regress-452346: FAIL_OK # 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 # Fail because of toLowerCase and toUpperCase conversion.
# builtin to have undefined as the receiver. 'ecma/String/15.5.4.11-2': [FAIL_OK],
ecma/String/15.5.4.6-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 # This test uses an older version of the unicode standard that fails
# separator was undefined or not passed at all. # us because we correctly convert the armenian small ligature ech-yiwn
ecma/String/15.5.4.8-2: FAIL_OK # 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. # Creates a linked list of arrays until we run out of memory or timeout.
ecma/String/15.5.4.11-2: FAIL_OK 'js1_5/Regress/regress-312588': [SKIP],
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
# 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. # Runs out of memory because it compiles huge functions.
js1_5/Regress/regress-312588: SKIP '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. #:=== RegExp:===
js1_5/Function/regress-338001: FAIL_OK # We don't match the syntax error message of Mozilla for invalid
js1_5/Function/regress-338121-01: FAIL_OK # RegExp flags.
js1_5/Function/regress-338121-02: FAIL_OK 'ecma_3/RegExp/15.10.4.1-6': [FAIL_OK],
js1_5/Function/regress-338121-03: FAIL_OK
# Expectes 'prototype' property of functions to be enumerable. # PCRE doesn't allow subpattern nesting deeper than 200, this tests
js1_5/Function/10.1.6-01: FAIL_OK # 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 # Difference in the way capturing subpatterns work. In JS, when the
# depth 500. JSC detects the case, and return null from the match, # 'minimum repeat count' is reached, the empty string must not match.
# and passes this test (the test doesn't check for a correct return # In this case, we are similar but not identical to JSC. Hard to
# value). # support the JS behavior with PCRE, so maybe emulate JSC?
ecma_3/RegExp/regress-119909: PASS || FAIL_OK '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 # PCRE's match limit is reached. SpiderMonkey hangs on the first one,
# 'minimum repeat count' is reached, the empty string must not match. # JSC returns true somehow. Maybe they up the match limit? There is
# In this case, we are similar but not identical to JSC. Hard to # an open V8 bug 676063 about this.
# support the JS behavior with PCRE, so maybe emulate JSC? 'ecma_3/RegExp/regress-330684': [TIMEOUT],
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, # This test contains a regexp that runs exponentially long. Spidermonkey
# JSC returns true somehow. Maybe they up the match limit? There is # standalone will hang, though apparently inside Firefox it will trigger a
# an open V8 bug 676063 about this. # long-running-script timeout. JSCRE passes by hitting the matchLimit and
ecma_3/RegExp/regress-330684: TIMEOUT # 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 # We do not detect overflow in bounds for back references and {}
# standalone will hang, though apparently inside Firefox it will trigger a # quantifiers. Might fix by parsing numbers differently?
# long-running-script timeout. JSCRE passes by hitting the matchLimit and 'js1_5/Regress/regress-230216-2': [FAIL_OK],
# 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 {} # Regexp too long for PCRE.
# quantifiers. Might fix by parsing numbers differently? 'js1_5/Regress/regress-280769': [PASS, FAIL],
js1_5/Regress/regress-230216-2: FAIL_OK '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. # We do not support static RegExp.multiline - should we?.
js1_5/Regress/regress-280769: PASS || FAIL 'js1_2/regexp/RegExp_multiline': [FAIL_OK],
js1_5/Regress/regress-280769-1: PASS || FAIL 'js1_2/regexp/RegExp_multiline_as_array': [FAIL_OK],
js1_5/Regress/regress-280769-2: PASS || FAIL 'js1_2/regexp/beginLine': [FAIL_OK],
js1_5/Regress/regress-280769-4: PASS || FAIL 'js1_2/regexp/endLine': [FAIL_OK],
js1_5/Regress/regress-280769-5: PASS || FAIL
# 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 # To be compatible with safari typeof a regexp yields 'function';
# use the previous input. # in firefox it yields 'object'.
js1_2/regexp/RegExp_input: FAIL_OK 'js1_2/function/regexparg-1': [FAIL_OK],
js1_2/regexp/RegExp_input_as_array: FAIL_OK
# To be compatible with safari typeof a regexp yields 'function'; # Date trouble?
# in firefox it yields 'object'. 'js1_5/Date/regress-301738-02': [FAIL_OK],
js1_2/function/regexparg-1: FAIL_OK
# Date trouble? # This test fails for all browsers on in the CET timezone.
js1_5/Date/regress-301738-02: FAIL_OK 'ecma/Date/15.9.5.35-1': [PASS, FAIL_OK],
# This test fails for all browsers on in the CET timezone. # Spidermonkey allows stuff in parenthesis directly after the minutes
ecma/Date/15.9.5.35-1: PASS || FAIL_OK # 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 # Print string after deleting array element?
# in a date. JSC does not, so we don't either. 'js1_5/Expressions/regress-96526-delelem': [FAIL_OK],
js1_5/Date/regress-309925-02: FAIL_OK
# Print string after deleting array element? # Stack overflows should be InternalError: too much recursion?
js1_5/Expressions/regress-96526-delelem: FAIL_OK 'js1_5/Regress/regress-234389': [FAIL_OK],
# Stack overflows should be InternalError: too much recursion? # This may very well be a bogus test. I'm not sure yet.
js1_5/Regress/regress-234389: FAIL_OK 'js1_5/Regress/regress-320119': [FAIL_OK],
# This may very well be a bogus test. I'm not sure yet. # No support for toSource().
js1_5/Regress/regress-320119: FAIL_OK '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 # Extra arguments not handled properly in String.prototype.match
# with very large numbers of arguments. The test uses 2^24 arguments. 'js1_5/Regress/regress-179524': [FAIL_OK],
js1_5/Array/regress-350256-03: FAIL_OK
# Extra arguments not handled properly in String.prototype.match # Uncategorized failures. Please help categorize (or fix) these failures.
js1_5/Regress/regress-179524: FAIL_OK 'js1_5/Regress/regress-172699': [FAIL_OK],
# Uncategorized failures. Please help categorize (or fix) these failures. # Assumes that the prototype of a function is enumerable. Non-ECMA,
js1_5/Regress/regress-172699: FAIL_OK # 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, # Leading zero no longer signal octal numbers (ECMA-262 Annex E 15.1.2.2).
# see section 15.3.3.1, page 86. 'ecma/GlobalObject/15.1.2.2-2': [FAIL_OK],
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). # Tests that rely on specific details of function decompilation or
ecma/GlobalObject/15.1.2.2-2: FAIL_OK # 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 # Tests that use uneval. Non-ECMA.
# print strings for errors. Non-ECMA behavior. 'js1_5/GC/regress-418128': [FAIL_OK],
js1_2/function/tostring-2: FAIL_OK 'js1_5/extensions/regress-465276': [FAIL_OK],
js1_2/Objects/toString-001: FAIL_OK 'js1_5/Error/regress-465377': [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 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. # Uses Mozilla-specific QName, XML, XMLList and Iterator.
js1_5/extensions/regress-435345-01: FAIL_OK 'js1_5/Regress/regress-407323': [FAIL_OK],
js1_5/extensions/regress-455413: FAIL_OK 'js1_5/Regress/regress-407957': [FAIL_OK],
# Uses Mozilla-specific QName, XML, XMLList and Iterator. # Relies on JavaScript 1.2 / 1.3 deprecated features.
js1_5/Regress/regress-407323: FAIL_OK 'js1_2/function/String': [FAIL_OK],
js1_5/Regress/regress-407957: 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. # RegExps are not callable.
js1_2/function/String: FAIL_OK 'js1_2/regexp/simple_form': [FAIL_OK],
js1_2/operator/equality: FAIL_OK 'js1_2/regexp/regress-6359': [FAIL_OK],
js1_2/version120/boolean-001: FAIL_OK 'js1_2/regexp/regress-9141': [FAIL_OK],
js1_2/String/concat: FAIL_OK 'js1_5/Regress/regress-224956': [FAIL_OK],
js1_2/function/Function_object: FAIL_OK 'js1_5/Regress/regress-325925': [FAIL_OK],
js1_2/function/tostring-1: FAIL_OK 'ecma_2/RegExp/regress-001': [FAIL_OK],
js1_2/version120/regress-99663: FAIL_OK
js1_2/regexp/RegExp_lastIndex: FAIL_OK
js1_2/regexp/string_split: 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. # Use unsupported "watch".
js1_5/Regress/regress-315974: FAIL_OK '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". # Use special Mozilla getter/setter syntax
js1_5/Regress/regress-213482: FAIL_OK 'js1_5/Regress/regress-354924': [FAIL_OK],
js1_5/Regress/regress-240577: FAIL_OK 'js1_5/Regress/regress-355341': [FAIL_OK],
js1_5/Regress/regress-355344: FAIL_OK 'js1_5/GC/regress-316885-01': [FAIL_OK],
js1_5/Object/regress-362872-01: FAIL_OK 'js1_5/GetSet/getset-002': [FAIL_OK],
js1_5/Object/regress-362872-02: FAIL_OK 'js1_5/GetSet/regress-353264': [FAIL_OK],
js1_5/Regress/regress-361467: FAIL_OK 'js1_5/Regress/regress-361617': [FAIL_OK],
js1_5/Regress/regress-385393-06: FAIL_OK 'js1_5/Regress/regress-362583': [FAIL_OK],
js1_5/Regress/regress-506567: FAIL_OK 'js1_5/extensions/regress-356378': [FAIL_OK],
'js1_5/extensions/regress-452178': [FAIL_OK],
# Use special Mozilla getter/setter syntax # Requires Mozilla-specific strict mode or options() function.
js1_5/Regress/regress-354924: FAIL_OK 'ecma_3/Object/8.6.1-01': [FAIL_OK],
js1_5/Regress/regress-355341: FAIL_OK 'js1_5/Exceptions/regress-315147': [FAIL_OK],
js1_5/GC/regress-316885-01: FAIL_OK 'js1_5/Regress/regress-106244': [FAIL_OK],
js1_5/GetSet/getset-002: FAIL_OK 'js1_5/Regress/regress-317533': [FAIL_OK],
js1_5/GetSet/regress-353264: FAIL_OK 'js1_5/Regress/regress-323314-1': [FAIL_OK],
js1_5/Regress/regress-361617: FAIL_OK 'js1_5/Regress/regress-352197': [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. # Equivalent to assert(false).
ecma_3/Object/8.6.1-01: FAIL_OK 'ecma_2/RegExp/exec-001': [FAIL_OK],
js1_5/Exceptions/regress-315147: FAIL_OK 'ecma_2/String/replace-001': [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). # We do not strip unicode format control characters. This is really
ecma_2/RegExp/exec-001: FAIL_OK # required for working with non-latin character sets. We match JSC
ecma_2/String/replace-001: FAIL_OK # 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 # A non-breaking space doesn't match \s in a regular expression. This
# required for working with non-latin character sets. We match JSC # behaviour matches JSC. All the VMs have different behaviours in which
# and IE here. Firefox matches the spec (section 7.1). # characters match \s so we do the same as JSC until they change.
ecma_3/Unicode/uc-001: FAIL_OK 'ecma_3/Unicode/uc-002': [PASS, FAIL_OK],
# A non-breaking space doesn't match \s in a regular expression. This behaviour # String.prototype.split on empty strings always returns an array
# matches JSC. All the VMs have different behaviours in which characters match # with one element (as specified in ECMA-262).
# \s so we do the same as JSC until they change. 'js1_2/Array/array_split_1': [FAIL_OK],
ecma_3/Unicode/uc-002: PASS || FAIL_OK
# String.prototype.split on empty strings always returns an array # The concat() method is defined in Array.prototype; not Array.
# with one element (as specified in ECMA-262). 'js1_5/Array/regress-313153': [FAIL_OK],
js1_2/Array/array_split_1: 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. # The lastIndexOf() method is defined on Array.prototype, not Array.
js1_5/Array/regress-313153: FAIL_OK 'ecma_3/Array/15.5.4.8-01': [FAIL_OK],
# The join() method is defined on Array.prototype; not Array. # Properties fileName, and lineNumber of Error instances are
js1_5/Array/regress-474529: FAIL_OK # 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 # Unsupported import/export and <xml> literals. Mozilla extensions.
# not supported. Mozilla specific extension. 'js1_5/Regress/regress-249211': [FAIL_OK],
js1_5/Exceptions/errstack-001: FAIL_OK 'js1_5/Regress/regress-309242': [FAIL_OK],
js1_5/Exceptions/regress-257751: FAIL_OK 'js1_5/Regress/regress-350692': [FAIL_OK],
js1_5/Regress/regress-119719: FAIL_OK 'js1_5/extensions/regress-421621': [FAIL_OK],
js1_5/Regress/regress-167328: FAIL_OK 'js1_5/extensions/regress-432075': [FAIL_OK],
js1_5/Regress/regress-243869: FAIL_OK
# Unsupported import/export and <xml> literals. Mozilla extensions. # The length of Error functions is 1 not 3.
js1_5/Regress/regress-249211: FAIL_OK 'js1_5/Exceptions/regress-123002': [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. # Reserved keywords as function names, etc is not supported.
js1_5/Exceptions/regress-123002: FAIL_OK 'js1_5/LexicalConventions/regress-343675': [FAIL_OK],
# Reserved keywords as function names, etc is not supported. # Tests if future reserved keywords of ECMA-262, edition 3 emit warnings. We
js1_5/LexicalConventions/regress-343675: FAIL_OK # 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 # Unsupported list comprehensions: [ ... for ... ] and for each.
# implement the edition 5 behaviour and fail on use of edition 5 future reserved 'js1_5/Regress/regress-352009': [FAIL_OK],
# keywords as identifiers. 'js1_5/Regress/regress-349648': [FAIL_OK],
js1_5/Regress/regress-240317: FAIL_OK
# Unsupported list comprehensions: [ ... for ... ] and for each. # Expects top level arguments (passed on command line?) to be
js1_5/Regress/regress-352009: FAIL_OK # the empty string?
js1_5/Regress/regress-349648: FAIL_OK 'js1_5/Regress/regress-336100': [FAIL_OK],
# Expects top level arguments (passed on command line?) to be # Regular expression test failures due to PCRE. We match JSC (ie, perl)
# the empty string? # behavior and not the ECMA spec.
js1_5/Regress/regress-336100: FAIL_OK '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) # This test requires a failure if we try to compile a function with more
# behavior and not the ECMA spec. # than 65536 arguments. This seems to be a Mozilla restriction.
ecma_3/RegExp/perlstress-001: PASS || FAIL_OK 'js1_5/Regress/regress-290575': [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
# This test requires a failure if we try to compile a function with more # Fails because of the way function declarations are
# than 65536 arguments. This seems to be a Mozilla restriction. # handled in V8/JSC. V8 follows IE behavior and introduce
js1_5/Regress/regress-290575: PASS || FAIL_OK # 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 # Function is deletable in V8 and JSC.
# handled in V8/JSC. V8 follows IE behavior and introduce 'js1_5/Regress/regress-352604': [FAIL_OK],
# 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. # Cannot call strings as functions. Expects not to crash.
js1_5/Regress/regress-352604: FAIL_OK 'js1_5/Regress/regress-417893': [FAIL_OK],
# Cannot call strings as functions. Expects not to crash. # Unsupported use of "[]" as function parameter. We match JSC.
js1_5/Regress/regress-417893: FAIL_OK '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. # Illegal escape-sequences in string literals. Has already been fixed
js1_5/Regress/regress-416737-01: FAIL_OK # by most engines (i.e. V8, JSC, Opera and FF).
js1_5/Regress/regress-416737-02: FAIL_OK '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 # The source field of RegExp objects is properly escaped. We match JSC.
# by most engines (i.e. V8, JSC, Opera and FF). 'ecma_2/RegExp/constructor-001': [FAIL_OK],
ecma/Array/15.4.5.1-1: FAIL_OK 'ecma_2/RegExp/function-001': [FAIL_OK],
ecma/LexicalConventions/7.7.4: FAIL_OK 'ecma_2/RegExp/properties-001': [FAIL_OK],
ecma_2/RegExp/hex-001: FAIL_OK
js1_2/regexp/hexadecimal: FAIL_OK
# Negative hexadecimal literals are parsed as NaN. This test is outdated.
'ecma/TypeConversion/9.3.1-3': [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 ##################### FAILING TESTS #####################
ecma_2/RegExp/properties-001: FAIL_OK
# 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
# Negative hexadecimal literals are parsed as NaN. This test is outdated. # category.
ecma/TypeConversion/9.3.1-3: FAIL_OK
# 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
##################### FAILING TESTS ##################### # than 4Mbytes of stack space.
'js1_5/Array/regress-350256-02': [FAIL],
# 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 test seems designed to fail (it produces a 700Mbyte string).
# We fail on out of memory. The important thing is not to crash.
# This fails because we don't handle Function.prototype.apply with very large 'js1_5/Regress/regress-303213': [FAIL, ['mode == debug', TIMEOUT]],
# numbers of arguments (depending on max stack size). 350256-02 needs more than
# 4Mbytes of stack space. # This test fails since we now throw in String.prototype.match when apply
js1_5/Array/regress-350256-02: FAIL # is given null or undefined as this argument (and so does firefox nightly).
'js1_5/Regress/regress-295052': [FAIL],
# This test seems designed to fail (it produces a 700Mbyte string). # Bug 1202592: New ecma_3/String/15.5.4.11 is failing.
# We fail on out of memory. The important thing is not to crash. 'ecma_3/String/15.5.4.11': [FAIL],
js1_5/Regress/regress-303213: FAIL || TIMEOUT if $mode == debug
# Bug 1202597: New js1_5/Expressions/regress-394673 is failing.
# This test fails since we now throw in String.prototype.match when apply # Marked as: Will not fix. V8 throws an acceptable RangeError.
# is given null or undefined as this argument (and so does firefox nightly). 'js1_5/Expressions/regress-394673': [FAIL],
js1_5/Regress/regress-295052: FAIL
# Bug 1202592: New ecma_3/String/15.5.4.11 is failing. # Bug 762: http://code.google.com/p/v8/issues/detail?id=762
ecma_3/String/15.5.4.11: FAIL # We do not correctly handle assignments within "with"
'ecma_3/Statements/12.10-01': [FAIL],
# Bug 1202597: New js1_5/Expressions/regress-394673 is failing.
# Marked as: Will not fix. V8 throws an acceptable RangeError. # We do not throw an exception when a const is redeclared.
js1_5/Expressions/regress-394673: FAIL # (We only fail section 1 of the test.)
'js1_5/Regress/regress-103602': [FAIL],
# Bug 762: http://code.google.com/p/v8/issues/detail?id=762 ##################### MOZILLA EXTENSION TESTS #####################
# We do not correctly handle assignments within "with"
ecma_3/Statements/12.10-01: FAIL 'ecma/extensions/15.1.2.1-1': [FAIL_OK],
'ecma_3/extensions/regress-385393-03': [FAIL_OK],
# We do not throw an exception when a const is redeclared. 'ecma_3/extensions/7.9.1': [FAIL_OK],
# (We only fail section 1 of the test.) 'js1_5/extensions/catchguard-001': [FAIL_OK],
js1_5/Regress/regress-103602: FAIL 'js1_5/extensions/catchguard-002': [FAIL_OK],
'js1_5/extensions/catchguard-003': [FAIL_OK],
##################### MOZILLA EXTENSION TESTS ##################### 'js1_5/extensions/getset-001': [FAIL_OK],
'js1_5/extensions/getset-003': [FAIL_OK],
ecma/extensions/15.1.2.1-1: FAIL_OK 'js1_5/extensions/no-such-method': [FAIL_OK],
ecma_3/extensions/regress-385393-03: FAIL_OK 'js1_5/extensions/regress-104077': [FAIL_OK],
ecma_3/extensions/7.9.1: FAIL_OK 'js1_5/extensions/regress-226078': [FAIL_OK],
js1_5/extensions/catchguard-001: FAIL_OK 'js1_5/extensions/regress-303277': [FAIL_OK],
js1_5/extensions/catchguard-002: FAIL_OK 'js1_5/extensions/regress-304897': [FAIL_OK],
js1_5/extensions/catchguard-003: FAIL_OK 'js1_5/extensions/regress-306738': [FAIL_OK],
js1_5/extensions/getset-001: FAIL_OK 'js1_5/extensions/regress-311161': [FAIL_OK],
js1_5/extensions/getset-003: FAIL_OK 'js1_5/extensions/regress-311583': [FAIL_OK],
js1_5/extensions/no-such-method: FAIL_OK 'js1_5/extensions/regress-311792-01': [FAIL_OK],
js1_5/extensions/regress-104077: FAIL_OK 'js1_5/extensions/regress-312278': [FAIL_OK],
js1_5/extensions/regress-226078: FAIL_OK 'js1_5/extensions/regress-313630': [FAIL_OK],
js1_5/extensions/regress-303277: FAIL_OK 'js1_5/extensions/regress-313763': [FAIL_OK],
js1_5/extensions/regress-304897: FAIL_OK 'js1_5/extensions/regress-313803': [FAIL_OK],
js1_5/extensions/regress-306738: FAIL_OK 'js1_5/extensions/regress-314874': [FAIL_OK],
js1_5/extensions/regress-311161: FAIL_OK 'js1_5/extensions/regress-322957': [FAIL_OK],
js1_5/extensions/regress-311583: FAIL_OK 'js1_5/extensions/regress-328556': [FAIL_OK],
js1_5/extensions/regress-311792-01: FAIL_OK 'js1_5/extensions/regress-333541': [FAIL_OK],
js1_5/extensions/regress-312278: FAIL_OK 'js1_5/extensions/regress-335700': [FAIL_OK],
js1_5/extensions/regress-313630: FAIL_OK 'js1_5/extensions/regress-336409-1': [FAIL_OK],
js1_5/extensions/regress-313763: FAIL_OK 'js1_5/extensions/regress-336409-2': [FAIL_OK],
js1_5/extensions/regress-313803: FAIL_OK 'js1_5/extensions/regress-336410-2': [FAIL_OK],
js1_5/extensions/regress-314874: FAIL_OK 'js1_5/extensions/regress-341956-01': [FAIL_OK],
js1_5/extensions/regress-322957: FAIL_OK 'js1_5/extensions/regress-345967': [FAIL_OK],
js1_5/extensions/regress-328556: FAIL_OK 'js1_5/extensions/regress-346494-01': [FAIL_OK],
js1_5/extensions/regress-333541: FAIL_OK 'js1_5/extensions/regress-346494': [FAIL_OK],
js1_5/extensions/regress-335700: FAIL_OK 'js1_5/extensions/regress-347306-02': [FAIL_OK],
js1_5/extensions/regress-336409-1: FAIL_OK 'js1_5/extensions/regress-348986': [FAIL_OK],
js1_5/extensions/regress-336409-2: FAIL_OK 'js1_5/extensions/regress-349616': [FAIL_OK],
js1_5/extensions/regress-336410-2: FAIL_OK 'js1_5/extensions/regress-350312-02': [FAIL_OK],
js1_5/extensions/regress-341956-01: FAIL_OK 'js1_5/extensions/regress-350312-03': [FAIL_OK],
js1_5/extensions/regress-345967: FAIL_OK 'js1_5/extensions/regress-350531': [FAIL_OK],
js1_5/extensions/regress-346494-01: FAIL_OK 'js1_5/extensions/regress-351102-01': [FAIL_OK],
js1_5/extensions/regress-346494: FAIL_OK 'js1_5/extensions/regress-351102-02': [FAIL_OK],
js1_5/extensions/regress-347306-02: FAIL_OK 'js1_5/extensions/regress-351102-06': [FAIL_OK],
js1_5/extensions/regress-348986: FAIL_OK 'js1_5/extensions/regress-351973': [FAIL_OK],
js1_5/extensions/regress-349616: FAIL_OK 'js1_5/extensions/regress-352060': [FAIL_OK],
js1_5/extensions/regress-350312-02: FAIL_OK 'js1_5/extensions/regress-352094': [FAIL_OK],
js1_5/extensions/regress-350312-03: FAIL_OK 'js1_5/extensions/regress-352261': [FAIL_OK],
js1_5/extensions/regress-350531: FAIL_OK 'js1_5/extensions/regress-352281': [FAIL_OK],
js1_5/extensions/regress-351102-01: FAIL_OK 'js1_5/extensions/regress-352455': [FAIL_OK],
js1_5/extensions/regress-351102-02: FAIL_OK 'js1_5/extensions/regress-352604': [FAIL_OK],
js1_5/extensions/regress-351102-06: FAIL_OK 'js1_5/extensions/regress-353214': [FAIL_OK],
js1_5/extensions/regress-351973: FAIL_OK 'js1_5/extensions/regress-355339': [FAIL_OK],
js1_5/extensions/regress-352060: FAIL_OK 'js1_5/extensions/regress-355497': [FAIL_OK],
js1_5/extensions/regress-352094: FAIL_OK 'js1_5/extensions/regress-355622': [FAIL_OK],
js1_5/extensions/regress-352261: FAIL_OK 'js1_5/extensions/regress-355736': [FAIL_OK],
js1_5/extensions/regress-352281: FAIL_OK 'js1_5/extensions/regress-356085': [FAIL_OK],
js1_5/extensions/regress-352455: FAIL_OK 'js1_5/extensions/regress-356106': [FAIL_OK],
js1_5/extensions/regress-352604: FAIL_OK 'js1_5/extensions/regress-358594-01': [FAIL_OK],
js1_5/extensions/regress-353214: FAIL_OK 'js1_5/extensions/regress-358594-02': [FAIL_OK],
js1_5/extensions/regress-355339: FAIL_OK 'js1_5/extensions/regress-358594-03': [FAIL_OK],
js1_5/extensions/regress-355497: FAIL_OK 'js1_5/extensions/regress-358594-04': [FAIL_OK],
js1_5/extensions/regress-355622: FAIL_OK 'js1_5/extensions/regress-358594-05': [FAIL_OK],
js1_5/extensions/regress-355736: FAIL_OK 'js1_5/extensions/regress-358594-06': [FAIL_OK],
js1_5/extensions/regress-356085: FAIL_OK 'js1_5/extensions/regress-361346': [FAIL_OK],
js1_5/extensions/regress-356106: FAIL_OK 'js1_5/extensions/regress-361360': [FAIL_OK],
js1_5/extensions/regress-358594-01: FAIL_OK 'js1_5/extensions/regress-361558': [FAIL_OK],
js1_5/extensions/regress-358594-02: FAIL_OK 'js1_5/extensions/regress-361571': [FAIL_OK],
js1_5/extensions/regress-358594-03: FAIL_OK 'js1_5/extensions/regress-361856': [FAIL_OK],
js1_5/extensions/regress-358594-04: FAIL_OK 'js1_5/extensions/regress-361964': [FAIL_OK],
js1_5/extensions/regress-358594-05: FAIL_OK 'js1_5/extensions/regress-363988': [FAIL_OK],
js1_5/extensions/regress-358594-06: FAIL_OK 'js1_5/extensions/regress-365869': [FAIL_OK],
js1_5/extensions/regress-361346: FAIL_OK 'js1_5/extensions/regress-367630': [FAIL_OK],
js1_5/extensions/regress-361360: FAIL_OK 'js1_5/extensions/regress-367923': [FAIL_OK],
js1_5/extensions/regress-361558: FAIL_OK 'js1_5/extensions/regress-368859': [FAIL_OK],
js1_5/extensions/regress-361571: FAIL_OK 'js1_5/extensions/regress-369696-01': [FAIL_OK],
js1_5/extensions/regress-361856: FAIL_OK 'js1_5/extensions/regress-369696-02': [FAIL_OK],
js1_5/extensions/regress-361964: FAIL_OK 'js1_5/extensions/regress-369696-03': [FAIL_OK],
js1_5/extensions/regress-363988: FAIL_OK 'js1_5/extensions/regress-374589': [FAIL_OK],
js1_5/extensions/regress-365869: FAIL_OK 'js1_5/extensions/regress-375801': [FAIL_OK],
js1_5/extensions/regress-367630: FAIL_OK 'js1_5/extensions/regress-376052': [FAIL_OK],
js1_5/extensions/regress-367923: FAIL_OK 'js1_5/extensions/regress-379523': [FAIL_OK],
js1_5/extensions/regress-368859: FAIL_OK 'js1_5/extensions/regress-380581': [FAIL_OK],
js1_5/extensions/regress-369696-01: FAIL_OK 'js1_5/extensions/regress-380831': [FAIL_OK],
js1_5/extensions/regress-369696-02: FAIL_OK 'js1_5/extensions/regress-381205': [FAIL_OK],
js1_5/extensions/regress-369696-03: FAIL_OK 'js1_5/extensions/regress-381211': [FAIL_OK],
js1_5/extensions/regress-374589: FAIL_OK 'js1_5/extensions/regress-381304': [FAIL_OK],
js1_5/extensions/regress-375801: FAIL_OK 'js1_5/extensions/regress-382509': [FAIL_OK],
js1_5/extensions/regress-376052: FAIL_OK 'js1_5/extensions/regress-383965': [FAIL_OK],
js1_5/extensions/regress-379523: FAIL_OK 'js1_5/extensions/regress-384680': [FAIL_OK],
js1_5/extensions/regress-380581: FAIL_OK 'js1_5/extensions/regress-385393-09': [FAIL_OK],
js1_5/extensions/regress-380831: FAIL_OK 'js1_5/extensions/regress-407501': [FAIL_OK],
js1_5/extensions/regress-381205: FAIL_OK 'js1_5/extensions/regress-418730': [FAIL_OK],
js1_5/extensions/regress-381211: FAIL_OK 'js1_5/extensions/regress-420612': [FAIL_OK],
js1_5/extensions/regress-381304: FAIL_OK 'js1_5/extensions/regress-420869-01': [FAIL_OK],
js1_5/extensions/regress-382509: FAIL_OK 'js1_5/extensions/regress-424257': [FAIL_OK],
js1_5/extensions/regress-383965: FAIL_OK 'js1_5/extensions/regress-424683-01': [FAIL_OK],
js1_5/extensions/regress-384680: FAIL_OK 'js1_5/extensions/regress-429739': [FAIL_OK],
js1_5/extensions/regress-385393-09: FAIL_OK 'js1_5/extensions/regress-454142': [FAIL_OK],
js1_5/extensions/regress-407501: FAIL_OK 'js1_5/extensions/regress-465145': [FAIL_OK],
js1_5/extensions/regress-418730: FAIL_OK 'js1_5/extensions/regress-469625': [FAIL_OK],
js1_5/extensions/regress-420612: FAIL_OK 'js1_5/extensions/regress-472787': [FAIL_OK],
js1_5/extensions/regress-420869-01: FAIL_OK 'js1_5/extensions/regress-44009': [FAIL_OK],
js1_5/extensions/regress-424257: FAIL_OK 'js1_5/extensions/regress-50447-1': [FAIL_OK],
js1_5/extensions/regress-424683-01: FAIL_OK 'js1_5/extensions/regress-50447': [FAIL_OK],
js1_5/extensions/regress-429739: FAIL_OK 'js1_5/extensions/regress-90596-001': [FAIL_OK],
js1_5/extensions/regress-454142: FAIL_OK 'js1_5/extensions/regress-90596-002': [FAIL_OK],
js1_5/extensions/regress-465145: FAIL_OK 'js1_5/extensions/regress-96284-001': [FAIL_OK],
js1_5/extensions/regress-469625: FAIL_OK 'js1_5/extensions/regress-96284-002': [FAIL_OK],
js1_5/extensions/regress-472787: FAIL_OK 'js1_5/extensions/toLocaleFormat-01': [FAIL_OK],
js1_5/extensions/regress-44009: FAIL_OK 'js1_5/extensions/toLocaleFormat-02': [FAIL_OK],
js1_5/extensions/regress-50447-1: FAIL_OK
js1_5/extensions/regress-50447: FAIL_OK 'js1_5/extensions/regress-330569': [TIMEOUT],
js1_5/extensions/regress-90596-001: FAIL_OK 'js1_5/extensions/regress-351448': [TIMEOUT],
js1_5/extensions/regress-90596-002: FAIL_OK # In the 64-bit version, this test takes longer to run out of memory
js1_5/extensions/regress-96284-001: FAIL_OK # than it does in the 32-bit version when attempting to generate a huge
js1_5/extensions/regress-96284-002: FAIL_OK # error message in debug mode.
js1_5/extensions/toLocaleFormat-01: FAIL_OK 'js1_5/extensions/regress-336410-1': [FAIL_OK, ['mode == debug and arch == x64', TIMEOUT]],
js1_5/extensions/toLocaleFormat-02: FAIL_OK
##################### DECOMPILATION TESTS #####################
js1_5/extensions/regress-330569: TIMEOUT
js1_5/extensions/regress-351448: TIMEOUT # We don't really about the outcome of running the
# In the 64-bit version, this test takes longer to run out of memory # decompilation tests as long as they don't crash or
# than it does in the 32-bit version when attempting to generate a huge # timeout.
# error message in debug mode.
js1_5/extensions/regress-336410-1: FAIL_OK || TIMEOUT if ($mode == debug && $arch == x64) 'js1_5/decompilation/regress-344120': [PASS, FAIL],
'js1_5/decompilation/regress-346892': [PASS, FAIL],
##################### DECOMPILATION TESTS ##################### 'js1_5/decompilation/regress-346902': [PASS, FAIL],
'js1_5/decompilation/regress-346904': [PASS, FAIL],
# We don't really about the outcome of running the 'js1_5/decompilation/regress-346915': [PASS, FAIL],
# decompilation tests as long as they don't crash or 'js1_5/decompilation/regress-349484': [PASS, FAIL],
# timeout. 'js1_5/decompilation/regress-349489': [PASS, FAIL],
'js1_5/decompilation/regress-349491': [PASS, FAIL],
js1_5/decompilation/regress-344120: PASS || FAIL 'js1_5/decompilation/regress-349596': [PASS, FAIL],
js1_5/decompilation/regress-346892: PASS || FAIL 'js1_5/decompilation/regress-349650': [PASS, FAIL],
js1_5/decompilation/regress-346902: PASS || FAIL 'js1_5/decompilation/regress-349663': [PASS, FAIL],
js1_5/decompilation/regress-346904: PASS || FAIL 'js1_5/decompilation/regress-350242': [PASS, FAIL],
js1_5/decompilation/regress-346915: PASS || FAIL 'js1_5/decompilation/regress-350263': [PASS, FAIL],
js1_5/decompilation/regress-349484: PASS || FAIL 'js1_5/decompilation/regress-350271': [PASS, FAIL],
js1_5/decompilation/regress-349489: PASS || FAIL 'js1_5/decompilation/regress-350666': [PASS, FAIL],
js1_5/decompilation/regress-349491: PASS || FAIL 'js1_5/decompilation/regress-350670': [PASS, FAIL],
js1_5/decompilation/regress-349596: PASS || FAIL 'js1_5/decompilation/regress-351104': [PASS, FAIL],
js1_5/decompilation/regress-349650: PASS || FAIL 'js1_5/decompilation/regress-351219': [PASS, FAIL],
js1_5/decompilation/regress-349663: PASS || FAIL 'js1_5/decompilation/regress-351336': [PASS, FAIL],
js1_5/decompilation/regress-350242: PASS || FAIL 'js1_5/decompilation/regress-351597': [PASS, FAIL],
js1_5/decompilation/regress-350263: PASS || FAIL 'js1_5/decompilation/regress-351625': [PASS, FAIL],
js1_5/decompilation/regress-350271: PASS || FAIL 'js1_5/decompilation/regress-351626': [PASS, FAIL],
js1_5/decompilation/regress-350666: PASS || FAIL 'js1_5/decompilation/regress-351693': [PASS, FAIL],
js1_5/decompilation/regress-350670: PASS || FAIL 'js1_5/decompilation/regress-351705': [PASS, FAIL],
js1_5/decompilation/regress-351104: PASS || FAIL 'js1_5/decompilation/regress-351793': [PASS, FAIL],
js1_5/decompilation/regress-351219: PASS || FAIL 'js1_5/decompilation/regress-352013': [PASS, FAIL],
js1_5/decompilation/regress-351336: PASS || FAIL 'js1_5/decompilation/regress-352022': [PASS, FAIL],
js1_5/decompilation/regress-351597: PASS || FAIL 'js1_5/decompilation/regress-352073': [PASS, FAIL],
js1_5/decompilation/regress-351625: PASS || FAIL 'js1_5/decompilation/regress-352202': [PASS, FAIL],
js1_5/decompilation/regress-351626: PASS || FAIL 'js1_5/decompilation/regress-352312': [PASS, FAIL],
js1_5/decompilation/regress-351693: PASS || FAIL 'js1_5/decompilation/regress-352360': [PASS, FAIL],
js1_5/decompilation/regress-351705: PASS || FAIL 'js1_5/decompilation/regress-352375': [PASS, FAIL],
js1_5/decompilation/regress-351793: PASS || FAIL 'js1_5/decompilation/regress-352453': [PASS, FAIL],
js1_5/decompilation/regress-352013: PASS || FAIL 'js1_5/decompilation/regress-352649': [PASS, FAIL],
js1_5/decompilation/regress-352022: PASS || FAIL 'js1_5/decompilation/regress-352873-01': [PASS, FAIL],
js1_5/decompilation/regress-352073: PASS || FAIL 'js1_5/decompilation/regress-352873-02': [PASS, FAIL],
js1_5/decompilation/regress-352202: PASS || FAIL 'js1_5/decompilation/regress-353000': [PASS, FAIL],
js1_5/decompilation/regress-352312: PASS || FAIL 'js1_5/decompilation/regress-353120': [PASS, FAIL],
js1_5/decompilation/regress-352360: PASS || FAIL 'js1_5/decompilation/regress-353146': [PASS, FAIL],
js1_5/decompilation/regress-352375: PASS || FAIL 'js1_5/decompilation/regress-354878': [PASS, FAIL],
js1_5/decompilation/regress-352453: PASS || FAIL 'js1_5/decompilation/regress-354910': [PASS, FAIL],
js1_5/decompilation/regress-352649: PASS || FAIL 'js1_5/decompilation/regress-355992': [PASS, FAIL],
js1_5/decompilation/regress-352873-01: PASS || FAIL 'js1_5/decompilation/regress-356083': [PASS, FAIL],
js1_5/decompilation/regress-352873-02: PASS || FAIL 'js1_5/decompilation/regress-356248': [PASS, FAIL],
js1_5/decompilation/regress-353000: PASS || FAIL 'js1_5/decompilation/regress-371692': [PASS, FAIL],
js1_5/decompilation/regress-353120: PASS || FAIL 'js1_5/decompilation/regress-373678': [PASS, FAIL],
js1_5/decompilation/regress-353146: PASS || FAIL 'js1_5/decompilation/regress-375639': [PASS, FAIL],
js1_5/decompilation/regress-354878: PASS || FAIL 'js1_5/decompilation/regress-375882': [PASS, FAIL],
js1_5/decompilation/regress-354910: PASS || FAIL 'js1_5/decompilation/regress-376564': [PASS, FAIL],
js1_5/decompilation/regress-355992: PASS || FAIL 'js1_5/decompilation/regress-383721': [PASS, FAIL],
js1_5/decompilation/regress-356083: PASS || FAIL 'js1_5/decompilation/regress-406555': [PASS, FAIL],
js1_5/decompilation/regress-356248: PASS || FAIL 'js1_5/decompilation/regress-460870': [PASS, FAIL],
js1_5/decompilation/regress-371692: PASS || FAIL }], # ALWAYS
js1_5/decompilation/regress-373678: PASS || FAIL
js1_5/decompilation/regress-375639: PASS || FAIL
js1_5/decompilation/regress-375882: PASS || FAIL ['arch == arm', {
js1_5/decompilation/regress-376564: PASS || FAIL
js1_5/decompilation/regress-383721: PASS || FAIL # BUG(3251229): Times out when running new crankshaft test script.
js1_5/decompilation/regress-406555: PASS || FAIL 'ecma_3/RegExp/regress-311414': [SKIP],
js1_5/decompilation/regress-460870: PASS || FAIL 'ecma/Date/15.9.5.8': [SKIP],
'ecma/Date/15.9.5.10-2': [SKIP],
'ecma/Date/15.9.5.11-2': [SKIP],
[ $arch == arm ] 'ecma/Date/15.9.5.12-2': [SKIP],
'js1_5/Array/regress-99120-02': [SKIP],
# BUG(3251229): Times out when running new crankshaft test script. 'js1_5/extensions/regress-371636': [SKIP],
ecma_3/RegExp/regress-311414: SKIP 'js1_5/Regress/regress-203278-1': [SKIP],
ecma/Date/15.9.5.8: SKIP 'js1_5/Regress/regress-404755': [SKIP],
ecma/Date/15.9.5.10-2: SKIP 'js1_5/Regress/regress-451322': [SKIP],
ecma/Date/15.9.5.11-2: SKIP
ecma/Date/15.9.5.12-2: SKIP
js1_5/Array/regress-99120-02: SKIP # BUG(1040): Allow this test to timeout.
js1_5/extensions/regress-371636: SKIP 'js1_5/GC/regress-203278-2': [PASS, TIMEOUT],
js1_5/Regress/regress-203278-1: SKIP }], # 'arch == arm'
js1_5/Regress/regress-404755: SKIP
js1_5/Regress/regress-451322: SKIP
['arch == mipsel', {
# BUG(1040): Allow this test to timeout. # BUG(3251229): Times out when running new crankshaft test script.
js1_5/GC/regress-203278-2: PASS || TIMEOUT 'ecma_3/RegExp/regress-311414': [SKIP],
'ecma/Date/15.9.5.8': [SKIP],
'ecma/Date/15.9.5.10-2': [SKIP],
[ $arch == mipsel ] 'ecma/Date/15.9.5.11-2': [SKIP],
'ecma/Date/15.9.5.12-2': [SKIP],
# BUG(3251229): Times out when running new crankshaft test script. 'js1_5/Array/regress-99120-02': [SKIP],
ecma_3/RegExp/regress-311414: SKIP 'js1_5/extensions/regress-371636': [SKIP],
ecma/Date/15.9.5.8: SKIP 'js1_5/Regress/regress-203278-1': [SKIP],
ecma/Date/15.9.5.10-2: SKIP 'js1_5/Regress/regress-404755': [SKIP],
ecma/Date/15.9.5.11-2: SKIP 'js1_5/Regress/regress-451322': [SKIP],
ecma/Date/15.9.5.12-2: SKIP
js1_5/Array/regress-99120-02: SKIP
js1_5/extensions/regress-371636: SKIP # BUG(1040): Allow this test to timeout.
js1_5/Regress/regress-203278-1: SKIP 'js1_5/GC/regress-203278-2': [PASS, TIMEOUT],
js1_5/Regress/regress-404755: SKIP }], # 'arch == mipsel'
js1_5/Regress/regress-451322: SKIP ]
# BUG(1040): Allow this test to timeout.
js1_5/GC/regress-203278-2: PASS || TIMEOUT
...@@ -25,14 +25,17 @@ ...@@ -25,14 +25,17 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # 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 ['arch == android_arm or arch == android_ia32', {
# escapes (we need to parse to distinguish octal escapes from valid # Remove this once the issue above is fixed. Android test runner does not
# back-references). # handle "FAIL" test expectation correctly.
strict-octal-regexp: FAIL 'strict-octal-regexp': [SKIP],
}], # 'arch == android_arm or arch == android_ia32'
[ $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
...@@ -25,95 +25,97 @@ ...@@ -25,95 +25,97 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
prefix test262 [
def FAIL_OK = FAIL, OKAY [ALWAYS, {
############################### BUGS ###################################
############################### BUGS ###################################
# Sequencing of getter side effects on receiver and argument properties
# Sequencing of getter side effects on receiver and argument properties # is wrong. The receiver callback should be called before any arguments
# is wrong. The receiver callback should be called before any arguments # are evaluated.
# are evaluated. # V8 Bug: http://code.google.com/p/v8/issues/detail?id=691
# V8 Bug: http://code.google.com/p/v8/issues/detail?id=691 '11.2.3-3_3': [FAIL],
11.2.3-3_3: FAIL
'15.5.4.9_CE': [['no_i18n', SKIP]],
15.5.4.9_CE: SKIP if $no_i18n
######################## NEEDS INVESTIGATION ###########################
######################## NEEDS INVESTIGATION ###########################
# These test failures are specific to the intl402 suite and need 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
# 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.
# incompatibilities if the test cases turn out to be broken or ambiguous. '6.2.3': [FAIL],
6.2.3: FAIL '9.2.1_2': [FAIL],
9.2.1_2: FAIL '9.2.5_11_g_ii_2': [FAIL],
9.2.5_11_g_ii_2: FAIL '9.2.6_2': [FAIL],
9.2.6_2: FAIL '10.1.1_a': [FAIL],
10.1.1_a: FAIL '10.1.1_19_c': [PASS, FAIL],
10.1.1_19_c: PASS || FAIL '10.1.2.1_4': [FAIL],
10.1.2.1_4: FAIL '10.2.3_b': [PASS, FAIL],
10.2.3_b: PASS || FAIL '10.3_a': [FAIL],
10.3_a: FAIL '11.1.1_17': [PASS, FAIL],
11.1.1_17: PASS || FAIL '11.1.1_19': [PASS, FAIL],
11.1.1_19: PASS || FAIL '11.1.1_20_c': [FAIL],
11.1.1_20_c: FAIL '11.1.1_a': [FAIL],
11.1.1_a: FAIL '11.1.2.1_4': [FAIL],
11.1.2.1_4: FAIL '11.3.2_FN_2': [PASS, FAIL],
11.3.2_FN_2: PASS || FAIL '11.3.2_TRF': [PASS, FAIL],
11.3.2_TRF: PASS || FAIL '11.3.2_TRP': [FAIL],
11.3.2_TRP: FAIL '11.3_a': [FAIL],
11.3_a: FAIL '12.1.1_a': [FAIL],
12.1.1_a: FAIL '12.1.2.1_4': [FAIL],
12.1.2.1_4: FAIL '12.3.2_FDT_7_a_iv': [FAIL],
12.3.2_FDT_7_a_iv: FAIL '12.3.3': [FAIL],
12.3.3: FAIL '12.3_a': [FAIL],
12.3_a: FAIL '15.5.4.9_3': [PASS, FAIL],
15.5.4.9_3: PASS || FAIL
##################### DELIBERATE INCOMPATIBILITIES #####################
##################### DELIBERATE INCOMPATIBILITIES #####################
# This tests precision of Math functions. The implementation for those
# This tests precision of Math functions. The implementation for those # trigonometric functions are platform/compiler dependent. Furthermore, the
# trigonometric functions are platform/compiler dependent. Furthermore, the # expectation values by far deviates from the actual result given by an
# expectation values by far deviates from the actual result given by an # arbitrary-precision calculator, making those tests partly bogus.
# 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.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.16_A7: PASS || FAIL_OK # Math.sin 'S15.8.2.18_A7': [PASS, FAIL_OK], # Math.tan
S15.8.2.18_A7: PASS || FAIL_OK # Math.tan
# Linux for ia32 (and therefore simulators) default to extended 80 bit
# Linux for ia32 (and therefore simulators) default to extended 80 bit floating # floating point formats, so these tests checking 64-bit FP precision fail.
# point formats, so these tests checking 64-bit FP precision fail. The other # The other platforms/arch's pass these tests.
# platforms/arch's pass these tests. # We follow the other major JS engines by keeping this default.
# We follow the other major JS engines by keeping this default. 'S8.5_A2.1': [PASS, FAIL_OK],
S8.5_A2.1: PASS || FAIL_OK 'S8.5_A2.2': [PASS, FAIL_OK],
S8.5_A2.2: PASS || FAIL_OK
############################ INVALID TESTS #############################
############################ INVALID TESTS #############################
# The reference value calculated by Test262 is incorrect if you run these
# The reference value calculated by Test262 is incorrect if you run these tests # tests in PST/PDT between first Sunday in March and first Sunday in April.
# in PST/PDT between first Sunday in March and first Sunday in April. The DST # The DST switch was moved in 2007 whereas Test262 bases the reference value
# switch was moved in 2007 whereas Test262 bases the reference value on 2000. # on 2000. Test262 Bug: https://bugs.ecmascript.org/show_bug.cgi?id=293
# 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_T1: PASS || FAIL_OK 'S15.9.3.1_A5_T2': [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_T3: PASS || FAIL_OK 'S15.9.3.1_A5_T4': [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_T5: PASS || FAIL_OK 'S15.9.3.1_A5_T6': [PASS, FAIL_OK],
S15.9.3.1_A5_T6: PASS || FAIL_OK
############################ SKIPPED TESTS #############################
############################ SKIPPED TESTS #############################
# These tests take a looong time to run in debug mode.
# 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.1_A2.5_T1: PASS, SKIP if $mode == debug 'S15.1.3.2_A2.5_T1': [PASS, ['mode == debug', SKIP]],
S15.1.3.2_A2.5_T1: PASS, SKIP if $mode == debug }], # ALWAYS
[ $arch == arm || $arch == mipsel ] ['arch == arm or arch == mipsel', {
# TODO(mstarzinger): Causes stack overflow on simulators due to eager # TODO(mstarzinger): Causes stack overflow on simulators due to eager
# compilation of parenthesized function literals. Needs investigation. # compilation of parenthesized function literals. Needs investigation.
S13.2.1_A1_T1: SKIP 'S13.2.1_A1_T1': [SKIP],
# BUG(3251225): Tests that timeout with --nocrankshaft. # BUG(3251225): Tests that timeout with --nocrankshaft.
S15.1.3.1_A2.4_T1: SKIP 'S15.1.3.1_A2.4_T1': [SKIP],
S15.1.3.1_A2.5_T1: SKIP 'S15.1.3.1_A2.5_T1': [SKIP],
S15.1.3.2_A2.4_T1: SKIP 'S15.1.3.2_A2.4_T1': [SKIP],
S15.1.3.2_A2.5_T1: SKIP 'S15.1.3.2_A2.5_T1': [SKIP],
S15.1.3.3_A2.3_T1: SKIP 'S15.1.3.3_A2.3_T1': [SKIP],
S15.1.3.4_A2.3_T1: SKIP 'S15.1.3.4_A2.3_T1': [SKIP],
}], # 'arch == arm or arch == mipsel'
]
...@@ -25,11 +25,12 @@ ...@@ -25,11 +25,12 @@
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # 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 ['mode == debug', {
dfg-double-vote-fuzz: PASS, SKIP if $mode == debug # Too slow in debug mode.
reentrant-caching: PASS, SKIP if $mode == debug 'dfg-int-overflow-in-loop': [SKIP],
sort-large-array: PASS, SKIP if $mode == debug 'dfg-double-vote-fuzz': [SKIP],
'reentrant-caching': [SKIP],
############################################################################## 'sort-large-array': [SKIP],
[ $deopt_fuzzer == True ] }], # 'mode == debug'
]
# 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
...@@ -26,14 +26,6 @@ ...@@ -26,14 +26,6 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # 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: # These outcomes can occur in a TestCase's outcomes list:
SKIP = "SKIP" SKIP = "SKIP"
FAIL = "FAIL" FAIL = "FAIL"
...@@ -116,18 +108,6 @@ def _ParseOutcomeList(rule, outcomes, target_dict, variables): ...@@ -116,18 +108,6 @@ def _ParseOutcomeList(rule, outcomes, target_dict, variables):
def ReadStatusFile(path, 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: with open(path) as f:
global KEYWORDS global KEYWORDS
contents = eval(f.read(), KEYWORDS) contents = eval(f.read(), KEYWORDS)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment