| #!/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 | |