Class ResourceExtension

java.lang.Object
org.junitpioneer.jupiter.resource.ResourceExtension
All Implemented Interfaces:
org.junit.jupiter.api.extension.Extension, org.junit.jupiter.api.extension.InvocationInterceptor, org.junit.jupiter.api.extension.ParameterResolver

class ResourceExtension extends Object implements org.junit.jupiter.api.extension.ParameterResolver, org.junit.jupiter.api.extension.InvocationInterceptor
  • Nested Class Summary

    Nested classes/interfaces inherited from interface org.junit.jupiter.api.extension.InvocationInterceptor

    org.junit.jupiter.api.extension.InvocationInterceptor.Invocation<T>
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private static final AtomicLong
     
    private static final org.junit.jupiter.api.extension.ExtensionContext.Namespace
     
    private static final Lock
     
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    private <T> T
    checkType(Object resource, Class<T> type)
     
    private String
    factoryKey(Shared sharedAnnotation)
     
    findLockForShared(Shared shared, org.junit.jupiter.api.extension.ExtensionContext.Store store)
     
    private List<Shared>
    findShared(Executable executable)
     
    private Method
    getMethod(Class<?> clazz, String method, Class<?>... parameterTypes)
     
    private boolean
    hasAnnotation(Parameter parameter, Shared sharedAnnotation)
     
    void
    interceptAfterAllMethod(org.junit.jupiter.api.extension.InvocationInterceptor.Invocation<Void> invocation, org.junit.jupiter.api.extension.ReflectiveInvocationContext<Method> invocationContext, org.junit.jupiter.api.extension.ExtensionContext extensionContext)
     
    void
    interceptAfterEachMethod(org.junit.jupiter.api.extension.InvocationInterceptor.Invocation<Void> invocation, org.junit.jupiter.api.extension.ReflectiveInvocationContext<Method> invocationContext, org.junit.jupiter.api.extension.ExtensionContext extensionContext)
     
    void
    interceptBeforeAllMethod(org.junit.jupiter.api.extension.InvocationInterceptor.Invocation<Void> invocation, org.junit.jupiter.api.extension.ReflectiveInvocationContext<Method> invocationContext, org.junit.jupiter.api.extension.ExtensionContext extensionContext)
     
    void
    interceptBeforeEachMethod(org.junit.jupiter.api.extension.InvocationInterceptor.Invocation<Void> invocation, org.junit.jupiter.api.extension.ReflectiveInvocationContext<Method> invocationContext, org.junit.jupiter.api.extension.ExtensionContext extensionContext)
     
    void
    interceptDynamicTest(org.junit.jupiter.api.extension.InvocationInterceptor.Invocation<Void> invocation, org.junit.jupiter.api.extension.DynamicTestInvocationContext invocationContext, org.junit.jupiter.api.extension.ExtensionContext extensionContext)
     
    <T> T
    interceptTestClassConstructor(org.junit.jupiter.api.extension.InvocationInterceptor.Invocation<T> invocation, org.junit.jupiter.api.extension.ReflectiveInvocationContext<Constructor<T>> invocationContext, org.junit.jupiter.api.extension.ExtensionContext extensionContext)
     
    <T> T
    interceptTestFactoryMethod(org.junit.jupiter.api.extension.InvocationInterceptor.Invocation<T> invocation, org.junit.jupiter.api.extension.ReflectiveInvocationContext<Method> invocationContext, org.junit.jupiter.api.extension.ExtensionContext extensionContext)
     
    void
    interceptTestMethod(org.junit.jupiter.api.extension.InvocationInterceptor.Invocation<Void> invocation, org.junit.jupiter.api.extension.ReflectiveInvocationContext<Method> invocationContext, org.junit.jupiter.api.extension.ExtensionContext extensionContext)
     
    void
    interceptTestTemplateMethod(org.junit.jupiter.api.extension.InvocationInterceptor.Invocation<Void> invocation, org.junit.jupiter.api.extension.ReflectiveInvocationContext<Method> invocationContext, org.junit.jupiter.api.extension.ExtensionContext extensionContext)
     
    private <T> T
    invokeWithLocks(org.junit.jupiter.api.extension.InvocationInterceptor.Invocation<T> invocation, List<ReentrantLock> locks)
     
    private String
    keyOfFactoryKey(Shared sharedAnnotation)
     
    private Resource<?>
    newResource(Object newOrSharedAnnotation, ResourceFactory<?> resourceFactory)
     
    private void
    putNewLockForShared(Shared shared, org.junit.jupiter.api.extension.ExtensionContext.Store store)
     
    private Object
    resolveNew(New newAnnotation, org.junit.jupiter.api.extension.ExtensionContext.Store store)
     
    resolveParameter(org.junit.jupiter.api.extension.ParameterContext parameterContext, org.junit.jupiter.api.extension.ExtensionContext extensionContext)
     
    private Object
    resolveShared(Shared sharedAnnotation, Parameter[] parameters, org.junit.jupiter.api.extension.ExtensionContext.Store scopedStore, org.junit.jupiter.api.extension.ExtensionContext.Store rootStore)
     
    private String
    resourceKey(Shared sharedAnnotation)
     
    private String
    resourceLockKey(Shared sharedAnnotation)
     
    private <T> T
    runSequentially(org.junit.jupiter.api.extension.InvocationInterceptor.Invocation<T> invocation, Executable executable, org.junit.jupiter.api.extension.ExtensionContext extensionContext)
     
    private org.junit.jupiter.api.extension.ExtensionContext
    scopedContext(org.junit.jupiter.api.extension.ExtensionContext extensionContext, Shared.Scope scope)
     
    private org.junit.jupiter.api.extension.ExtensionContext.Store
    scopedStore(org.junit.jupiter.api.extension.ExtensionContext extensionContext, Shared.Scope scope)
     
    private String
    sharedAnnotationKey(Shared sharedAnnotation)
     
    sortedLocksForSharedResources(Collection<Shared> sharedAnnotations, org.junit.jupiter.api.extension.ExtensionContext extensionContext)
     
    boolean
    supportsParameter(org.junit.jupiter.api.extension.ParameterContext parameterContext, org.junit.jupiter.api.extension.ExtensionContext extensionContext)
     
    private Method
    testFactoryMethod(org.junit.jupiter.api.extension.ExtensionContext extensionContext)
     
    private String
    testMethodDescription(org.junit.jupiter.api.extension.ExtensionContext extensionContext)
     
    private void
    throwIfHasAnnotationWithSameNameButDifferentScope(org.junit.jupiter.api.extension.ExtensionContext.Store rootStore, Shared sharedAnnotation)
     
    private void
    throwIfHasAnnotationWithSameNameButDifferentType(org.junit.jupiter.api.extension.ExtensionContext.Store scopedStore, Shared sharedAnnotation)
     
    private void
     
    private long
     

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface org.junit.jupiter.api.extension.InvocationInterceptor

    interceptDynamicTest
  • Field Details

    • NAMESPACE

      private static final org.junit.jupiter.api.extension.ExtensionContext.Namespace NAMESPACE
    • SHARED_ANNOTATION_RESOLUTION_LOCK

      private static final Lock SHARED_ANNOTATION_RESOLUTION_LOCK
    • KEY_GENERATOR

      private static final AtomicLong KEY_GENERATOR
  • Constructor Details

    • ResourceExtension

      ResourceExtension()
  • Method Details

    • supportsParameter

      public boolean supportsParameter(org.junit.jupiter.api.extension.ParameterContext parameterContext, org.junit.jupiter.api.extension.ExtensionContext extensionContext)
      Specified by:
      supportsParameter in interface org.junit.jupiter.api.extension.ParameterResolver
    • resolveParameter

      public Object resolveParameter(org.junit.jupiter.api.extension.ParameterContext parameterContext, org.junit.jupiter.api.extension.ExtensionContext extensionContext) throws org.junit.jupiter.api.extension.ParameterResolutionException
      Specified by:
      resolveParameter in interface org.junit.jupiter.api.extension.ParameterResolver
      Throws:
      org.junit.jupiter.api.extension.ParameterResolutionException
    • checkType

      private <T> T checkType(Object resource, Class<T> type)
    • resolveNew

      private Object resolveNew(New newAnnotation, org.junit.jupiter.api.extension.ExtensionContext.Store store)
    • resolveShared

      private Object resolveShared(Shared sharedAnnotation, Parameter[] parameters, org.junit.jupiter.api.extension.ExtensionContext.Store scopedStore, org.junit.jupiter.api.extension.ExtensionContext.Store rootStore)
    • newResource

      private Resource<?> newResource(Object newOrSharedAnnotation, ResourceFactory<?> resourceFactory)
    • throwIfHasAnnotationWithSameNameButDifferentType

      private void throwIfHasAnnotationWithSameNameButDifferentType(org.junit.jupiter.api.extension.ExtensionContext.Store scopedStore, Shared sharedAnnotation)
    • throwIfHasAnnotationWithSameNameButDifferentScope

      private void throwIfHasAnnotationWithSameNameButDifferentScope(org.junit.jupiter.api.extension.ExtensionContext.Store rootStore, Shared sharedAnnotation)
    • throwIfMultipleParametersHaveExactAnnotation

      private void throwIfMultipleParametersHaveExactAnnotation(Parameter[] parameters, Shared sharedAnnotation)
    • hasAnnotation

      private boolean hasAnnotation(Parameter parameter, Shared sharedAnnotation)
    • uniqueKey

      private long uniqueKey()
    • factoryKey

      private String factoryKey(Shared sharedAnnotation)
    • resourceKey

      private String resourceKey(Shared sharedAnnotation)
    • resourceLockKey

      private String resourceLockKey(Shared sharedAnnotation)
    • keyOfFactoryKey

      private String keyOfFactoryKey(Shared sharedAnnotation)
    • sharedAnnotationKey

      private String sharedAnnotationKey(Shared sharedAnnotation)
    • testMethodDescription

      private String testMethodDescription(org.junit.jupiter.api.extension.ExtensionContext extensionContext)
    • getMethod

      private Method getMethod(Class<?> clazz, String method, Class<?>... parameterTypes)
    • interceptTestMethod

      public void interceptTestMethod(org.junit.jupiter.api.extension.InvocationInterceptor.Invocation<Void> invocation, org.junit.jupiter.api.extension.ReflectiveInvocationContext<Method> invocationContext, org.junit.jupiter.api.extension.ExtensionContext extensionContext) throws Throwable
      Specified by:
      interceptTestMethod in interface org.junit.jupiter.api.extension.InvocationInterceptor
      Throws:
      Throwable
    • interceptTestFactoryMethod

      public <T> T interceptTestFactoryMethod(org.junit.jupiter.api.extension.InvocationInterceptor.Invocation<T> invocation, org.junit.jupiter.api.extension.ReflectiveInvocationContext<Method> invocationContext, org.junit.jupiter.api.extension.ExtensionContext extensionContext) throws Throwable
      Specified by:
      interceptTestFactoryMethod in interface org.junit.jupiter.api.extension.InvocationInterceptor
      Throws:
      Throwable
    • interceptDynamicTest

      public void interceptDynamicTest(org.junit.jupiter.api.extension.InvocationInterceptor.Invocation<Void> invocation, org.junit.jupiter.api.extension.DynamicTestInvocationContext invocationContext, org.junit.jupiter.api.extension.ExtensionContext extensionContext) throws Throwable
      Specified by:
      interceptDynamicTest in interface org.junit.jupiter.api.extension.InvocationInterceptor
      Throws:
      Throwable
    • interceptTestTemplateMethod

      public void interceptTestTemplateMethod(org.junit.jupiter.api.extension.InvocationInterceptor.Invocation<Void> invocation, org.junit.jupiter.api.extension.ReflectiveInvocationContext<Method> invocationContext, org.junit.jupiter.api.extension.ExtensionContext extensionContext) throws Throwable
      Specified by:
      interceptTestTemplateMethod in interface org.junit.jupiter.api.extension.InvocationInterceptor
      Throws:
      Throwable
    • interceptTestClassConstructor

      public <T> T interceptTestClassConstructor(org.junit.jupiter.api.extension.InvocationInterceptor.Invocation<T> invocation, org.junit.jupiter.api.extension.ReflectiveInvocationContext<Constructor<T>> invocationContext, org.junit.jupiter.api.extension.ExtensionContext extensionContext) throws Throwable
      Specified by:
      interceptTestClassConstructor in interface org.junit.jupiter.api.extension.InvocationInterceptor
      Throws:
      Throwable
    • interceptBeforeAllMethod

      public void interceptBeforeAllMethod(org.junit.jupiter.api.extension.InvocationInterceptor.Invocation<Void> invocation, org.junit.jupiter.api.extension.ReflectiveInvocationContext<Method> invocationContext, org.junit.jupiter.api.extension.ExtensionContext extensionContext) throws Throwable
      Specified by:
      interceptBeforeAllMethod in interface org.junit.jupiter.api.extension.InvocationInterceptor
      Throws:
      Throwable
    • interceptAfterAllMethod

      public void interceptAfterAllMethod(org.junit.jupiter.api.extension.InvocationInterceptor.Invocation<Void> invocation, org.junit.jupiter.api.extension.ReflectiveInvocationContext<Method> invocationContext, org.junit.jupiter.api.extension.ExtensionContext extensionContext) throws Throwable
      Specified by:
      interceptAfterAllMethod in interface org.junit.jupiter.api.extension.InvocationInterceptor
      Throws:
      Throwable
    • interceptBeforeEachMethod

      public void interceptBeforeEachMethod(org.junit.jupiter.api.extension.InvocationInterceptor.Invocation<Void> invocation, org.junit.jupiter.api.extension.ReflectiveInvocationContext<Method> invocationContext, org.junit.jupiter.api.extension.ExtensionContext extensionContext) throws Throwable
      Specified by:
      interceptBeforeEachMethod in interface org.junit.jupiter.api.extension.InvocationInterceptor
      Throws:
      Throwable
    • interceptAfterEachMethod

      public void interceptAfterEachMethod(org.junit.jupiter.api.extension.InvocationInterceptor.Invocation<Void> invocation, org.junit.jupiter.api.extension.ReflectiveInvocationContext<Method> invocationContext, org.junit.jupiter.api.extension.ExtensionContext extensionContext) throws Throwable
      Specified by:
      interceptAfterEachMethod in interface org.junit.jupiter.api.extension.InvocationInterceptor
      Throws:
      Throwable
    • runSequentially

      private <T> T runSequentially(org.junit.jupiter.api.extension.InvocationInterceptor.Invocation<T> invocation, Executable executable, org.junit.jupiter.api.extension.ExtensionContext extensionContext) throws Throwable
      Throws:
      Throwable
    • sortedLocksForSharedResources

      private List<ReentrantLock> sortedLocksForSharedResources(Collection<Shared> sharedAnnotations, org.junit.jupiter.api.extension.ExtensionContext extensionContext)
    • testFactoryMethod

      private Method testFactoryMethod(org.junit.jupiter.api.extension.ExtensionContext extensionContext)
    • scopedStore

      private org.junit.jupiter.api.extension.ExtensionContext.Store scopedStore(org.junit.jupiter.api.extension.ExtensionContext extensionContext, Shared.Scope scope)
    • scopedContext

      private org.junit.jupiter.api.extension.ExtensionContext scopedContext(org.junit.jupiter.api.extension.ExtensionContext extensionContext, Shared.Scope scope)
    • findShared

      private List<Shared> findShared(Executable executable)
    • putNewLockForShared

      private void putNewLockForShared(Shared shared, org.junit.jupiter.api.extension.ExtensionContext.Store store)
    • findLockForShared

      private ReentrantLock findLockForShared(Shared shared, org.junit.jupiter.api.extension.ExtensionContext.Store store)
    • invokeWithLocks

      private <T> T invokeWithLocks(org.junit.jupiter.api.extension.InvocationInterceptor.Invocation<T> invocation, List<ReentrantLock> locks) throws Throwable
      Throws:
      Throwable