/*
*
*
* Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version
* 2 only, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License version 2 for more details (a copy is
* included at /legal/license.txt).
*
* You should have received a copy of the GNU General Public License
* version 2 along with this work; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
* Clara, CA 95054 or visit www.sun.com if you need additional
* information or have any questions.
*/
package tests;
import java.io.*;
import java.util.*;
import util.*;
/**
* Find the .java and .jasm source files for the unix tests.
*/
public class CollectTestCases {
static void usage() {
System.out.println("Usage: java -jar buildtool.jar " +
"testcases <workspacedir> <outputdir>");
}
static File workspacedir;
static File outputdir;
static Vector sourcefiles;
static PrintWriter pw;
static Hashtable env;
public static void main(String args[]) throws Throwable {
if (args.length != 2) {
usage();
System.exit(1);
}
workspacedir = new File(args[0]);
outputdir = new File(args[1]);
env = Util.getenv();
if (!workspacedir.isDirectory()) {
usage();
System.exit(1);
}
sourcefiles = listSourceFiles(workspacedir);
FileOutputStream out =
new FileOutputStream(new File(outputdir, "testcases.make"));
pw = new PrintWriter(new OutputStreamWriter(out));
writeHeader();
writeList("TEST_JAVA_SRCS", null, null, ".java");
writeList("TEST_JASM_SRCS", null, null, ".jasm");
pw.close();
}
static Vector listSourceFiles(File dir) {
Vector v = new Vector();
listSourceFiles(v, new File(dir, "src/tests"));
return v;
}
static void listSourceFiles(Vector list, File dir) {
String children[] = dir.list();
if (children == null) {
return;
}
for (int i=0; i<children.length; i++) {
String child = children[i];
if (child.equals("SCCS")) {
continue;
}
if (child.equals("CVS")) {
continue;
}
if (child.equals(".")) {
continue;
}
if (child.equals("..")) {
continue;
}
if (checkSkip(child)) {
continue;
}
File c = new File(dir, child);
if (c.isDirectory()) {
listSourceFiles(list, c);
} else {
list.addElement(c.getAbsolutePath());
}
}
}
static boolean checkSkip(String s) {
String value = (String)env.get("ENABLE_ISOLATES");
if (value == null || !value.equals("true")) {
if (s.indexOf("isolate") != -1) {
return true;
}
if (s.indexOf("dynamic_natives") != -1) {
return true;
}
if (s.indexOf("Isolate") != -1) {
return true;
}
if (s.indexOf("MShLib") != -1) {
return true;
}
} else {
if (s.indexOf("SShLib") != -1) {
return true;
}
}
value = (String)env.get("ENABLE_LIB_IMAGES");
if (value == null || !value.equals("true")) {
if (s.indexOf("ShLib") != -1) {
return true;
}
}
value = (String)env.get("ENABLE_MULTIPLE_PROFILES_SUPPORT");
if (value == null || !value.equals("true")) {
if (s.indexOf("MVMProfileTest") != -1) {
return true;
}
if (s.indexOf("MVMRestrictedTest") != -1) {
return true;
}
}
return false;
}
static void writeHeader() {
pw.println("# This file is auto-generated by ");
pw.println("# $(JVMWorkSpace)/src/tools/buildtool/tests/" +
"CollectTestCases.java.");
pw.println("# Do not edit!");
pw.println();
pw.println();
pw.println();
}
/**
* Write a list of files in Makefile format. An example output is
* <pre>
* TESTS_JAVA_SRCS = \
* e:/cldcvm/src/tests/Sanity.java \
* e:/cldcvm/src/tests/Foo.java
* </pre>
*
* @param includePattern if non-null, a file in the <i>list</i>
* won't be printed if the file's pathname
* does not contain <i>includePattern</i> as
* a substring.
* @param excludePattern if non-null, a file in the <i>list</i>
* won't be printed if the file's pathname
* contains <i>excludePattern</i> as
* a substring.
* @param suffix if non-null, a file in the <i>list</i>
* won't be printed if the suffix of the file
* is not <i>suffix</i>.
*/
static void writeList(String varName,
String includePattern, String excludePattern,
String suffix) throws Throwable {
/*
* Note: the list of source files are written into two places:
*
* [1] in testcases.make, as a Makefile variable
* [2] in the file <varName>.lst, such that the list of source files
* may be passed to javac as @<varName>.lst.
*
* The main reason for having <varName>.lst is Windows may not
* be able to handle too many source files if we list all of them
* separately in the command-line.
*/
FileOutputStream out =
new FileOutputStream(new File(outputdir, varName + ".lst"));
PrintWriter pw2 = new PrintWriter(new OutputStreamWriter(out));
pw.print(varName + " =");
for (int i=0; i<sourcefiles.size(); i++) {
String path = (String)sourcefiles.elementAt(i);
if (includePattern != null) {
if (path.indexOf(includePattern) == -1) {
continue;
}
}
if (excludePattern != null) {
if (path.indexOf(excludePattern) != -1) {
continue;
}
}
if (suffix != null) {
if (!path.endsWith(suffix)) {
continue;
}
}
pw.print(" \\");
pw.println();
pw.print(" ");
for (int j=0; j<path.length(); j++) {
char c = path.charAt(j);
if (c == '\\') {
pw.print("/");
pw2.print("/");
} else {
pw.print(c);
pw2.print(c);
}
}
pw2.println();
}
pw.println();
pw.println();
pw2.close();
}
}
|