FileDocCategorySizeDatePackage
JUnitVersionHelper.javaAPI DocApache Ant 1.704502Wed Dec 13 06:16:18 GMT 2006org.apache.tools.ant.taskdefs.optional.junit

JUnitVersionHelper

public class JUnitVersionHelper extends Object
Work around for some changes to the public JUnit API between different JUnit releases.

Fields Summary
private static Method
testCaseName
Constructors Summary
Methods Summary
static java.lang.StringgetTestCaseClassName(junit.framework.Test test)
Tries to find the name of the class which a test represents across JUnit 3 and 4.

        String className = test.getClass().getName();
        if (test instanceof JUnitTaskMirrorImpl.VmExitErrorTest) {
            className = ((JUnitTaskMirrorImpl.VmExitErrorTest) test).getClassName();
        } else
        if (className.equals("junit.framework.JUnit4TestCaseFacade")) {
            // JUnit 4 wraps solo tests this way. We can extract
            // the original test name with a little hack.
            String name = test.toString();
            int paren = name.lastIndexOf('(");
            if (paren != -1 && name.endsWith(")")) {
                className = name.substring(paren + 1, name.length() - 1);
            }
        }
        return className;
    
public static java.lang.StringgetTestCaseName(junit.framework.Test t)
JUnit 3.7 introduces TestCase.getName() and subsequent versions of JUnit remove the old name() method. This method provides access to the name of a TestCase via reflection that is supposed to work with version before and after JUnit 3.7.

since Ant 1.5.1 this method will invoke "public String getName()" on any implementation of Test if it exists.

Since Ant 1.7 also checks for JUnit4TestCaseFacade explicitly. This is used by junit.framework.JUnit4TestAdapter.

param
t the test.
return
the name of the test.

     
        try {
            testCaseName = TestCase.class.getMethod("getName", new Class[0]);
        } catch (NoSuchMethodException e) {
            // pre JUnit 3.7
            try {
                testCaseName = TestCase.class.getMethod("name", new Class[0]);
            } catch (NoSuchMethodException e2) {
                // ignore
            }
        }
    
        if (t != null && t.getClass().getName().equals("junit.framework.JUnit4TestCaseFacade")) {
            // Self-describing as of JUnit 4 (#38811). But trim "(ClassName)".
            String name = t.toString();
            if (name.endsWith(")")) {
                int paren = name.lastIndexOf('(");
                return name.substring(0, paren);
            } else {
                return name;
            }
        }
        if (t instanceof TestCase && testCaseName != null) {
            try {
                return (String) testCaseName.invoke(t, new Object[0]);
            } catch (Throwable e) {
                // ignore
            }
        } else {
            try {
                Method getNameMethod = null;
                try {
                    getNameMethod =
                        t.getClass().getMethod("getName", new Class [0]);
                } catch (NoSuchMethodException e) {
                    getNameMethod = t.getClass().getMethod("name",
                                                           new Class [0]);
                }
                if (getNameMethod != null
                    && getNameMethod.getReturnType() == String.class) {
                    return (String) getNameMethod.invoke(t, new Object[0]);
                }
            } catch (Throwable e) {
                // ignore
            }
        }
        return "unknown";