/* * * * Copyright 1990-2009 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(); } }