Class TestClassTransformer
- java.lang.Object
-
- org.powermock.core.transformers.impl.TestClassTransformer
-
- All Implemented Interfaces:
MockTransformer
public abstract class TestClassTransformer extends java.lang.Object implements MockTransformer
MockTransformer implementation that will make PowerMock test-class enhancements for four purposes... 1) Make test-class static initializer and constructor send crucial details (for PowerMockTestListener events) to GlobalNotificationBuildSupport so that this information can be forwarded to whichever facility is used for composing the PowerMockTestListener events. 2) Removal of test-method annotations as a mean to achieve test-suite chunking! 3) Restore original test-class constructors` accesses (in case they have all been made public byAbstractMainMockTransformer.setAllConstructorsToPublic(javassist.CtClass)) - to avoid that multiple public test-class constructors cause a delegate runner from JUnit (or 3rd party) to bail out with an error message such as "Test class can only have one constructor". 4) Set test-class defer constructor (if exist) as protected instead of public. Otherwise a delegate runner from JUnit (or 3rd party) might get confused by the presence of more than one test-class constructor and bail out with an error message such as "Test class can only have one constructor". The #3 and #4 enhancements will also be enforced on the constructors of classes that are nested within the test-class.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceTestClassTransformer.ForTestClass
-
Field Summary
Fields Modifier and Type Field Description private java.lang.Class<?>testClassprivate java.lang.Class<? extends java.lang.annotation.Annotation>testMethodAnnotationType
-
Constructor Summary
Constructors Modifier Constructor Description privateTestClassTransformer(java.lang.Class<?> testClass, java.lang.Class<? extends java.lang.annotation.Annotation> testMethodAnnotationType)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description private voidaddClassInitializerNotification(javassist.CtClass clazz)private voidaddConstructorNotification(javassist.CtClass clazz)private voidaddLifeCycleNotifications(javassist.CtClass clazz)private java.lang.Class<?>asOriginalClass(javassist.CtClass type)private java.lang.Class<?>[]asOriginalClassParams(javassist.CtClass[] parameterTypes)private static java.lang.StringcreateSignature(java.lang.String testClass, java.lang.String returnType, java.lang.String methodName, java.lang.String[] paramTypes)static TestClassTransformer.ForTestClassforTestClass(java.lang.Class<?> testClass)private static booleanhasSuperClass(javassist.CtClass clazz)private booleanisNestedWithinTestClass(javassist.CtClass clazz)private booleanisTestClass(javassist.CtClass clazz)private voidmakeDeferConstructorNonPublic(javassist.CtClass clazz)(package private) abstract booleanmustHaveTestAnnotationRemoved(javassist.CtMethod method)private voidremoveTestAnnotationsForTestMethodsThatRunOnOtherClassLoader(javassist.CtClass clazz)private voidremoveTestMethodAnnotationFrom(javassist.CtMethod m)private voidrestoreOriginalConstructorsAccesses(javassist.CtClass clazz)private static java.lang.StringsignatureOf(java.lang.reflect.Method m)private static java.lang.StringsignatureOf(javassist.CtMethod m)javassist.CtClasstransform(javassist.CtClass clazz)Transforms theclazz.
-
-
-
Method Detail
-
forTestClass
public static TestClassTransformer.ForTestClass forTestClass(java.lang.Class<?> testClass)
-
isTestClass
private boolean isTestClass(javassist.CtClass clazz)
-
isNestedWithinTestClass
private boolean isNestedWithinTestClass(javassist.CtClass clazz)
-
asOriginalClass
private java.lang.Class<?> asOriginalClass(javassist.CtClass type) throws java.lang.Exception- Throws:
java.lang.Exception
-
asOriginalClassParams
private java.lang.Class<?>[] asOriginalClassParams(javassist.CtClass[] parameterTypes) throws java.lang.Exception- Throws:
java.lang.Exception
-
mustHaveTestAnnotationRemoved
abstract boolean mustHaveTestAnnotationRemoved(javassist.CtMethod method) throws java.lang.Exception- Throws:
java.lang.Exception
-
removeTestMethodAnnotationFrom
private void removeTestMethodAnnotationFrom(javassist.CtMethod m) throws java.lang.ClassNotFoundException- Throws:
java.lang.ClassNotFoundException
-
removeTestAnnotationsForTestMethodsThatRunOnOtherClassLoader
private void removeTestAnnotationsForTestMethodsThatRunOnOtherClassLoader(javassist.CtClass clazz) throws java.lang.Exception- Throws:
java.lang.Exception
-
transform
public javassist.CtClass transform(javassist.CtClass clazz) throws java.lang.ExceptionDescription copied from interface:MockTransformerTransforms theclazz.- Specified by:
transformin interfaceMockTransformer- Parameters:
clazz- The class to be transform into a mock enabled class.- Returns:
- A
CtClassrepresentation of the mocked class. - Throws:
java.lang.Exception
-
addLifeCycleNotifications
private void addLifeCycleNotifications(javassist.CtClass clazz)
-
addClassInitializerNotification
private void addClassInitializerNotification(javassist.CtClass clazz) throws javassist.CannotCompileException- Throws:
javassist.CannotCompileException
-
hasSuperClass
private static boolean hasSuperClass(javassist.CtClass clazz)
-
addConstructorNotification
private void addConstructorNotification(javassist.CtClass clazz) throws javassist.CannotCompileException- Throws:
javassist.CannotCompileException
-
restoreOriginalConstructorsAccesses
private void restoreOriginalConstructorsAccesses(javassist.CtClass clazz) throws java.lang.Exception- Throws:
java.lang.Exception
-
makeDeferConstructorNonPublic
private void makeDeferConstructorNonPublic(javassist.CtClass clazz)
-
signatureOf
private static java.lang.String signatureOf(java.lang.reflect.Method m)
-
signatureOf
private static java.lang.String signatureOf(javassist.CtMethod m) throws javassist.NotFoundException- Throws:
javassist.NotFoundException
-
createSignature
private static java.lang.String createSignature(java.lang.String testClass, java.lang.String returnType, java.lang.String methodName, java.lang.String[] paramTypes)
-
-