| #!/usr/bin/env ruby |
| |
| # Copyright (C) 2013 Apple Inc. All rights reserved. |
| # |
| # Redistribution and use in source and binary forms, with or without |
| # modification, are permitted provided that the following conditions |
| # are met: |
| # |
| # 1. Redistributions of source code must retain the above copyright |
| # notice, this list of conditions and the following disclaimer. |
| # 2. 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. |
| # |
| # THIS SOFTWARE IS PROVIDED BY APPLE AND ITS 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 APPLE OR ITS 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. |
| |
| require 'pathname' |
| require 'yaml' |
| |
| def toSet(array) |
| hash = {} |
| array.each { |
| | value | |
| hash[value] = true |
| } |
| hash |
| end |
| |
| # Negative mozilla tests that we pass just fine. |
| EXPECT_NO_FAIL = |
| toSet(["js1_2/function/function-001-n.js", |
| "js1_3/Script/function-001-n.js", |
| "js1_3/regress/function-001-n.js"]) |
| |
| EXPECT_FAIL = |
| toSet(["ecma_2/Exceptions/function-001.js", |
| "ecma_2/RegExp/regress-001.js", |
| "ecma_3/FunExpr/fe-001.js", |
| "ecma_3/Statements/regress-194364.js", |
| "ecma_3/Unicode/uc-001.js", |
| "js1_2/Objects/toString-001.js", |
| "js1_2/function/Function_object.js", |
| "js1_2/function/regexparg-1.js", |
| "js1_2/operator/equality.js", |
| "js1_2/regexp/RegExp_lastIndex.js", |
| "js1_2/regexp/regress-6359.js", |
| "js1_2/regexp/regress-9141.js", |
| "js1_2/regexp/simple_form.js", |
| "js1_2/regexp/string_split.js", |
| "js1_2/version120/boolean-001.js", |
| "js1_2/version120/regress-99663.js", |
| "js1_3/Script/script-001.js", |
| "js1_5/Exceptions/catchguard-001.js", |
| "js1_5/Exceptions/catchguard-002.js", |
| "js1_5/Exceptions/catchguard-003.js", |
| "js1_5/Exceptions/errstack-001.js", |
| "js1_5/Exceptions/regress-50447.js", |
| "js1_5/GetSet/getset-001.js", |
| "js1_5/GetSet/getset-002.js", |
| "js1_5/GetSet/getset-003.js", |
| "js1_5/Object/regress-90596-001.js", |
| "js1_5/Object/regress-90596-002.js", |
| "js1_5/Object/regress-96284-001.js", |
| "js1_5/Object/regress-96284-002.js", |
| "js1_5/Regress/regress-44009.js", |
| "js1_5/Regress/regress-103602.js", |
| "js1_5/Regress/regress-104077.js", |
| "js1_5/Regress/regress-127557.js", |
| "js1_5/Regress/regress-172699.js", |
| "js1_5/Regress/regress-179524.js", |
| "js1_5/Scope/regress-220584.js", |
| "js1_5/Scope/scope-001.js", |
| "js1_6/Regress/regress-301574.js", |
| "js1_6/Regress/regress-309242.js", |
| "js1_6/Regress/regress-314887.js", |
| "js1_6/String/regress-306591.js"]) |
| |
| SKIPPED = |
| toSet(["ecma/Date/15.9.2.1.js", |
| "ecma/Date/15.9.2.2-1.js", |
| "ecma/Date/15.9.2.2-2.js", |
| "ecma/Date/15.9.2.2-3.js", |
| "ecma/Date/15.9.2.2-4.js", |
| "ecma/Date/15.9.2.2-5.js", |
| "ecma/Date/15.9.2.2-6.js", |
| "ecma_3/Date/15.9.5.7.js", |
| "ecma/Date/15.9.5.14.js", |
| "ecma/Date/15.9.5.31-1.js", |
| "ecma/Date/15.9.5.34-1.js"]) |
| |
| $me = Pathname.new(ARGV[0]) |
| $list = [] |
| |
| def recurse(directory, shells, countdown) |
| toRecurse = [] |
| toRun = [] |
| directory.each_child { |
| | entry | |
| if entry.basename.to_s == "shell.js" |
| shells = shells + [entry] |
| elsif entry.directory? |
| toRecurse << entry |
| elsif entry.basename.to_s =~ /\.js$/ and countdown <= 0 |
| toRun << entry |
| end |
| } |
| toRecurse.each { |
| | entry | |
| recurse(entry, shells, countdown - 1) |
| } |
| toRun.each { |
| | entry | |
| testPath = entry.relative_path_from($me).to_s |
| mode = :normal |
| if entry.basename.to_s =~ /-n\.js/ |
| mode = :negative |
| end |
| if SKIPPED[testPath] |
| mode = :skip |
| end |
| if EXPECT_FAIL[testPath] |
| mode = :fail |
| end |
| if EXPECT_NO_FAIL[testPath] |
| mode = :normal |
| end |
| $list << { |
| "path" => testPath, |
| "cmd" => "defaultRunMozillaTest :#{mode}, " + shells.map { |
| | shell | |
| shell.relative_path_from(directory).to_s.inspect |
| }.join(", ") |
| } |
| } |
| end |
| |
| recurse($me, [], 2) |
| |
| puts $list.to_yaml |
| |