rhino1.7.6.testsrc.org.mozilla.javascript.drivers.StandardTests Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of rhino Show documentation
Show all versions of rhino Show documentation
Rhino is an open-source implementation of JavaScript written entirely in Java. It is typically
embedded into Java applications to provide scripting to end users.
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.javascript.drivers;
import java.io.File;
import java.io.FileNotFoundException;
import java.net.URL;
import java.util.Arrays;
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.15 2009/07/21 17:39:05 nboyd%atg.com Exp $
*/
public class StandardTests extends TestSuite
{
// Disable this suite in favor of
// org.mozilla.javascript.tests.MozillaSuiteTest
private static final boolean DISABLE = true;
public static TestSuite suite() throws Exception
{
TestSuite suite = new TestSuite("Standard JavaScript tests");
if (!DISABLE) {
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);
path = path.replace("%20", " ");
testDir = new File(path, "tests");
}
if(!testDir.isDirectory())
{
throw new FileNotFoundException(testDir + " is not a directory");
}
String[] excludes = TestUtils.loadTestsFromResource("/base.skip", null);
String[] opt1Excludes = TestUtils.loadTestsFromResource("/opt1.skip", 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 addSuites(TestSuite topLevel, File testDir, String[] 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();
if (TestUtils.matches(excludes, name)) {
continue;
}
TestSuite testSuite = new TestSuite(name);
addCategories(testSuite, subdir, name + "/", excludes, optimizationLevel);
topLevel.addTest(testSuite);
}
}
private static void addCategories(TestSuite suite, File suiteDir, String prefix, String[] 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, String[] 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 (!TestUtils.matches(excludes, prefix + name)) {
suite.addTest(new JsTestCase(jsFile, optimizationLevel));
}
}
}
public static class JunitStatus extends ShellTest.Status {
@Override
public final void running(File jsFile) {
// do nothing
}
@Override
public final void failed(String s) {
Assert.fail(s);
}
@Override
public final void exitCodesWere(int expected, int actual) {
Assert.assertEquals("Unexpected exit code", expected, actual);
}
@Override
public final void outputWas(String s) {
// Do nothing; we don't want to see the output when running JUnit
// tests.
}
@Override
public final void threw(Throwable t) {
Assert.fail(ShellTest.getStackTrace(t));
}
@Override
public final void timedOut() {
failed("Timed out.");
}
}
public 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;
}
@Override
public int countTestCases()
{
return 1;
}
public static class ShellTestParameters extends ShellTest.Parameters {
@Override
public int getTimeoutMilliseconds() {
if (System.getProperty("mozilla.js.tests.timeout") != null) {
return Integer.parseInt(System.getProperty("mozilla.js.tests.timeout"));
}
return 60000;
}
}
@Override
public void runBare() throws Exception
{
final ShellContextFactory shellContextFactory = new ShellContextFactory();
shellContextFactory.setOptimizationLevel(optimizationLevel);
ShellTestParameters params = new ShellTestParameters();
ShellTest.run(shellContextFactory, jsFile, params, new JunitStatus());
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy