Class JQFTestExtension

java.lang.Object
edu.berkeley.cs.jqf.junit5.JQFTestExtension
All Implemented Interfaces:
org.junit.jupiter.api.extension.ExecutionCondition, org.junit.jupiter.api.extension.Extension, org.junit.jupiter.api.extension.InvocationInterceptor, org.junit.jupiter.api.extension.TestInstantiationAwareExtension, org.junit.jupiter.api.extension.TestTemplateInvocationContextProvider

public final class JQFTestExtension extends Object implements org.junit.jupiter.api.extension.TestTemplateInvocationContextProvider, org.junit.jupiter.api.extension.InvocationInterceptor, org.junit.jupiter.api.extension.ExecutionCondition
The Jupiter extension behind FuzzTest.

It is a TestTemplateInvocationContextProvider: it turns one @FuzzTest method into either a bounded set of regression invocations or a single fuzzing invocation, depending on JUnit5FuzzConfig.isFuzzingMode().

  • Regression: one invocation per input (saved corpus, seeds, and one empty input). Each invocation injects its decoded arguments through a GeneratedArgumentsResolver and runs the real test method under the Jupiter lifecycle via invocation.proceed().
  • Fuzzing: a single invocation whose method body is skipped; the whole Zest campaign is driven through JUnit5FuzzRunner, and the first failing input is rethrown as a JqfFinding so the node fails.
  • Nested Class Summary

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

    org.junit.jupiter.api.extension.InvocationInterceptor.Invocation<T extends Object>

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

    org.junit.jupiter.api.extension.TestInstantiationAwareExtension.ExtensionContextScope
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    org.junit.jupiter.api.extension.ConditionEvaluationResult
    evaluateExecutionCondition(org.junit.jupiter.api.extension.ExtensionContext context)
     
    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)
     
    boolean
    mayReturnZeroTestTemplateInvocationContexts(org.junit.jupiter.api.extension.ExtensionContext context)
     
    Stream<org.junit.jupiter.api.extension.TestTemplateInvocationContext>
    provideTestTemplateInvocationContexts(org.junit.jupiter.api.extension.ExtensionContext context)
     
    boolean
    supportsTestTemplate(org.junit.jupiter.api.extension.ExtensionContext context)
     

    Methods inherited from class java.lang.Object

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

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

    interceptAfterAllMethod, interceptAfterEachMethod, interceptBeforeAllMethod, interceptBeforeEachMethod, interceptDynamicTest, interceptDynamicTest, interceptTestClassConstructor, interceptTestFactoryMethod, interceptTestMethod

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

    getTestInstantiationExtensionContextScope
  • Constructor Details

    • JQFTestExtension

      public JQFTestExtension()
  • Method Details

    • evaluateExecutionCondition

      public org.junit.jupiter.api.extension.ConditionEvaluationResult evaluateExecutionCondition(org.junit.jupiter.api.extension.ExtensionContext context)
      Specified by:
      evaluateExecutionCondition in interface org.junit.jupiter.api.extension.ExecutionCondition
    • supportsTestTemplate

      public boolean supportsTestTemplate(org.junit.jupiter.api.extension.ExtensionContext context)
      Specified by:
      supportsTestTemplate in interface org.junit.jupiter.api.extension.TestTemplateInvocationContextProvider
    • mayReturnZeroTestTemplateInvocationContexts

      public boolean mayReturnZeroTestTemplateInvocationContexts(org.junit.jupiter.api.extension.ExtensionContext context)
      Specified by:
      mayReturnZeroTestTemplateInvocationContexts in interface org.junit.jupiter.api.extension.TestTemplateInvocationContextProvider
    • provideTestTemplateInvocationContexts

      public Stream<org.junit.jupiter.api.extension.TestTemplateInvocationContext> provideTestTemplateInvocationContexts(org.junit.jupiter.api.extension.ExtensionContext context)
      Specified by:
      provideTestTemplateInvocationContexts in interface org.junit.jupiter.api.extension.TestTemplateInvocationContextProvider
    • 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