|
What this is
Other links
The source code
// $Id: TestAll.java,v 1.5 2004/08/27 14:59:52 mvw Exp $
// Copyright (c) 1996-2001 The Regents of the University of California. All
// Rights Reserved. Permission to use, copy, modify, and distribute this
// software and its documentation without fee, and without a written
// agreement is hereby granted, provided that the above copyright notice
// and this paragraph appear in all copies. This software program and
// documentation are copyrighted by The Regents of the University of
// California. The software program and documentation are supplied "AS
// IS", without any accompanying services from The Regents. The Regents
// does not warrant that the operation of the program will be
// uninterrupted or error-free. The end-user understands that the program
// was developed for research purposes and is advised not to rely
// exclusively on the program for any reason. IN NO EVENT SHALL THE
// UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
// SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS,
// ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
// THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
// SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
// PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
// CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
// UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
import java.util.*;
import java.io.*;
import junit.framework.*;
class ClassFinder {
// The cumulative list of classes found.
private final Vector classNameList = new Vector ();
/**
* Find all classes stored in classfiles in classPathRoot
* Inner classes are not supported.
*/
public ClassFinder(final File classPathRoot) throws IOException {
findAndStoreTestClasses(classPathRoot, null);
}
/**
* Recursive method that adds all class names
* related to classfiles it finds in
* the currentDirectory (and below).
*/
private void findAndStoreTestClasses(final File currentDirectory,
final String packageprefix)
throws IOException
{
String files[] = currentDirectory.list();
for (int i = 0; i < files.length; i++) {
File file = new File(currentDirectory, files[i]);
String fileBase = file.getName ();
int idx = fileBase.indexOf(".class");
final int classExtensionLength = 6;
if (idx != -1
&& (fileBase.length() - idx) == classExtensionLength
&& fileBase.startsWith("Test")) {
String fname = packageprefix + "." + fileBase.substring(0, idx);
System.out.println("Processing: " + fname);
classNameList.add(fname);
} else if (file.isDirectory()) {
if (packageprefix == null)
findAndStoreTestClasses(file, fileBase);
else
findAndStoreTestClasses(file,
packageprefix + "." + fileBase);
}
}
}
/**
* Return an iterator over the collection of classnames (Strings)
*/
public Iterator getClasses () {
return classNameList.iterator();
};
}
class TestCaseLoader {
private final Vector classList = new Vector ();
public void loadTestCases (final Iterator classNamesIterator) {
while (classNamesIterator.hasNext ()) {
String className = (String) classNamesIterator.next ();
try {
Class candidateClass = Class.forName(className);
classList.add(candidateClass);
} catch (ClassNotFoundException e) {
System.err.println("Cannot load class: " + className);
}
}
}
/**
* Obtain an iterator over the collection of test case classes
* loaded by loadTestCases
*/
public Iterator getClasses () {
return classList.iterator ();
}
}
/**
* The class that will test everything...
*
*/
public class TestAll extends TestCase {
private static int addAllTests(final TestSuite suite,
final Iterator classIterator)
throws java.io.IOException {
int testClassCount = 0;
while (classIterator.hasNext ()) {
Class testCaseClass = (Class) classIterator.next ();
suite.addTest(new TestSuite(testCaseClass));
System.out.println("Loaded test case: "
+ testCaseClass.getName ());
testClassCount++;
}
return testClassCount;
}
/**
* @return the test
* @throws Throwable
*/
public static Test suite()
throws Throwable {
try {
File classRoot = new File("build/classes");
TestSuite suite = new TestSuite();
if (classRoot == null) // No test cases found.
return suite;
ClassFinder classFinder = new ClassFinder(classRoot);
TestCaseLoader testCaseLoader = new TestCaseLoader();
testCaseLoader.loadTestCases(classFinder.getClasses());
int numberOfTests = addAllTests(suite, testCaseLoader.getClasses());
System.out.println("Number of test classes found: "
+ numberOfTests);
return suite;
} catch (Throwable t) {
// This ensures we have extra information.
// Otherwise we get a "Could not invoke the suite method." message.
t.printStackTrace ();
throw t;
}
}
/**
* The basic constructor - called by the test runners.
*
* @param s the name of the test
*/
public TestAll(String s) {
super(s);
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.