blob: b4e4c0e6aec6620af8d4f1883689816aa10c2451 [file] [log] [blame]
package ioc.specs
import org.apache.tapestry5.beaneditor.ReorderProperties
import org.apache.tapestry5.ioc.annotations.Advise
import org.apache.tapestry5.ioc.internal.AdviceModule
import org.apache.tapestry5.ioc.internal.AnnotatedServiceInterface
import org.apache.tapestry5.ioc.internal.DecoratorModule
import org.apache.tapestry5.ioc.internal.NonAnnotatedServiceInterface
import org.apache.tapestry5.ioc.internal.TestAdvice
/**
* Tests whether MethodAdvice.getAnnotation() is actually returning annotations from
* the service implementation methods and not from the service interface ones.
* The tests also verify whether the proxy annotations have the service implementation annotations
* and whether the service implementation annotations were copied the generated proxy class.
* @see TestAdvice
*/
class MethodInvocationGetAnnotationSpec extends AbstractRegistrySpecification {
def "MethodAdvice.getAnnotation() and getMethod() in service decoration"() {
when:
buildRegistry DecoratorModule
def nonAnnotatedService = registry.getService NonAnnotatedServiceInterface.class
def nonAnnotatedResult = nonAnnotatedService.execute(0);
def nonAnnotatedMethod = nonAnnotatedService.getClass().getMethod("execute", int.class);
def annotatedService = registry.getService AnnotatedServiceInterface.class
def annotatedResult = annotatedService.execute(0);
def annotatedMethod = annotatedService.getClass().getMethod("execute", int.class);
then:
nonAnnotatedMethod != null
nonAnnotatedMethod.getAnnotation(Advise.class) != null
nonAnnotatedMethod.getAnnotation(Advise.class).id().equals("id")
nonAnnotatedMethod.getAnnotation(Advise.class).serviceInterface() == NonAnnotatedServiceInterface.class
nonAnnotatedService.getClass().getAnnotation(ReorderProperties.class) != null
nonAnnotatedService.getClass().getAnnotation(ReorderProperties.class).value().equals("reorder")
nonAnnotatedResult == TestAdvice.ANNOTATION_FOUND
annotatedMethod != null
annotatedMethod.getAnnotation(Advise.class) != null
annotatedMethod.getAnnotation(Advise.class).id().equals("id")
annotatedMethod.getAnnotation(Advise.class).serviceInterface() == NonAnnotatedServiceInterface.class
annotatedService.getClass().getAnnotation(ReorderProperties.class) != null
annotatedService.getClass().getAnnotation(ReorderProperties.class).value().equals("reorder")
annotatedResult == TestAdvice.ANNOTATION_FOUND
}
def "MethodAdvice.getAnnotation() and getMethod() in service advice"() {
when:
buildRegistry AdviceModule
def nonAnnotatedService = registry.getService NonAnnotatedServiceInterface.class
def nonAnnotatedResult = nonAnnotatedService.execute(0);
def nonAnnotatedMethod = nonAnnotatedService.getClass().getMethod("execute", int.class);
def annotatedService = registry.getService AnnotatedServiceInterface
def annotatedResult = annotatedService.execute(0);
def annotatedMethod = annotatedService.getClass().getMethod("execute", int.class);
then:
nonAnnotatedMethod != null
nonAnnotatedMethod.getAnnotation(Advise.class) != null
nonAnnotatedMethod.getAnnotation(Advise.class).id().equals("id")
nonAnnotatedMethod.getAnnotation(Advise.class).serviceInterface() == NonAnnotatedServiceInterface.class
nonAnnotatedService.getClass().getAnnotation(ReorderProperties.class) != null
nonAnnotatedService.getClass().getAnnotation(ReorderProperties.class).value().equals("reorder")
nonAnnotatedResult == TestAdvice.ANNOTATION_FOUND
annotatedMethod != null
annotatedMethod.getAnnotation(Advise.class) != null
annotatedMethod.getAnnotation(Advise.class).id().equals("id")
annotatedMethod.getAnnotation(Advise.class).serviceInterface() == NonAnnotatedServiceInterface.class
annotatedService.getClass().getAnnotation(ReorderProperties.class) != null
annotatedService.getClass().getAnnotation(ReorderProperties.class).value().equals("reorder")
annotatedResult == TestAdvice.ANNOTATION_FOUND
}
}