carbidecpp20devenv/plugins/org.eclipse.test.source_3.3.0.v20080507/src/org.junit4_4.3.1/junitsrc/org/junit/internal/runners/MethodValidator.java
author cawthron
Wed, 18 Mar 2009 17:21:00 -0500
changeset 1 82d1d1de1a01
permissions -rw-r--r--
import Carbide.c++
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     1
package org.junit.internal.runners;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     2
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     3
import java.lang.annotation.Annotation;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     4
import java.lang.reflect.Method;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     5
import java.lang.reflect.Modifier;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     6
import java.util.ArrayList;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     7
import java.util.List;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     8
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
     9
import org.junit.After;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    10
import org.junit.AfterClass;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    11
import org.junit.Before;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    12
import org.junit.BeforeClass;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    13
import org.junit.Test;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    14
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    15
public class MethodValidator {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    16
	private final TestIntrospector fIntrospector;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    17
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    18
	private final List<Throwable> fErrors= new ArrayList<Throwable>();
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    19
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    20
	private final Class<?> fTestClass;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    21
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    22
	public MethodValidator(Class<?> testClass) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    23
		fTestClass= testClass;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    24
		fIntrospector= new TestIntrospector(testClass);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    25
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    26
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    27
	public void validateInstanceMethods() {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    28
		validateTestMethods(After.class, false);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    29
		validateTestMethods(Before.class, false);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    30
		validateTestMethods(Test.class, false);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    31
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    32
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    33
	public void validateStaticMethods() {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    34
		validateTestMethods(BeforeClass.class, true);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    35
		validateTestMethods(AfterClass.class, true);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    36
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    37
	
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    38
	public List<Throwable> validateMethodsForDefaultRunner() {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    39
		validateNoArgConstructor();
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    40
		validateStaticMethods();
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    41
		validateInstanceMethods();
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    42
		return fErrors;
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    43
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    44
	
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    45
	public void assertValid() throws InitializationError {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    46
		if (!fErrors.isEmpty())
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    47
			throw new InitializationError(fErrors);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    48
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    49
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    50
	public void validateNoArgConstructor() {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    51
		try {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    52
			fTestClass.getConstructor();
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    53
		} catch (Exception e) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    54
			fErrors.add(new Exception("Test class should have public zero-argument constructor", e));
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    55
		}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    56
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    57
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    58
	private void validateTestMethods(Class<? extends Annotation> annotation,
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    59
			boolean isStatic) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    60
		List<Method> methods= fIntrospector.getTestMethods(annotation);
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    61
		for (Method each : methods) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    62
			if (Modifier.isStatic(each.getModifiers()) != isStatic) {
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    63
				String state= isStatic ? "should" : "should not";
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    64
				fErrors.add(new Exception("Method " + each.getName() + "() "
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    65
						+ state + " be static"));
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    66
			}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    67
			if (!Modifier.isPublic(each.getDeclaringClass().getModifiers()))
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    68
				fErrors.add(new Exception("Class " + each.getDeclaringClass().getName()
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    69
						+ " should be public"));
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    70
			if (!Modifier.isPublic(each.getModifiers()))
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    71
				fErrors.add(new Exception("Method " + each.getName()
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    72
						+ " should be public"));
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    73
			if (each.getReturnType() != Void.TYPE)
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    74
				fErrors.add(new Exception("Method " + each.getName()
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    75
						+ " should be void"));
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    76
			if (each.getParameterTypes().length != 0)
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    77
				fErrors.add(new Exception("Method " + each.getName()
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    78
						+ " should have no parameters"));
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    79
		}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    80
	}
82d1d1de1a01 import Carbide.c++
cawthron
parents:
diff changeset
    81
}