summaryrefslogtreecommitdiffstats
path: root/trunk/infrastructure/rhino1_7R1/testsrc/org/mozilla/javascript/drivers/StandardTests.java
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/infrastructure/rhino1_7R1/testsrc/org/mozilla/javascript/drivers/StandardTests.java')
-rw-r--r--trunk/infrastructure/rhino1_7R1/testsrc/org/mozilla/javascript/drivers/StandardTests.java212
1 files changed, 212 insertions, 0 deletions
diff --git a/trunk/infrastructure/rhino1_7R1/testsrc/org/mozilla/javascript/drivers/StandardTests.java b/trunk/infrastructure/rhino1_7R1/testsrc/org/mozilla/javascript/drivers/StandardTests.java
new file mode 100644
index 0000000..9c05df6
--- /dev/null
+++ b/trunk/infrastructure/rhino1_7R1/testsrc/org/mozilla/javascript/drivers/StandardTests.java
@@ -0,0 +1,212 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Rhino code, released May 6, 1999.
+ *
+ * The Initial Developer of the Original Code is
+ * Netscape Communications Corporation.
+ * Portions created by the Initial Developer are Copyright (C) 1997-1999
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ * Attila Szegedi
+ * David P. Caldwell <inonit@inonit.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * the GNU General Public License Version 2 or later (the "GPL"), in which
+ * case the provisions of the GPL are applicable instead of those above. If
+ * you wish to allow use of your version of this file only under the terms of
+ * the GPL and not to allow others to use your version of this file under the
+ * MPL, indicate your decision by deleting the provisions above and replacing
+ * them with the notice and other provisions required by the GPL. If you do
+ * not delete the provisions above, a recipient may use your version of this
+ * file under either the MPL or the GPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+package org.mozilla.javascript.drivers;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.Properties;
+
+import junit.framework.Assert;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.mozilla.javascript.tools.shell.ShellContextFactory;
+
+/**
+ * Executes the tests in the js/tests directory, much like jsDriver.pl does.
+ * Excludes tests found in the js/tests/rhino-n.tests file.
+ * @author Attila Szegedi
+ * @version $Id: StandardTests.java,v 1.6.2.2 2008/02/11 16:57:16 nboyd%atg.com Exp $
+ */
+public class StandardTests extends TestSuite
+{
+ public static TestSuite suite() throws Exception
+ {
+ TestSuite suite = new TestSuite("Standard JavaScript tests");
+
+ File testDir = null;
+ if (System.getProperty("mozilla.js.tests") != null) {
+ testDir = new File(System.getProperty("mozilla.js.tests"));
+ } else {
+ URL url = StandardTests.class.getResource(".");
+ String path = url.getFile();
+ int jsIndex = path.lastIndexOf("/js");
+ if(jsIndex == -1)
+ {
+ throw new IllegalStateException("You aren't running the tests from within the standard mozilla/js directory structure");
+ }
+ path = path.substring(0, jsIndex + 3).replace('/', File.separatorChar);
+ testDir = new File(path, "tests");
+ }
+ if(!testDir.isDirectory())
+ {
+ throw new FileNotFoundException(testDir + " is not a directory");
+ }
+ Properties excludes = new Properties();
+ loadExcludes(excludes, "/base.skip");
+ Properties opt1Excludes = new Properties();
+ loadExcludes(opt1Excludes, "/opt1.skip");
+ opt1Excludes.putAll(excludes);
+ for(int i = -1; i < 2; ++i)
+ {
+ TestSuite optimizationLevelSuite = new TestSuite("Optimization level " + i);
+ addSuites(optimizationLevelSuite, testDir, i == -1 ? excludes : opt1Excludes, i);
+ suite.addTest(optimizationLevelSuite);
+ }
+ return suite;
+ }
+
+ private static void loadExcludes(Properties excludes, String excludeFileName) throws IOException
+ {
+ InputStream in = StandardTests.class.getResourceAsStream(excludeFileName);
+ try
+ {
+ excludes.load(in);
+ }
+ finally
+ {
+ in.close();
+ }
+ }
+
+ private static void addSuites(TestSuite topLevel, File testDir, Properties excludes, int optimizationLevel)
+ {
+ File[] subdirs = testDir.listFiles(ShellTest.DIRECTORY_FILTER);
+ Arrays.sort(subdirs);
+ for (int i = 0; i < subdirs.length; i++)
+ {
+ File subdir = subdirs[i];
+ String name = subdir.getName();
+ TestSuite testSuite = new TestSuite(name);
+ addCategories(testSuite, subdir, name + "/", excludes, optimizationLevel);
+ topLevel.addTest(testSuite);
+ }
+ }
+
+ private static void addCategories(TestSuite suite, File suiteDir, String prefix, Properties excludes, int optimizationLevel)
+ {
+ File[] subdirs = suiteDir.listFiles(ShellTest.DIRECTORY_FILTER);
+ Arrays.sort(subdirs);
+ for (int i = 0; i < subdirs.length; i++)
+ {
+ File subdir = subdirs[i];
+ String name = subdir.getName();
+ TestSuite testCategory = new TestSuite(name);
+ addTests(testCategory, subdir, prefix + name + "/", excludes, optimizationLevel);
+ suite.addTest(testCategory);
+ }
+ }
+
+ private static void addTests(TestSuite suite, File suiteDir, String prefix, Properties excludes, int optimizationLevel)
+ {
+ File[] jsFiles = suiteDir.listFiles(ShellTest.TEST_FILTER);
+ Arrays.sort(jsFiles);
+ for (int i = 0; i < jsFiles.length; i++)
+ {
+ File jsFile = jsFiles[i];
+ String name = jsFile.getName();
+ if(!excludes.containsKey(prefix + name))
+ {
+ suite.addTest(new JsTestCase(jsFile, optimizationLevel));
+ }
+ }
+ }
+
+ private static class JunitStatus extends ShellTest.Status {
+ final void running(File jsFile) {
+ // do nothing
+ }
+
+ final void failed(String s) {
+ Assert.fail(s);
+ }
+
+ final void exitCodesWere(int expected, int actual) {
+ Assert.assertEquals("Unexpected exit code", expected, actual);
+ }
+
+ final void outputWas(String s) {
+ System.out.print(s);
+ }
+
+ final void threw(Throwable t) {
+ Assert.fail(ShellTest.getStackTrace(t));
+ }
+
+ final void timedOut() {
+ failed("Timed out.");
+ }
+ }
+
+ private static final class JsTestCase extends TestCase
+ {
+ private final File jsFile;
+ private final int optimizationLevel;
+
+ JsTestCase(File jsFile, int optimizationLevel)
+ {
+ super(jsFile.getName() + (optimizationLevel == 1 ? "-compiled" : "-interpreted"));
+ this.jsFile = jsFile;
+ this.optimizationLevel = optimizationLevel;
+ }
+
+ public int countTestCases()
+ {
+ return 1;
+ }
+
+ private static class ShellTestParameters extends ShellTest.Parameters {
+ int getTimeoutMilliseconds() {
+ if (System.getProperty("mozilla.js.tests.timeout") != null) {
+ return Integer.parseInt(System.getProperty("mozilla.js.tests.timeout"));
+ }
+ return 60000;
+ }
+ }
+
+ public void runBare() throws Exception
+ {
+ final ShellContextFactory shellContextFactory = new ShellContextFactory();
+ shellContextFactory.setOptimizationLevel(optimizationLevel);
+ ShellTest.run(shellContextFactory, jsFile, new ShellTestParameters(), new JunitStatus());
+ }
+ }
+}