/* * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code 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 code 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 in the LICENSE file that * accompanied this code). * * 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ import java.io.*; import java.lang.reflect.Constructor; /** * Test driver for MethodParameters testing. *
* The intended use of this driver is to run it, giving the name of * a single class compiled with -parameters as argument. The driver * will test the specified class, and any nested classes it finds. *
* Each class is tested in two way. By refelction, and by directly * checking MethodParameters attributes in the classfile. The checking * is done using two visitor classes {@link ClassFileVisitor} and * {@link ReflectionVisitor}. *
* The {@code ReflectionVisitor} test logically belongs with library tests. * we wish to reuse the same test-cases, so both test are committed together, * under langtools. The tests, may be duplicated in the jdk repository. */ public class Tester { final static File classesdir = new File(System.getProperty("test.classes", ".")); /** * The visitor classes that does the actual checking are referenced * statically, to force compilations, without having to reference * them in individual test cases. *
* This makes it easy to change the set of visitors, without
* complicating the design with dynamic discovery and compilation
* of visitor classes.
*/
static final Class visitors[] = {
ClassFileVisitor.class,
ReflectionVisitor.class
};
/**
* Test-driver expect a single classname as argument.
*/
public static void main(String... args) throws Exception {
if (args.length != 1) {
throw new Error("A single class name is expected as argument");
}
final String pattern = args[0] + ".*\\.class";
File files[] = classesdir.listFiles(new FileFilter() {
public boolean accept(File f) {
return f.getName().matches(pattern);
}
});
if (files.length == 0) {
File file = new File(classesdir, args[0] + ".class");
throw new Error(file.getPath() + " not found");
}
new Tester(args[0], files).run();
}
public Tester(String name, File files[]) {
this.classname = name;
this.files = files;
}
void run() throws Exception {
// Test with each visitor
for (Class