Showing preview only (9,555K chars total). Download the full file or copy to clipboard to get everything.
Repository: junit-team/junit-lambda
Branch: main
Commit: 2e5966b07a02
Files: 2298
Total size: 8.5 MB
Directory structure:
gitextract_rqeyty5f/
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.md
│ │ ├── config.yml
│ │ ├── feature_request.md
│ │ └── task.md
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── actions/
│ │ ├── main-build/
│ │ │ └── action.yml
│ │ ├── maven-central-user-token/
│ │ │ └── action.yml
│ │ ├── run-gradle/
│ │ │ └── action.yml
│ │ └── setup-test-jdk/
│ │ └── action.yml
│ ├── codecov.yml
│ ├── dco.yml
│ ├── renovate.json5
│ ├── scripts/
│ │ ├── checkBuildReproducibility.sh
│ │ ├── close-github-milestone.js
│ │ ├── create-github-release.js
│ │ └── waitForUrl.sh
│ ├── workflows/
│ │ ├── close-inactive-issues.yml
│ │ ├── codeql.yml
│ │ ├── cross-version.yml
│ │ ├── deploy-docs.yml
│ │ ├── gradle-dependency-submission.yml
│ │ ├── label-opened-issues.yml
│ │ ├── label-pull-request.yml
│ │ ├── lock-resolved-issues.yml
│ │ ├── main.yml
│ │ ├── ossf-scorecard.yml
│ │ ├── release.yml
│ │ ├── reproducible-build.yml
│ │ ├── sanitize-closed-issues.yml
│ │ └── zizmor-analysis.yml
│ └── zizmor.yml
├── .gitignore
├── .idea/
│ └── vcs.xml
├── .jitpack.yml
├── CONTRIBUTING.md
├── KEYS
├── LICENSE.md
├── NOTICE.md
├── README.md
├── RELEASING.md
├── SECURITY.md
├── build.gradle.kts
├── documentation/
│ ├── .tool-versions
│ ├── README.md
│ ├── antora-playbook.yml
│ ├── antora.yml
│ ├── documentation.gradle.kts
│ ├── modules/
│ │ └── ROOT/
│ │ ├── extra-site-nav.adoc
│ │ ├── images/
│ │ │ └── _source/
│ │ │ ├── extensions_BrokenLifecycleMethodConfigDemo.txt
│ │ │ ├── extensions_DatabaseTestsDemo.txt
│ │ │ └── extensions_lifecycle.docx
│ │ ├── nav.adoc
│ │ ├── pages/
│ │ │ ├── advanced-topics/
│ │ │ │ ├── engines.adoc
│ │ │ │ ├── junit-platform-reporting.adoc
│ │ │ │ ├── junit-platform-suite-engine.adoc
│ │ │ │ ├── launcher-api.adoc
│ │ │ │ └── testkit.adoc
│ │ │ ├── api-evolution.adoc
│ │ │ ├── appendix.adoc
│ │ │ ├── extensions/
│ │ │ │ ├── conditional-test-execution.adoc
│ │ │ │ ├── exception-handling.adoc
│ │ │ │ ├── intercepting-invocations.adoc
│ │ │ │ ├── keeping-state-in-extensions.adoc
│ │ │ │ ├── overview.adoc
│ │ │ │ ├── parameter-resolution.adoc
│ │ │ │ ├── pre-interrupt-callback.adoc
│ │ │ │ ├── providing-invocation-contexts-for-class-templates.adoc
│ │ │ │ ├── providing-invocation-contexts-for-test-templates.adoc
│ │ │ │ ├── registering-extensions.adoc
│ │ │ │ ├── relative-execution-order-of-user-code-and-extensions.adoc
│ │ │ │ ├── supported-utilities-in-extensions.adoc
│ │ │ │ ├── test-instance-factories.adoc
│ │ │ │ ├── test-instance-post-processing.adoc
│ │ │ │ ├── test-instance-pre-construct-callback.adoc
│ │ │ │ ├── test-instance-pre-destroy-callback.adoc
│ │ │ │ ├── test-lifecycle-callbacks.adoc
│ │ │ │ └── test-result-processing.adoc
│ │ │ ├── migrating-from-junit4.adoc
│ │ │ ├── overview.adoc
│ │ │ ├── release-notes.adoc
│ │ │ ├── running-tests/
│ │ │ │ ├── build-support.adoc
│ │ │ │ ├── capturing-standard-output-error.adoc
│ │ │ │ ├── configuration-parameters.adoc
│ │ │ │ ├── console-launcher.adoc
│ │ │ │ ├── discovery-issues.adoc
│ │ │ │ ├── discovery-selectors.adoc
│ │ │ │ ├── ide-support.adoc
│ │ │ │ ├── intro.adoc
│ │ │ │ ├── source-launcher.adoc
│ │ │ │ ├── stack-trace-pruning.adoc
│ │ │ │ ├── tags.adoc
│ │ │ │ └── using-listeners-and-interceptors.adoc
│ │ │ └── writing-tests/
│ │ │ ├── annotations.adoc
│ │ │ ├── assertions.adoc
│ │ │ ├── assumptions.adoc
│ │ │ ├── built-in-extensions.adoc
│ │ │ ├── class-templates.adoc
│ │ │ ├── conditional-test-execution.adoc
│ │ │ ├── definitions.adoc
│ │ │ ├── dependency-injection-for-constructors-and-methods.adoc
│ │ │ ├── disabling-tests.adoc
│ │ │ ├── display-names.adoc
│ │ │ ├── dynamic-tests.adoc
│ │ │ ├── exception-handling.adoc
│ │ │ ├── intro.adoc
│ │ │ ├── nested-tests.adoc
│ │ │ ├── parallel-execution.adoc
│ │ │ ├── parameterized-classes-and-tests.adoc
│ │ │ ├── repeated-tests.adoc
│ │ │ ├── tagging-and-filtering.adoc
│ │ │ ├── test-classes-and-methods.adoc
│ │ │ ├── test-execution-order.adoc
│ │ │ ├── test-instance-lifecycle.adoc
│ │ │ ├── test-interfaces-and-default-methods.adoc
│ │ │ ├── test-templates.adoc
│ │ │ └── timeouts.adoc
│ │ └── partials/
│ │ └── release-notes/
│ │ ├── release-notes-6.0.0.adoc
│ │ ├── release-notes-6.0.1.adoc
│ │ ├── release-notes-6.0.2.adoc
│ │ ├── release-notes-6.0.3.adoc
│ │ ├── release-notes-6.1.0-M1.adoc
│ │ ├── release-notes-6.1.0-RC1.adoc
│ │ ├── release-notes-6.1.0.adoc
│ │ └── release-notes-TEMPLATE.adoc
│ ├── package.json
│ └── src/
│ ├── javadoc/
│ │ ├── junit-overview.html
│ │ └── junit-stylesheet.css
│ ├── main/
│ │ └── java/
│ │ └── example/
│ │ ├── domain/
│ │ │ ├── Person.java
│ │ │ └── package-info.java
│ │ ├── registration/
│ │ │ ├── WebClient.java
│ │ │ ├── WebResponse.java
│ │ │ ├── WebServerExtension.java
│ │ │ └── package-info.java
│ │ └── util/
│ │ ├── Calculator.java
│ │ ├── ListWriter.java
│ │ ├── StringUtils.java
│ │ └── package-info.java
│ ├── plantuml/
│ │ ├── component-diagram.puml
│ │ ├── junit-platform-suite-engine-diagram.puml
│ │ ├── junit-platform-suite-engine-duplicate-test-execution-diagram.puml
│ │ └── launcher-api-diagram.puml
│ ├── test/
│ │ ├── java/
│ │ │ ├── example/
│ │ │ │ ├── AssertJAssertionsDemo.java
│ │ │ │ ├── AssertionsDemo.java
│ │ │ │ ├── AssumptionsDemo.java
│ │ │ │ ├── AutoCloseDemo.java
│ │ │ │ ├── BeforeAndAfterSuiteDemo.java
│ │ │ │ ├── ClassTemplateDemo.java
│ │ │ │ ├── ConditionalTestExecutionDemo.java
│ │ │ │ ├── CustomLauncherInterceptor.java
│ │ │ │ ├── CustomTestEngine.java
│ │ │ │ ├── DefaultLocaleTimezoneExtensionDemo.java
│ │ │ │ ├── DisabledClassDemo.java
│ │ │ │ ├── DisabledTestsDemo.java
│ │ │ │ ├── DisplayNameDemo.java
│ │ │ │ ├── DisplayNameGeneratorDemo.java
│ │ │ │ ├── DocumentationTestSuite.java
│ │ │ │ ├── DynamicTestsDemo.java
│ │ │ │ ├── DynamicTestsNamedDemo.java
│ │ │ │ ├── ExampleTestCase.java
│ │ │ │ ├── ExplicitExecutionModeDemo.java
│ │ │ │ ├── ExternalCustomConditionDemo.java
│ │ │ │ ├── ExternalFieldSourceDemo.java
│ │ │ │ ├── ExternalMethodSourceDemo.java
│ │ │ │ ├── Fast.java
│ │ │ │ ├── FastTest.java
│ │ │ │ ├── FirstCustomEngine.java
│ │ │ │ ├── HttpServerDemo.java
│ │ │ │ ├── IgnoredTestsDemo.java
│ │ │ │ ├── JUnit4Tests.java
│ │ │ │ ├── MethodSourceParameterResolutionDemo.java
│ │ │ │ ├── MyFirstJUnitJupiterRecordTests.java
│ │ │ │ ├── MyFirstJUnitJupiterTests.java
│ │ │ │ ├── MyRandomParametersTest.java
│ │ │ │ ├── OrderedNestedTestClassesDemo.java
│ │ │ │ ├── OrderedTestsDemo.java
│ │ │ │ ├── ParameterizedClassDemo.java
│ │ │ │ ├── ParameterizedLifecycleDemo.java
│ │ │ │ ├── ParameterizedMigrationDemo.java
│ │ │ │ ├── ParameterizedRecordDemo.java
│ │ │ │ ├── ParameterizedTestDemo.java
│ │ │ │ ├── PollingTimeoutDemo.java
│ │ │ │ ├── RepeatedTestsDemo.java
│ │ │ │ ├── SecondCustomEngine.java
│ │ │ │ ├── SlowTests.java
│ │ │ │ ├── StandardTests.java
│ │ │ │ ├── SuiteDemo.java
│ │ │ │ ├── SystemPropertyExtensionDemo.java
│ │ │ │ ├── TaggingDemo.java
│ │ │ │ ├── TempDirectoryDemo.java
│ │ │ │ ├── TestInfoDemo.java
│ │ │ │ ├── TestReporterDemo.java
│ │ │ │ ├── TestTemplateDemo.java
│ │ │ │ ├── TestingAStackDemo.java
│ │ │ │ ├── TimeoutDemo.java
│ │ │ │ ├── UsingTheLauncherDemo.java
│ │ │ │ ├── UsingTheLauncherForDiscoveryDemo.java
│ │ │ │ ├── callbacks/
│ │ │ │ │ ├── AbstractDatabaseTests.java
│ │ │ │ │ ├── BrokenLifecycleMethodConfigDemo.java
│ │ │ │ │ ├── DatabaseTestsDemo.java
│ │ │ │ │ ├── Extension1.java
│ │ │ │ │ ├── Extension2.java
│ │ │ │ │ ├── Logger.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── defaultmethods/
│ │ │ │ │ ├── ComparableContract.java
│ │ │ │ │ ├── EqualsContract.java
│ │ │ │ │ ├── StringTests.java
│ │ │ │ │ ├── Testable.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── exception/
│ │ │ │ │ ├── AssertDoesNotThrowExceptionDemo.java
│ │ │ │ │ ├── ExceptionAssertionDemo.java
│ │ │ │ │ ├── ExceptionAssertionExactDemo.java
│ │ │ │ │ ├── FailedAssertionDemo.java
│ │ │ │ │ ├── IgnoreIOExceptionExtension.java
│ │ │ │ │ ├── IgnoreIOExceptionTests.java
│ │ │ │ │ ├── MultipleHandlersTestCase.java
│ │ │ │ │ ├── RecordStateOnErrorExtension.java
│ │ │ │ │ ├── UncaughtExceptionHandlingDemo.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── extensions/
│ │ │ │ │ ├── HttpServerExtension.java
│ │ │ │ │ ├── HttpServerResource.java
│ │ │ │ │ ├── ParameterResolverConflictDemo.java
│ │ │ │ │ ├── ParameterResolverCustomAnnotationDemo.java
│ │ │ │ │ ├── ParameterResolverCustomTypeDemo.java
│ │ │ │ │ ├── ParameterResolverNoConflictDemo.java
│ │ │ │ │ ├── Random.java
│ │ │ │ │ ├── RandomNumberDemo.java
│ │ │ │ │ ├── RandomNumberExtension.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── interceptor/
│ │ │ │ │ ├── SwingEdtInterceptor.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── package-info.java
│ │ │ │ ├── registration/
│ │ │ │ │ ├── DocumentationDemo.java
│ │ │ │ │ └── WebServerDemo.java
│ │ │ │ ├── session/
│ │ │ │ │ ├── CloseableHttpServer.java
│ │ │ │ │ ├── GlobalSetupTeardownListener.java
│ │ │ │ │ ├── HttpTests.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── sharedresources/
│ │ │ │ │ ├── ChildrenSharedResourcesDemo.java
│ │ │ │ │ ├── DynamicSharedResourcesDemo.java
│ │ │ │ │ ├── SharedResourceDemo.java
│ │ │ │ │ ├── StaticSharedResourcesDemo.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── testinterface/
│ │ │ │ │ ├── TestInterfaceDemo.java
│ │ │ │ │ ├── TestInterfaceDynamicTestsDemo.java
│ │ │ │ │ ├── TestLifecycleLogger.java
│ │ │ │ │ ├── TimeExecutionLogger.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── testkit/
│ │ │ │ │ ├── EngineTestKitAllEventsDemo.java
│ │ │ │ │ ├── EngineTestKitDiscoveryDemo.java
│ │ │ │ │ ├── EngineTestKitFailedMethodDemo.java
│ │ │ │ │ ├── EngineTestKitSkippedMethodDemo.java
│ │ │ │ │ ├── EngineTestKitStatisticsDemo.java
│ │ │ │ │ └── package-info.java
│ │ │ │ └── timing/
│ │ │ │ ├── TimingExtension.java
│ │ │ │ ├── TimingExtensionTests.java
│ │ │ │ └── package-info.java
│ │ │ └── extensions/
│ │ │ ├── DisabledOnOpenJ9.java
│ │ │ ├── ExpectToFail.java
│ │ │ └── package-info.java
│ │ ├── kotlin/
│ │ │ └── example/
│ │ │ ├── FibonacciCalculator.kt
│ │ │ ├── KotlinAssertionsDemo.kt
│ │ │ ├── KotlinCoroutinesDemo.kt
│ │ │ ├── KotlinCoroutinesRunTestDemo.kt
│ │ │ ├── kotlin/
│ │ │ │ ├── AssumptionsDemo.kt
│ │ │ │ ├── AutoCloseDemo.kt
│ │ │ │ ├── ConditionalTestExecutionDemo.kt
│ │ │ │ ├── DefaultLocaleTimezoneExtensionDemo.kt
│ │ │ │ ├── DisplayNameDemo.kt
│ │ │ │ ├── DisplayNameGeneratorDemo.kt
│ │ │ │ ├── DynamicTestsDemo.kt
│ │ │ │ ├── DynamicTestsNamedDemo.kt
│ │ │ │ ├── ExternalCustomConditionDemo.kt
│ │ │ │ ├── Fast.kt
│ │ │ │ ├── FastTest.kt
│ │ │ │ ├── HttpServerDemo.kt
│ │ │ │ ├── MyFirstJUnitJupiterTests.kt
│ │ │ │ ├── MyRandomParametersTest.kt
│ │ │ │ ├── ParameterizedClassDemo.kt
│ │ │ │ ├── PollingTimeoutDemo.kt
│ │ │ │ ├── RepeatedTestsDemo.kt
│ │ │ │ ├── StandardTests.kt
│ │ │ │ ├── SystemPropertyExtensionDemo.kt
│ │ │ │ ├── TempDirectoryDemo.kt
│ │ │ │ ├── TestInfoDemo.kt
│ │ │ │ ├── TestReporterDemo.kt
│ │ │ │ ├── TestingAStackDemo.kt
│ │ │ │ ├── TimeoutDemo.kt
│ │ │ │ ├── defaultmethods/
│ │ │ │ │ ├── ComparableContract.kt
│ │ │ │ │ ├── EqualsContract.kt
│ │ │ │ │ ├── StringTests.kt
│ │ │ │ │ └── Testable.kt
│ │ │ │ ├── exception/
│ │ │ │ │ ├── AssertDoesNotThrowExceptionDemo.kt
│ │ │ │ │ ├── ExceptionAssertionDemo.kt
│ │ │ │ │ ├── ExceptionAssertionExactDemo.kt
│ │ │ │ │ ├── FailedAssertionDemo.kt
│ │ │ │ │ └── UncaughtExceptionHandlingDemo.kt
│ │ │ │ ├── extensions/
│ │ │ │ │ ├── HttpServerExtension.kt
│ │ │ │ │ ├── HttpServerResource.kt
│ │ │ │ │ ├── ParameterResolverConflictDemo.kt
│ │ │ │ │ ├── ParameterResolverCustomAnnotationDemo.kt
│ │ │ │ │ ├── ParameterResolverCustomTypeDemo.kt
│ │ │ │ │ ├── ParameterResolverNoConflictDemo.kt
│ │ │ │ │ ├── Random.kt
│ │ │ │ │ ├── RandomNumberDemo.kt
│ │ │ │ │ └── RandomNumberExtension.kt
│ │ │ │ ├── registration/
│ │ │ │ │ ├── DocumentationDemo.kt
│ │ │ │ │ └── DocumentationExtension.kt
│ │ │ │ ├── testinterface/
│ │ │ │ │ ├── TestInterfaceDemo.kt
│ │ │ │ │ ├── TestInterfaceDynamicTestsDemo.kt
│ │ │ │ │ ├── TestLifecycleLogger.kt
│ │ │ │ │ └── TimeExecutionLogger.kt
│ │ │ │ └── timing/
│ │ │ │ ├── TimingExtension.kt
│ │ │ │ └── TimingExtensionTests.kt
│ │ │ └── registration/
│ │ │ └── KotlinWebServerDemo.kt
│ │ └── resources/
│ │ ├── META-INF/
│ │ │ └── services/
│ │ │ └── org.junit.platform.launcher.LauncherSessionListener
│ │ ├── junit-platform.properties
│ │ ├── log4j2-test.xml
│ │ └── two-column.csv
│ └── tools/
│ └── java/
│ └── org/
│ └── junit/
│ └── api/
│ └── tools/
│ ├── AbstractApiReportWriter.java
│ ├── ApiReport.java
│ ├── ApiReportGenerator.java
│ ├── ApiReportWriter.java
│ ├── AsciidocApiReportWriter.java
│ ├── Declaration.java
│ ├── HtmlApiReportWriter.java
│ ├── MarkdownApiReportWriter.java
│ └── package-info.java
├── gradle/
│ ├── base/
│ │ ├── code-generator-model/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ └── main/
│ │ │ ├── kotlin/
│ │ │ │ └── junitbuild/
│ │ │ │ └── generator/
│ │ │ │ └── model/
│ │ │ │ └── JRE.kt
│ │ │ └── resources/
│ │ │ └── jre.yaml
│ │ ├── dsl-extensions/
│ │ │ ├── .gitignore
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── kotlin/
│ │ │ └── junitbuild/
│ │ │ └── extensions/
│ │ │ ├── DependencyExtensions.kt
│ │ │ ├── ProjectExtensions.kt
│ │ │ ├── StringExtensions.kt
│ │ │ ├── TaskExtensions.kt
│ │ │ ├── VersionExtensions.kt
│ │ │ └── junitbuild.dsl-extensions.gradle.kts
│ │ ├── gradle.properties
│ │ └── settings.gradle.kts
│ ├── config/
│ │ ├── checkstyle/
│ │ │ ├── checkstyleMain.xml
│ │ │ ├── checkstyleNohttp.xml
│ │ │ ├── checkstyleTest.xml
│ │ │ └── suppressions.xml
│ │ ├── eclipse/
│ │ │ ├── junit-eclipse-formatter-settings.xml
│ │ │ └── junit-eclipse.importorder
│ │ ├── roseau/
│ │ │ └── config.yaml
│ │ └── spotless/
│ │ └── eclipse-public-license-2.0.java
│ ├── gradle-daemon-jvm.properties
│ ├── libs.versions.toml
│ ├── plugins/
│ │ ├── antora/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── kotlin/
│ │ │ ├── junitbuild/
│ │ │ │ └── antora/
│ │ │ │ └── AntoraConfiguration.kt
│ │ │ └── junitbuild.antora-conventions.gradle.kts
│ │ ├── backward-compatibility/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── kotlin/
│ │ │ ├── junitbuild/
│ │ │ │ └── compatibility/
│ │ │ │ ├── BackwardCompatibilityChecksExtension.kt
│ │ │ │ └── roseau/
│ │ │ │ └── RoseauDiff.kt
│ │ │ └── junitbuild.backward-compatibility.gradle.kts
│ │ ├── build-parameters/
│ │ │ └── build.gradle.kts
│ │ ├── code-generator/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── kotlin/
│ │ │ ├── junitbuild/
│ │ │ │ └── generator/
│ │ │ │ └── GenerateJreRelatedSourceCode.kt
│ │ │ └── junitbuild.code-generator.gradle.kts
│ │ ├── common/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── kotlin/
│ │ │ ├── JavaLibraryExtension.kt
│ │ │ ├── License.kt
│ │ │ ├── junitbuild/
│ │ │ │ ├── deps/
│ │ │ │ │ └── ByteBuddyAlignmentRule.kt
│ │ │ │ ├── eclipse/
│ │ │ │ │ └── EclipseConventionsExtension.kt
│ │ │ │ ├── exec/
│ │ │ │ │ ├── CaptureJavaExecOutput.kt
│ │ │ │ │ ├── ClasspathSystemPropertyProvider.kt
│ │ │ │ │ ├── GenerateStandaloneConsoleLauncherShadowedArtifactsFile.kt
│ │ │ │ │ └── RunConsoleLauncher.kt
│ │ │ │ ├── graalvm/
│ │ │ │ │ └── NativeImagePropertiesExtension.kt
│ │ │ │ ├── java/
│ │ │ │ │ ├── UpdateJarAction.kt
│ │ │ │ │ └── WriteArtifactsFile.kt
│ │ │ │ └── javadoc/
│ │ │ │ ├── JavadocConventionsExtension.kt
│ │ │ │ ├── JavadocValuesOption.kt
│ │ │ │ ├── ModuleSpecificJavadocFileOption.kt
│ │ │ │ └── VersionNumber.kt
│ │ │ ├── junitbuild.base-conventions.gradle.kts
│ │ │ ├── junitbuild.build-metadata.gradle.kts
│ │ │ ├── junitbuild.checkstyle-conventions.gradle.kts
│ │ │ ├── junitbuild.checkstyle-nohttp.gradle.kts
│ │ │ ├── junitbuild.eclipse-conventions.gradle.kts
│ │ │ ├── junitbuild.jacoco-aggregation-conventions.gradle.kts
│ │ │ ├── junitbuild.jacoco-conventions.gradle.kts
│ │ │ ├── junitbuild.jacoco-java-conventions.gradle.kts
│ │ │ ├── junitbuild.java-aggregator-conventions.gradle.kts
│ │ │ ├── junitbuild.java-errorprone-conventions.gradle.kts
│ │ │ ├── junitbuild.java-library-conventions.gradle.kts
│ │ │ ├── junitbuild.java-toolchain-conventions.gradle.kts
│ │ │ ├── junitbuild.javadoc-conventions.gradle.kts
│ │ │ ├── junitbuild.jmh-conventions.gradle.kts
│ │ │ ├── junitbuild.junit4-compatibility.gradle.kts
│ │ │ ├── junitbuild.kotlin-library-conventions.gradle.kts
│ │ │ ├── junitbuild.osgi-conventions.gradle.kts
│ │ │ ├── junitbuild.publishing-conventions.gradle.kts
│ │ │ ├── junitbuild.settings-conventions.settings.gradle.kts
│ │ │ ├── junitbuild.shadow-conventions.gradle.kts
│ │ │ ├── junitbuild.spotless-conventions.gradle.kts
│ │ │ └── junitbuild.testing-conventions.gradle.kts
│ │ ├── publishing/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── kotlin/
│ │ │ ├── junitbuild/
│ │ │ │ └── release/
│ │ │ │ └── VerifyBinaryArtifactsAreIdentical.kt
│ │ │ ├── junitbuild.maven-central-publishing.settings.gradle.kts
│ │ │ └── junitbuild.temp-maven-repo.gradle.kts
│ │ └── settings.gradle.kts
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── junit-bom/
│ ├── README.md
│ └── junit-bom.gradle.kts
├── junit-jupiter/
│ ├── junit-jupiter.gradle.kts
│ └── src/
│ └── main/
│ └── java/
│ └── module-info.java
├── junit-jupiter-api/
│ ├── junit-jupiter-api.gradle.kts
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ ├── module-info.java
│ │ │ └── org/
│ │ │ └── junit/
│ │ │ └── jupiter/
│ │ │ └── api/
│ │ │ ├── AfterAll.java
│ │ │ ├── AfterEach.java
│ │ │ ├── AssertAll.java
│ │ │ ├── AssertArrayEquals.java
│ │ │ ├── AssertDoesNotThrow.java
│ │ │ ├── AssertEquals.java
│ │ │ ├── AssertFalse.java
│ │ │ ├── AssertInstanceOf.java
│ │ │ ├── AssertIterableEquals.java
│ │ │ ├── AssertLinesMatch.java
│ │ │ ├── AssertNotEquals.java
│ │ │ ├── AssertNotNull.java
│ │ │ ├── AssertNotSame.java
│ │ │ ├── AssertNull.java
│ │ │ ├── AssertSame.java
│ │ │ ├── AssertThrows.java
│ │ │ ├── AssertThrowsExactly.java
│ │ │ ├── AssertTimeout.java
│ │ │ ├── AssertTimeoutPreemptively.java
│ │ │ ├── AssertTrue.java
│ │ │ ├── AssertionFailureBuilder.java
│ │ │ ├── AssertionUtils.java
│ │ │ ├── Assertions.java
│ │ │ ├── Assumptions.java
│ │ │ ├── AutoClose.java
│ │ │ ├── BeforeAll.java
│ │ │ ├── BeforeEach.java
│ │ │ ├── ClassDescriptor.java
│ │ │ ├── ClassOrderer.java
│ │ │ ├── ClassOrdererContext.java
│ │ │ ├── ClassTemplate.java
│ │ │ ├── Constants.java
│ │ │ ├── Disabled.java
│ │ │ ├── DisplayName.java
│ │ │ ├── DisplayNameGeneration.java
│ │ │ ├── DisplayNameGenerator.java
│ │ │ ├── DynamicContainer.java
│ │ │ ├── DynamicNode.java
│ │ │ ├── DynamicTest.java
│ │ │ ├── IndicativeSentencesGeneration.java
│ │ │ ├── MediaType.java
│ │ │ ├── MethodDescriptor.java
│ │ │ ├── MethodOrderer.java
│ │ │ ├── MethodOrdererContext.java
│ │ │ ├── Named.java
│ │ │ ├── NamedExecutable.java
│ │ │ ├── Nested.java
│ │ │ ├── Order.java
│ │ │ ├── RandomOrdererUtils.java
│ │ │ ├── RepeatedTest.java
│ │ │ ├── RepetitionInfo.java
│ │ │ ├── Tag.java
│ │ │ ├── Tags.java
│ │ │ ├── Test.java
│ │ │ ├── TestClassOrder.java
│ │ │ ├── TestFactory.java
│ │ │ ├── TestInfo.java
│ │ │ ├── TestInstance.java
│ │ │ ├── TestMethodOrder.java
│ │ │ ├── TestReporter.java
│ │ │ ├── TestTemplate.java
│ │ │ ├── Timeout.java
│ │ │ ├── condition/
│ │ │ │ ├── AbstractJreCondition.java
│ │ │ │ ├── AbstractJreRangeCondition.java
│ │ │ │ ├── AbstractOsBasedExecutionCondition.java
│ │ │ │ ├── AbstractRepeatableAnnotationCondition.java
│ │ │ │ ├── BooleanExecutionCondition.java
│ │ │ │ ├── DisabledForJreRange.java
│ │ │ │ ├── DisabledForJreRangeCondition.java
│ │ │ │ ├── DisabledIf.java
│ │ │ │ ├── DisabledIfCondition.java
│ │ │ │ ├── DisabledIfEnvironmentVariable.java
│ │ │ │ ├── DisabledIfEnvironmentVariableCondition.java
│ │ │ │ ├── DisabledIfEnvironmentVariables.java
│ │ │ │ ├── DisabledIfSystemProperties.java
│ │ │ │ ├── DisabledIfSystemProperty.java
│ │ │ │ ├── DisabledIfSystemPropertyCondition.java
│ │ │ │ ├── DisabledInNativeImage.java
│ │ │ │ ├── DisabledOnJre.java
│ │ │ │ ├── DisabledOnJreCondition.java
│ │ │ │ ├── DisabledOnOs.java
│ │ │ │ ├── DisabledOnOsCondition.java
│ │ │ │ ├── EnabledForJreRange.java
│ │ │ │ ├── EnabledForJreRangeCondition.java
│ │ │ │ ├── EnabledIf.java
│ │ │ │ ├── EnabledIfCondition.java
│ │ │ │ ├── EnabledIfEnvironmentVariable.java
│ │ │ │ ├── EnabledIfEnvironmentVariableCondition.java
│ │ │ │ ├── EnabledIfEnvironmentVariables.java
│ │ │ │ ├── EnabledIfSystemProperties.java
│ │ │ │ ├── EnabledIfSystemProperty.java
│ │ │ │ ├── EnabledIfSystemPropertyCondition.java
│ │ │ │ ├── EnabledInNativeImage.java
│ │ │ │ ├── EnabledOnJre.java
│ │ │ │ ├── EnabledOnJreCondition.java
│ │ │ │ ├── EnabledOnOs.java
│ │ │ │ ├── EnabledOnOsCondition.java
│ │ │ │ ├── MethodBasedCondition.java
│ │ │ │ ├── OS.java
│ │ │ │ └── package-info.java
│ │ │ ├── extension/
│ │ │ │ ├── AfterAllCallback.java
│ │ │ │ ├── AfterClassTemplateInvocationCallback.java
│ │ │ │ ├── AfterEachCallback.java
│ │ │ │ ├── AfterTestExecutionCallback.java
│ │ │ │ ├── AnnotatedElementContext.java
│ │ │ │ ├── BeforeAllCallback.java
│ │ │ │ ├── BeforeClassTemplateInvocationCallback.java
│ │ │ │ ├── BeforeEachCallback.java
│ │ │ │ ├── BeforeTestExecutionCallback.java
│ │ │ │ ├── ClassTemplateInvocationContext.java
│ │ │ │ ├── ClassTemplateInvocationContextProvider.java
│ │ │ │ ├── ClassTemplateInvocationLifecycleMethod.java
│ │ │ │ ├── ConditionEvaluationResult.java
│ │ │ │ ├── DynamicTestInvocationContext.java
│ │ │ │ ├── ExecutableInvoker.java
│ │ │ │ ├── ExecutionCondition.java
│ │ │ │ ├── ExtendWith.java
│ │ │ │ ├── Extension.java
│ │ │ │ ├── ExtensionConfigurationException.java
│ │ │ │ ├── ExtensionContext.java
│ │ │ │ ├── ExtensionContextException.java
│ │ │ │ ├── Extensions.java
│ │ │ │ ├── InvocationInterceptor.java
│ │ │ │ ├── LifecycleMethodExecutionExceptionHandler.java
│ │ │ │ ├── MediaType.java
│ │ │ │ ├── ParameterContext.java
│ │ │ │ ├── ParameterResolutionException.java
│ │ │ │ ├── ParameterResolver.java
│ │ │ │ ├── PreInterruptCallback.java
│ │ │ │ ├── PreInterruptContext.java
│ │ │ │ ├── ReflectiveInvocationContext.java
│ │ │ │ ├── RegisterExtension.java
│ │ │ │ ├── TemplateInvocationValidationException.java
│ │ │ │ ├── TestExecutionExceptionHandler.java
│ │ │ │ ├── TestInstanceFactory.java
│ │ │ │ ├── TestInstanceFactoryContext.java
│ │ │ │ ├── TestInstancePostProcessor.java
│ │ │ │ ├── TestInstancePreConstructCallback.java
│ │ │ │ ├── TestInstancePreDestroyCallback.java
│ │ │ │ ├── TestInstances.java
│ │ │ │ ├── TestInstantiationAwareExtension.java
│ │ │ │ ├── TestInstantiationException.java
│ │ │ │ ├── TestTemplateInvocationContext.java
│ │ │ │ ├── TestTemplateInvocationContextProvider.java
│ │ │ │ ├── TestWatcher.java
│ │ │ │ ├── package-info.java
│ │ │ │ └── support/
│ │ │ │ ├── TypeBasedParameterResolver.java
│ │ │ │ └── package-info.java
│ │ │ ├── function/
│ │ │ │ ├── Executable.java
│ │ │ │ ├── ThrowingConsumer.java
│ │ │ │ ├── ThrowingSupplier.java
│ │ │ │ └── package-info.java
│ │ │ ├── io/
│ │ │ │ ├── CleanupMode.java
│ │ │ │ ├── DefaultDeletionResult.java
│ │ │ │ ├── TempDir.java
│ │ │ │ ├── TempDirDeletionStrategy.java
│ │ │ │ ├── TempDirFactory.java
│ │ │ │ └── package-info.java
│ │ │ ├── package-info.java
│ │ │ ├── parallel/
│ │ │ │ ├── Execution.java
│ │ │ │ ├── ExecutionMode.java
│ │ │ │ ├── Isolated.java
│ │ │ │ ├── ResourceAccessMode.java
│ │ │ │ ├── ResourceLock.java
│ │ │ │ ├── ResourceLockTarget.java
│ │ │ │ ├── ResourceLocks.java
│ │ │ │ ├── ResourceLocksProvider.java
│ │ │ │ ├── Resources.java
│ │ │ │ └── package-info.java
│ │ │ ├── timeout/
│ │ │ │ ├── PreemptiveTimeoutUtils.java
│ │ │ │ └── package-info.java
│ │ │ └── util/
│ │ │ ├── ClearSystemProperty.java
│ │ │ ├── DefaultLocale.java
│ │ │ ├── DefaultLocaleExtension.java
│ │ │ ├── DefaultTimeZone.java
│ │ │ ├── DefaultTimeZoneExtension.java
│ │ │ ├── JupiterLocaleUtils.java
│ │ │ ├── JupiterPropertyUtils.java
│ │ │ ├── LocaleProvider.java
│ │ │ ├── NullLocaleProvider.java
│ │ │ ├── NullTimeZoneProvider.java
│ │ │ ├── ReadsDefaultLocale.java
│ │ │ ├── ReadsDefaultTimeZone.java
│ │ │ ├── ReadsSystemProperty.java
│ │ │ ├── RestoreSystemProperties.java
│ │ │ ├── SetSystemProperty.java
│ │ │ ├── SystemPropertiesExtension.java
│ │ │ ├── TimeZoneProvider.java
│ │ │ ├── WritesDefaultLocale.java
│ │ │ ├── WritesDefaultTimeZone.java
│ │ │ ├── WritesSystemProperty.java
│ │ │ └── package-info.java
│ │ └── kotlin/
│ │ └── org/
│ │ └── junit/
│ │ └── jupiter/
│ │ └── api/
│ │ └── Assertions.kt
│ ├── templates/
│ │ └── resources/
│ │ ├── main/
│ │ │ └── org/
│ │ │ └── junit/
│ │ │ └── jupiter/
│ │ │ └── api/
│ │ │ └── condition/
│ │ │ └── JRE.java.jte
│ │ └── testFixtures/
│ │ └── org/
│ │ └── junit/
│ │ └── jupiter/
│ │ └── api/
│ │ └── condition/
│ │ └── JavaVersionPredicates.java.jte
│ ├── test/
│ │ └── README.md
│ └── testFixtures/
│ └── java/
│ └── org/
│ └── junit/
│ └── jupiter/
│ └── api/
│ ├── AssertionTestUtils.java
│ ├── EqualsAndHashCodeAssertions.java
│ ├── TemporaryClasspathExecutor.java
│ ├── extension/
│ │ ├── DisabledInEclipse.java
│ │ ├── DisabledOnOpenJ9.java
│ │ └── ExtensionContextParameterResolver.java
│ ├── fixtures/
│ │ └── TrackLogRecords.java
│ └── io/
│ └── FailingTempDirDeletionStrategy.java
├── junit-jupiter-engine/
│ ├── junit-jupiter-engine.gradle.kts
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ ├── module-info.java
│ │ │ └── org/
│ │ │ └── junit/
│ │ │ └── jupiter/
│ │ │ └── engine/
│ │ │ ├── Constants.java
│ │ │ ├── JupiterTestEngine.java
│ │ │ ├── config/
│ │ │ │ ├── CachingJupiterConfiguration.java
│ │ │ │ ├── ConfigurationParameterConverter.java
│ │ │ │ ├── DefaultJupiterConfiguration.java
│ │ │ │ ├── EnumConfigurationParameterConverter.java
│ │ │ │ ├── FilteringConfigurationParameterConverter.java
│ │ │ │ ├── InstantiatingConfigurationParameterConverter.java
│ │ │ │ ├── JupiterConfiguration.java
│ │ │ │ └── package-info.java
│ │ │ ├── descriptor/
│ │ │ │ ├── AbstractExtensionContext.java
│ │ │ │ ├── CallbackSupport.java
│ │ │ │ ├── ClassBasedTestDescriptor.java
│ │ │ │ ├── ClassExtensionContext.java
│ │ │ │ ├── ClassTemplateInvocationExtensionContext.java
│ │ │ │ ├── ClassTemplateInvocationTestDescriptor.java
│ │ │ │ ├── ClassTemplateTestDescriptor.java
│ │ │ │ ├── ClassTestDescriptor.java
│ │ │ │ ├── DefaultDynamicTestInvocationContext.java
│ │ │ │ ├── DefaultTestInstanceFactoryContext.java
│ │ │ │ ├── DisplayNameUtils.java
│ │ │ │ ├── DynamicContainerTestDescriptor.java
│ │ │ │ ├── DynamicDescendantFilter.java
│ │ │ │ ├── DynamicExtensionContext.java
│ │ │ │ ├── DynamicNodeTestDescriptor.java
│ │ │ │ ├── DynamicTestTestDescriptor.java
│ │ │ │ ├── ExclusiveResourceCollector.java
│ │ │ │ ├── ExtensionUtils.java
│ │ │ │ ├── Filterable.java
│ │ │ │ ├── JupiterEngineDescriptor.java
│ │ │ │ ├── JupiterEngineExtensionContext.java
│ │ │ │ ├── JupiterTestDescriptor.java
│ │ │ │ ├── LifecycleMethodUtils.java
│ │ │ │ ├── MethodBasedTestDescriptor.java
│ │ │ │ ├── MethodExtensionContext.java
│ │ │ │ ├── MethodSourceSupport.java
│ │ │ │ ├── NestedClassTestDescriptor.java
│ │ │ │ ├── ResourceLockAware.java
│ │ │ │ ├── TemplateExecutor.java
│ │ │ │ ├── TestClassAware.java
│ │ │ │ ├── TestFactoryTestDescriptor.java
│ │ │ │ ├── TestInstanceLifecycleUtils.java
│ │ │ │ ├── TestMethodTestDescriptor.java
│ │ │ │ ├── TestTemplateExtensionContext.java
│ │ │ │ ├── TestTemplateInvocationTestDescriptor.java
│ │ │ │ ├── TestTemplateTestDescriptor.java
│ │ │ │ ├── UniqueIdPrefixTransformer.java
│ │ │ │ ├── Validatable.java
│ │ │ │ └── package-info.java
│ │ │ ├── discovery/
│ │ │ │ ├── AbstractAnnotatedDescriptorWrapper.java
│ │ │ │ ├── AbstractOrderingVisitor.java
│ │ │ │ ├── ClassOrderingVisitor.java
│ │ │ │ ├── ClassSelectorResolver.java
│ │ │ │ ├── DeclaredMethodSelector.java
│ │ │ │ ├── DefaultClassDescriptor.java
│ │ │ │ ├── DefaultClassOrdererContext.java
│ │ │ │ ├── DefaultMethodDescriptor.java
│ │ │ │ ├── DefaultMethodOrdererContext.java
│ │ │ │ ├── DiscoverySelectorResolver.java
│ │ │ │ ├── MethodOrderingVisitor.java
│ │ │ │ ├── MethodSegmentResolver.java
│ │ │ │ ├── MethodSelectorResolver.java
│ │ │ │ ├── package-info.java
│ │ │ │ └── predicates/
│ │ │ │ ├── IsTestFactoryMethod.java
│ │ │ │ ├── IsTestMethod.java
│ │ │ │ ├── IsTestTemplateMethod.java
│ │ │ │ ├── IsTestableMethod.java
│ │ │ │ ├── TestClassPredicates.java
│ │ │ │ └── package-info.java
│ │ │ ├── execution/
│ │ │ │ ├── AfterEachMethodAdapter.java
│ │ │ │ ├── BeforeEachMethodAdapter.java
│ │ │ │ ├── ConditionEvaluationException.java
│ │ │ │ ├── ConditionEvaluator.java
│ │ │ │ ├── ConstructorInvocation.java
│ │ │ │ ├── DefaultExecutableInvoker.java
│ │ │ │ ├── DefaultParameterContext.java
│ │ │ │ ├── DefaultTestInstances.java
│ │ │ │ ├── ExtensionContextSupplier.java
│ │ │ │ ├── InterceptingExecutableInvoker.java
│ │ │ │ ├── InvocationInterceptorChain.java
│ │ │ │ ├── JupiterEngineExecutionContext.java
│ │ │ │ ├── LauncherStoreFacade.java
│ │ │ │ ├── MethodInvocation.java
│ │ │ │ ├── NamespaceAwareStore.java
│ │ │ │ ├── ParameterResolutionUtils.java
│ │ │ │ ├── TestInstancesProvider.java
│ │ │ │ └── package-info.java
│ │ │ ├── extension/
│ │ │ │ ├── AutoCloseExtension.java
│ │ │ │ ├── DefaultPreInterruptContext.java
│ │ │ │ ├── DefaultRepetitionInfo.java
│ │ │ │ ├── DefaultTestReporter.java
│ │ │ │ ├── DisabledCondition.java
│ │ │ │ ├── ExtensionContextInternal.java
│ │ │ │ ├── ExtensionRegistrar.java
│ │ │ │ ├── ExtensionRegistry.java
│ │ │ │ ├── MutableExtensionRegistry.java
│ │ │ │ ├── PreInterruptCallbackInvocation.java
│ │ │ │ ├── PreInterruptCallbackInvocationFactory.java
│ │ │ │ ├── PreInterruptThreadDumpPrinter.java
│ │ │ │ ├── RepeatedTestDisplayNameFormatter.java
│ │ │ │ ├── RepeatedTestExtension.java
│ │ │ │ ├── RepeatedTestInvocationContext.java
│ │ │ │ ├── RepetitionExtension.java
│ │ │ │ ├── SameThreadTimeoutInvocation.java
│ │ │ │ ├── SeparateThreadTimeoutInvocation.java
│ │ │ │ ├── TempDirectory.java
│ │ │ │ ├── TestInfoParameterResolver.java
│ │ │ │ ├── TestReporterParameterResolver.java
│ │ │ │ ├── TimeoutConfiguration.java
│ │ │ │ ├── TimeoutDuration.java
│ │ │ │ ├── TimeoutDurationParser.java
│ │ │ │ ├── TimeoutExceptionFactory.java
│ │ │ │ ├── TimeoutExtension.java
│ │ │ │ ├── TimeoutInvocationFactory.java
│ │ │ │ └── package-info.java
│ │ │ ├── package-info.java
│ │ │ └── support/
│ │ │ ├── JupiterThrowableCollectorFactory.java
│ │ │ ├── MethodReflectionUtils.java
│ │ │ ├── OpenTest4JAndJUnit4AwareThrowableCollector.java
│ │ │ └── package-info.java
│ │ └── resources/
│ │ └── META-INF/
│ │ └── services/
│ │ └── org.junit.platform.engine.TestEngine
│ ├── test/
│ │ └── README.md
│ └── testFixtures/
│ └── java/
│ └── org/
│ └── junit/
│ └── jupiter/
│ └── engine/
│ └── discovery/
│ └── JupiterUniqueIdBuilder.java
├── junit-jupiter-migrationsupport/
│ ├── README.md
│ ├── junit-jupiter-migrationsupport.gradle.kts
│ └── src/
│ ├── main/
│ │ └── java/
│ │ ├── module-info.java
│ │ └── org/
│ │ └── junit/
│ │ └── jupiter/
│ │ └── migrationsupport/
│ │ ├── EnableJUnit4MigrationSupport.java
│ │ ├── conditions/
│ │ │ ├── IgnoreCondition.java
│ │ │ └── package-info.java
│ │ ├── package-info.java
│ │ └── rules/
│ │ ├── EnableRuleMigrationSupport.java
│ │ ├── ExpectedExceptionSupport.java
│ │ ├── ExternalResourceSupport.java
│ │ ├── TestRuleSupport.java
│ │ ├── VerifierSupport.java
│ │ ├── adapter/
│ │ │ ├── AbstractTestRuleAdapter.java
│ │ │ ├── ExpectedExceptionAdapter.java
│ │ │ ├── ExternalResourceAdapter.java
│ │ │ ├── GenericBeforeAndAfterAdvice.java
│ │ │ ├── VerifierAdapter.java
│ │ │ └── package-info.java
│ │ ├── member/
│ │ │ ├── AbstractTestRuleAnnotatedMember.java
│ │ │ ├── TestRuleAnnotatedField.java
│ │ │ ├── TestRuleAnnotatedMember.java
│ │ │ ├── TestRuleAnnotatedMethod.java
│ │ │ └── package-info.java
│ │ └── package-info.java
│ └── test/
│ └── README.md
├── junit-jupiter-params/
│ ├── junit-jupiter-params.gradle.kts
│ └── src/
│ ├── jmh/
│ │ └── java/
│ │ └── org/
│ │ └── junit/
│ │ └── jupiter/
│ │ └── params/
│ │ └── ParameterizedInvocationNameFormatterBenchmarks.java
│ ├── main/
│ │ ├── java/
│ │ │ ├── module-info.java
│ │ │ └── org/
│ │ │ └── junit/
│ │ │ └── jupiter/
│ │ │ └── params/
│ │ │ ├── AbstractParameterizedClassInvocationLifecycleMethodInvoker.java
│ │ │ ├── AfterParameterizedClassInvocation.java
│ │ │ ├── AfterParameterizedClassInvocationMethodInvoker.java
│ │ │ ├── ArgumentCountValidationMode.java
│ │ │ ├── ArgumentCountValidator.java
│ │ │ ├── ArgumentSetLifecycleMethod.java
│ │ │ ├── BeforeClassTemplateInvocationFieldInjector.java
│ │ │ ├── BeforeParameterizedClassInvocation.java
│ │ │ ├── BeforeParameterizedClassInvocationMethodInvoker.java
│ │ │ ├── ClassTemplateConstructorParameterResolver.java
│ │ │ ├── DefaultParameterInfo.java
│ │ │ ├── EvaluatedArgumentSet.java
│ │ │ ├── InstancePostProcessingClassTemplateFieldInjector.java
│ │ │ ├── Parameter.java
│ │ │ ├── ParameterInfo.java
│ │ │ ├── ParameterizedClass.java
│ │ │ ├── ParameterizedClassContext.java
│ │ │ ├── ParameterizedClassExtension.java
│ │ │ ├── ParameterizedClassInvocationContext.java
│ │ │ ├── ParameterizedDeclarationContext.java
│ │ │ ├── ParameterizedInvocationConstants.java
│ │ │ ├── ParameterizedInvocationContext.java
│ │ │ ├── ParameterizedInvocationContextProvider.java
│ │ │ ├── ParameterizedInvocationNameFormatter.java
│ │ │ ├── ParameterizedInvocationParameterResolver.java
│ │ │ ├── ParameterizedTest.java
│ │ │ ├── ParameterizedTestContext.java
│ │ │ ├── ParameterizedTestExtension.java
│ │ │ ├── ParameterizedTestInvocationContext.java
│ │ │ ├── ParameterizedTestMethodParameterResolver.java
│ │ │ ├── ParameterizedTestSpiInstantiator.java
│ │ │ ├── QuoteUtils.java
│ │ │ ├── ResolutionCache.java
│ │ │ ├── ResolverFacade.java
│ │ │ ├── aggregator/
│ │ │ │ ├── AggregateWith.java
│ │ │ │ ├── ArgumentAccessException.java
│ │ │ │ ├── ArgumentsAccessor.java
│ │ │ │ ├── ArgumentsAggregationException.java
│ │ │ │ ├── ArgumentsAggregator.java
│ │ │ │ ├── DefaultArgumentsAccessor.java
│ │ │ │ ├── SimpleArgumentsAggregator.java
│ │ │ │ └── package-info.java
│ │ │ ├── converter/
│ │ │ │ ├── AnnotationBasedArgumentConverter.java
│ │ │ │ ├── ArgumentConversionException.java
│ │ │ │ ├── ArgumentConverter.java
│ │ │ │ ├── ConvertWith.java
│ │ │ │ ├── DefaultArgumentConverter.java
│ │ │ │ ├── JavaTimeArgumentConverter.java
│ │ │ │ ├── JavaTimeConversionPattern.java
│ │ │ │ ├── SimpleArgumentConverter.java
│ │ │ │ ├── TypedArgumentConverter.java
│ │ │ │ └── package-info.java
│ │ │ ├── package-info.java
│ │ │ ├── provider/
│ │ │ │ ├── AnnotationBasedArgumentsProvider.java
│ │ │ │ ├── Arguments.java
│ │ │ │ ├── ArgumentsProvider.java
│ │ │ │ ├── ArgumentsSource.java
│ │ │ │ ├── ArgumentsSources.java
│ │ │ │ ├── ArgumentsUtils.java
│ │ │ │ ├── CsvArgumentsProvider.java
│ │ │ │ ├── CsvFileArgumentsProvider.java
│ │ │ │ ├── CsvFileSource.java
│ │ │ │ ├── CsvFileSources.java
│ │ │ │ ├── CsvParsingException.java
│ │ │ │ ├── CsvReaderFactory.java
│ │ │ │ ├── CsvSource.java
│ │ │ │ ├── CsvSources.java
│ │ │ │ ├── EmptyArgumentsProvider.java
│ │ │ │ ├── EmptySource.java
│ │ │ │ ├── EnumArgumentsProvider.java
│ │ │ │ ├── EnumSource.java
│ │ │ │ ├── EnumSources.java
│ │ │ │ ├── FieldArgumentsProvider.java
│ │ │ │ ├── FieldSource.java
│ │ │ │ ├── FieldSources.java
│ │ │ │ ├── MethodArgumentsProvider.java
│ │ │ │ ├── MethodSource.java
│ │ │ │ ├── MethodSources.java
│ │ │ │ ├── NullAndEmptySource.java
│ │ │ │ ├── NullArgumentsProvider.java
│ │ │ │ ├── NullEnum.java
│ │ │ │ ├── NullSource.java
│ │ │ │ ├── ValueArgumentsProvider.java
│ │ │ │ ├── ValueSource.java
│ │ │ │ ├── ValueSources.java
│ │ │ │ └── package-info.java
│ │ │ └── support/
│ │ │ ├── AnnotationConsumer.java
│ │ │ ├── AnnotationConsumerInitializer.java
│ │ │ ├── FieldContext.java
│ │ │ ├── ParameterDeclaration.java
│ │ │ ├── ParameterDeclarations.java
│ │ │ ├── ParameterInfo.java
│ │ │ ├── ParameterNameAndArgument.java
│ │ │ └── package-info.java
│ │ └── kotlin/
│ │ └── org/
│ │ └── junit/
│ │ └── jupiter/
│ │ └── params/
│ │ └── aggregator/
│ │ └── ArgumentsAccessor.kt
│ ├── test/
│ │ └── README.md
│ └── testFixtures/
│ └── java/
│ └── org/
│ └── junit/
│ └── jupiter/
│ └── params/
│ └── provider/
│ └── RecordArguments.java
├── junit-platform-commons/
│ ├── junit-platform-commons.gradle.kts
│ └── src/
│ ├── main/
│ │ └── java/
│ │ ├── module-info.java
│ │ └── org/
│ │ └── junit/
│ │ └── platform/
│ │ └── commons/
│ │ ├── JUnitException.java
│ │ ├── PreconditionViolationException.java
│ │ ├── annotation/
│ │ │ ├── Contract.java
│ │ │ ├── Testable.java
│ │ │ └── package-info.java
│ │ ├── function/
│ │ │ ├── Try.java
│ │ │ └── package-info.java
│ │ ├── io/
│ │ │ ├── DefaultResource.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceFilter.java
│ │ │ └── package-info.java
│ │ ├── logging/
│ │ │ ├── LogRecordListener.java
│ │ │ ├── Logger.java
│ │ │ ├── LoggerFactory.java
│ │ │ └── package-info.java
│ │ ├── package-info.java
│ │ ├── support/
│ │ │ ├── AnnotationSupport.java
│ │ │ ├── ClassSupport.java
│ │ │ ├── DefaultResource.java
│ │ │ ├── HierarchyTraversalMode.java
│ │ │ ├── ModifierSupport.java
│ │ │ ├── ReflectionSupport.java
│ │ │ ├── Resource.java
│ │ │ ├── ResourceSupport.java
│ │ │ ├── SearchOption.java
│ │ │ ├── conversion/
│ │ │ │ ├── ConversionException.java
│ │ │ │ ├── ConversionSupport.java
│ │ │ │ ├── FallbackStringToObjectConverter.java
│ │ │ │ ├── StringToBooleanConverter.java
│ │ │ │ ├── StringToCharacterConverter.java
│ │ │ │ ├── StringToClassConverter.java
│ │ │ │ ├── StringToCommonJavaTypesConverter.java
│ │ │ │ ├── StringToEnumConverter.java
│ │ │ │ ├── StringToJavaTimeConverter.java
│ │ │ │ ├── StringToNumberConverter.java
│ │ │ │ ├── StringToObjectConverter.java
│ │ │ │ └── package-info.java
│ │ │ ├── package-info.java
│ │ │ └── scanning/
│ │ │ ├── ClassFilter.java
│ │ │ ├── ClasspathScanner.java
│ │ │ └── package-info.java
│ │ └── util/
│ │ ├── AnnotationUtils.java
│ │ ├── ClassLoaderUtils.java
│ │ ├── ClassNamePatternFilterUtils.java
│ │ ├── ClassUtils.java
│ │ ├── ClasspathFileVisitor.java
│ │ ├── ClasspathScannerLoader.java
│ │ ├── CloseablePath.java
│ │ ├── CollectionUtils.java
│ │ ├── DefaultClasspathScanner.java
│ │ ├── ExceptionUtils.java
│ │ ├── FunctionUtils.java
│ │ ├── KotlinFunctionUtils.java
│ │ ├── KotlinReflectionUtils.java
│ │ ├── LruCache.java
│ │ ├── ModuleUtils.java
│ │ ├── PackageUtils.java
│ │ ├── Preconditions.java
│ │ ├── ReflectionUtils.java
│ │ ├── ResourceUtils.java
│ │ ├── RuntimeUtils.java
│ │ ├── SearchPathUtils.java
│ │ ├── ServiceLoaderUtils.java
│ │ ├── StringUtils.java
│ │ ├── ToStringBuilder.java
│ │ ├── UnrecoverableExceptions.java
│ │ └── package-info.java
│ ├── test/
│ │ └── README.md
│ └── testFixtures/
│ └── java/
│ └── org/
│ └── junit/
│ └── platform/
│ └── commons/
│ └── test/
│ ├── ConcurrencyTestingUtils.java
│ ├── IdeUtils.java
│ ├── PreconditionAssertions.java
│ ├── TestClassLoader.java
│ └── package-info.java
├── junit-platform-console/
│ ├── LICENSE-picocli.md
│ ├── junit-platform-console.gradle.kts
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ ├── module-info.java
│ │ │ └── org/
│ │ │ └── junit/
│ │ │ └── platform/
│ │ │ └── console/
│ │ │ ├── ConsoleLauncher.java
│ │ │ ├── ConsoleLauncherToolProvider.java
│ │ │ ├── command/
│ │ │ │ ├── BaseCommand.java
│ │ │ │ ├── CommandFacade.java
│ │ │ │ ├── CommandResult.java
│ │ │ │ ├── ConsoleTestExecutor.java
│ │ │ │ ├── CustomClassLoaderCloseStrategy.java
│ │ │ │ ├── CustomContextClassLoaderExecutor.java
│ │ │ │ ├── DiscoverTestsCommand.java
│ │ │ │ ├── DiscoveryRequestCreator.java
│ │ │ │ ├── ExecuteTestsCommand.java
│ │ │ │ ├── ExitCode.java
│ │ │ │ ├── FailFastListener.java
│ │ │ │ ├── ListTestEnginesCommand.java
│ │ │ │ ├── MainCommand.java
│ │ │ │ ├── ManifestVersionProvider.java
│ │ │ │ ├── OutputStreamConfig.java
│ │ │ │ ├── StandardStreamsHandler.java
│ │ │ │ └── package-info.java
│ │ │ ├── options/
│ │ │ │ ├── AnsiColorOptionMixin.java
│ │ │ │ ├── ClasspathEntriesConverter.java
│ │ │ │ ├── ConsoleUtils.java
│ │ │ │ ├── Details.java
│ │ │ │ ├── SelectorConverter.java
│ │ │ │ ├── TestConsoleOutputOptions.java
│ │ │ │ ├── TestConsoleOutputOptionsMixin.java
│ │ │ │ ├── TestDiscoveryOptions.java
│ │ │ │ ├── TestDiscoveryOptionsMixin.java
│ │ │ │ └── package-info.java
│ │ │ ├── output/
│ │ │ │ ├── ColorPalette.java
│ │ │ │ ├── DetailsPrintingListener.java
│ │ │ │ ├── FlatPrintingListener.java
│ │ │ │ ├── Style.java
│ │ │ │ ├── TestFeedPrintingListener.java
│ │ │ │ ├── Theme.java
│ │ │ │ ├── TreeNode.java
│ │ │ │ ├── TreePrinter.java
│ │ │ │ ├── TreePrintingListener.java
│ │ │ │ ├── VerboseTreePrintingListener.java
│ │ │ │ └── package-info.java
│ │ │ └── package-info.java
│ │ └── resources/
│ │ └── META-INF/
│ │ └── services/
│ │ └── java.util.spi.ToolProvider
│ └── test/
│ └── README.md
├── junit-platform-console-standalone/
│ └── junit-platform-console-standalone.gradle.kts
├── junit-platform-engine/
│ ├── junit-platform-engine.gradle.kts
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ ├── module-info.java
│ │ │ └── org/
│ │ │ └── junit/
│ │ │ └── platform/
│ │ │ └── engine/
│ │ │ ├── CancellationToken.java
│ │ │ ├── CompositeFilter.java
│ │ │ ├── CompositeTestDescriptorVisitor.java
│ │ │ ├── ConfigurationParameters.java
│ │ │ ├── DefaultDiscoveryIssue.java
│ │ │ ├── DisabledCancellationToken.java
│ │ │ ├── DiscoveryFilter.java
│ │ │ ├── DiscoveryIssue.java
│ │ │ ├── DiscoverySelector.java
│ │ │ ├── DiscoverySelectorIdentifier.java
│ │ │ ├── EngineDiscoveryListener.java
│ │ │ ├── EngineDiscoveryRequest.java
│ │ │ ├── EngineExecutionListener.java
│ │ │ ├── ExecutionRequest.java
│ │ │ ├── Filter.java
│ │ │ ├── FilterResult.java
│ │ │ ├── OutputDirectoryCreator.java
│ │ │ ├── RegularCancellationToken.java
│ │ │ ├── SelectorResolutionResult.java
│ │ │ ├── TestDescriptor.java
│ │ │ ├── TestEngine.java
│ │ │ ├── TestExecutionResult.java
│ │ │ ├── TestSource.java
│ │ │ ├── TestTag.java
│ │ │ ├── UniqueId.java
│ │ │ ├── UniqueIdFormat.java
│ │ │ ├── discovery/
│ │ │ │ ├── AbstractClassNameFilter.java
│ │ │ │ ├── ClassNameFilter.java
│ │ │ │ ├── ClassSelector.java
│ │ │ │ ├── ClasspathResourceSelector.java
│ │ │ │ ├── ClasspathRootSelector.java
│ │ │ │ ├── DirectorySelector.java
│ │ │ │ ├── DiscoverySelectorIdentifierParser.java
│ │ │ │ ├── DiscoverySelectorIdentifierParsers.java
│ │ │ │ ├── DiscoverySelectors.java
│ │ │ │ ├── ExcludeClassNameFilter.java
│ │ │ │ ├── ExcludePackageNameFilter.java
│ │ │ │ ├── FilePosition.java
│ │ │ │ ├── FileSelector.java
│ │ │ │ ├── IncludeClassNameFilter.java
│ │ │ │ ├── IncludePackageNameFilter.java
│ │ │ │ ├── IterationSelector.java
│ │ │ │ ├── MethodSelector.java
│ │ │ │ ├── ModuleSelector.java
│ │ │ │ ├── NestedClassSelector.java
│ │ │ │ ├── NestedMethodSelector.java
│ │ │ │ ├── PackageNameFilter.java
│ │ │ │ ├── PackageSelector.java
│ │ │ │ ├── UniqueIdSelector.java
│ │ │ │ ├── UriSelector.java
│ │ │ │ └── package-info.java
│ │ │ ├── package-info.java
│ │ │ ├── reporting/
│ │ │ │ ├── FileEntry.java
│ │ │ │ ├── OutputDirectoryProvider.java
│ │ │ │ ├── OutputDirectoryProviderAdapter.java
│ │ │ │ ├── ReportEntry.java
│ │ │ │ └── package-info.java
│ │ │ └── support/
│ │ │ ├── config/
│ │ │ │ ├── PrefixedConfigurationParameters.java
│ │ │ │ └── package-info.java
│ │ │ ├── descriptor/
│ │ │ │ ├── AbstractTestDescriptor.java
│ │ │ │ ├── ClassSource.java
│ │ │ │ ├── ClasspathResourceSource.java
│ │ │ │ ├── CompositeTestSource.java
│ │ │ │ ├── DefaultUriSource.java
│ │ │ │ ├── DirectorySource.java
│ │ │ │ ├── EngineDescriptor.java
│ │ │ │ ├── FilePosition.java
│ │ │ │ ├── FileSource.java
│ │ │ │ ├── FileSystemSource.java
│ │ │ │ ├── MethodSource.java
│ │ │ │ ├── PackageSource.java
│ │ │ │ ├── UriSource.java
│ │ │ │ └── package-info.java
│ │ │ ├── discovery/
│ │ │ │ ├── ClassContainerSelectorResolver.java
│ │ │ │ ├── DiscoveryIssueReporter.java
│ │ │ │ ├── EngineDiscoveryRequestResolution.java
│ │ │ │ ├── EngineDiscoveryRequestResolver.java
│ │ │ │ ├── ResourceContainerSelectorResolver.java
│ │ │ │ ├── ResourceUtils.java
│ │ │ │ ├── SelectorResolver.java
│ │ │ │ └── package-info.java
│ │ │ ├── hierarchical/
│ │ │ │ ├── BlockingAwareFuture.java
│ │ │ │ ├── CompositeLock.java
│ │ │ │ ├── DefaultParallelExecutionConfiguration.java
│ │ │ │ ├── DefaultParallelExecutionConfigurationStrategy.java
│ │ │ │ ├── DelegatingFuture.java
│ │ │ │ ├── EngineExecutionContext.java
│ │ │ │ ├── ExclusiveResource.java
│ │ │ │ ├── ForkJoinPoolHierarchicalTestExecutorService.java
│ │ │ │ ├── HierarchicalTestEngine.java
│ │ │ │ ├── HierarchicalTestExecutor.java
│ │ │ │ ├── HierarchicalTestExecutorService.java
│ │ │ │ ├── LockManager.java
│ │ │ │ ├── Node.java
│ │ │ │ ├── NodeExecutionAdvisor.java
│ │ │ │ ├── NodeTestTask.java
│ │ │ │ ├── NodeTestTaskContext.java
│ │ │ │ ├── NodeTreeWalker.java
│ │ │ │ ├── NodeUtils.java
│ │ │ │ ├── NopLock.java
│ │ │ │ ├── OpenTest4JAwareThrowableCollector.java
│ │ │ │ ├── ParallelExecutionConfiguration.java
│ │ │ │ ├── ParallelExecutionConfigurationStrategy.java
│ │ │ │ ├── ParallelHierarchicalTestExecutorServiceFactory.java
│ │ │ │ ├── ResourceLock.java
│ │ │ │ ├── SameThreadHierarchicalTestExecutorService.java
│ │ │ │ ├── SingleLock.java
│ │ │ │ ├── ThrowableCollector.java
│ │ │ │ ├── WorkerThreadPoolHierarchicalTestExecutorService.java
│ │ │ │ └── package-info.java
│ │ │ └── store/
│ │ │ ├── Namespace.java
│ │ │ ├── NamespacedHierarchicalStore.java
│ │ │ ├── NamespacedHierarchicalStoreException.java
│ │ │ └── package-info.java
│ │ └── resources/
│ │ └── META-INF/
│ │ └── services/
│ │ └── org.junit.platform.engine.discovery.DiscoverySelectorIdentifierParser
│ ├── test/
│ │ └── README.md
│ └── testFixtures/
│ └── java/
│ └── org/
│ └── junit/
│ └── platform/
│ ├── engine/
│ │ └── support/
│ │ └── hierarchical/
│ │ ├── DemoEngineExecutionContext.java
│ │ ├── DemoHierarchicalContainerDescriptor.java
│ │ ├── DemoHierarchicalEngineDescriptor.java
│ │ ├── DemoHierarchicalTestDescriptor.java
│ │ └── DemoHierarchicalTestEngine.java
│ └── fakes/
│ ├── FaultyTestEngines.java
│ ├── TestDescriptorStub.java
│ ├── TestEngineSpy.java
│ ├── TestEngineStub.java
│ └── package-info.java
├── junit-platform-launcher/
│ ├── junit-platform-launcher.gradle.kts
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ ├── module-info.java
│ │ │ └── org/
│ │ │ └── junit/
│ │ │ └── platform/
│ │ │ └── launcher/
│ │ │ ├── AbstractMethodFilter.java
│ │ │ ├── EngineDiscoveryResult.java
│ │ │ ├── EngineFilter.java
│ │ │ ├── ExcludeMethodFilter.java
│ │ │ ├── IncludeMethodFilter.java
│ │ │ ├── Launcher.java
│ │ │ ├── LauncherConstants.java
│ │ │ ├── LauncherDiscoveryListener.java
│ │ │ ├── LauncherDiscoveryRequest.java
│ │ │ ├── LauncherExecutionRequest.java
│ │ │ ├── LauncherInterceptor.java
│ │ │ ├── LauncherSession.java
│ │ │ ├── LauncherSessionListener.java
│ │ │ ├── MethodFilter.java
│ │ │ ├── PostDiscoveryFilter.java
│ │ │ ├── TagFilter.java
│ │ │ ├── TestExecutionListener.java
│ │ │ ├── TestIdentifier.java
│ │ │ ├── TestPlan.java
│ │ │ ├── core/
│ │ │ │ ├── ClasspathAlignmentChecker.java
│ │ │ │ ├── ClasspathAlignmentCheckingLauncherInterceptor.java
│ │ │ │ ├── CompositeEngineExecutionListener.java
│ │ │ │ ├── CompositeTestExecutionListener.java
│ │ │ │ ├── DefaultDiscoveryRequest.java
│ │ │ │ ├── DefaultLauncher.java
│ │ │ │ ├── DefaultLauncherConfig.java
│ │ │ │ ├── DefaultLauncherExecutionRequest.java
│ │ │ │ ├── DefaultLauncherSession.java
│ │ │ │ ├── DelegatingEngineExecutionListener.java
│ │ │ │ ├── DelegatingLauncher.java
│ │ │ │ ├── DelegatingLauncherDiscoveryListener.java
│ │ │ │ ├── DelegatingLauncherDiscoveryRequest.java
│ │ │ │ ├── DiscoveryIssueCollector.java
│ │ │ │ ├── DiscoveryIssueException.java
│ │ │ │ ├── DiscoveryIssueNotifier.java
│ │ │ │ ├── DiscoveryIssueReportingDiscoveryListener.java
│ │ │ │ ├── EngineDiscoveryOrchestrator.java
│ │ │ │ ├── EngineDiscoveryResultValidator.java
│ │ │ │ ├── EngineExecutionOrchestrator.java
│ │ │ │ ├── EngineFilterer.java
│ │ │ │ ├── EngineIdValidator.java
│ │ │ │ ├── ExecutionListenerAdapter.java
│ │ │ │ ├── HierarchicalOutputDirectoryCreator.java
│ │ │ │ ├── InterceptingLauncher.java
│ │ │ │ ├── InternalTestPlan.java
│ │ │ │ ├── IterationOrder.java
│ │ │ │ ├── LauncherConfig.java
│ │ │ │ ├── LauncherConfigurationParameters.java
│ │ │ │ ├── LauncherDiscoveryRequestBuilder.java
│ │ │ │ ├── LauncherDiscoveryResult.java
│ │ │ │ ├── LauncherExecutionRequestBuilder.java
│ │ │ │ ├── LauncherFactory.java
│ │ │ │ ├── LauncherListenerRegistry.java
│ │ │ │ ├── LauncherPhase.java
│ │ │ │ ├── ListenerRegistry.java
│ │ │ │ ├── MemoryCleanupListener.java
│ │ │ │ ├── OutcomeDelayingEngineExecutionListener.java
│ │ │ │ ├── ServiceLoaderRegistry.java
│ │ │ │ ├── ServiceLoaderTestEngineRegistry.java
│ │ │ │ ├── SessionPerRequestLauncher.java
│ │ │ │ ├── StackTracePruningEngineExecutionListener.java
│ │ │ │ ├── StreamInterceptingTestExecutionListener.java
│ │ │ │ ├── StreamInterceptor.java
│ │ │ │ ├── TestEngineFormatter.java
│ │ │ │ └── package-info.java
│ │ │ ├── jfr/
│ │ │ │ ├── FlightRecordingDiscoveryListener.java
│ │ │ │ ├── FlightRecordingExecutionListener.java
│ │ │ │ ├── JfrUtils.java
│ │ │ │ ├── UniqueId.java
│ │ │ │ └── package-info.java
│ │ │ ├── listeners/
│ │ │ │ ├── LoggingListener.java
│ │ │ │ ├── MutableTestExecutionSummary.java
│ │ │ │ ├── OutputDir.java
│ │ │ │ ├── SummaryGeneratingListener.java
│ │ │ │ ├── TestExecutionSummary.java
│ │ │ │ ├── UniqueIdTrackingListener.java
│ │ │ │ ├── discovery/
│ │ │ │ │ ├── AbortOnFailureLauncherDiscoveryListener.java
│ │ │ │ │ ├── CompositeLauncherDiscoveryListener.java
│ │ │ │ │ ├── LauncherDiscoveryListeners.java
│ │ │ │ │ ├── LoggingLauncherDiscoveryListener.java
│ │ │ │ │ └── package-info.java
│ │ │ │ ├── package-info.java
│ │ │ │ └── session/
│ │ │ │ ├── CompositeLauncherSessionListener.java
│ │ │ │ ├── LauncherSessionListeners.java
│ │ │ │ └── package-info.java
│ │ │ ├── package-info.java
│ │ │ └── tagexpression/
│ │ │ ├── DequeStack.java
│ │ │ ├── Operator.java
│ │ │ ├── Operators.java
│ │ │ ├── ParseResult.java
│ │ │ ├── ParseResults.java
│ │ │ ├── ParseStatus.java
│ │ │ ├── Parser.java
│ │ │ ├── ShuntingYard.java
│ │ │ ├── Stack.java
│ │ │ ├── TagExpression.java
│ │ │ ├── TagExpressions.java
│ │ │ ├── Token.java
│ │ │ ├── TokenWith.java
│ │ │ ├── Tokenizer.java
│ │ │ └── package-info.java
│ │ └── resources/
│ │ └── META-INF/
│ │ └── services/
│ │ └── org.junit.platform.launcher.TestExecutionListener
│ ├── test/
│ │ └── README.md
│ └── testFixtures/
│ └── java/
│ └── org/
│ └── junit/
│ └── platform/
│ └── launcher/
│ └── core/
│ ├── ConfigurationParametersFactoryForTests.java
│ ├── LauncherFactoryForTestingPurposesOnly.java
│ ├── NamespacedHierarchicalStoreProviders.java
│ └── OutputDirectoryCreators.java
├── junit-platform-reporting/
│ ├── LICENSE-open-test-reporting.md
│ ├── junit-platform-reporting.gradle.kts
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ ├── module-info.java
│ │ │ └── org/
│ │ │ └── junit/
│ │ │ └── platform/
│ │ │ └── reporting/
│ │ │ ├── legacy/
│ │ │ │ ├── LegacyReportingUtils.java
│ │ │ │ ├── package-info.java
│ │ │ │ └── xml/
│ │ │ │ ├── LegacyXmlReportGeneratingListener.java
│ │ │ │ ├── XmlReportData.java
│ │ │ │ ├── XmlReportWriter.java
│ │ │ │ └── package-info.java
│ │ │ ├── open/
│ │ │ │ └── xml/
│ │ │ │ ├── GitInfoCollector.java
│ │ │ │ ├── JUnitContributor.java
│ │ │ │ ├── JUnitFactory.java
│ │ │ │ ├── LegacyReportingName.java
│ │ │ │ ├── OpenTestReportGeneratingListener.java
│ │ │ │ ├── Type.java
│ │ │ │ ├── UniqueId.java
│ │ │ │ └── package-info.java
│ │ │ └── package-info.java
│ │ └── resources/
│ │ ├── META-INF/
│ │ │ └── services/
│ │ │ ├── org.junit.platform.launcher.TestExecutionListener
│ │ │ └── org.opentest4j.reporting.tooling.spi.htmlreport.Contributor
│ │ └── org/
│ │ └── junit/
│ │ └── platform/
│ │ └── reporting/
│ │ └── open/
│ │ └── xml/
│ │ ├── catalog.xml
│ │ └── junit.xsd
│ ├── test/
│ │ └── README.md
│ └── testFixtures/
│ └── java/
│ └── org/
│ └── junit/
│ └── platform/
│ └── reporting/
│ └── testutil/
│ └── FileUtils.java
├── junit-platform-suite/
│ ├── junit-platform-suite.gradle.kts
│ └── src/
│ ├── main/
│ │ └── java/
│ │ └── module-info.java
│ └── test/
│ └── README.md
├── junit-platform-suite-api/
│ ├── junit-platform-suite-api.gradle.kts
│ └── src/
│ ├── main/
│ │ └── java/
│ │ ├── module-info.java
│ │ └── org/
│ │ └── junit/
│ │ └── platform/
│ │ └── suite/
│ │ └── api/
│ │ ├── AfterSuite.java
│ │ ├── BeforeSuite.java
│ │ ├── ConfigurationParameter.java
│ │ ├── ConfigurationParameters.java
│ │ ├── ConfigurationParametersResource.java
│ │ ├── ConfigurationParametersResources.java
│ │ ├── DisableParentConfigurationParameters.java
│ │ ├── ExcludeClassNamePatterns.java
│ │ ├── ExcludeEngines.java
│ │ ├── ExcludePackages.java
│ │ ├── ExcludeTags.java
│ │ ├── IncludeClassNamePatterns.java
│ │ ├── IncludeEngines.java
│ │ ├── IncludePackages.java
│ │ ├── IncludeTags.java
│ │ ├── Select.java
│ │ ├── SelectClasses.java
│ │ ├── SelectClasspathResource.java
│ │ ├── SelectClasspathResources.java
│ │ ├── SelectDirectories.java
│ │ ├── SelectFile.java
│ │ ├── SelectFiles.java
│ │ ├── SelectMethod.java
│ │ ├── SelectMethods.java
│ │ ├── SelectModules.java
│ │ ├── SelectPackages.java
│ │ ├── SelectUris.java
│ │ ├── Selects.java
│ │ ├── Suite.java
│ │ ├── SuiteDisplayName.java
│ │ └── package-info.java
│ └── test/
│ └── README.md
├── junit-platform-suite-engine/
│ ├── junit-platform-suite-engine.gradle.kts
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ ├── module-info.java
│ │ │ └── org/
│ │ │ └── junit/
│ │ │ └── platform/
│ │ │ └── suite/
│ │ │ └── engine/
│ │ │ ├── AdditionalDiscoverySelectors.java
│ │ │ ├── ClassSelectorResolver.java
│ │ │ ├── DiscoverySelectorResolver.java
│ │ │ ├── IsSuiteClass.java
│ │ │ ├── LifecycleMethodUtils.java
│ │ │ ├── NoTestsDiscoveredException.java
│ │ │ ├── SuiteEngineDescriptor.java
│ │ │ ├── SuiteLauncher.java
│ │ │ ├── SuiteLauncherDiscoveryRequestBuilder.java
│ │ │ ├── SuiteTestDescriptor.java
│ │ │ ├── SuiteTestEngine.java
│ │ │ └── package-info.java
│ │ └── resources/
│ │ └── META-INF/
│ │ └── services/
│ │ └── org.junit.platform.engine.TestEngine
│ └── test/
│ └── README.md
├── junit-platform-testkit/
│ ├── LICENSE.md
│ ├── junit-platform-testkit.gradle.kts
│ └── src/
│ ├── main/
│ │ └── java/
│ │ ├── module-info.java
│ │ └── org/
│ │ └── junit/
│ │ └── platform/
│ │ └── testkit/
│ │ ├── engine/
│ │ │ ├── Assertions.java
│ │ │ ├── EngineDiscoveryResults.java
│ │ │ ├── EngineExecutionResults.java
│ │ │ ├── EngineTestKit.java
│ │ │ ├── Event.java
│ │ │ ├── EventConditions.java
│ │ │ ├── EventStatistics.java
│ │ │ ├── EventType.java
│ │ │ ├── Events.java
│ │ │ ├── Execution.java
│ │ │ ├── ExecutionRecorder.java
│ │ │ ├── Executions.java
│ │ │ ├── TerminationInfo.java
│ │ │ ├── TestExecutionResultConditions.java
│ │ │ └── package-info.java
│ │ └── package-info.java
│ └── test/
│ └── README.md
├── junit-start/
│ ├── junit-start.gradle.kts
│ └── src/
│ └── main/
│ └── java/
│ ├── module-info.java
│ └── org/
│ └── junit/
│ └── start/
│ ├── JUnit.java
│ └── package-info.java
├── junit-vintage-engine/
│ ├── junit-vintage-engine.gradle.kts
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ ├── module-info.java
│ │ │ └── org/
│ │ │ └── junit/
│ │ │ └── vintage/
│ │ │ └── engine/
│ │ │ ├── Constants.java
│ │ │ ├── JUnit4VersionCheck.java
│ │ │ ├── VintageTestEngine.java
│ │ │ ├── descriptor/
│ │ │ │ ├── DescriptionUtils.java
│ │ │ │ ├── OrFilter.java
│ │ │ │ ├── RunnerDecorator.java
│ │ │ │ ├── RunnerRequest.java
│ │ │ │ ├── RunnerTestDescriptor.java
│ │ │ │ ├── TestSourceProvider.java
│ │ │ │ ├── VintageEngineDescriptor.java
│ │ │ │ ├── VintageTestDescriptor.java
│ │ │ │ └── package-info.java
│ │ │ ├── discovery/
│ │ │ │ ├── ClassSelectorResolver.java
│ │ │ │ ├── DefensiveAllDefaultPossibilitiesBuilder.java
│ │ │ │ ├── FilterableIgnoringRunnerDecorator.java
│ │ │ │ ├── IgnoringRunnerDecorator.java
│ │ │ │ ├── IsPotentialJUnit4TestClass.java
│ │ │ │ ├── IsPotentialJUnit4TestMethod.java
│ │ │ │ ├── MethodSelectorResolver.java
│ │ │ │ ├── RunnerTestDescriptorPostProcessor.java
│ │ │ │ ├── UniqueIdFilter.java
│ │ │ │ ├── VintageDiscoverer.java
│ │ │ │ └── package-info.java
│ │ │ ├── execution/
│ │ │ │ ├── CancellationTokenAwareRunNotifier.java
│ │ │ │ ├── EventType.java
│ │ │ │ ├── RunListenerAdapter.java
│ │ │ │ ├── RunnerExecutor.java
│ │ │ │ ├── TestRun.java
│ │ │ │ ├── VintageExecutor.java
│ │ │ │ └── package-info.java
│ │ │ ├── package-info.java
│ │ │ └── support/
│ │ │ ├── UniqueIdReader.java
│ │ │ ├── UniqueIdStringifier.java
│ │ │ └── package-info.java
│ │ └── resources/
│ │ └── META-INF/
│ │ └── services/
│ │ └── org.junit.platform.engine.TestEngine
│ ├── test/
│ │ ├── java/
│ │ │ └── org/
│ │ │ └── junit/
│ │ │ └── vintage/
│ │ │ └── engine/
│ │ │ ├── JUnit4ParameterizedTests.java
│ │ │ ├── JUnit4VersionCheckTests.java
│ │ │ ├── VintageLauncherIntegrationTests.java
│ │ │ ├── VintageTestEngineBasicTests.java
│ │ │ ├── VintageTestEngineDiscoveryTests.java
│ │ │ ├── VintageTestEngineExecutionTests.java
│ │ │ ├── VintageTestEngineTestSuite.java
│ │ │ ├── VintageUniqueIdBuilder.java
│ │ │ ├── descriptor/
│ │ │ │ ├── DescriptionUtilsTests.java
│ │ │ │ ├── OrFilterTests.java
│ │ │ │ ├── TestSourceProviderTests.java
│ │ │ │ └── VintageTestDescriptorTests.java
│ │ │ ├── discovery/
│ │ │ │ ├── IsPotentialJUnit4TestClassTests.java
│ │ │ │ ├── RunnerTestDescriptorPostProcessorTests.java
│ │ │ │ └── VintageDiscovererTests.java
│ │ │ ├── execution/
│ │ │ │ ├── ParallelExecutionIntegrationTests.java
│ │ │ │ └── TestRunTests.java
│ │ │ └── support/
│ │ │ ├── UniqueIdReaderTests.java
│ │ │ └── UniqueIdStringifierTests.java
│ │ └── resources/
│ │ ├── junit-platform.properties
│ │ ├── log4j2-test.xml
│ │ └── vintage-testjar.jar
│ └── testFixtures/
│ ├── groovy/
│ │ └── org/
│ │ └── junit/
│ │ └── vintage/
│ │ └── engine/
│ │ └── samples/
│ │ └── spock/
│ │ └── SpockTestCaseWithUnrolledAndRegularFeatureMethods.groovy
│ └── java/
│ └── org/
│ └── junit/
│ ├── platform/
│ │ └── runner/
│ │ └── JUnitPlatform.java
│ └── vintage/
│ └── engine/
│ └── samples/
│ ├── PlainOldJavaClassWithoutAnyTestsTestCase.java
│ ├── junit3/
│ │ ├── AbstractJUnit3TestCase.java
│ │ ├── IgnoredJUnit3TestCase.java
│ │ ├── JUnit3ParallelSuiteWithSubsuites.java
│ │ ├── JUnit3SuiteWithSingleTestCaseWithSingleTestWhichFails.java
│ │ ├── JUnit3SuiteWithSubsuites.java
│ │ ├── JUnit4SuiteWithIgnoredJUnit3TestCase.java
│ │ └── PlainJUnit3TestCaseWithSingleTestWhichFails.java
│ └── junit4/
│ ├── AbstractJUnit4TestCase.java
│ ├── AbstractJunit4TestCaseWithConstructorParameter.java
│ ├── CancellingTestCase.java
│ ├── Categories.java
│ ├── CompletelyDynamicTestCase.java
│ ├── ConcreteJUnit4TestCase.java
│ ├── ConfigurableRunner.java
│ ├── DynamicRunner.java
│ ├── EmptyIgnoredTestCase.java
│ ├── EnclosedJUnit4TestCase.java
│ ├── EnclosedWithParameterizedChildrenJUnit4TestCase.java
│ ├── ExceptionThrowingRunner.java
│ ├── IgnoredJUnit4TestCase.java
│ ├── IgnoredJUnit4TestCaseWithNotFilterableRunner.java
│ ├── IgnoredParameterizedTestCase.java
│ ├── JUnit4ParallelClassesTestCase.java
│ ├── JUnit4ParallelMethodsTestCase.java
│ ├── JUnit4ParameterizedTestCase.java
│ ├── JUnit4SuiteOfSuiteWithFilterableChildRunner.java
│ ├── JUnit4SuiteOfSuiteWithIgnoredJUnit4TestCase.java
│ ├── JUnit4SuiteOfSuiteWithJUnit4TestCaseWithAssumptionFailureInBeforeClass.java
│ ├── JUnit4SuiteOfSuiteWithJUnit4TestCaseWithErrorInBeforeClass.java
│ ├── JUnit4SuiteWithExceptionThrowingRunner.java
│ ├── JUnit4SuiteWithIgnoredJUnit4TestCase.java
│ ├── JUnit4SuiteWithJUnit3SuiteWithSingleTestCase.java
│ ├── JUnit4SuiteWithJUnit4TestCaseWithAssumptionFailureInBeforeClass.java
│ ├── JUnit4SuiteWithJUnit4TestCaseWithErrorInBeforeClass.java
│ ├── JUnit4SuiteWithJUnit4TestCaseWithFailingDescriptionThatIsNotReportedAsFinished.java
│ ├── JUnit4SuiteWithJUnit4TestCaseWithRunnerWithCustomUniqueIdsAndDisplayNames.java
│ ├── JUnit4SuiteWithPlainJUnit4TestCaseWithSingleTestWhichIsIgnored.java
│ ├── JUnit4SuiteWithTwoTestCases.java
│ ├── JUnit4TestCaseWithAssumptionFailureInBeforeClass.java
│ ├── JUnit4TestCaseWithDistinguishableOverloadedMethod.java
│ ├── JUnit4TestCaseWithErrorCollectorStoringMultipleFailures.java
│ ├── JUnit4TestCaseWithErrorInAfterClass.java
│ ├── JUnit4TestCaseWithErrorInBeforeClass.java
│ ├── JUnit4TestCaseWithExceptionThrowingRunner.java
│ ├── JUnit4TestCaseWithFailingDescriptionThatIsNotReportedAsFinished.java
│ ├── JUnit4TestCaseWithIndistinguishableOverloadedMethod.java
│ ├── JUnit4TestCaseWithNotFilterableRunner.java
│ ├── JUnit4TestCaseWithRunnerWithCustomUniqueIdsAndDisplayNames.java
│ ├── JUnit4TestCaseWithRunnerWithDuplicateChangingChildDescriptions.java
│ ├── Label.java
│ ├── MalformedJUnit4TestCase.java
│ ├── NotFilterableRunner.java
│ ├── ParameterizedTestCase.java
│ ├── ParameterizedTimingTestCase.java
│ ├── ParameterizedWithAfterParamFailureTestCase.java
│ ├── ParameterizedWithBeforeParamFailureTestCase.java
│ ├── PlainJUnit4TestCaseWithFiveTestMethods.java
│ ├── PlainJUnit4TestCaseWithLifecycleMethods.java
│ ├── PlainJUnit4TestCaseWithSingleInheritedTestWhichFails.java
│ ├── PlainJUnit4TestCaseWithSingleTestWhichFails.java
│ ├── PlainJUnit4TestCaseWithSingleTestWhichIsIgnored.java
│ ├── PlainJUnit4TestCaseWithTwoTestMethods.java
│ ├── RunnerThatOnlyReportsFailures.java
│ ├── RunnerWithCustomUniqueIdsAndDisplayNames.java
│ ├── SingleFailingTheoryTestCase.java
│ ├── TestCaseRunWithJUnitPlatformRunner.java
│ └── package-info.java
├── jupiter-tests/
│ ├── jupiter-tests.gradle.kts
│ └── src/
│ ├── templates/
│ │ └── resources/
│ │ └── test/
│ │ └── org/
│ │ └── junit/
│ │ └── jupiter/
│ │ └── api/
│ │ └── condition/
│ │ ├── DisabledOnJreConditionTests.java.jte
│ │ ├── DisabledOnJreIntegrationTests.java.jte
│ │ ├── EnabledOnJreConditionTests.java.jte
│ │ └── EnabledOnJreIntegrationTests.java.jte
│ └── test/
│ ├── groovy/
│ │ └── org/
│ │ └── junit/
│ │ └── jupiter/
│ │ └── api/
│ │ ├── GroovyAssertEqualsTests.groovy
│ │ ├── GroovyAssertNotEqualsTests.groovy
│ │ └── PrimitiveAndWrapperTypeHelpers.groovy
│ ├── java/
│ │ ├── DefaultPackageTestCase.java
│ │ ├── example/
│ │ │ └── B_TestCase.java
│ │ └── org/
│ │ └── junit/
│ │ └── jupiter/
│ │ ├── JupiterTestSuite.java
│ │ ├── api/
│ │ │ ├── AssertAllAssertionsTests.java
│ │ │ ├── AssertArrayEqualsAssertionsTests.java
│ │ │ ├── AssertDoesNotThrowAssertionsTests.java
│ │ │ ├── AssertEqualsAssertionsTests.java
│ │ │ ├── AssertFalseAssertionsTests.java
│ │ │ ├── AssertInstanceOfAssertionsTests.java
│ │ │ ├── AssertIterableEqualsAssertionsTests.java
│ │ │ ├── AssertLinesMatchAssertionsTests.java
│ │ │ ├── AssertNotEqualsAssertionsTests.java
│ │ │ ├── AssertNotNullAssertionsTests.java
│ │ │ ├── AssertNotSameAssertionsTests.java
│ │ │ ├── AssertNullAssertionsTests.java
│ │ │ ├── AssertSameAssertionsTests.java
│ │ │ ├── AssertThrowsAssertionsTests.java
│ │ │ ├── AssertThrowsExactlyAssertionsTests.java
│ │ │ ├── AssertTimeoutAssertionsTests.java
│ │ │ ├── AssertTimeoutPreemptivelyAssertionsTests.java
│ │ │ ├── AssertTrueAssertionsTests.java
│ │ │ ├── AssertionFailureBuilderTest.java
│ │ │ ├── AssumptionsTests.java
│ │ │ ├── ConstantTests.java
│ │ │ ├── DisplayNameGenerationInheritanceTestCase.java
│ │ │ ├── DisplayNameGenerationTests.java
│ │ │ ├── DynamicContainerTests.java
│ │ │ ├── DynamicTestTests.java
│ │ │ ├── EnigmaThrowable.java
│ │ │ ├── FailAssertionsTests.java
│ │ │ ├── IndicativeSentencesGenerationInheritanceTestCase.java
│ │ │ ├── IndicativeSentencesNestedTestCase.java
│ │ │ ├── IndicativeSentencesOnSubClassScenarioOneTestCase.java
│ │ │ ├── IndicativeSentencesOnSubClassTestCase.java
│ │ │ ├── IndicativeSentencesRuntimeEnclosingTypeScenarioOneTestCase.java
│ │ │ ├── IndicativeSentencesRuntimeEnclosingTypeScenarioTwoTestCase.java
│ │ │ ├── IndicativeSentencesRuntimeEnclosingTypeTestCase.java
│ │ │ ├── IndicativeSentencesTopLevelTestCase.java
│ │ │ ├── IterableFactory.java
│ │ │ ├── MediaTypeTests.java
│ │ │ ├── RandomlyOrderedTests.java
│ │ │ ├── condition/
│ │ │ │ ├── AbstractExecutionConditionTests.java
│ │ │ │ ├── ConditionEvaluationResultTests.java
│ │ │ │ ├── DisabledForJreRangeConditionTests.java
│ │ │ │ ├── DisabledForJreRangeIntegrationTests.java
│ │ │ │ ├── DisabledIfConditionClassLoaderTests.java
│ │ │ │ ├── DisabledIfConditionTests.java
│ │ │ │ ├── DisabledIfEnvironmentVariableConditionTests.java
│ │ │ │ ├── DisabledIfEnvironmentVariableIntegrationTests.java
│ │ │ │ ├── DisabledIfIntegrationTests.java
│ │ │ │ ├── DisabledIfSystemPropertyConditionTests.java
│ │ │ │ ├── DisabledIfSystemPropertyIntegrationTests.java
│ │ │ │ ├── DisabledOnOsConditionTests.java
│ │ │ │ ├── DisabledOnOsIntegrationTests.java
│ │ │ │ ├── EnabledForJreRangeConditionTests.java
│ │ │ │ ├── EnabledForJreRangeIntegrationTests.java
│ │ │ │ ├── EnabledIfConditionClassLoaderTests.java
│ │ │ │ ├── EnabledIfConditionTests.java
│ │ │ │ ├── EnabledIfEnvironmentVariableConditionTests.java
│ │ │ │ ├── EnabledIfEnvironmentVariableIntegrationTests.java
│ │ │ │ ├── EnabledIfIntegrationTests.java
│ │ │ │ ├── EnabledIfSystemPropertyConditionTests.java
│ │ │ │ ├── EnabledIfSystemPropertyIntegrationTests.java
│ │ │ │ ├── EnabledOnOsConditionTests.java
│ │ │ │ ├── EnabledOnOsIntegrationTests.java
│ │ │ │ ├── JRETests.java
│ │ │ │ ├── OSTests.java
│ │ │ │ ├── StaticConditionMethods.java
│ │ │ │ └── TestDoubleJRETests.java
│ │ │ ├── extension/
│ │ │ │ ├── CloseableResourceIntegrationTests.java
│ │ │ │ ├── DeprecatedMediaTypeTests.java
│ │ │ │ ├── ExecutableInvokerIntegrationTests.java
│ │ │ │ ├── ExtensionComposabilityTests.java
│ │ │ │ ├── Heavyweight.java
│ │ │ │ ├── HeavyweightTests.java
│ │ │ │ ├── KitchenSinkExtension.java
│ │ │ │ ├── MediaTypeInteroperabilityTests.java
│ │ │ │ └── support/
│ │ │ │ └── TypeBasedParameterResolverTests.java
│ │ │ ├── io/
│ │ │ │ └── TempDirDeletionStrategyTests.java
│ │ │ ├── parallel/
│ │ │ │ ├── LockTests.java
│ │ │ │ ├── ResourceLockAnnotationTests.java
│ │ │ │ └── ResourceLocksProviderTests.java
│ │ │ ├── subpackage/
│ │ │ │ ├── SubclassedAssertionsTests.java
│ │ │ │ └── SubclassedAssumptionsTests.java
│ │ │ ├── timeout/
│ │ │ │ └── PreemptiveTimeoutUtilsTest.java
│ │ │ └── util/
│ │ │ ├── DefaultLocaleTests.java
│ │ │ ├── DefaultTimeZoneTests.java
│ │ │ ├── JupiterPropertyUtilsTests.java
│ │ │ └── SystemPropertiesExtensionTests.java
│ │ ├── engine/
│ │ │ ├── AbstractJupiterTestEngineTests.java
│ │ │ ├── AtypicalJvmMethodNameTests.java
│ │ │ ├── BeforeAllAndAfterAllComposedAnnotationTests.java
│ │ │ ├── BeforeEachAndAfterEachComposedAnnotationTests.java
│ │ │ ├── ClassTemplateInvocationTests.java
│ │ │ ├── DefaultExecutionModeTests.java
│ │ │ ├── DefaultMethodTests.java
│ │ │ ├── DisabledTests.java
│ │ │ ├── DynamicNodeGenerationTests.java
│ │ │ ├── ExceptionHandlingTests.java
│ │ │ ├── ExecutionCancellationTests.java
│ │ │ ├── FailedAssumptionsTests.java
│ │ │ ├── InvalidLifecycleMethodConfigurationTests.java
│ │ │ ├── JupiterTestEngineTests.java
│ │ │ ├── LifecycleMethodOverridingTests.java
│ │ │ ├── MultipleTestableAnnotationsTests.java
│ │ │ ├── NestedTestClassesTests.java
│ │ │ ├── NestedWithInheritanceTests.java
│ │ │ ├── NestedWithSeparateInheritanceTests.java
│ │ │ ├── OverloadedTestMethodTests.java
│ │ │ ├── RecordTests.java
│ │ │ ├── ReportingTests.java
│ │ │ ├── SealedClassTests.java
│ │ │ ├── StandardTestClassTests.java
│ │ │ ├── StaticNestedBeforeAllAndAfterAllMethodsTests.java
│ │ │ ├── StaticNestedTestCase.java
│ │ │ ├── TestClassInheritanceTests.java
│ │ │ ├── TestInstanceLifecycleConfigurationTests.java
│ │ │ ├── TestInstanceLifecycleKotlinTests.java
│ │ │ ├── TestInstanceLifecycleTests.java
│ │ │ ├── TestMethodOverridingTests.java
│ │ │ ├── TestTemplateInvocationTests.java
│ │ │ ├── TopLevelComposedNested.java
│ │ │ ├── TopLevelNestedTestCase.java
│ │ │ ├── bridge/
│ │ │ │ ├── AbstractNonGenericTests.java
│ │ │ │ ├── AbstractNumberTests.java
│ │ │ │ ├── BridgeMethodTests.java
│ │ │ │ ├── ChildWithBridgeMethods.java
│ │ │ │ ├── ChildWithoutBridgeMethods.java
│ │ │ │ ├── NumberResolver.java
│ │ │ │ ├── NumberTestGroup.java
│ │ │ │ └── PackagePrivateParent.java
│ │ │ ├── config/
│ │ │ │ ├── CachingJupiterConfigurationTests.java
│ │ │ │ ├── DefaultJupiterConfigurationTests.java
│ │ │ │ └── InstantiatingConfigurationParameterConverterTests.java
│ │ │ ├── descriptor/
│ │ │ │ ├── CustomDisplayNameGenerator.java
│ │ │ │ ├── DisplayNameUtilsTests.java
│ │ │ │ ├── ExtensionContextTests.java
│ │ │ │ ├── ExtensionsUtilsTests.java
│ │ │ │ ├── JupiterTestDescriptorTests.java
│ │ │ │ ├── LauncherStoreFacadeTest.java
│ │ │ │ ├── LifecycleMethodUtilsTests.java
│ │ │ │ ├── NamespaceTests.java
│ │ │ │ ├── ResourceAutoClosingTests.java
│ │ │ │ ├── TestFactoryTestDescriptorTests.java
│ │ │ │ ├── TestInstanceLifecycleUtilsTests.java
│ │ │ │ ├── TestTemplateInvocationTestDescriptorTests.java
│ │ │ │ ├── TestTemplateTestDescriptorTests.java
│ │ │ │ └── subpackage/
│ │ │ │ ├── Class1WithTestCases.java
│ │ │ │ ├── Class2WithTestCases.java
│ │ │ │ ├── ClassWithStaticInnerTestCases.java
│ │ │ │ └── ClassWithoutTestCases.java
│ │ │ ├── discovery/
│ │ │ │ ├── DiscoverySelectorResolverTests.java
│ │ │ │ ├── DiscoveryTests.java
│ │ │ │ └── predicates/
│ │ │ │ ├── IsTestFactoryMethodTests.java
│ │ │ │ ├── IsTestMethodTests.java
│ │ │ │ ├── IsTestTemplateMethodTests.java
│ │ │ │ └── TestClassPredicatesTests.java
│ │ │ ├── execution/
│ │ │ │ ├── AbstractExecutableInvokerTests.java
│ │ │ │ ├── DefaultExecutableInvokerTests.java
│ │ │ │ ├── DefaultTestInstancesTests.java
│ │ │ │ ├── DynamicTestIntegrationTests.java
│ │ │ │ ├── ExtensionContextStoreConcurrencyTests.java
│ │ │ │ ├── ExtensionContextStoreTests.java
│ │ │ │ ├── InterceptingExecutableInvokerTests.java
│ │ │ │ ├── JupiterEngineExecutionContextTests.java
│ │ │ │ ├── ParameterResolutionUtilsTests.java
│ │ │ │ ├── UniqueIdParsingForArrayParameterIntegrationTests.java
│ │ │ │ └── injection/
│ │ │ │ └── sample/
│ │ │ │ ├── CustomAnnotation.java
│ │ │ │ ├── CustomAnnotationParameterResolver.java
│ │ │ │ ├── CustomType.java
│ │ │ │ ├── CustomTypeParameterResolver.java
│ │ │ │ ├── DoubleParameterResolver.java
│ │ │ │ ├── LongParameterResolver.java
│ │ │ │ ├── MapOfListsTypeBasedParameterResolver.java
│ │ │ │ ├── MapOfStringsParameterResolver.java
│ │ │ │ ├── NullIntegerParameterResolver.java
│ │ │ │ ├── NumberParameterResolver.java
│ │ │ │ ├── PrimitiveArrayParameterResolver.java
│ │ │ │ └── PrimitiveIntegerParameterResolver.java
│ │ │ ├── extension/
│ │ │ │ ├── AutoCloseTests.java
│ │ │ │ ├── BeforeAndAfterAllTests.java
│ │ │ │ ├── BeforeAndAfterEachTests.java
│ │ │ │ ├── BeforeAndAfterTestExecutionCallbackTests.java
│ │ │ │ ├── CloseablePathTests.java
│ │ │ │ ├── ConfigLoaderExtension.java
│ │ │ │ ├── DefaultTestReporterTests.java
│ │ │ │ ├── EnigmaException.java
│ │ │ │ ├── EventuallyInterruptibleInvocation.java
│ │ │ │ ├── ExecutionConditionTests.java
│ │ │ │ ├── ExtensionContextExecutionTests.java
│ │ │ │ ├── ExtensionRegistrationViaParametersAndFieldsTests.java
│ │ │ │ ├── ExtensionRegistryTests.java
│ │ │ │ ├── InvocationInterceptorTests.java
│ │ │ │ ├── LifecycleMethodExecutionExceptionHandlerTests.java
│ │ │ │ ├── OrderedClassTests.java
│ │ │ │ ├── OrderedMethodTests.java
│ │ │ │ ├── OrderedProgrammaticExtensionRegistrationTests.java
│ │ │ │ ├── ParameterResolverTests.java
│ │ │ │ ├── PreInterruptCallbackTests.java
│ │ │ │ ├── ProgrammaticExtensionRegistrationTests.java
│ │ │ │ ├── RepeatedTestTests.java
│ │ │ │ ├── SameThreadTimeoutInvocationTests.java
│ │ │ │ ├── SeparateThreadTimeoutInvocationTests.java
│ │ │ │ ├── ServiceLoaderExtension.java
│ │ │ │ ├── TempDirectoryCleanupTests.java
│ │ │ │ ├── TempDirectoryMetaAnnotationTests.java
│ │ │ │ ├── TempDirectoryPreconditionTests.java
│ │ │ │ ├── TempDirectoryTests.java
│ │ │ │ ├── TestExecutionExceptionHandlerTests.java
│ │ │ │ ├── TestInfoParameterResolverTests.java
│ │ │ │ ├── TestInstanceFactoryTests.java
│ │ │ │ ├── TestInstancePostProcessorAndPreDestroyCallbackTests.java
│ │ │ │ ├── TestInstancePostProcessorTests.java
│ │ │ │ ├── TestInstancePreConstructCallbackTests.java
│ │ │ │ ├── TestInstancePreDestroyCallbackTests.java
│ │ │ │ ├── TestInstancePreDestroyCallbackUtilityMethodTests.java
│ │ │ │ ├── TestReporterParameterResolverTests.java
│ │ │ │ ├── TestWatcherTests.java
│ │ │ │ ├── TimeoutConfigurationTests.java
│ │ │ │ ├── TimeoutDurationParserTests.java
│ │ │ │ ├── TimeoutDurationTests.java
│ │ │ │ ├── TimeoutExceptionFactoryTests.java
│ │ │ │ ├── TimeoutExtensionTests.java
│ │ │ │ ├── TimeoutInvocationFactoryTests.java
│ │ │ │ └── sub/
│ │ │ │ ├── AlwaysDisabledCondition.java
│ │ │ │ ├── AnotherAlwaysDisabledCondition.java
│ │ │ │ └── SystemPropertyCondition.java
│ │ │ ├── subpackage/
│ │ │ │ └── SuperClassWithPackagePrivateLifecycleMethodInDifferentPackageTestCase.java
│ │ │ └── support/
│ │ │ └── OpenTest4JAndJUnit4AwareThrowableCollectorTests.java
│ │ ├── migrationsupport/
│ │ │ ├── JupiterMigrationSupportTestSuite.java
│ │ │ ├── conditions/
│ │ │ │ ├── IgnoreAnnotationIntegrationTests.java
│ │ │ │ └── IgnoreConditionTests.java
│ │ │ └── rules/
│ │ │ ├── AbstractTestRuleAdapterTests.java
│ │ │ ├── EnableRuleMigrationSupportWithBothRuleTypesTests.java
│ │ │ ├── ExpectedExceptionSupportTests.java
│ │ │ ├── ExternalResourceSupportForDifferentDeclaredReturnTypesRulesTests.java
│ │ │ ├── ExternalResourceSupportForMixedMethodAndFieldRulesTests.java
│ │ │ ├── ExternalResourceSupportForMultipleFieldRulesTests.java
│ │ │ ├── ExternalResourceSupportForMultipleMethodRulesTests.java
│ │ │ ├── ExternalResourceSupportForTemporaryFolderFieldTests.java
│ │ │ ├── ExternalResourceSupportWithInheritanceTests.java
│ │ │ ├── ExternalResourceWithoutAdapterTests.java
│ │ │ ├── FailAfterAllHelper.java
│ │ │ ├── LauncherBasedEnableRuleMigrationSupportTests.java
│ │ │ ├── VerifierSupportForMixedMethodAndFieldRulesTests.java
│ │ │ ├── WrongExtendWithForVerifierFieldTests.java
│ │ │ └── WrongExtendWithForVerifierMethodTests.java
│ │ └── params/
│ │ ├── ParameterInfoIntegrationTests.java
│ │ ├── ParameterizedClassIntegrationTests.java
│ │ ├── ParameterizedInvocationNameFormatterTests.java
│ │ ├── ParameterizedTestContextTests.java
│ │ ├── ParameterizedTestExtensionTests.java
│ │ ├── ParameterizedTestIntegrationTests.java
│ │ ├── ParameterizedTestSuite.java
│ │ ├── aggregator/
│ │ │ ├── AggregatorIntegrationTests.java
│ │ │ └── DefaultArgumentsAccessorTests.java
│ │ ├── converter/
│ │ │ ├── DefaultArgumentConverterTests.java
│ │ │ ├── JavaTimeArgumentConverterTests.java
│ │ │ └── TypedArgumentConverterTests.java
│ │ ├── provider/
│ │ │ ├── AnnotationBasedArgumentsProviderTests.java
│ │ │ ├── ArgumentsTests.java
│ │ │ ├── CsvArgumentsProviderTests.java
│ │ │ ├── CsvFileArgumentsProviderTests.java
│ │ │ ├── EnumArgumentsProviderTests.java
│ │ │ ├── EnumSourceTests.java
│ │ │ ├── FieldArgumentsProviderTests.java
│ │ │ ├── MethodArgumentsProviderTests.java
│ │ │ ├── MockCsvAnnotationBuilder.java
│ │ │ └── ValueArgumentsProviderTests.java
│ │ └── support/
│ │ ├── AnnotationConsumerInitializerTests.java
│ │ └── DeprecatedParameterInfoIntegrationTests.java
│ ├── kotlin/
│ │ └── org/
│ │ └── junit/
│ │ └── jupiter/
│ │ ├── api/
│ │ │ └── kotlin/
│ │ │ ├── GenericInlineValueClassTests.kt
│ │ │ ├── KotlinAssertTimeoutAssertionsTests.kt
│ │ │ ├── KotlinAssertionsTests.kt
│ │ │ ├── KotlinDynamicTests.kt
│ │ │ ├── KotlinFailAssertionsTests.kt
│ │ │ ├── KotlinSuspendFunctionsTests.kt
│ │ │ └── PrimitiveWrapperInlineValueClassTests.kt
│ │ ├── engine/
│ │ │ └── kotlin/
│ │ │ ├── ArbitraryNamingKotlinTestCase.kt
│ │ │ ├── InstancePerClassKotlinTestCase.kt
│ │ │ ├── InstancePerMethodKotlinTestCase.kt
│ │ │ ├── KotlinDefaultImplsTestCase.kt
│ │ │ ├── KotlinInterfaceImplementationTestCase.kt
│ │ │ └── KotlinInterfaceTestCase.kt
│ │ └── params/
│ │ ├── ParameterizedClassKotlinIntegrationTests.kt
│ │ ├── ParameterizedInvocationNameFormatterIntegrationTests.kt
│ │ ├── ParameterizedTestKotlinSequenceIntegrationTests.kt
│ │ ├── aggregator/
│ │ │ ├── ArgumentsAccessorKotlinTests.kt
│ │ │ └── DisplayNameTests.kt
│ │ └── converter/
│ │ └── TypedArgumentConverterKotlinTests.kt
│ └── resources/
│ ├── META-INF/
│ │ └── services/
│ │ └── org.junit.jupiter.api.extension.Extension
│ ├── junit-platform.properties
│ ├── jupiter-testjar.jar
│ ├── log4j2-test.xml
│ └── org/
│ └── junit/
│ └── jupiter/
│ └── params/
│ ├── provider/
│ │ ├── broken.csv
│ │ ├── default-max-chars.csv
│ │ ├── exceeds-default-max-chars.csv
│ │ ├── leading-trailing-spaces.csv
│ │ └── single-column.csv
│ ├── two-column-with-headers.csv
│ └── two-column.csv
├── platform-tests/
│ ├── platform-tests.gradle.kts
│ └── src/
│ ├── jmh/
│ │ └── java/
│ │ └── org/
│ │ └── junit/
│ │ └── jupiter/
│ │ └── jmh/
│ │ └── AssertionBenchmarks.java
│ ├── processStarter/
│ │ └── java/
│ │ └── org/
│ │ └── junit/
│ │ └── platform/
│ │ └── tests/
│ │ └── process/
│ │ ├── OutputFiles.java
│ │ ├── ProcessResult.java
│ │ ├── ProcessStarter.java
│ │ ├── WatchedOutput.java
│ │ ├── WatchedProcess.java
│ │ └── package-info.java
│ └── test/
│ ├── java/
│ │ ├── DefaultPackageTestCase.java
│ │ └── org/
│ │ └── junit/
│ │ └── platform/
│ │ ├── JUnitPlatformTestSuite.java
│ │ ├── StackTracePruningTests.java
│ │ ├── TestEngineTests.java
│ │ ├── commons/
│ │ │ ├── annotation/
│ │ │ │ └── TestableAnnotationTests.java
│ │ │ ├── function/
│ │ │ │ └── TryTests.java
│ │ │ ├── support/
│ │ │ │ ├── AnnotationSupportTests.java
│ │ │ │ ├── ClassSupportTests.java
│ │ │ │ ├── ModifierSupportTests.java
│ │ │ │ ├── ReflectionSupportTests.java
│ │ │ │ ├── ResourceInteroperabilityTests.java
│ │ │ │ ├── ResourceSupportTests.java
│ │ │ │ └── conversion/
│ │ │ │ ├── ConversionSupportTests.java
│ │ │ │ └── FallbackStringToObjectConverterTests.java
│ │ │ └── util/
│ │ │ ├── AnnotationUtilsTests.java
│ │ │ ├── ClassLoaderUtilsTests.java
│ │ │ ├── ClassNamePatternFilterUtilsTests.java
│ │ │ ├── ClassUtilsTests.java
│ │ │ ├── CloseablePathTests.java
│ │ │ ├── CollectionUtilsTests.java
│ │ │ ├── DefaultClasspathScannerTests.java
│ │ │ ├── ExceptionUtilsTests.java
│ │ │ ├── FunctionUtilsTests.java
│ │ │ ├── LruCacheTests.java
│ │ │ ├── PackageUtilsTests.java
│ │ │ ├── PreconditionsTests.java
│ │ │ ├── ReflectionUtilsTests.java
│ │ │ ├── ReflectionUtilsWithGenericTypeHierarchiesTests.java
│ │ │ ├── RuntimeUtilsTests.java
│ │ │ ├── SerializationUtils.java
│ │ │ ├── StringUtilsTests.java
│ │ │ ├── ToStringBuilderTests.java
│ │ │ ├── classes/
│ │ │ │ ├── AExecutionConditionClass.java
│ │ │ │ ├── ATestExecutionListenerClass.java
│ │ │ │ ├── AVanillaEmpty.java
│ │ │ │ ├── BExecutionConditionClass.java
│ │ │ │ ├── BTestExecutionListenerClass.java
│ │ │ │ ├── BVanillaEmpty.java
│ │ │ │ └── CustomType.java
│ │ │ └── pkg1/
│ │ │ ├── ClassLevelDir.java
│ │ │ ├── InstanceLevelDir.java
│ │ │ ├── SuperclassWithStaticPackagePrivateBeforeMethod.java
│ │ │ ├── SuperclassWithStaticPackagePrivateTempDirField.java
│ │ │ └── subpkg/
│ │ │ ├── SubclassWithNonStaticPackagePrivateBeforeMethod.java
│ │ │ └── SubclassWithNonStaticPackagePrivateTempDirField.java
│ │ ├── console/
│ │ │ ├── ConsoleDetailsTests.java
│ │ │ ├── ConsoleLauncherIntegrationTests.java
│ │ │ ├── ConsoleLauncherTests.java
│ │ │ ├── ConsoleLauncherWrapper.java
│ │ │ ├── ConsoleLauncherWrapperResult.java
│ │ │ ├── command/
│ │ │ │ ├── CommandLineOptionsParsingTests.java
│ │ │ │ ├── ConsoleTestExecutorTests.java
│ │ │ │ ├── ConsoleUtilsTests.java
│ │ │ │ ├── CustomContextClassLoaderExecutorTests.java
│ │ │ │ ├── DiscoveryRequestCreatorTests.java
│ │ │ │ ├── ExecuteTestsCommandTests.java
│ │ │ │ ├── StdStreamTestCase.java
│ │ │ │ └── ThemeTests.java
│ │ │ ├── output/
│ │ │ │ ├── ColorPaletteTests.java
│ │ │ │ ├── FlatPrintingListenerTests.java
│ │ │ │ ├── TestFeedPrintingListenerTests.java
│ │ │ │ ├── TreeNodeTests.java
│ │ │ │ ├── TreePrinterTests.java
│ │ │ │ └── VerboseTreePrintingListenerTests.java
│ │ │ └── subpackage/
│ │ │ ├── ContainerForInnerTest.java
│ │ │ ├── ContainerForInnerTests.java
│ │ │ ├── ContainerForStaticNestedTest.java
│ │ │ ├── ContainerForStaticNestedTests.java
│ │ │ ├── FailingTestCase.java
│ │ │ ├── SecondTest.java
│ │ │ ├── Test.java
│ │ │ ├── Test1.java
│ │ │ ├── Tests.java
│ │ │ └── ThirdTests.java
│ │ ├── engine/
│ │ │ ├── CompositeTestDescriptorVisitorTests.java
│ │ │ ├── DiscoveryIssueTests.java
│ │ │ ├── FilterCompositionTests.java
│ │ │ ├── TestDescriptorTests.java
│ │ │ ├── TestTagTests.java
│ │ │ ├── UniqueIdFormatTests.java
│ │ │ ├── UniqueIdTests.java
│ │ │ ├── discovery/
│ │ │ │ ├── ClassNameFilterTests.java
│ │ │ │ ├── ClassSelectorTests.java
│ │ │ │ ├── ClasspathResourceSelectorTests.java
│ │ │ │ ├── ClasspathRootSelectorTests.java
│ │ │ │ ├── DirectorySelectorTests.java
│ │ │ │ ├── DiscoverySelectorsTests.java
│ │ │ │ ├── FilePositionTests.java
│ │ │ │ ├── FileSelectorTests.java
│ │ │ │ ├── IterationSelectorTests.java
│ │ │ │ ├── MethodSelectorTests.java
│ │ │ │ ├── ModuleSelectorTests.java
│ │ │ │ ├── NestedClassSelectorTests.java
│ │ │ │ ├── NestedMethodSelectorTests.java
│ │ │ │ ├── PackageNameFilterTests.java
│ │ │ │ ├── PackageSelectorTests.java
│ │ │ │ ├── UniqueIdSelectorTests.java
│ │ │ │ └── UriSelectorTests.java
│ │ │ └── support/
│ │ │ ├── config/
│ │ │ │ └── PrefixedConfigurationParametersTests.java
│ │ │ ├── descriptor/
│ │ │ │ ├── AbstractTestDescriptorTests.java
│ │ │ │ ├── AbstractTestSourceTests.java
│ │ │ │ ├── ClassSourceTests.java
│ │ │ │ ├── ClasspathResourceSourceTests.java
│ │ │ │ ├── CompositeTestSourceTests.java
│ │ │ │ ├── DefaultUriSourceTests.java
│ │ │ │ ├── DemoClassTestDescriptor.java
│ │ │ │ ├── DemoMethodTestDescriptor.java
│ │ │ │ ├── FilePositionTests.java
│ │ │ │ ├── FileSystemSourceTests.java
│ │ │ │ ├── MethodSourceTests.java
│ │ │ │ ├── PackageSourceTests.java
│ │ │ │ ├── TestDescriptorOrderChildrenTests.java
│ │ │ │ └── TestDescriptorTests.java
│ │ │ ├── discovery/
│ │ │ │ ├── EngineDiscoveryRequestResolverTests.java
│ │ │ │ └── ResourceContainerSelectorResolverTest.java
│ │ │ ├── hierarchical/
│ │ │ │ ├── CompositeLockTests.java
│ │ │ │ ├── DefaultParallelExecutionConfigurationStrategyTests.java
│ │ │ │ ├── ForkJoinDeadLockTests.java
│ │ │ │ ├── ForkJoinPoolHierarchicalTestExecutorServiceTests.java
│ │ │ │ ├── HierarchicalTestExecutorTests.java
│ │ │ │ ├── LockManagerTests.java
│ │ │ │ ├── MemoryLeakTests.java
│ │ │ │ ├── NodeTreeWalkerIntegrationTests.java
│ │ │ │ ├── ParallelExecutionIntegrationTests.java
│ │ │ │ ├── ResourceLockSupport.java
│ │ │ │ ├── ResourceLockTests.java
│ │ │ │ ├── SameThreadExecutionIntegrationTests.java
│ │ │ │ ├── SingleLockTests.java
│ │ │ │ ├── ThrowableCollectorTests.java
│ │ │ │ ├── WorkerLeaseManagerTests.java
│ │ │ │ └── WorkerThreadPoolHierarchicalTestExecutorServiceTests.java
│ │ │ └── store/
│ │ │ ├── NamespaceTests.java
│ │ │ └── NamespacedHierarchicalStoreTests.java
│ │ ├── launcher/
│ │ │ ├── DiscoveryFilterStub.java
│ │ │ ├── FilterStub.java
│ │ │ ├── InterceptedTestEngine.java
│ │ │ ├── InterceptorInjectedLauncherSessionListener.java
│ │ │ ├── MethodFilterTests.java
│ │ │ ├── PostDiscoveryFilterStub.java
│ │ │ ├── TagFilterTests.java
│ │ │ ├── TagIntegrationTests.java
│ │ │ ├── TestIdentifierTests.java
│ │ │ ├── TestLauncherDiscoveryListener.java
│ │ │ ├── TestLauncherInterceptor1.java
│ │ │ ├── TestLauncherInterceptor2.java
│ │ │ ├── TestLauncherSessionListener.java
│ │ │ ├── TestPlanTests.java
│ │ │ ├── TestPostDiscoveryTagFilter.java
│ │ │ ├── core/
│ │ │ │ ├── ClasspathAlignmentCheckerTests.java
│ │ │ │ ├── CompositeEngineExecutionListenerTests.java
│ │ │ │ ├── CompositeTestExecutionListenerTests.java
│ │ │ │ ├── DefaultLauncherEngineFilterTests.java
│ │ │ │ ├── DefaultLauncherTests.java
│ │ │ │ ├── DiscoveryIssueCollectorTests.java
│ │ │ │ ├── DiscoveryIssueReportingDiscoveryListenerTests.java
│ │ │ │ ├── EngineDiscoveryResultValidatorTests.java
│ │ │ │ ├── ExecutionListenerAdapterTests.java
│ │ │ │ ├── HierarchicalOutputDirectoryCreatorTests.java
│ │ │ │ ├── InternalTestPlanTests.java
│ │ │ │ ├── LauncherConfigTests.java
│ │ │ │ ├── LauncherConfigurationParametersTests.java
│ │ │ │ ├── LauncherDiscoveryRequestBuilderTests.java
│ │ │ │ ├── LauncherDiscoveryResultTests.java
│ │ │ │ ├── LauncherFactoryTests.java
│ │ │ │ ├── LauncherPreconditionTests.java
│ │ │ │ ├── LauncherSessionTests.java
│ │ │ │ ├── ListenerRegistryTests.java
│ │ │ │ ├── StoreSharingTests.java
│ │ │ │ ├── StreamInterceptingTestExecutionListenerIntegrationTests.java
│ │ │ │ └── StreamInterceptorTests.java
│ │ │ ├── jfr/
│ │ │ │ ├── FlightRecordingDiscoveryListenerIntegrationTests.java
│ │ │ │ └── FlightRecordingExecutionListenerIntegrationTests.java
│ │ │ ├── listeners/
│ │ │ │ ├── AnotherUnusedTestExecutionListener.java
│ │ │ │ ├── LoggingListenerTests.java
│ │ │ │ ├── NoopTestExecutionListener.java
│ │ │ │ ├── OutputDirTests.java
│ │ │ │ ├── SummaryGenerationTests.java
│ │ │ │ ├── UniqueIdTrackingListenerIntegrationTests.java
│ │ │ │ ├── UnusedTestExecutionListener.java
│ │ │ │ ├── discovery/
│ │ │ │ │ ├── AbortOnFailureLauncherDiscoveryListenerTests.java
│ │ │ │ │ ├── CompositeLauncherDiscoveryListenerTests.java
│ │ │ │ │ └── LoggingLauncherDiscoveryListenerTests.java
│ │ │ │ └── session/
│ │ │ │ └── CompositeLauncherSessionListenerTests.java
│ │ │ └── tagexpression/
│ │ │ ├── ParserErrorTests.java
│ │ │ ├── ParserTests.java
│ │ │ ├── TagExpressionsTests.java
│ │ │ ├── TokenTests.java
│ │ │ └── TokenizerTests.java
│ │ ├── reporting/
│ │ │ ├── legacy/
│ │ │ │ └── xml/
│ │ │ │ ├── IncrementingClock.java
│ │ │ │ ├── LegacyXmlReportGeneratingListenerTests.java
│ │ │ │ ├── XmlReportAssertions.java
│ │ │ │ ├── XmlReportDataTests.java
│ │ │ │ └── XmlReportWriterTests.java
│ │ │ └── open/
│ │ │ └── xml/
│ │ │ ├── JUnitContributorTests.java
│ │ │ └── OpenTestReportGeneratingListenerTests.java
│ │ ├── suite/
│ │ │ └── engine/
│ │ │ ├── BeforeAndAfterSuiteTests.java
│ │ │ ├── SuiteEngineTests.java
│ │ │ ├── SuiteLauncherDiscoveryRequestBuilderTests.java
│ │ │ ├── SuiteTestDescriptorTests.java
│ │ │ ├── error/
│ │ │ │ ├── ErrorSelector.java
│ │ │ │ ├── ErrorSelectorIdentifierParser.java
│ │ │ │ ├── SelectorProcessingErrorCausingEngine.java
│ │ │ │ └── package-info.java
│ │ │ ├── testcases/
│ │ │ │ ├── ConfigurationSensitiveTestCase.java
│ │ │ │ ├── DynamicTestsTestCase.java
│ │ │ │ ├── EmptyDynamicTestsTestCase.java
│ │ │ │ ├── EmptyTestTestCase.java
│ │ │ │ ├── ErroneousTestCase.java
│ │ │ │ ├── JUnit4TestsTestCase.java
│ │ │ │ ├── MultipleTestsTestCase.java
│ │ │ │ ├── SingleTestTestCase.java
│ │ │ │ ├── StatefulTestCase.java
│ │ │ │ └── TaggedTestTestCase.java
│ │ │ └── testsuites/
│ │ │ ├── AbstractSuite.java
│ │ │ ├── BlankSuiteDisplayNameSuite.java
│ │ │ ├── ConfigurationSuite.java
│ │ │ ├── CyclicSuite.java
│ │ │ ├── DynamicSuite.java
│ │ │ ├── EmptyCyclicSuite.java
│ │ │ ├── EmptyDynamicTestSuite.java
│ │ │ ├── EmptyDynamicTestWithFailIfNoTestFalseSuite.java
│ │ │ ├── EmptyTestCaseSuite.java
│ │ │ ├── EmptyTestCaseWithFailIfNoTestFalseSuite.java
│ │ │ ├── ErroneousTestSuite.java
│ │ │ ├── InheritedSuite.java
│ │ │ ├── LifecycleMethodsSuites.java
│ │ │ ├── MultiEngineSuite.java
│ │ │ ├── MultipleSuite.java
│ │ │ ├── NestedSuite.java
│ │ │ ├── SelectByIdentifierSuite.java
│ │ │ ├── SelectClassesSuite.java
│ │ │ ├── SelectMethodsSuite.java
│ │ │ ├── SelectorProcessingErrorTestSuite.java
│ │ │ ├── SuiteDisplayNameSuite.java
│ │ │ ├── SuiteSuite.java
│ │ │ ├── SuiteWithErroneousTestSuite.java
│ │ │ ├── ThreePartCyclicSuite.java
│ │ │ └── WhitespaceSuiteDisplayNameSuite.java
│ │ └── testkit/
│ │ └── engine/
│ │ ├── EngineDiscoveryResultsIntegrationTests.java
│ │ ├── EngineTestKitTests.java
│ │ ├── EventsTests.java
│ │ ├── ExecutionsIntegrationTests.java
│ │ ├── NestedContainerEventConditionTests.java
│ │ └── TestExecutionResultConditionsTests.java
│ ├── kotlin/
│ │ └── org/
│ │ └── junit/
│ │ └── platform/
│ │ └── commons/
│ │ └── util/
│ │ └── KotlinReflectionUtilsTests.kt
│ └── resources/
│ ├── META-INF/
│ │ └── services/
│ │ └── org.junit.platform.engine.discovery.DiscoverySelectorIdentifierParser
│ ├── config-test-override.properties
│ ├── config-test.properties
│ ├── console/
│ │ └── details/
│ │ ├── basic/
│ │ │ ├── Basic-changeDisplayName-flat-ascii.out.txt
│ │ │ ├── Basic-changeDisplayName-flat-unicode.out.txt
│ │ │ ├── Basic-changeDisplayName-none-ascii.out.txt
│ │ │ ├── Basic-changeDisplayName-none-unicode.out.txt
│ │ │ ├── Basic-changeDisplayName-summary-ascii.out.txt
│ │ │ ├── Basic-changeDisplayName-summary-unicode.out.txt
│ │ │ ├── Basic-changeDisplayName-testfeed-ascii.out.txt
│ │ │ ├── Basic-changeDisplayName-testfeed-unicode.out.txt
│ │ │ ├── Basic-changeDisplayName-tree-ascii.out.txt
│ │ │ ├── Basic-changeDisplayName-tree-unicode.out.txt
│ │ │ ├── Basic-changeDisplayName-verbose-ascii.out.txt
│ │ │ ├── Basic-changeDisplayName-verbose-unicode.out.txt
│ │ │ ├── Basic-empty-flat-ascii.out.txt
│ │ │ ├── Basic-empty-flat-unicode.out.txt
│ │ │ ├── Basic-empty-none-ascii.out.txt
│ │ │ ├── Basic-empty-none-unicode.out.txt
│ │ │ ├── Basic-empty-summary-ascii.out.txt
│ │ │ ├── Basic-empty-summary-unicode.out.txt
│ │ │ ├── Basic-empty-testfeed-ascii.out.txt
│ │ │ ├── Basic-empty-testfeed-unicode.out.txt
│ │ │ ├── Basic-empty-tree-ascii.out.txt
│ │ │ ├── Basic-empty-tree-unicode.out.txt
│ │ │ ├── Basic-empty-verbose-ascii.out.txt
│ │ │ └── Basic-empty-verbose-unicode.out.txt
│ │ ├── fail/
│ │ │ ├── Fail-failWithMultiLineMessage-flat-ascii.out.txt
│ │ │ ├── Fail-failWithMultiLineMessage-flat-unicode.out.txt
│ │ │ ├── Fail-failWithMultiLineMessage-none-ascii.out.txt
│ │ │ ├── Fail-failWithMultiLineMessage-none-unicode.out.txt
│ │ │ ├── Fail-failWithMultiLineMessage-summary-ascii.out.txt
│ │ │ ├── Fail-failWithMultiLineMessage-summary-unicode.out.txt
│ │ │ ├── Fail-failWithMultiLineMessage-testfeed-ascii.out.txt
│ │ │ ├── Fail-failWithMultiLineMessage-testfeed-unicode.out.txt
│ │ │ ├── Fail-failWithMultiLineMessage-tree-ascii.out.txt
│ │ │ ├── Fail-failWithMultiLineMessage-tree-unicode.out.txt
│ │ │ ├── Fail-failWithMultiLineMessage-verbose-ascii.out.txt
│ │ │ ├── Fail-failWithMultiLineMessage-verbose-unicode.out.txt
│ │ │ ├── Fail-failWithSingleLineMessage-flat-ascii.out.txt
│ │ │ ├── Fail-failWithSingleLineMessage-flat-unicode.out.txt
│ │ │ ├── Fail-failWithSingleLineMessage-none-ascii.out.txt
│ │ │ ├── Fail-failWithSingleLineMessage-none-unicode.out.txt
│ │ │ ├── Fail-failWithSingleLineMessage-summary-ascii.out.txt
│ │ │ ├── Fail-failWithSingleLineMessage-summary-unicode.out.txt
│ │ │ ├── Fail-failWithSingleLineMessage-testfeed-ascii.out.txt
│ │ │ ├── Fail-failWithSingleLineMessage-testfeed-unicode.out.txt
│ │ │ ├── Fail-failWithSingleLineMessage-tree-ascii.out.txt
│ │ │ ├── Fail-failWithSingleLineMessage-tree-unicode.out.txt
│ │ │ ├── Fail-failWithSingleLineMessage-verbose-ascii.out.txt
│ │ │ └── Fail-failWithSingleLineMessage-verbose-unicode.out.txt
│ │ ├── report/
│ │ │ ├── Report-reportMultiEntriesWithMultiMappings-flat-ascii.out.txt
│ │ │ ├── Report-reportMultiEntriesWithMultiMappings-flat-unicode.out.txt
│ │ │ ├── Report-reportMultiEntriesWithMultiMappings-none-ascii.out.txt
│ │ │ ├── Report-reportMultiEntriesWithMultiMappings-none-unicode.out.txt
│ │ │ ├── Report-reportMultiEntriesWithMultiMappings-summary-ascii.out.txt
│ │ │ ├── Report-reportMultiEntriesWithMultiMappings-summary-unicode.out.txt
│ │ │ ├── Report-reportMultiEntriesWithMultiMappings-testfeed-ascii.out.txt
│ │ │ ├── Report-reportMultiEntriesWithMultiMappings-testfeed-unicode.out.txt
│ │ │ ├── Report-reportMultiEntriesWithMultiMappings-tree-ascii.out.txt
│ │ │ ├── Report-reportMultiEntriesWithMultiMappings-tree-unicode.out.txt
│ │ │ ├── Report-reportMultiEntriesWithMultiMappings-verbose-ascii.out.txt
│ │ │ ├── Report-reportMultiEntriesWithMultiMappings-verbose-unicode.out.txt
│ │ │ ├── Report-reportMultiEntriesWithSingleMapping-flat-ascii.out.txt
│ │ │ ├── Report-reportMultiEntriesWithSingleMapping-flat-unicode.out.txt
│ │ │ ├── Report-reportMultiEntriesWithSingleMapping-none-ascii.out.txt
│ │ │ ├── Report-reportMultiEntriesWithSingleMapping-none-unicode.out.txt
│ │ │ ├── Report-reportMultiEntriesWithSingleMapping-summary-ascii.out.txt
│ │ │ ├── Report-reportMultiEntriesWithSingleMapping-summary-unicode.out.txt
│ │ │ ├── Report-reportMultiEntriesWithSingleMapping-testfeed-ascii.out.txt
│ │ │ ├── Report-reportMultiEntriesWithSingleMapping-testfeed-unicode.out.txt
│ │ │ ├── Report-reportMultiEntriesWithSingleMapping-tree-ascii.out.txt
│ │ │ ├── Report-reportMultiEntriesWithSingleMapping-tree-unicode.out.txt
│ │ │ ├── Report-reportMultiEntriesWithSingleMapping-verbose-ascii.out.txt
│ │ │ ├── Report-reportMultiEntriesWithSingleMapping-verbose-unicode.out.txt
│ │ │ ├── Report-reportMultipleMessages-flat-ascii.out.txt
│ │ │ ├── Report-reportMultipleMessages-flat-unicode.out.txt
│ │ │ ├── Report-reportMultipleMessages-none-ascii.out.txt
│ │ │ ├── Report-reportMultipleMessages-none-unicode.out.txt
│ │ │ ├── Report-reportMultipleMessages-summary-ascii.out.txt
│ │ │ ├── Report-reportMultipleMessages-summary-unicode.out.txt
│ │ │ ├── Report-reportMultipleMessages-testfeed-ascii.out.txt
│ │ │ ├── Report-reportMultipleMessages-testfeed-unicode.out.txt
│ │ │ ├── Report-reportMultipleMessages-tree-ascii.out.txt
│ │ │ ├── Report-reportMultipleMessages-tree-unicode.out.txt
│ │ │ ├── Report-reportMultipleMessages-verbose-ascii.out.txt
│ │ │ ├── Report-reportMultipleMessages-verbose-unicode.out.txt
│ │ │ ├── Report-reportSingleEntryWithSingleMapping-flat-ascii.out.txt
│ │ │ ├── Report-reportSingleEntryWithSingleMapping-flat-unicode.out.txt
│ │ │ ├── Report-reportSingleEntryWithSingleMapping-none-ascii.out.txt
│ │ │ ├── Report-reportSingleEntryWithSingleMapping-none-unicode.out.txt
│ │ │ ├── Report-reportSingleEntryWithSingleMapping-summary-ascii.out.txt
│ │ │ ├── Report-reportSingleEntryWithSingleMapping-summary-unicode.out.txt
│ │ │ ├── Report-reportSingleEntryWithSingleMapping-testfeed-ascii.out.txt
│ │ │ ├── Report-reportSingleEntryWithSingleMapping-testfeed-unicode.out.txt
│ │ │ ├── Report-reportSingleEntryWithSingleMapping-tree-ascii.out.txt
│ │ │ ├── Report-reportSingleEntryWithSingleMapping-tree-unicode.out.txt
│ │ │ ├── Report-reportSingleEntryWithSingleMapping-verbose-ascii.out.txt
│ │ │ ├── Report-reportSingleEntryWithSingleMapping-verbose-unicode.out.txt
│ │ │ ├── Report-reportSingleMessage-flat-ascii.out.txt
│ │ │ ├── Report-reportSingleMessage-flat-unicode.out.txt
│ │ │ ├── Report-reportSingleMessage-none-ascii.out.txt
│ │ │ ├── Report-reportSingleMessage-none-unicode.out.txt
│ │ │ ├── Report-reportSingleMessage-summary-ascii.out.txt
│ │ │ ├── Report-reportSingleMessage-summary-unicode.out.txt
│ │ │ ├── Report-reportSingleMessage-testfeed-ascii.out.txt
│ │ │ ├── Report-reportSingleMessage-testfeed-unicode.out.txt
│ │ │ ├── Report-reportSingleMessage-tree-ascii.out.txt
│ │ │ ├── Report-reportSingleMessage-tree-unicode.out.txt
│ │ │ ├── Report-reportSingleMessage-verbose-ascii.out.txt
│ │ │ └── Report-reportSingleMessage-verbose-unicode.out.txt
│ │ └── skip/
│ │ ├── Skip-skipWithMultiLineMessage-flat-ascii.out.txt
│ │ ├── Skip-skipWithMultiLineMessage-flat-unicode.out.txt
│ │ ├── Skip-skipWithMultiLineMessage-none-ascii.out.txt
│ │ ├── Skip-skipWithMultiLineMessage-none-unicode.out.txt
│ │ ├── Skip-skipWithMultiLineMessage-summary-ascii.out.txt
│ │ ├── Skip-skipWithMultiLineMessage-summary-unicode.out.txt
│ │ ├── Skip-skipWithMultiLineMessage-testfeed-ascii.out.txt
│ │ ├── Skip-skipWithMultiLineMessage-testfeed-unicode.out.txt
│ │ ├── Skip-skipWithMultiLineMessage-tree-ascii.out.txt
│ │ ├── Skip-skipWithMultiLineMessage-tree-unicode.out.txt
│ │ ├── Skip-skipWithMultiLineMessage-verbose-ascii.out.txt
│ │ ├── Skip-skipWithMultiLineMessage-verbose-unicode.out.txt
│ │ ├── Skip-skipWithSingleLineReason-flat-ascii.out.txt
│ │ ├── Skip-skipWithSingleLineReason-flat-unicode.out.txt
│ │ ├── Skip-skipWithSingleLineReason-none-ascii.out.txt
│ │ ├── Skip-skipWithSingleLineReason-none-unicode.out.txt
│ │ ├── Skip-skipWithSingleLineReason-summary-ascii.out.txt
│ │ ├── Skip-skipWithSingleLineReason-summary-unicode.out.txt
│ │ ├── Skip-skipWithSingleLineReason-testfeed-ascii.out.txt
│ │ ├── Skip-skipWithSingleLineReason-testfeed-unicode.out.txt
│ │ ├── Skip-skipWithSingleLineReason-tree-ascii.out.txt
│ │ ├── Skip-skipWithSingleLineReason-tree-unicode.out.txt
│ │ ├── Skip-skipWithSingleLineReason-verbose-ascii.out.txt
│ │ └── Skip-skipWithSingleLineReason-verbose-unicode.out.txt
│ ├── default-package.resource
│ ├── do_not_delete_me.txt
│ ├── error-engine/
│ │ └── META-INF/
│ │ └── services/
│ │ └── org.junit.platform.engine.TestEngine
│ ├── folder with spaces/
│ │ └── jar test with spaces.jar
│ ├── gh-1436-invalid-nested-class-file.jar
│ ├── intercepted-testservices/
│ │ └── META-INF/
│ │ └── services/
│ │ ├── org.junit.platform.engine.TestEngine
│ │ └── org.junit.platform.launcher.LauncherSessionListener
│ ├── jartest-shadowed.jar
│ ├── jartest.jar
│ ├── jenkins-junit.xsd
│ ├── junit-platform.properties
│ ├── log4j2-test.xml
│ ├── modules-2500/
│ │ ├── foo/
│ │ │ ├── Foo.java
│ │ │ └── module-info.java
│ │ └── foo.bar/
│ │ ├── FooBar.java
│ │ └── module-info.java
│ ├── org/
│ │ └── junit/
│ │ └── platform/
│ │ └── commons/
│ │ ├── example.resource
│ │ └── other-example.resource
│ ├── test-junit-platform.properties
│ └── testservices/
│ └── META-INF/
│ └── services/
│ ├── org.junit.platform.launcher.LauncherDiscoveryListener
│ ├── org.junit.platform.launcher.LauncherInterceptor
│ ├── org.junit.platform.launcher.LauncherSessionListener
│ ├── org.junit.platform.launcher.PostDiscoveryFilter
│ └── org.junit.platform.launcher.TestExecutionListener
├── platform-tooling-support-tests/
│ ├── platform-tooling-support-tests.gradle.kts
│ ├── projects/
│ │ ├── graalvm-starter/
│ │ │ ├── build.gradle.kts
│ │ │ ├── settings.gradle.kts
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ └── java/
│ │ │ │ └── com/
│ │ │ │ └── example/
│ │ │ │ └── project/
│ │ │ │ └── Calculator.java
│ │ │ └── test/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── example/
│ │ │ │ └── project/
│ │ │ │ ├── CalculatorParameterizedClassTests.java
│ │ │ │ ├── CalculatorTests.java
│ │ │ │ ├── ClassLevelAnnotationTests.java
│ │ │ │ ├── GraalvmSuite.java
│ │ │ │ └── VintageTests.java
│ │ │ └── resources/
│ │ │ └── junit-platform.properties
│ │ ├── gradle-kotlin-extensions/
│ │ │ ├── build.gradle.kts
│ │ │ ├── gradle.properties
│ │ │ ├── settings.gradle.kts
│ │ │ └── src/
│ │ │ └── test/
│ │ │ └── kotlin/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── project/
│ │ │ └── ExtensionFunctionsTests.kt
│ │ ├── gradle-missing-engine/
│ │ │ ├── build.gradle.kts
│ │ │ ├── gradle.properties
│ │ │ ├── settings.gradle.kts
│ │ │ └── src/
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── FooTests.java
│ │ ├── jar-describe-module/
│ │ │ ├── junit-jupiter-api.expected.txt
│ │ │ ├── junit-jupiter-engine.expected.txt
│ │ │ ├── junit-jupiter-migrationsupport.expected.txt
│ │ │ ├── junit-jupiter-params.expected.txt
│ │ │ ├── junit-jupiter.expected.txt
│ │ │ ├── junit-platform-commons.expected.txt
│ │ │ ├── junit-platform-console.expected.txt
│ │ │ ├── junit-platform-engine.expected.txt
│ │ │ ├── junit-platform-launcher.expected.txt
│ │ │ ├── junit-platform-reporting.expected.txt
│ │ │ ├── junit-platform-suite-api.expected.txt
│ │ │ ├── junit-platform-suite-engine.expected.txt
│ │ │ ├── junit-platform-suite.expected.txt
│ │ │ ├── junit-platform-testkit.expected.txt
│ │ │ ├── junit-start.expected.txt
│ │ │ └── junit-vintage-engine.expected.txt
│ │ ├── junit-start/
│ │ │ ├── compact/
│ │ │ │ ├── JUnitRun.java
│ │ │ │ └── JUnitRunClass.java
│ │ │ └── modular/
│ │ │ ├── module-info.java
│ │ │ └── p/
│ │ │ ├── JUnitRunModule.java
│ │ │ └── MultiplicationTests.java
│ │ ├── jupiter-starter/
│ │ │ ├── build.gradle.kts
│ │ │ ├── build.xml
│ │ │ ├── gradle.properties
│ │ │ ├── pom.xml
│ │ │ ├── settings.gradle.kts
│ │ │ └── src/
│ │ │ ├── main/
│ │ │ │ └── java/
│ │ │ │ └── com/
│ │ │ │ └── example/
│ │ │ │ └── project/
│ │ │ │ └── Calculator.java
│ │ │ └── test/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── example/
│ │ │ │ └── project/
│ │ │ │ ├── CalculatorParameterizedClassTests.java
│ │ │ │ └── CalculatorTests.java
│ │ │ └── resources/
│ │ │ └── junit-platform.properties
│ │ ├── kotlin-coroutines/
│ │ │ ├── build.gradle.kts
│ │ │ ├── settings.gradle.kts
│ │ │ └── src/
│ │ │ └── test/
│ │ │ └── kotlin/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── project/
│ │ │ └── SuspendFunctionTests.kt
│ │ ├── maven-surefire-compatibility/
│ │ │ ├── pom.xml
│ │ │ └── src/
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── project/
│ │ │ └── DummyTests.java
│ │ ├── memory-cleanup/
│ │ │ └── src/
│ │ │ └── OneMillionTests.java
│ │ ├── reflection-tests/
│ │ │ ├── build.gradle.kts
│ │ │ ├── gradle.properties
│ │ │ ├── settings.gradle.kts
│ │ │ └── src/
│ │ │ └── test/
│ │ │ └── java/
│ │ │ └── ReflectionTestCase.java
│ │ ├── standalone/
│ │ │ ├── expected-err.txt
│ │ │ ├── expected-out.txt
│ │ │ ├── logging.properties
│ │ │ └── src/
│ │ │ ├── other/
│ │ │ │ └── OtherwiseNotReferencedClass.java
│ │ │ └── standalone/
│ │ │ ├── JupiterIntegration.java
│ │ │ ├── JupiterParamsIntegration.java
│ │ │ ├── SuiteIntegration.java
│ │ │ └── VintageIntegration.java
│ │ └── vintage/
│ │ ├── build.gradle.kts
│ │ ├── gradle.properties
│ │ ├── pom.xml
│ │ ├── settings.gradle.kts
│ │ └── src/
│ │ └── test/
│ │ └── java/
│ │ ├── DefaultPackageTest.java
│ │ └── com/
│ │ └── example/
│ │ └── vintage/
│ │ └── VintageTest.java
│ └── src/
│ ├── archUnit/
│ │ └── java/
│ │ └── platform/
│ │ └── tooling/
│ │ └── support/
│ │ └── tests/
│ │ └── ArchUnitTests.java
│ ├── main/
│ │ └── java/
│ │ └── platform/
│ │ └── tooling/
│ │ └── support/
│ │ ├── Helper.java
│ │ ├── MavenRepo.java
│ │ ├── ProcessStarters.java
│ │ ├── ThirdPartyJars.java
│ │ └── package-info.java
│ └── test/
│ ├── java/
│ │ └── platform/
│ │ └── tooling/
│ │ └── support/
│ │ ├── HelperTests.java
│ │ └── tests/
│ │ ├── AntStarterTests.java
│ │ ├── FilePrefix.java
│ │ ├── GraalVmStarterTests.java
│ │ ├── GradleKotlinExtensionsTests.java
│ │ ├── GradleMissingEngineTests.java
│ │ ├── GradleModuleFileTests.java
│ │ ├── GradleStarterTests.java
│ │ ├── JUnitStartTests.java
│ │ ├── JarContainsManifestFirstTests.java
│ │ ├── JarDescribeModuleTests.java
│ │ ├── KotlinCoroutinesTests.java
│ │ ├── LocalMavenRepo.java
│ │ ├── ManagedResource.java
│ │ ├── ManifestTests.java
│ │ ├── MavenEnvVars.java
│ │ ├── MavenPomFileTests.java
│ │ ├── MavenRepoProxy.java
│ │ ├── MavenStarterTests.java
│ │ ├── MavenSurefireCompatibilityTests.java
│ │ ├── MemoryCleanupTests.java
│ │ ├── ModularCompilationTests.java
│ │ ├── ModularUserGuideTests.java
│ │ ├── OutputAttachingExtension.java
│ │ ├── Projects.java
│ │ ├── ReflectionCompatibilityTests.java
│ │ ├── StandaloneTests.java
│ │ ├── ToolProviderTests.java
│ │ ├── UnalignedClasspathTests.java
│ │ ├── VintageGradleIntegrationTests.java
│ │ ├── VintageMavenIntegrationTests.java
│ │ └── XmlAssertions.java
│ └── resources/
│ ├── junit-platform.properties
│ ├── log4j2-test.xml
│ └── platform/
│ └── tooling/
│ └── support/
│ └── tests/
│ ├── AntStarterTests_snapshots/
│ │ └── open-test-report.xml.snapshot
│ ├── GradleStarterTests_snapshots/
│ │ └── open-test-report.xml.snapshot
│ └── MavenStarterTests_snapshots/
│ └── open-test-report.xml.snapshot
└── settings.gradle.kts
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
root = true
[*]
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.bat]
end_of_line = crlf
[*.md]
# Trailing whitespace is important in Markdown (they distinguish a new line from a new paragraph)
trim_trailing_whitespace = false
[*.{kt,kts}]
ij_kotlin_allow_trailing_comma = false
ij_kotlin_allow_trailing_comma_on_call_site = false
[*.kts]
indent_style = tab
================================================
FILE: .gitattributes
================================================
* text eol=lf
*.bat text eol=crlf
*.png binary
*.key binary
*.jar binary
*.ttf binary
release-notes-* merge=union
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Report a bug or regression
about: Create a report to help us improve
type: Bug
labels: ["type: bug"]
---
<!-- Please provide us the version of JUnit you are using and, if possible, a failing unit test with your bug report. Don't forget to describe the rationale for this issue (e.g. expected vs. actual behavior). Please also mention where it's a regression compared to a previous version. -->
## Steps to reproduce
<!-- Please insert a code snippet or a link to another repo along with instructions how to reproduce the issue here. The example should be minimal, complete and verifiable (see https://stackoverflow.com/help/mcve). -->
## Context
- Used versions (Jupiter/Vintage/Platform):
- Build Tool/IDE:
## Deliverables
- [ ] ...
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: Ask a question
url: https://github.com/junit-team/junit-framework/discussions/categories/q-a
about: Please ask and answer questions here
- name: Ask a question (Stack Overflow)
url: https://stackoverflow.com/questions/tagged/junit5
about: Alternatively, ask questions here
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Request a feature or enhancement
about: Suggest an idea for this project
type: Feature
labels: ["type: new feature"]
---
<!-- Start by telling us what problem you’re trying to solve. Often a solution already exists! Please, don’t send pull requests to implement new features without first getting our support. -->
## Deliverables
- [ ] ...
================================================
FILE: .github/ISSUE_TEMPLATE/task.md
================================================
---
name: Create a task
about: Create a task for a specific piece of work
type: Task
labels: ["type: task"]
---
<!-- Please describe what needs to be done to consider this task completed. -->
## Deliverables
- [ ] ...
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!-- Please describe your changes here and list any open questions you might have. -->
---
I hereby agree to the terms of the [JUnit Contributor License Agreement](https://github.com/junit-team/junit-framework/blob/002a0052926ddee57cf90580fa49bc37e5a72427/CONTRIBUTING.md#junit-contributor-license-agreement).
---
### Definition of Done
- [ ] There are no TODOs left in the code
- [ ] Method [preconditions](https://docs.junit.org/snapshot/api/org.junit.platform.commons/org/junit/platform/commons/util/Preconditions.html) are checked and documented in the method's Javadoc
- [ ] [Coding conventions](https://github.com/junit-team/junit-framework/blob/HEAD/CONTRIBUTING.md#coding-conventions) (e.g. for logging) have been followed
- [ ] Change is covered by [automated tests](https://github.com/junit-team/junit-framework/blob/HEAD/CONTRIBUTING.md#tests) including corner cases, errors, and exception handling
- [ ] Public API has [Javadoc](https://github.com/junit-team/junit-framework/blob/HEAD/CONTRIBUTING.md#javadoc) and [`@API` annotations](https://apiguardian-team.github.io/apiguardian/docs/current/api/org/apiguardian/api/API.html)
- [ ] Change is documented in the [User Guide](https://docs.junit.org/snapshot/) and [Release Notes](https://docs.junit.org/snapshot/release-notes.html)
================================================
FILE: .github/actions/main-build/action.yml
================================================
name: Main build
description: Sets up JDKs and runs Gradle
inputs:
arguments:
required: true
description: Gradle arguments
default: :platform-tooling-support-tests:test build eclipse --no-configuration-cache # Disable configuration cache due to https://github.com/diffplug/spotless/issues/2318
encryptionKey:
required: true
description: Gradle cache encryption key
runs:
using: "composite"
steps:
- uses: ./.github/actions/setup-test-jdk
- uses: ./.github/actions/run-gradle
with:
arguments: ${{ inputs.arguments }}
encryptionKey: ${{ inputs.encryptionKey }}
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: ${{ always() }}
with:
name: Open Test Reports (${{ github.job }})
path: '**/build/reports/open-test-report.html'
================================================
FILE: .github/actions/maven-central-user-token/action.yml
================================================
name: Prepare Maven Central user token
description: Compute the Maven Central user token from username and password
inputs:
username:
required: true
description: Maven Central username
password:
required: true
description: Maven Central password
runs:
using: "composite"
steps:
- shell: bash
run: | # zizmor: ignore[github-env]
USER_TOKEN=$(printf "${USERNAME}:${PASSWORD}" | base64)
echo "::add-mask::$USER_TOKEN"
echo "MAVEN_CENTRAL_USER_TOKEN=$USER_TOKEN" >> $GITHUB_ENV
env:
USERNAME: ${{ inputs.username }}
PASSWORD: ${{ inputs.password }}
================================================
FILE: .github/actions/run-gradle/action.yml
================================================
name: Run Gradle
description: Sets up Gradle JDKs and runs Gradle
inputs:
arguments:
required: true
description: Gradle arguments
default: build
broken-by-issue:
required: false
description: Expect the build to fail due the referenced GitHub issue
default: ""
encryptionKey:
required: true
description: Gradle cache encryption key
runs:
using: "composite"
steps:
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
id: setup-gradle-jdk
with:
distribution: temurin
java-version: 25
check-latest: true
- uses: gradle/actions/setup-gradle@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0
with:
cache-encryption-key: ${{ inputs.encryptionKey }}
- uses: testlens-app/setup-testlens@d96a555133c275a00949d2cc77b70fe9a4242ebf # v1.9.2
with:
write-log-files: true
- shell: bash
env:
JAVA_HOME: ${{ steps.setup-gradle-jdk.outputs.path }}
run: | # zizmor: ignore[template-injection]
./gradlew \
-Dorg.gradle.java.installations.auto-download=false \
-Pjunit.develocity.buildCache.pushEnabled=${{ github.repository == 'junit-team/junit-framework' }} \
-Pjunit.develocity.predictiveTestSelection.enabled=true \
-Pjunit.develocity.predictiveTestSelection.selectRemainingTests=${{ github.event_name != 'pull_request' }} \
"-Dscan.value.GitHub job=${{ github.job }}" \
javaToolchains \
${{ inputs.arguments }} || error_code=$?
if [ -n "${{ inputs.broken-by-issue }}" ]; then
if [ -n "$error_code" ]; then
# we expected the build to fail, it failed => pass
exit 0
else
# we expected the build to fail, it didn't => fail
RED='\033[0;31m'
RESET='\033[0m' # No Color
echo "${RED}Build was expected to fail, but it passed. Was ${{ inputs.broken-by-issue }} resolved?${RESET}"
exit 1
fi
fi
# exit with the original error code if set
if [ -n "$error_code" ]; then
exit "$error_code"
fi
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: ${{ always() }}
with:
name: TestLens logs (${{ github.job }} - ${{ job.check_run_id }})
path: '**/build/**/testlens-logs/**'
if-no-files-found: ignore
================================================
FILE: .github/actions/setup-test-jdk/action.yml
================================================
name: Set up Test JDK
description: Sets up the JDK required to run platform-tooling-support-tests
inputs:
distribution:
required: true
description: 'The JDK distribution to use'
default: 'temurin'
runs:
using: "composite"
steps:
- uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
with:
distribution: ${{ inputs.distribution }}
java-version: 17
check-latest: true
- shell: bash
run: echo "JDK17=$JAVA_HOME" >> $GITHUB_ENV # zizmor: ignore[github-env]
================================================
FILE: .github/codecov.yml
================================================
comment: false
coverage:
status:
project:
default:
threshold: "1"
informational: true
patch: off
codecov:
max_report_age: off
================================================
FILE: .github/dco.yml
================================================
require:
members: false
================================================
FILE: .github/renovate.json5
================================================
{
$schema: 'https://docs.renovatebot.com/renovate-schema.json',
extends: [
'github>junit-team/renovate-config',
],
baseBranchPatterns: [
'main',
'docs-site'
],
packageRules: [
{
matchCurrentValue: '/^2\\./',
allowedVersions: '(,3.0)',
matchPackageNames: [
'org.codehaus.groovy:{/,}**',
],
},
{
matchCurrentValue: '/^1\\./',
allowedVersions: '/^1\\..*-groovy-2\\.*/',
matchPackageNames: [
'org.spockframework:{/,}**',
],
},
{
allowedVersions: '!/-SNAPSHOT$/',
matchPackageNames: [
'org.opentest4j.reporting:{/,}**',
],
},
{
matchManagers: 'npm',
matchPackageNames: [
'@antora/assembler',
'@antora/html-single-extension',
'@antora/pdf-extension',
],
"groupName": "@antora/assembler",
},
],
}
================================================
FILE: .github/scripts/checkBuildReproducibility.sh
================================================
#!/bin/bash -e
rm -f checksums-1.txt checksums-2.txt
SOURCE_DATE_EPOCH=$(date +%s)
export SOURCE_DATE_EPOCH
function calculate_checksums() {
OUTPUT=$1
./gradlew \
--configuration-cache \
--no-build-cache \
-Dorg.gradle.java.installations.auto-download=false \
-Dscan.tag.Reproducibility \
clean \
assemble
find . -name '*.jar' \
| grep '/build/libs/' \
| grep --invert-match 'javadoc' \
| sort \
| xargs sha512sum > "${OUTPUT}"
}
calculate_checksums checksums-1.txt
calculate_checksums checksums-2.txt
diff checksums-1.txt checksums-2.txt
================================================
FILE: .github/scripts/close-github-milestone.js
================================================
module.exports = async ({ github, context }) => {
const releaseVersion = process.env.RELEASE_VERSION;
const query = `
query ($owner: String!, $repo: String!, $title: String!) {
repository(owner: $owner, name: $repo) {
milestones(first: 100, query: $title) {
nodes {
title
number
openIssueCount
}
}
}
}
`;
const {repository} = await github.graphql(query, {
owner: context.repo.owner,
repo: context.repo.repo,
title: releaseVersion
});
const [milestone] = repository.milestones.nodes.filter(it => it.title === releaseVersion);
if (!milestone) {
throw new Error(`Milestone "${releaseVersion}" not found`);
}
if (milestone.openIssueCount > 0) {
throw new Error(`Milestone "${releaseVersion}" has ${milestone.openIssueCount} open issue(s)`);
}
const requestBody = {
owner: context.repo.owner,
repo: context.repo.repo,
milestone_number: milestone.number,
state: 'closed',
due_on: new Date().toISOString()
};
console.log(requestBody);
await github.rest.issues.updateMilestone(requestBody);
};
================================================
FILE: .github/scripts/create-github-release.js
================================================
module.exports = async ({ github, context }) => {
const releaseVersion = process.env.RELEASE_VERSION;
const requestBody = {
owner: context.repo.owner,
repo: context.repo.repo,
tag_name: `r${releaseVersion}`,
name: `JUnit ${releaseVersion}`,
generate_release_notes: true,
body: `JUnit ${releaseVersion} = Platform ${releaseVersion} + Jupiter ${releaseVersion} + Vintage ${releaseVersion}\n\nSee [Release Notes](https://docs.junit.org/${releaseVersion}/release-notes.html).`,
prerelease: releaseVersion.includes("-"),
};
console.log(requestBody);
await github.rest.repos.createRelease(requestBody);
};
================================================
FILE: .github/scripts/waitForUrl.sh
================================================
#!/usr/bin/env bash
URL=$1
printf 'Waiting for %s' "$URL"
until curl --output /dev/null --silent --location --head --fail "$URL"; do
printf '.'
sleep 5
done
echo ' OK'
================================================
FILE: .github/workflows/close-inactive-issues.yml
================================================
name: Close inactive issues and PRs
on:
schedule:
- cron: "30 1 * * *"
workflow_dispatch:
permissions: {}
jobs:
close-issues:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
steps:
- uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10.2.0
with:
only-labels: "status: waiting-for-feedback"
days-before-stale: 14
days-before-close: 21
stale-issue-label: "status: stale"
stale-pr-label: "status: stale"
stale-issue-message: >
If you would like us to be able to process this issue, please provide the requested information.
If the information is not provided within the next 3 weeks, we will be unable to proceed and this issue will be closed.
close-issue-message: >
Closing due to lack of requested feedback.
If you would like to proceed with your contribution, please provide the requested information and we will re-open this issue.
stale-pr-message: >
If you would like us to be able to process this pull request, please provide the requested information or make the requested changes.
If the information is not provided or the requested changes are not made within the next 3 weeks, we will be unable to proceed and this pull request will be closed.
close-pr-message: >
Closing due to lack of requested feedback.
If you would like to proceed with your contribution, please provide the requested information or make the requested changes, and we will re-open this pull request.
================================================
FILE: .github/workflows/codeql.yml
================================================
name: "CodeQL"
on:
push:
branches:
- main
- 'releases/**'
pull_request:
# The branches below must be a subset of the branches above
branches:
- main
- 'releases/**'
schedule:
- cron: '0 19 * * 3'
concurrency:
# Cancels in-progress runs only for pull requests
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
permissions: {}
env:
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
jobs:
analyze:
name: Analyze (${{ matrix.language }})
runs-on: ubuntu-latest
permissions:
security-events: write
strategy:
fail-fast: false
matrix:
include:
- language: actions
build-mode: none
- language: java-kotlin
build-mode: manual
- language: javascript
build-mode: none
steps:
- name: Check out repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- name: Initialize CodeQL
uses: github/codeql-action/init@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4.35.4
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
tools: linked
- name: Build
if: matrix.build-mode == 'manual'
uses: ./.github/actions/run-gradle
with:
encryptionKey: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
arguments: >-
--no-build-cache
-Dscan.tag.CodeQL
classes
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4.35.4
with:
category: "/language:${{matrix.language}}"
================================================
FILE: .github/workflows/cross-version.yml
================================================
name: Cross-Version
on:
schedule:
- cron: '0 0 * * 6' # Every Saturday at 00:00 UTC
push:
branches:
- main
- 'releases/**'
pull_request:
branches:
- '**'
concurrency:
# Cancels in-progress runs only for pull requests
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
permissions: {}
env:
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
jobs:
openjdk:
strategy:
fail-fast: false
matrix:
jdk:
- version: 26
type: ga
- version: 27
type: ea
- version: 26
type: ea
release: leyden
- version: 27
type: ea
release: valhalla
name: "OpenJDK ${{ matrix.jdk.version }} (${{ matrix.jdk.release || matrix.jdk.type }})"
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 1
persist-credentials: false
- name: Set up Test JDK
uses: ./.github/actions/setup-test-jdk
- name: "Set up JDK ${{ matrix.jdk.version }} (${{ matrix.jdk.release || 'ea' }})"
if: matrix.jdk.type == 'ea'
uses: oracle-actions/setup-java@fff43251af9936a0e6a4d5d0946e14f1680e9b6b # v1.5.0
with:
website: jdk.java.net
release: ${{ matrix.jdk.release || matrix.jdk.version }}
version: latest
- name: "Set up JDK ${{ matrix.jdk.version }} (${{ matrix.jdk.distribution || 'temurin' }})"
if: matrix.jdk.type == 'ga'
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
with:
distribution: ${{ matrix.jdk.distribution || 'temurin' }}
java-version: ${{ matrix.jdk.version }}
check-latest: true
- name: 'Prepare JDK${{ matrix.jdk.version }} env var'
shell: bash
run: echo "JDK${{ matrix.jdk.version }}=$JAVA_HOME" >> $GITHUB_ENV
- name: Build
uses: ./.github/actions/run-gradle
with:
encryptionKey: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
# Disable configuration cache due to https://github.com/diffplug/spotless/issues/2318
arguments: >-
-Ptesting.enableJaCoCo=false
-PjavaToolchain.version=${{ matrix.jdk.version }}
-Dscan.tag.JDK_${{ matrix.jdk.version }}
build
--no-configuration-cache
broken-by-issue: ${{ matrix.jdk.broken-by-issue }}
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: ${{ always() }}
with:
name: Open Test Reports (${{ github.job }} ${{ matrix.jdk.version }} (${{ matrix.jdk.release || matrix.jdk.type }}))
path: '**/build/reports/open-test-report.html'
openj9:
strategy:
fail-fast: false
matrix:
jdk: [ 25 ]
name: "OpenJ9 ${{ matrix.jdk }}"
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 1
persist-credentials: false
- name: Set up Test JDK
uses: ./.github/actions/setup-test-jdk
with:
distribution: semeru
- name: 'Set up JDK ${{ matrix.jdk }}'
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
with:
distribution: semeru
java-version: ${{ matrix.jdk }}
check-latest: true
- name: 'Prepare JDK${{ matrix.jdk }} env var'
shell: bash
run: echo "JDK${{ matrix.jdk }}=$JAVA_HOME" >> $GITHUB_ENV
- name: Build
uses: ./.github/actions/run-gradle
with:
encryptionKey: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
# Disable configuration cache due to https://github.com/diffplug/spotless/issues/2318
arguments: >-
-Ptesting.enableJaCoCo=false
-PjavaToolchain.version=${{ matrix.jdk }}
-PjavaToolchain.implementation=j9
-Dscan.tag.JDK_${{ matrix.jdk }}
-Dscan.tag.OpenJ9
build
--no-configuration-cache
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: ${{ always() }}
with:
name: Open Test Reports (${{ github.job }})
path: '**/build/reports/open-test-report.html'
================================================
FILE: .github/workflows/deploy-docs.yml
================================================
name: Deploy Documentation
on: [ workflow_call, workflow_dispatch ]
permissions: {}
jobs:
deploy_documentation:
name: Deploy Documentation
runs-on: ubuntu-slim
permissions:
actions: write
steps:
- name: Trigger documentation site deployment
uses: nick-fields/retry@ad984534de44a9489a53aefd81eb77f87c70dc60 # v4.0.0
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
max_attempts: 10
retry_wait_seconds: 5
timeout_seconds: 20
command: gh workflow run deploy-docs.yml --repo junit-team/junit-framework --ref docs-site
================================================
FILE: .github/workflows/gradle-dependency-submission.yml
================================================
name: Gradle Dependency Submission
on:
push:
branches:
- main
permissions: {}
env:
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
jobs:
dependency-submission:
if: github.repository == 'junit-team/junit-framework'
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Check out repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 1
persist-credentials: false
- name: Setup Java
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
with:
distribution: temurin
java-version: 25
check-latest: true
- name: Generate and submit dependency graph
id: dependency-submission
uses: gradle/actions/dependency-submission@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0
continue-on-error: true
- name: Generate and submit dependency graph (retry)
if: steps.dependency-submission.outcome == 'failure'
uses: gradle/actions/dependency-submission@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0
================================================
FILE: .github/workflows/label-opened-issues.yml
================================================
name: Add label to opened issues
on:
issues:
types:
- opened
permissions: {}
jobs:
label_issues:
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
with:
script: |
const issue = await github.rest.issues.get({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
});
const originalLabels = issue.data.labels.map(l => l.name);
const statusLabels = originalLabels.filter(l => l.startsWith("status: "));
if (statusLabels.length === 0 && !originalLabels.includes("up-for-grabs")) {
github.rest.issues.addLabels({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
labels: ["status: new"]
})
}
================================================
FILE: .github/workflows/label-pull-request.yml
================================================
name: Copy labels from linked issues to PR
on:
pull_request_target:
types: [opened, reopened] # zizmor: ignore[dangerous-triggers]
permissions: {}
jobs:
copy_labels:
name: Copy labels
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
with:
script: |
const query = `
query($owner: String!, $repo: String!, $pr: Int!) {
repository(owner: $owner, name: $repo) {
pullRequest(number: $pr) {
closingIssuesReferences(first: 10) {
nodes {
labels(first: 100) {
nodes {
name
}
}
}
}
}
}
}
`;
const {repository} = await github.graphql(query, {
owner: context.repo.owner,
repo: context.repo.repo,
pr: context.issue.number
});
let labels = Array.from(new Set(repository.pullRequest.closingIssuesReferences.nodes
.flatMap((node) => node.labels.nodes.map((label) => label.name))))
.filter((label) => !label.startsWith("status:") && label !== "up-for-grabs");
if (labels.length > 0) {
console.log(`Adding labels to PR: ${labels}`);
await github.rest.issues.addLabels({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
labels: labels
});
}
================================================
FILE: .github/workflows/lock-resolved-issues.yml
================================================
name: Lock resolved issues
on:
schedule:
- cron: "39 1 * * 0"
workflow_dispatch:
permissions: {}
concurrency:
group: lock-resolved-issues
jobs:
action:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
discussions: write
steps:
- uses: dessant/lock-threads@7266a7ce5c1df01b1c6db85bf8cd86c737dadbe7 # v6.0.0
with:
process-only: issues
log-output: true
================================================
FILE: .github/workflows/main.yml
================================================
name: CI
on:
push:
branches:
- main
- 'releases/**'
tags-ignore:
- '**'
pull_request:
branches:
- '**'
concurrency:
# Cancels in-progress runs only for pull requests
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
permissions: {}
env:
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
jobs:
Linux:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 1
persist-credentials: false
- name: Install GraalVM
uses: graalvm/setup-graalvm@bef4b0e916c7dd079bf60fb95d49139f67e32c5f # v1.5.3
with:
distribution: graalvm
version: latest
java-version: 21
- name: Build
uses: ./.github/actions/main-build
with:
encryptionKey: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
# Disable configuration cache due to https://github.com/diffplug/spotless/issues/2318
arguments: >-
:platform-tooling-support-tests:test
build
jacocoRootReport
--no-configuration-cache
- name: Upload to Codecov.io
uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0
with:
token: ${{ secrets.CODECOV_TOKEN }}
Windows:
runs-on: windows-latest
steps:
- name: Check out repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 1
persist-credentials: false
- name: Build
uses: ./.github/actions/main-build
with:
encryptionKey: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
macOS:
runs-on: macos-latest
steps:
- name: Check out repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 1
persist-credentials: false
- name: Build
uses: ./.github/actions/main-build
with:
encryptionKey: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
publish_artifacts:
name: Publish Snapshot Artifacts
needs: macOS
runs-on: ubuntu-latest
permissions:
attestations: write # required for build provenance attestation
id-token: write # required for build provenance attestation
if: github.event_name == 'push' && github.repository == 'junit-team/junit-framework' && (startsWith(github.ref, 'refs/heads/releases/') || github.ref == 'refs/heads/main')
steps:
- name: Check out repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 1
persist-credentials: false
- name: Publish
uses: ./.github/actions/run-gradle
env:
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
with:
encryptionKey: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
arguments: >-
publishAggregationToCentralSnapshots
prepareGitHubAttestation
-x check
- name: Generate build provenance attestations
uses: actions/attest@59d89421af93a897026c735860bf21b6eb4f7b26 # v4.1.0
with:
subject-path: documentation/build/attestation/*.jar
build_documentation:
name: Build Documentation
needs: macOS
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 1
persist-credentials: false
- name: Install Graphviz
run: |
sudo apt-get update
sudo apt-get install graphviz
- name: Install Node.js
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
with:
node-version-file: documentation/.tool-versions
- name: Build Documentation
uses: ./.github/actions/run-gradle
with:
encryptionKey: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
arguments: >-
antora
-Pantora.downloadNode=false
-Dscan.tag.Documentation
deploy_documentation:
name: Deploy Documentation
needs: build_documentation
if: github.event_name == 'push' && github.repository == 'junit-team/junit-framework' && github.ref == 'refs/heads/main'
uses: ./.github/workflows/deploy-docs.yml
permissions:
actions: write
================================================
FILE: .github/workflows/ossf-scorecard.yml
================================================
name: OpenSSF Scorecard supply-chain security analysis
on:
branch_protection_rule:
schedule:
- cron: '31 20 * * 6'
push:
branches: [ "main" ]
permissions: {}
jobs:
analysis:
name: Scorecard analysis
runs-on: ubuntu-latest
permissions:
# Needed to upload the results to code-scanning dashboard.
security-events: write
# Needed to publish results and get a badge (see publish_results below).
id-token: write
steps:
- name: "Checkout code"
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- name: "Run analysis"
uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3
with:
results_file: results.sarif
results_format: sarif
# (Optional) "write" PAT token. Uncomment the `repo_token` line below if:
# - you want to enable the Branch-Protection check on a *public* repository, or
# - you are installing Scorecard on a *private* repository
# To create the PAT, follow the steps in https://github.com/ossf/scorecard-action?tab=readme-ov-file#authentication-with-fine-grained-pat-optional.
# repo_token: ${{ secrets.SCORECARD_TOKEN }}
# Public repositories:
# - Publish results to OpenSSF REST API for easy access by consumers
# - Allows the repository to include the Scorecard badge.
# - See https://github.com/ossf/scorecard-action#publishing-results.
# For private repositories:
# - `publish_results` will always be set to `false`, regardless
# of the value entered here.
publish_results: true
# Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
# format to the repository Actions tab.
- name: "Upload artifact"
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: SARIF file
path: results.sarif
retention-days: 5
# Upload the results to GitHub's code scanning dashboard (optional).
# Commenting out will disable upload of results to your repo's Code Scanning dashboard
- name: "Upload to code-scanning"
uses: github/codeql-action/upload-sarif@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4.35.4
with:
sarif_file: results.sarif
================================================
FILE: .github/workflows/release.yml
================================================
name: Release
on:
workflow_dispatch:
inputs:
releaseVersion:
description: Version to be released (e.g. "5.12.0-M1")
required: true
deploymentId:
description: ID of the Maven Central Publish Portal deployment
required: true
dryRun:
type: boolean
description: Enable dry-run mode
required: false
default: false
permissions: {}
env:
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
STAGING_REPO_URL: https://central.sonatype.com/api/v1/publisher/deployment/${{ inputs.deploymentId }}/download
RELEASE_TAG: r${{ inputs.releaseVersion }}
RELEASE_VERSION: ${{ inputs.releaseVersion }}
jobs:
verify_reproducibility:
name: Verify reproducibility
runs-on: ubuntu-latest
permissions:
attestations: write # required for build provenance attestation
id-token: write # required for build provenance attestation
steps:
- name: Check out repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 1
ref: "refs/tags/${{ env.RELEASE_TAG }}"
persist-credentials: false
- name: Prepare Maven Central user token
uses: ./.github/actions/maven-central-user-token
with:
username: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
password: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
- name: Download reference JAR from staging repository
id: referenceJar
run: |
curl --silent --fail --location --output /tmp/reference.jar \
--header "Authorization: Bearer $MAVEN_CENTRAL_USER_TOKEN" \
"${STAGING_REPO_URL}/org/junit/jupiter/junit-jupiter-api/${RELEASE_VERSION}/junit-jupiter-api-${RELEASE_VERSION}.jar"
sudo apt-get update && sudo apt-get install --yes jc
unzip -c /tmp/reference.jar META-INF/MANIFEST.MF | jc --jar-manifest | jq '.[0]' > /tmp/manifest.json
echo "createdBy=$(jq --raw-output .Created_By /tmp/manifest.json)" >> "$GITHUB_OUTPUT"
echo "buildTimestamp=$(jq --raw-output .Build_Date /tmp/manifest.json) $(jq --raw-output .Build_Time /tmp/manifest.json)" >> "$GITHUB_OUTPUT"
- name: Verify artifacts
uses: ./.github/actions/run-gradle
with:
encryptionKey: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
arguments: >-
--rerun-tasks
-Pmanifest.buildTimestamp="${{ steps.referenceJar.outputs.buildTimestamp }}"
-Pmanifest.createdBy="${{ steps.referenceJar.outputs.createdBy }}"
:verifyArtifactsInStagingRepositoryAreReproducible
--remote-repo-url=${{ env.STAGING_REPO_URL }}
- name: Generate build provenance attestations
if: ${{ inputs.dryRun == false }}
uses: actions/attest@59d89421af93a897026c735860bf21b6eb4f7b26 # v4.1.0
with:
subject-path: build/repo/**/*.jar
verify_consumability:
name: Verify consumability
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 1
ref: "refs/tags/${{ env.RELEASE_TAG }}"
path: junit-framework
persist-credentials: false
- name: Check out examples repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
repository: ${{ github.repository_owner }}/junit-examples
token: ${{ secrets.JUNIT_BUILDS_GITHUB_TOKEN_EXAMPLES_REPO }}
fetch-depth: 1
path: junit-examples
persist-credentials: false
- name: Set up JDK
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
with:
java-version: 25
distribution: temurin
- uses: sbt/setup-sbt@93e926cbdb4a428e41b4ef754124ec82925ffdc2 # v1.1.23
- name: Update JUnit dependencies in examples
run: java src/Updater.java ${RELEASE_VERSION}
working-directory: junit-examples
- name: Prepare Maven Central user token
uses: ./junit-framework/.github/actions/maven-central-user-token
with:
username: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
password: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
- name: Inject staging repository URL
run: java src/StagingRepoInjector.java ${STAGING_REPO_URL}
working-directory: junit-examples
- name: Build examples
run: java src/Builder.java --exclude=junit-jupiter-starter-bazel,junit-jupiter-starter-sbt,junit-source-launcher
working-directory: junit-examples
env:
MAVEN_ARGS: --settings ${{ github.workspace }}/junit-examples/src/central-staging-maven-settings.xml --activate-profiles central-staging
close_github_milestone:
name: Close GitHub milestone
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- name: Check out repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 1
persist-credentials: false
- name: Close GitHub milestone
if: ${{ inputs.dryRun == false }}
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
with:
result-encoding: string
script: |
const closeGithubMilestone = require('./.github/scripts/close-github-milestone.js');
closeGithubMilestone({ github, context });
publish_deployment:
name: Publish to Maven Central
needs: [ verify_reproducibility, verify_consumability, close_github_milestone ]
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 1
ref: "refs/tags/${{ env.RELEASE_TAG }}"
persist-credentials: false
- name: Release staging repository
if: ${{ inputs.dryRun == false }}
uses: ./.github/actions/run-gradle
env:
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
with:
encryptionKey: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
arguments: nmcpPublishDeployment -PnmcpDeploymentId=${{ inputs.deploymentId }}
publish_documentation:
name: Publish documentation
needs: publish_deployment
runs-on: ubuntu-latest
permissions:
actions: write
steps:
- name: Check out repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 1
persist-credentials: false
- name: Trigger deployment
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh workflow run deploy-docs.yml --repo junit-team/junit-framework --ref docs-site
- name: Install Poppler (for pdfinfo)
run: |
sudo apt-get update
sudo apt-get install --yes poppler-utils
- name: Wait for deployment
if: ${{ inputs.dryRun == false }}
timeout-minutes: 30
run: ./.github/scripts/waitForUrl.sh "${URL}"
env:
URL: https://docs.junit.org/${{ inputs.releaseVersion }}/
- name: Verify integrity of PDF version of User Guide
if: inputs.dryRun == false && !contains(inputs.releaseVersion, '-')
run: |
curl --silent --fail --location --output /tmp/junit-user-guide.pdf "${PDF_URL}"
pdfinfo /tmp/junit-user-guide.pdf
env:
PDF_URL: https://docs.junit.org/${{ inputs.releaseVersion }}/_exports/junit-user-guide-${{ inputs.releaseVersion }}.pdf
update_examples:
name: Update examples
needs: publish_deployment
runs-on: ubuntu-latest
steps:
- name: Check out examples repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
repository: ${{ github.repository_owner }}/junit-examples
token: ${{ secrets.JUNIT_BUILDS_GITHUB_TOKEN_EXAMPLES_REPO }}
persist-credentials: true
- name: Set up JDK
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0
with:
java-version: 25
distribution: temurin
- uses: sbt/setup-sbt@93e926cbdb4a428e41b4ef754124ec82925ffdc2 # v1.1.23
- name: Update JUnit dependencies in examples
run: java src/Updater.java ${RELEASE_VERSION}
- name: Build examples
if: ${{ inputs.dryRun == false }}
run: java src/Builder.java
- name: Create release branch
run: |
git config user.name "JUnit Team"
git config user.email "team@junit.org"
git switch -c "${RELEASE_TAG}"
git status
git commit -a -m "Use ${RELEASE_VERSION}"
- name: Push release branch
if: ${{ inputs.dryRun == false }}
run: |
git push origin "${RELEASE_TAG}"
- name: Update main branch (only for GA releases)
if: ${{ inputs.dryRun == false && !contains(inputs.releaseVersion, '-') }}
run: |
git fetch origin main
git switch main
git merge --ff-only "${RELEASE_TAG}"
git push origin main
create_github_release:
name: Create GitHub release
if: ${{ inputs.dryRun == false }}
needs: [ publish_documentation, update_examples ]
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Check out repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 1
persist-credentials: false
- name: Create GitHub release
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
with:
script: |
const createGithubRelease = require('./.github/scripts/create-github-release.js');
createGithubRelease({ github, context });
================================================
FILE: .github/workflows/reproducible-build.yml
================================================
name: Reproducible build
on:
push:
branches:
- main
- 'releases/**'
pull_request:
branches:
- '**'
concurrency:
# Cancels in-progress runs only for pull requests
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
permissions: {}
env:
DEVELOCITY_ACCESS_KEY: ${{ secrets.DEVELOCITY_ACCESS_KEY }}
jobs:
check_build_reproducibility:
name: 'Check build reproducibility'
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 1
persist-credentials: false
- name: Restore Gradle cache and display toolchains
uses: ./.github/actions/run-gradle
with:
encryptionKey: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
# Disable configuration cache due to https://github.com/diffplug/spotless/issues/2318
arguments: >-
--quiet
--no-configuration-cache
- name: Build and compare checksums
shell: bash
run: ./.github/scripts/checkBuildReproducibility.sh
================================================
FILE: .github/workflows/sanitize-closed-issues.yml
================================================
name: Sanitizes assigned labels and milestone on closed issues
on:
issues:
types:
- closed
permissions: {}
jobs:
label_issues:
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
with:
script: |
const issue = await github.rest.issues.get({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
});
const originalLabels = issue.data.labels.map(l => l.name);
const newLabels = originalLabels.filter(l => l !== "status: in progress" && l !== "status: new" && l !== "status: waiting-for-feedback" && l !== "status: waiting-for-interest");
if (newLabels.length !== originalLabels.length) {
await github.rest.issues.update({
issue_number: issue.data.number,
owner: context.repo.owner,
repo: context.repo.repo,
labels: newLabels,
});
}
if (issue.data.state_reason === "not_planned" || issue.data.state_reason === "duplicate") {
if (issue.data.milestone) {
await github.rest.issues.update({
issue_number: issue.data.number,
owner: context.repo.owner,
repo: context.repo.repo,
milestone: null,
});
}
const statusLabels = newLabels.filter(l => l.startsWith("status: "));
if (statusLabels.length === 0) {
if (issue.data.state_reason === "not_planned") {
await github.rest.issues.createComment({
issue_number: issue.data.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: "Please assign a status label to this issue.",
});
await github.rest.issues.update({
issue_number: issue.data.number,
owner: context.repo.owner,
repo: context.repo.repo,
state: "open",
});
} else {
newLabels.push("status: duplicate");
await github.rest.issues.update({
issue_number: issue.data.number,
owner: context.repo.owner,
repo: context.repo.repo,
labels: newLabels,
});
}
}
} else {
if (!(newLabels.includes("type: task") || newLabels.includes("type: question")) && !issue.data.milestone) {
let collaborator;
try {
await github.rest.repos.checkCollaborator({
owner: context.repo.owner,
repo: context.repo.repo,
username: context.actor,
});
collaborator = true;
} catch (error) {
collaborator = false;
}
if (collaborator) {
await github.rest.issues.createComment({
issue_number: issue.data.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: "Please assign a milestone to this issue or label it with `type: task` or `type: question` – or assign a status label and close it as _not planned_.",
});
await github.rest.issues.update({
issue_number: issue.data.number,
owner: context.repo.owner,
repo: context.repo.repo,
state: "open",
});
} else {
const statusLabels = newLabels.filter(l => l.startsWith("status: "));
if (statusLabels.length === 0) {
newLabels.push("status: invalid");
}
await github.rest.issues.update({
issue_number: issue.data.number,
owner: context.repo.owner,
repo: context.repo.repo,
labels: newLabels,
state: "closed",
state_reason: "not_planned",
});
}
}
}
================================================
FILE: .github/workflows/zizmor-analysis.yml
================================================
name: GitHub Actions Security Analysis
on:
push:
branches:
- main
- 'releases/**'
paths:
- '.github/**'
pull_request:
paths:
- '.github/**'
permissions: {}
jobs:
zizmor:
name: Run zizmor 🌈
runs-on: ubuntu-latest
permissions:
security-events: write
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- name: Run zizmor 🌈
uses: zizmorcore/zizmor-action@b1d7e1fb5de872772f31590499237e7cce841e8e # v0.5.3
================================================
FILE: .github/zizmor.yml
================================================
rules:
cache-poisoning:
ignore:
# reports issues for setup-node which isn't used while releasing
- main.yml
secrets-outside-env:
disable: true
================================================
FILE: .gitignore
================================================
# Gradle
.gradle
.kotlin
build
# Ignore Gradle GUI config
gradle-app.setting
# Eclipse
.classpath
.settings/
.project
/bin/
/*/bin
/gradle/plugins/*/bin
# IntelliJ
*.iml
*.ipr
*.iws
*.uml
**/.idea/*
!/.idea/icon.png
!/.idea/vcs.xml
/out/
/*/out/
# Misc
*.log
*.graphml
coverage.db*
.metadata
/.sdkmanrc
/.tool-versions
checksums*
# snapshot-tests
*.snapshot_actual
*.snapshot_raw
# Antora
/documentation/node_modules/
================================================
FILE: .idea/vcs.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CommitMessageInspectionProfile">
<profile version="1.0">
<inspection_tool class="BodyLimit" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="SubjectBodySeparation" enabled="true" level="WARNING" enabled_by_default="true" />
<inspection_tool class="SubjectLimit" enabled="true" level="WARNING" enabled_by_default="true" />
</profile>
</component>
<component name="GitSharedSettings">
<option name="synchronizeBranchProtectionRules" value="false" />
</component>
<component name="IssueNavigationConfiguration">
<option name="links">
<list>
<IssueNavigationLink>
<option name="issueRegexp" value="#(\d+)" />
<option name="linkRegexp" value="https://github.com/junit-team/junit5/issues/$1" />
</IssueNavigationLink>
</list>
</option>
</component>
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
================================================
FILE: .jitpack.yml
================================================
before_install:
- sdk update
- sdk install java 25-open
- sdk use java 25-open
install:
- |
./gradlew \
--show-version \
-Pjitpack.version=$VERSION \
-Ppublishing.group=$GROUP.$ARTIFACT \
-Ppublishing.signArtifacts=false \
javaToolchains \
publishToMavenLocal
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing
## Getting Started
We welcome new contributors to the project!
If you're interested, please check for [issues labeled with `up-for-grabs`
that are not yet in progress](https://github.com/junit-team/junit-framework/issues?q=sort%3Aupdated-desc%20is%3Aissue%20is%3Aopen%20label%3Aup-for-grabs%20-label%3A%22status%3A%20in%20progress%22).
Generally, before you work on an issue, post a comment and ask whether it can be started.
Please wait for the core team to respond and assign the issue to you before making any code
changes.
## JUnit Contributor License Agreement
- You will only Submit Contributions where You have authored 100% of the content.
- You will only Submit Contributions to which You have the necessary rights. This means
that if You are employed You have received the necessary permissions from Your employer
to make the Contributions.
- Whatever content You Contribute will be provided under the Project License(s).
### Project Licenses
- All modules use [Eclipse Public License v2.0](LICENSE.md).
## Commit Messages
As a general rule, the style and formatting of commit messages should follow the guidelines in
[How to Write a Git Commit Message](https://chris.beams.io/posts/git-commit/).
In addition, any commit that is related to an existing issue must reference the issue.
For example, if a commit in a pull request addresses issue \#999, it must contain the
following at the bottom of the commit message.
```
Issue: #999
```
## Pull Requests
Our [Definition of Done](https://github.com/junit-team/junit-framework/wiki/Definition-of-Done)
(DoD) offers some guidelines on what we expect from a pull request.
Feel free to open a pull request that does not fulfill all criteria, e.g. to discuss
a certain change before polishing it, but please be aware that we will only merge it
once the DoD is met.
Please add the following lines to your pull request description:
```markdown
---
I hereby agree to the terms of the JUnit Contributor License Agreement.
```
## Coding Conventions
### Naming Conventions
Acronyms are words.
Whenever an acronym is included as part of a type name or method name, keep the first
letter of the acronym uppercase and use lowercase for the rest of the acronym. Otherwise,
it becomes _impossible_ to perform camel-cased searches in IDEs, and it becomes
potentially very difficult for mere humans to read or reason about the element without
reading documentation (if documentation even exists).
Consider for example a use case needing to support an HTTP URL. Calling the method
`getHTTPURL()` is absolutely horrible in terms of usability; whereas, `getHttpUrl()` is
great in terms of usability. The same applies for types `HTTPURLProvider` vs
`HttpUrlProvider`, etc.
Whenever an acronym is included as part of a field name or parameter name:
- If the acronym comes at the start of the field or parameter name, use lowercase for the
entire acronym -- for example, `String url;`.
- Otherwise, keep the first letter of the acronym uppercase and use lowercase for the
rest of the acronym -- for example, `String defaultUrl;`.
### Formatting
#### Code
Code formatting is enforced using the [Spotless](https://github.com/diffplug/spotless)
Gradle plugin. You can use `gradle spotlessApply` to format new code and add missing
license headers to source files. Formatter and import order settings for Eclipse are
available in the repository under
[junit-eclipse-formatter-settings.xml](gradle/config/eclipse/junit-eclipse-formatter-settings.xml)
and [junit-eclipse.importorder](gradle/config/eclipse/junit-eclipse.importorder),
respectively. For IntelliJ IDEA there's a
[plugin](https://plugins.jetbrains.com/plugin/6546) you can use in conjunction with the
Eclipse settings.
It is forbidden to use _wildcard imports_ (e.g., `import static org.junit.jupiter.api.Assertions.*;`)
in Java code.
#### Documentation
Text in `*.adoc` and `*.md` files should be wrapped at 90 characters whenever technically
possible.
In multi-line bullet point entries, subsequent lines should be indented.
### Spelling
Use American English spelling rules when writing documentation as well as for
code -- class names, method names, variable names, etc.
### Javadoc
- Javadoc comments should be wrapped after 80 characters whenever possible.
- This first paragraph must be a single, concise sentence that ends with a period (`.`).
- Place `<p>` on the same line as the first line of a new paragraph and precede `<p>` with a blank line.
- Insert a blank line before at-clauses/tags.
- Favor `{@code foo}` over `<code>foo</code>`.
- Favor literals (e.g., `{@literal @}`) over HTML entities.
- New classes and methods should declare a `@since ...` tag.
- Use `@since 5.10` instead of `@since 5.10.0`.
- Do not use `@author` tags. Instead, contributors are listed on the [GitHub](https://github.com/junit-team/junit-framework/graphs/contributors) page.
- Do not use verbs in third-person form in the first sentence of the Javadoc for a method -- for example, use "Discover tests..." instead of "Discovers tests...".
#### Examples
See [`ExtensionContext`](junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/ExtensionContext.java) and
[`ParameterContext`](junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/ParameterContext.java) for example Javadoc.
### Constant fields
A constant field is a `static final` field whose value is immutable. If a static final
field has a primitive type or an immutable reference type it is a constant field.
- To minimize accessibility and mutability for all non-private `static final` fields
under `src/main` should be constant fields.
- Constant fields should be named using uppercase words separated by underscores. For
example `DEFAULT_HTTP_URL_PROVIDER`.
Note: `org.junit.platform.commons.logging.Logger` is considered mutable.
### Nullability
This project uses JSpecify's annotation to indicate nullability. In general, the approach
is as follows:
- All packages are annotated with `@NullMarked`
- Types of fields, parameters, return types etc. may be annotated with `@Nullable`
### Tests
#### Naming
- All test classes must end with a `Tests` suffix.
- Example test classes that should not be picked up by the build must end with a `TestCase` suffix.
#### Assertions
- Use `org.junit.jupiter.api.Assertions` for simple assertions.
- Use AssertJ when richer assertions are needed.
- Do not use `org.junit.Assert` or `junit.framework.Assert`.
#### Mocking and Stubbing
- Use either [Mockito](https://github.com/mockito/mockito) or hand-written test doubles.
### Logging
- In general, logging should be used sparingly.
- All logging must be performed via the internal `Logger` façade provided via the JUnit [LoggerFactory](https://github.com/junit-team/junit-framework/blob/main/junit-platform-commons/src/main/java/org/junit/platform/commons/logging/LoggerFactory.java).
- Levels defined in JUnit's [Logger](https://github.com/junit-team/junit-framework/blob/main/junit-platform-commons/src/main/java/org/junit/platform/commons/logging/Logger.java) façade, which delegates to Java Util Logging (JUL) for the actual logging.
- _error_ (JUL: `SEVERE`, Log4J: `ERROR`): extra information (in addition to an Exception) about errors that will halt execution
- _warn_ (JUL: `WARNING`, Log4J: `WARN`): potential usage or configuration errors that should not halt execution
- _info_ (JUL: `INFO`, Log4J: `INFO`): information the users might want to know but not by default
- _config_ (JUL: `CONFIG`, Log4J: `CONFIG`): information related to configuration of the system (Example: `ServiceLoaderTestEngineRegistry` logs IDs of discovered engines)
- _debug_ (JUL: `FINE`, Log4J: `DEBUG`)
- _trace_ (JUL: `FINER`, Log4J: `TRACE`)
### Deprecation
The JUnit project uses the `@API` annotation from [API Guardian](https://github.com/apiguardian-team/apiguardian).
Publicly available interfaces, classes, and methods have a defined lifecycle
which is described in detail in the [User Guide](https://docs.junit.org/current/api-evolution.html).
That following describes the deprecation process followed for API items.
To deprecate an item:
- Update the `@API.status` to `DEPRECATED`.
- Update `@API.since`. Please note `since` describes the version when the
status was changed and not the introduction of the element.
- Add the `@Deprecated` Java annotation on the item.
- Add the `@deprecated` JavaDoc tag to describe the deprecation, and refer to
an eventual replacement.
- If the item is used in existing code, add `@SuppressWarnings("deprecation")`
to make the build pass.
## Building the Project
Please refer to [the readme](README.md#building-from-source) and [the documentation readme](documentation/README.md) for
the most common build commands.
### Build Cache
Local builds can reuse outputs from previous CI builds via Gradle's [Build Cache](https://docs.gradle.org/current/userguide/build_cache.html).
The default build cache server is located in the US.
If you're in Europe, you can configure the build to use a build cache node located in the EU by adding the following to the `gradle.properties` file in your [Gradle user home](https://docs.gradle.org/current/userguide/directory_layout.html#dir:gradle_user_home):
```properties
junit.develocity.buildCache.server=https://eu-build-cache-ge.junit.org
```
### Build Parameters
The build can be influenced by a number of parameters. For example, measuring
JaCoCo code coverage of Test tasks can be enabled, or Predictive Test Selection
disabled. To see the full list, please run the following task:
`./gradlew :plugins:build-parameters:parameters`
================================================
FILE: KEYS
================================================
This file contains the PGP key that is used to sign releases.
Importing: `pgp < KEYS` or `gpg --import KEYS`
Adding a key:
`pgp -kxa <your name> >> KEYS`,
or `(pgpk -ll <your name> && pgpk -xa <your name>) >> KEYS`,
or `(gpg --list-sigs <your name> && gpg --armor --export <your name>) >> KEYS`
================================
pub rsa4096 2018-04-08 [SC]
FF6E2C001948C5F2F38B0CC385911F425EC61B51
uid [ unknown] Open Source Development <mail@marcphilipp.de>
sig 3 85911F425EC61B51 2018-04-08 Open Source Development <mail@marcphilipp.de>
sub rsa4096 2018-04-08 [E]
sig 85911F425EC61B51 2018-04-08 Open Source Development <mail@marcphilipp.de>
-----BEGIN PGP PUBLIC KEY BLOCK-----
mQINBFrKW9IBEACkqUvM7hU1WqOOeb1gZ7pUsRliHuoUvYIrd+hdp+qhPmJ0NG0W
YhZK5UtJBmqvtHKRkbwYxUuya9zlBmCfQFf0GpFKJ65JSrPSkZADI3aZ4aUkxIUw
nIRoUHucmr10Xftpebr/zaJk5oR8RdaL5FapapmcZmAaHR9CDWB8XtI318u314jq
M5rKatnAZMERoPugOvvuAOz4bfZKwdfCmZKfYUM/TMSrSinXrGExSW6z4RhtqmpC
E5M/7OoVfvDynVJKqNazqgigpmMNhOyzAhQsiKh1K0akyxTZbjeZKsdYfhCXvq0q
k9+KM/cTllQ54MPnFWiObLkHeK0Waw8bI/vAJ4h4x/XM9iGYpkXv7F2/FVsHQdPe
YJcwD/CkD8KHyiPaRKMeApiUtZsdAHU0L4X/lNmcooea/7ipskruUgwcm+RdLhRZ
P949t1e7nqDZfpEHy90NiFxmlRAPSNqBLwefxY/hwBgog2jabDALJVcLCMosFWPj
MQhFlGSIODiVcW8folGIjzkyNZbNMWkwnl2QnWp/h2TAwYQJOMqcv2MG9o5pyzpx
97Iz1ngq1FlM/gJnGnNUydP2tAjT2L2U3MP1uX/EdRChdgPqdolqYhdFfwCr0Fpf
W527bUZpReHCEiQ29ABSnQ711mO+d9+qM6edRyHUoBWz89IHt8sCunuvNwARAQAB
tC1PcGVuIFNvdXJjZSBEZXZlbG9wbWVudCA8bWFpbEBtYXJjcGhpbGlwcC5kZT6J
Ak4EEwEIADgWIQT/biwAGUjF8vOLDMOFkR9CXsYbUQUCWspb0gIbAwULCQgHAgYV
CAkKCwIEFgIDAQIeAQIXgAAKCRCFkR9CXsYbUQyRD/9xm3BqdpWcRCE5UyB6nbwV
8TgzMmbOhpFhhcjzobly/pKAbcofKsjhreENJkfBVUo+zAFx21ToC5tbH20wRtIE
vQVCP6sAIzhYWU1ohafqVFP4+PztNBuYTnS6vGvSwzp0IXLIIoxSxo0IOED9uUS9
DTxh1n9NnDLDe2pfjrXBblQtLSW3W5ISDoUvcoyO7Hk1OByW6MNsSoLvXIUNeVhB
ju9TfYxFACJSWBhUxJfgip9Y2GrNBJaYGLZrTAoW1Lh1H1DfLV3wHDClQ1+H+oyx
IOZULEGYY3MgZTd6Ner2yNAUCB7gVa50NiCZXCS74m+XzMrTEsdWjSMUaOe+dL0I
9MCrgi4ycUHWIfTKx9gGlIOo3hSDMN+8Nj33XPjLT8kcfoFeUX8jTOvC1HFfTuQJ
x2t/dKHizdrS3F6A/JQa7v8GNTrZFnEXkwgRTf3ccLoo3gPwzNJeCm2xNjvne1VH
fvxzwNmq8M05oicEigvEed2VMStMhvT7dSiMAf66rEJHjjaHAoNqbLDEATYrWUP2
I52txHSSxSJohxVP6Ec6dERnqqYi0mVyzBPo7mmFFBisq74w8RvZXyzvXE3BTiDL
we1E/Z/AXbtJye9DickQ/G6RFtVLbUHQfzyRS/65JPtlH8rqJr58YWlylGImVLwE
OsKNQrwLZ0UkfaWV7wqr3rkCDQRaylvSARAAnQG636wliEOLkXN662OZS6Qz2+cF
ltCWboq9oX9FnA1PHnTY2cAtwS214RfWZxkjg6Stau+d1Wb8TsF/SUN3eKRSyrkA
xlX0v552vj3xmmfNsslQX47e6aEWZ0du0M8jw7/f7Qxp0InkBfpQwjSg4ECoH4cA
6dOFJIdxBv8dgS4K90HNuIHa+QYfVSVMjGwOjD9St6Pwkbg1sLedITRo59Bbv0J1
4nE9LdWbCiwNrkDr24jTewdgrDaCpN6msUwcH1E0nYxuKAetHEi2OpgBhaY3RQ6Q
PQB6NywvmD0xRllMqu4hSp70pHFtm8LvJdWOsJ5we3KijHuZzEbBVTTl+2DhNMI0
KMoh+P/OmyNOfWD8DL4NO3pVv+mPDZn82/eZ3XY1/oSQrpyJaCBjRKasVTtfiA/F
gYqTml6qZMjy6iywg84rLezELgcxHHvjhAKd4CfxyuCCgnGT0iRLFZKw44ZmOUqP
DkyvGRddIyHag1K7UaM/2UMn6iPMy7XWcaFiH5Huhz43SiOdsWGuwNk4dDxHdxmz
Sjps0H5dkfCciOFhEc54AFcGEXCWHXuxVqIq/hwqTmVl1RY+PTcQUIOfx36WW1ix
JQf8TpVxUbooK8vr1jOFF6khorDXoZDJNhI2VKomWp8Y38EPGyiUPZNcnmSiezx+
MoQwAbeqjFMKG7UAEQEAAYkCNgQYAQgAIBYhBP9uLAAZSMXy84sMw4WRH0JexhtR
BQJaylvSAhsMAAoJEIWRH0JexhtR0LEP/RvYGlaokoosAYI5vNORAiYEc1Ow2McP
I1ZafHhcVxZhlwF48dAC2bYcasDX/PbEdcD6pwo8ZU8eI8Ht0VpRQxeV/sP01m2Y
EpAuyZ6jI7IQQCGcwQdN4qzQJxMAASl9JlplH2NniXV1/994FOtesT59ePMyexm5
7lzhYXP1PGcdt8dH37r6z3XQu0lHRG/KBn7YhyA3zwJcno324KdBRJiynlc7uqQq
+ZptU9fR1+Nx0uoWZoFMsrQUmY34aAOPJu7jGMTG+VseMH6vDdNhhZs9JOlD/e/V
aF7NyadjOUD4j/ud7c0z2EwqjDKMFTHGbIdawT/7jartT+9yGUO+EmScBMiMuJUT
dCP4YDh3ExRdqefEBff3uE/rAP73ndNYdIVq9U0gY0uSNCD9JPfj4aCN52y9a2pS
7Dg7KB/Z8SH1R9IWP+t0HvVtAILdsLExNFTedJGHRh7uaC7pwRz01iivmtAKYICz
ruqlJie/IdEFFK/sus6fZek29odTrQxx42HGHO5GCNyEdK9jKVAeuZ10vcaNbuBp
iP7sf8/BsiEU4wHE8gjFeUPRiSjnERgXQwfJosLgf/K/SShQn2dCkYZRNF+SWJ6Z
2tQxcW5rpUjtclV/bRVkUX21EYfwA6SMB811mI7AVy8WPXCe8La72ukmaxEGbpJ8
mdzS2PJko7mm
=l0XA
-----END PGP PUBLIC KEY BLOCK-----
================================================
FILE: LICENSE.md
================================================
Eclipse Public License - v 2.0
==============================
THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE (“AGREEMENT”). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
### 1. Definitions
“Contribution” means:
* **a)** in the case of the initial Contributor, the initial content Distributed under this Agreement, and
* **b)** in the case of each subsequent Contributor:
* **i)** changes to the Program, and
* **ii)** additions to the Program;
where such changes and/or additions to the Program originate from and are Distributed by that particular Contributor. A Contribution “originates” from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include changes or additions to the Program that are not Modified Works.
“Contributor” means any person or entity that Distributes the Program.
“Licensed Patents” mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.
“Program” means the Contributions Distributed in accordance with this Agreement.
“Recipient” means anyone who receives the Program under this Agreement or any Secondary License (as applicable), including Contributors.
“Derivative Works” shall mean any work, whether in Source Code or other form, that is based on (or derived from) the Program and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship.
“Modified Works” shall mean any work in Source Code or other form that results from an addition to, deletion from, or modification of the contents of the Program, including, for purposes of clarity any new file in Source Code form that contains any contents of the Program. Modified Works shall not include works that contain only declarations, interfaces, types, classes, structures, or files of the Program solely in each case in order to link to, bind by name, or subclass the Program or Modified Works thereof.
“Distribute” means the acts of **a)** distributing or **b)** making available in any manner that enables the transfer of a copy.
“Source Code” means the form of a Program preferred for making modifications, including but not limited to software source code, documentation source, and configuration files.
“Secondary License” means either the GNU General Public License, Version 2.0, or any later versions of that license, including any exceptions or additional permissions as identified by the initial Contributor.
### 2. Grant of Rights
**a)** Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, Distribute and sublicense the Contribution of such Contributor, if any, and such Derivative Works.
**b)** Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in Source Code or other form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
**c)** Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to Distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.
**d)** Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.
**e)** Notwithstanding the terms of any Secondary License, no Contributor makes additional grants to any Recipient (other than those set forth in this Agreement) as a result of such Recipient's receipt of the Program under the terms of a Secondary License (if permitted under the terms of Section 3).
### 3. Requirements
**3.1** If a Contributor Distributes the Program in any form, then:
* **a)** the Program must also be made available as Source Code, in accordance with section 3.2, and the Contributor must accompany the Program with a statement that the Source Code for the Program is available under this Agreement, and informs Recipients how to obtain it in a reasonable manner on or through a medium customarily used for software exchange; and
* **b)** the Contributor may Distribute the Program under a license different than this Agreement, provided that such license:
* **i)** effectively disclaims on behalf of all other Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;
* **ii)** effectively excludes on behalf of all other Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;
* **iii)** does not attempt to limit or alter the recipients' rights in the Source Code under section 3.2; and
* **iv)** requires any subsequent distribution of the Program by any party to be under a license that satisfies the requirements of this section 3.
**3.2** When the Program is Distributed as Source Code:
* **a)** it must be made available under this Agreement, or if the Program **(i)** is combined with other material in a separate file or files made available under a Secondary License, and **(ii)** the initial Contributor attached to the Source Code the notice described in Exhibit A of this Agreement, then the Program may be made available under the terms of such Secondary Licenses, and
* **b)** a copy of this Agreement must be included with each copy of the Program.
**3.3** Contributors may not remove or alter any copyright, patent, trademark, attribution notices, disclaimers of warranty, or limitations of liability (“notices”) contained within the Program from any copy of the Program which they Distribute, provided that Contributors may add their own appropriate notices.
### 4. Commercial Distribution
Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor (“Commercial Contributor”) hereby agrees to defend and indemnify every other Contributor (“Indemnified Contributor”) against any losses, damages and costs (collectively “Losses”) arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: **a)** promptly notify the Commercial Contributor in writing of such claim, and **b)** allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.
For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.
### 5. No Warranty
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement, including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
### 6. Disclaimer of Liability
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
### 7. General
If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.
All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.
Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be Distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to Distribute the Program (including its Contributions) under the new version.
Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved. Nothing in this Agreement is intended to be enforceable by any entity that is not a Contributor or Recipient. No third-party beneficiary rights are created under this Agreement.
#### Exhibit A - Form of Secondary Licenses Notice
> “This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), version(s), and exceptions or additional permissions here}.”
Simply including a copy of this Agreement, including this Exhibit A is not sufficient to license the Source Code under Secondary Licenses.
If it is not possible or desirable to put the notice in a particular file, then You may include the notice in a location (such as a LICENSE file in a relevant directory) where a recipient would be likely to look for such a notice.
You may add additional accurate notices of copyright ownership.
================================================
FILE: NOTICE.md
================================================
Open Source Licenses
====================
This product may include a number of subcomponents with separate
copyright notices and license terms. Your use of the source code for
these subcomponents is subject to the terms and conditions of the
subcomponent's license, as noted in the `LICENSE-<subcomponent>[.md]`
files.
================================================
FILE: README.md
================================================
<h1>
<picture width="200">
<source media="(prefers-color-scheme: dark)" srcset="https://junit.org/assets/img/junit-logo-inverted-darker.svg">
<source media="(prefers-color-scheme: light)" srcset="https://junit.org/assets/img/junit-logo.svg">
<img alt="JUnit" src="https://junit.org/assets/img/junit-logo.svg" width="200">
</picture>
</h1>
This repository is the home of JUnit Platform, Jupiter, and Vintage.
## Sponsors
[](https://junit.org/sponsoring)
* **Gold Sponsors:** [JetBrains](https://jb.gg/junit-logo), [Netflix](https://www.netflix.com/)
* **Silver Sponsors:** [Micromata](https://www.micromata.de), [Quo Card](https://quo-digital.jp)
* **Bronze Sponsors:** [Premium Minds](https://www.premium-minds.com), [codefortynine](https://codefortynine.com), [Info Support](https://www.infosupport.com), [Code Intelligence](https://www.code-intelligence.com), [Route4Me](https://route4me.com/), [Testiny](https://www.testiny.io/), [TestMu AI](https://www.testmuai.com/?utm_medium=sponsor&utm_source=junit)
## Latest Releases
- General Availability (GA): [JUnit 6.0.3](https://github.com/junit-team/junit-framework/releases/tag/r6.0.3) (February 15, 2026)
- Preview (Milestone/Release Candidate): [JUnit 6.1.0-RC1](https://github.com/junit-team/junit-framework/releases/tag/r6.1.0-RC1) (April 25, 2026)
## Documentation
- [User Guide]
- [Javadoc]
- [Release Notes]
- [Examples]
## Contributing
Contributions to JUnit are both welcomed and appreciated. For specific guidelines
regarding contributions, please see [CONTRIBUTING.md] in the root directory of the
project. Those willing to use milestone or SNAPSHOT releases are encouraged
to file feature requests and bug reports using the project's
[issue tracker](https://github.com/junit-team/junit-framework/issues). Issues marked with an
<a href="https://github.com/junit-team/junit-framework/issues?q=is%3Aissue+is%3Aopen+label%3Aup-for-grabs">`up-for-grabs`</a>
label are specifically targeted for community contributions.
## Getting Help
Ask JUnit-related questions on [StackOverflow] or use the Q&A category on [GitHub Discussions].
## Continuous Integration Builds
[](https://github.com/junit-team/junit-framework/actions/workflows/main.yml) [](https://github.com/junit-team/junit-framework/actions/workflows/cross-version.yml)
Official CI build server used to perform quick checks on submitted pull requests and for
build matrices including the latest released OpenJDK and early access builds of the next
OpenJDK.
## Code Coverage
Code coverage using [JaCoCo] for the latest build is available on [Codecov].
A code coverage report can also be generated locally via the [Gradle Wrapper] by
executing `./gradlew clean jacocoRootReport`. The results will be available
in `build/reports/jacoco/jacocoRootReport/html/index.html`.
## Develocity
[](https://ge.junit.org/scans)
JUnit utilizes [Develocity](https://gradle.com/) for [Build Scans](https://scans.gradle.com/),
[Build Cache](https://docs.gradle.org/current/userguide/build_cache.html), and
[Predictive Test Selection](https://docs.gradle.com/enterprise/predictive-test-selection/).
The latest Build Scans are available on [ge.junit.org](https://ge.junit.org/). Currently,
only core team members can publish Build Scans on that server.
You can, however, publish a Build Scan to [scans.gradle.com](https://scans.gradle.com/) by
using the `--scan` parameter explicitly.
The remote Build Cache is enabled by default for everyone so that local builds can reuse
task outputs from previous CI builds.
## Building from Source
You need [JDK 25] to build JUnit. [Gradle toolchains] are used to detect and
potentially download additional JDKs for compilation and test execution.
All modules can be _built_ and _tested_ with the [Gradle Wrapper] using the following command:
`./gradlew build`
All modules can be _installed_ in a local Maven repository for consumption in other local
projects via the following command:
`./gradlew publishToMavenLocal`
## Dependency Metadata
[](https://central.sonatype.com/search?namespace=org.junit.jupiter)
[](https://central.sonatype.com/search?namespace=org.junit.vintage)
[](https://central.sonatype.com/search?namespace=org.junit.platform)
Consult the [Dependency Metadata] section of the [User Guide] for a list of all artifacts
of the JUnit Platform, JUnit Jupiter, and JUnit Vintage.
[Codecov]: https://codecov.io/gh/junit-team/junit-framework
[CONTRIBUTING.md]: https://github.com/junit-team/junit-framework/blob/HEAD/CONTRIBUTING.md
[Dependency Metadata]: https://docs.junit.org/current/appendix.html#dependency-metadata
[GitHub Discussions]: https://github.com/junit-team/junit-framework/discussions/categories/q-a
[Gradle toolchains]: https://docs.gradle.org/current/userguide/toolchains.html
[Gradle Wrapper]: https://docs.gradle.org/current/userguide/gradle_wrapper.html#sec:using_wrapper
[JaCoCo]: https://www.eclemma.org/jacoco/
[Javadoc]: https://api.junit.org
[JDK 25]: https://javaalmanac.io/jdk/25/
[Release Notes]: https://docs.junit.org/current/release-notes.html
[Examples]: https://github.com/junit-team/junit-examples
[StackOverflow]: https://stackoverflow.com/questions/tagged/junit5
[User Guide]: https://docs.junit.org
================================================
FILE: RELEASING.md
================================================
# Releasing
## Pre-release steps
- [ ] Switch or create the release branch for this feature release (e.g. `releases/5.12.x`)
- [ ] Change `version` in `gradle.properties` to the versions about to be released
- [ ] Change release date in Release Notes
- [ ] Change release date in `README.MD`
- [ ] Commit with message "Release ${VERSION}"
- [ ] Execute `./gradlew --no-build-cache --no-configuration-cache clean build publishAggregationToCentralPortal`
- [ ] Tag current commit: `git tag -s -m ${VERSION} r${VERSION}`
- [ ] Change `version` in `gradle.properties` on release branch to new development versions and commit with message "Back to snapshots for further development" or similar
- [ ] Push release branch and tag to GitHub: `git push --set-upstream --follow-tags origin HEAD`
- [ ] Trigger a [release build](https://github.com/junit-team/junit-framework/actions/workflows/release.yml): `gh workflow run --ref r${VERSION} -f releaseVersion=${VERSION} -f deploymentId=${DEPLOYMENT_ID} release.yml`
- Select the release branch
- Enter the version to be released
- Enter the staging repository ID from the output of above Gradle build
## Post-release steps
- [ ] Post about the new release:
- [ ] [Mastodon](https://fosstodon.org/@junit)
- [ ] [Bluesky](https://bsky.app/profile/junit.org)
### Preview releases (milestones and release candidates)
- [ ] Fast-forward merge the release branch to `main` and push to GitHub
- [ ] Create release notes for the next preview or feature release from the template
### Feature releases (x.y.0)
- [ ] Delete `accepted-breaking-changes.csv` (if it exists), change `previousVersion` in `gradle.properties` to `x.y.0` on the release branch, and commit with message "Update API baseline and clear accepted breaking changes"
- [ ] Fast-forward merge the release branch to `main` and push to GitHub
- [ ] Update the [security policy](https://github.com/junit-team/junit-framework/blob/main/SECURITY.md) and commit with message "Update security policy to reflect 5.x release" or similar
- [ ] Create release notes for the next feature release from the template
- [ ] Update [JBang catalog](https://github.com/junit-team/jbang-catalog/blob/main/jbang-catalog.json)
### Patch releases (x.y.z)
- [ ] Cherry-pick the tagged commit from the release branch to `main` and resolve the conflict in `gradle.properties` by choosing the version of the `main` branch
- [ ] Delete `accepted-breaking-changes.csv` (if it exists), change `previousVersion` in `gradle.properties` to `x.y.z` on the release branch, and commit with message "Update API baseline and clear accepted breaking changes"
- [ ] Include the release notes of the patch release on `main` if not already present
- [ ] Update [JBang catalog](https://github.com/junit-team/jbang-catalog/blob/main/jbang-catalog.json)
================================================
FILE: SECURITY.md
================================================
# Security Policy
[](https://www.bestpractices.dev/projects/9607) [](https://scorecard.dev/viewer/?uri=github.com/junit-team/junit-framework)
## JAR Signing
JUnit JARs released on Maven Central are signed.
You'll find more information about the key here: [KEYS](./KEYS)
## Supported Versions
| Version | Supported |
|---------| ------------------ |
| 6.0.x | :white_check_mark: |
| 5.14.x | :white_check_mark: |
| < 5.14 | :x: |
## Reporting a Vulnerability
To report a security vulnerability, you have two options:
- [Privately report a vulnerability](https://github.com/junit-team/junit-framework/security/advisories/new) on GitHub (see [docs](https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing-information-about-vulnerabilities/privately-reporting-a-security-vulnerability) for details)
- Send an email to security@junit.org. You can use the [published OpenPGP key](https://keys.openpgp.org/search?q=security%40junit.org) with fingerprint `0152DA30EABC7ABADCB09D10D9A6B1329D191D25` to encrypt the message body.
================================================
FILE: build.gradle.kts
================================================
import junitbuild.extensions.dependencyProject
plugins {
id("junitbuild.base-conventions")
id("junitbuild.build-metadata")
id("junitbuild.checkstyle-nohttp")
id("junitbuild.jacoco-aggregation-conventions")
id("junitbuild.temp-maven-repo")
}
description = "JUnit"
group = "org.junit"
val license by extra(License(
name = "Eclipse Public License v2.0",
url = uri("https://www.eclipse.org/legal/epl-v20.html"),
headerFile = layout.projectDirectory.file("gradle/config/spotless/eclipse-public-license-2.0.java")
))
val platformProjects by extra(listOf(
projects.junitPlatformCommons,
projects.junitPlatformConsole,
projects.junitPlatformConsoleStandalone,
projects.junitPlatformEngine,
projects.junitPlatformLauncher,
projects.junitPlatformReporting,
projects.junitPlatformSuite,
projects.junitPlatformSuiteApi,
projects.junitPlatformSuiteEngine,
projects.junitPlatformTestkit
).map { dependencyProject(it) })
val jupiterProjects by extra(listOf(
projects.junitJupiter,
projects.junitJupiterApi,
projects.junitJupiterEngine,
projects.junitJupiterMigrationsupport,
projects.junitJupiterParams
).map { dependencyProject(it) })
val vintageProjects by extra(listOf(
dependencyProject(projects.junitVintageEngine)
))
val mavenizedProjects by extra(listOf(dependencyProject(projects.junitStart)) + platformProjects + jupiterProjects + vintageProjects)
val modularProjects by extra(mavenizedProjects - setOf(dependencyProject(projects.junitPlatformConsoleStandalone)))
dependencies {
modularProjects.forEach {
jacocoAggregation(it)
}
jacocoAggregation(projects.documentation)
jacocoAggregation(projects.jupiterTests)
jacocoAggregation(projects.platformTests)
}
================================================
FILE: documentation/.tool-versions
================================================
nodejs 24.15.0
================================================
FILE: documentation/README.md
================================================
# JUnit User Guide
This subproject contains the Antora/AsciiDoc sources for the JUnit User Guide.
## Structure
- `modules/ROOT/pages`: AsciiDoc files
- `src/test/java`: Java test source code that can be included in the AsciiDoc files
- `src/test/kotlin`: Kotlin test source code that can be included in the AsciiDoc files
- `src/test/resources`: Classpath resources that can be included in the AsciiDoc files or
used in tests
## Usage
### Generate Antora site
This following Gradle command generates the HTML version of the User Guide as
`build/antora/build/site`.
```
./gradlew antora
```
On Linux operating systems, the `graphviz` package providing `/usr/bin/dot` must be
installed in order to generate the PlantUML images used in the User Guide.
================================================
FILE: documentation/antora-playbook.yml
================================================
antora:
extensions:
- '@antora/collector-extension'
- require: '@antora/lunr-extension'
index_latest_only: true
index_by_heading: true
- require: '@springio/antora-extensions/root-component-extension'
root_component_name: junit
- require: '@springio/antora-extensions/root-attachments-extension'
- require: '@springio/antora-xref-extension'
site:
title: JUnit User Guide
start_page: junit::overview.adoc
content:
sources:
- url: @GIT_REPO_ROOT@
branches: @GIT_BRANCH_NAME@
start_path: documentation
worktrees: true
asciidoc:
extensions:
- '@asciidoctor/tabs'
attributes:
page-pagination: ''
idprefix: '@'
idseparator: '-@'
table-caption: false
table-frame: 'none@'
table-grid: 'rows@'
table-stripes: 'odd@'
figure-caption: false
example-caption: false
listing-caption: false
hide-uri-scheme: '@'
attribute-missing: warn
tabs-sync-option: ''
runtime:
log:
failure_level: warn
ui:
bundle:
url: https://gitlab.com/antora/antora-ui-default/-/jobs/artifacts/HEAD/raw/build/ui-bundle.zip?job=bundle-stable
snapshot: true
supplemental_files:
- path: css/vendor/tabs.css
contents: @GIT_REPO_ROOT@/documentation/node_modules/@asciidoctor/tabs/dist/css/tabs.css
- path: js/vendor/tabs.js
contents: @GIT_REPO_ROOT@/documentation/node_modules/@asciidoctor/tabs/dist/js/tabs.js
- path: partials/footer-scripts.hbs
contents: |
<script id="site-script" src="{{{uiRootPath}}}/js/site.js" data-ui-root-path="{{{uiRootPath}}}"></script>
<script async src="{{{uiRootPath}}}/js/vendor/highlight.js"></script>
<script async src="{{{uiRootPath}}}/js/vendor/tabs.js" data-sync-storage-key="preferred-code-language"></script>
{{#if env.SITE_SEARCH_PROVIDER}}
{{> search-scripts}}
{{/if}}
- path: partials/head-styles.hbs
contents: |
<link rel="stylesheet" href="{{{uiRootPath}}}/css/site.css">
<link rel="stylesheet" href="{{{uiRootPath}}}/css/vendor/tabs.css">
================================================
FILE: documentation/antora.yml
================================================
name: junit
version: true
title: JUnit
nav:
- modules/ROOT/nav.adoc
- modules/ROOT/extra-site-nav.adoc
ext:
collector:
run:
command: gradlew --quiet :documentation:generateAntoraResources
local: true
scan:
- dir: ./build/generated-antora-resources
clean: true
- dir: ./build/docs/fixedJavadoc
clean: true
into: modules/ROOT/attachments/api
- dir: ./src/test
into: modules/ROOT/examples
- dir: ./build/generated/asciidoc
clean: true
into: modules/ROOT/partials
- dir: ./build/plantuml
clean: true
into: modules/ROOT/images
assembler:
nav:
- modules/ROOT/nav.adoc
asciidoc:
attributes:
javadoc-root: "xref:attachment$api"
# Snapshot Repository
snapshot-repo: 'https://central.sonatype.com/service/rest/repository/browse/maven-snapshots'
# Base Links
junit-team: 'https://github.com/junit-team'
junit-framework-repo: '{junit-team}/junit-framework'
current-branch: '{junit-framework-repo}/tree/{release-branch}'
# Platform Commons
junit-platform-support-package: '{javadoc-root}/org.junit.platform.commons/org/junit/platform/commons/support/package-summary.html[org.junit.platform.commons.support]'
AnnotationSupport: '{javadoc-root}/org.junit.platform.commons/org/junit/platform/commons/support/AnnotationSupport.html[AnnotationSupport]'
ClassSupport: '{javadoc-root}/org.junit.platform.commons/org/junit/platform/commons/support/ClassSupport.html[ClassSupport]'
ConversionSupport: '{javadoc-root}/org.junit.platform.commons/org/junit/platform/commons/support/conversion/ConversionSupport.html[ConversionSupport]'
ModifierSupport: '{javadoc-root}/org.junit.platform.commons/org/junit/platform/commons/support/ModifierSupport.html[ModifierSupport]'
ReflectionSupport: '{javadoc-root}/org.junit.platform.commons/org/junit/platform/commons/support/ReflectionSupport.html[ReflectionSupport]'
Testable: '{javadoc-root}/org.junit.platform.commons/org/junit/platform/commons/annotation/Testable.html[@Testable]'
# Platform Console Launcher
junit-platform-console: '{javadoc-root}/org.junit.platform.console/org/junit/platform/console/package-summary.html[junit-platform-console]'
ConsoleLauncher: '{javadoc-root}/org.junit.platform.console/org/junit/platform/console/ConsoleLauncher.html[ConsoleLauncher]'
# Platform Engine
junit-platform-engine: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/package-summary.html[junit-platform-engine]'
junit-platform-engine-support-discovery: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/support/discovery/package-summary.html[org.junit.platform.engine.support.discovery]'
CancellationToken: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/CancellationToken.html[CancellationToken]'
ClasspathResourceSelector: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/ClasspathResourceSelector.html[ClasspathResourceSelector]'
ClasspathRootSelector: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/ClasspathRootSelector.html[ClasspathRootSelector]'
ClassSelector: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/ClassSelector.html[ClassSelector]'
DiscoveryIssue: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/DiscoveryIssue.html[DiscoveryIssue]'
DiscoveryIssueReporter: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/support/discovery/DiscoveryIssueReporter.html[DiscoveryIssueReporter]'
DirectorySelector: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/DirectorySelector.html[DirectorySelector]'
DiscoverySelectors: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/DiscoverySelectors.html[DiscoverySelectors]'
DiscoverySelectors_selectClasspathResource: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/DiscoverySelectors.html#selectClasspathResource(java.lang.String)[selectClasspathResource]'
DiscoverySelectors_selectClasspathRoots: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/DiscoverySelectors.html#selectClasspathRoots(java.util.Set)[selectClasspathRoots]'
DiscoverySelectors_selectClass: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/DiscoverySelectors.html#selectClass(java.lang.String)[selectClass]'
DiscoverySelectors_selectDirectory: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/DiscoverySelectors.html#selectDirectory(java.lang.String)[selectDirectory]'
DiscoverySelectors_selectFile: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/DiscoverySelectors.html#selectFile(java.lang.String)[selectFile]'
DiscoverySelectors_selectIteration: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/DiscoverySelectors.html#selectIteration(org.junit.platform.engine.DiscoverySelector,int\...)[selectIteration]'
DiscoverySelectors_selectMethod: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/DiscoverySelectors.html#selectMethod(java.lang.String)[selectMethod]'
DiscoverySelectors_selectModule: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/DiscoverySelectors.html#selectModule(java.lang.String)[selectModule]'
DiscoverySelectors_selectNestedClass: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/DiscoverySelectors.html#selectNestedClass(java.util.List,java.lang.Class)[selectNestedClass]'
DiscoverySelectors_selectNestedMethod: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/DiscoverySelectors.html#selectNestedMethod(java.util.List,java.lang.Class,java.lang.String)[selectNestedMethod]'
DiscoverySelectors_selectPackage: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/DiscoverySelectors.html#selectPackage(java.lang.String)[selectPackage]'
DiscoverySelectors_selectUniqueId: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/DiscoverySelectors.html#selectUniqueId(java.lang.String)[selectUniqueId]'
DiscoverySelectors_selectUri: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/DiscoverySelectors.html#selectUri(java.lang.String)[selectUri]'
EngineDiscoveryListener: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/EngineDiscoveryListener.html[EngineDiscoveryListener]'
EngineDiscoveryRequest: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/EngineDiscoveryRequest.html[EngineDiscoveryRequest]'
FileSelector: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/FileSelector.html[FileSelector]'
HierarchicalTestEngine: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/support/hierarchical/HierarchicalTestEngine.html[HierarchicalTestEngine]'
IterationSelector: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/IterationSelector.html[IterationSelector]'
MethodSelector: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/MethodSelector.html[MethodSelector]'
ModuleSelector: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/ModuleSelector.html[ModuleSelector]'
NamespacedHierarchicalStore: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/support/store/NamespacedHierarchicalStore.html[NamespacedHierarchicalStore]'
NestedClassSelector: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/NestedClassSelector.html[NestedClassSelector]'
NestedMethodSelector: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/NestedMethodSelector.html[NestedMethodSelector]'
OutputDirectoryCreator: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/OutputDirectoryCreator.html[OutputDirectoryCreator]'
PackageSelector: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/PackageSelector.html[PackageSelector]'
ParallelExecutionConfigurationStrategy: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/support/hierarchical/ParallelExecutionConfigurationStrategy.html[ParallelExecutionConfigurationStrategy]'
UniqueIdSelector: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/UniqueIdSelector.html[UniqueIdSelector]'
UriSelector: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/discovery/UriSelector.html[UriSelector]'
TestEngine: '{javadoc-root}/org.junit.platform.engine/org/junit/platform/engine/TestEngine.html[TestEngine]'
# Platform Launcher API
junit-platform-launcher: '{javadoc-root}/org.junit.platform.launcher/org/junit/platform/launcher/package-summary.html[junit-platform-launcher]'
DiscoveryIssueException: '{javadoc-root}/org.junit.platform.launcher/org/junit/platform/launcher/core/DiscoveryIssueException.html[DiscoveryIssueException]'
Launcher: '{javadoc-root}/org.junit.platform.launcher/org/junit/platform/launcher/Launcher.html[Launcher]'
LauncherConfig: '{javadoc-root}/org.junit.platform.launcher/org/junit/platform/launcher/core/LauncherConfig.html[LauncherConfig]'
LauncherDiscoveryListener: '{javadoc-root}/org.junit.platform.launcher/org/junit/platform/launcher/LauncherDiscoveryListener.html[LauncherDiscoveryListener]'
LauncherDiscoveryRequest: '{javadoc-root}/org.junit.platform.launcher/org/junit/platform/launcher/LauncherDiscoveryRequest.html[LauncherDiscoveryRequest]'
LauncherDiscoveryRequestBuilder: '{javadoc-root}/org.junit.platform.launcher/org/junit/platform/launcher/core/LauncherDiscoveryRequestBuilder.html[LauncherDiscoveryRequestBuilder]'
LauncherExecutionRequest: '{javadoc-root}/org.junit.platform.launcher/org/junit/platform/launcher/LauncherExecutionRequest.html[LauncherExecutionRequest]'
LauncherExecutionRequestBuilder: '{javadoc-root}/org.junit.platform.launcher/org/junit/platform/launcher/core/LauncherExecutionRequestBuilder.html[LauncherExecutionRequestBuilder]'
LauncherFactory: '{javadoc-root}/org.junit.platform.launcher/org/junit/platform/launcher/core/LauncherFactory.html[LauncherFactory]'
LauncherInterceptor: '{javadoc-root}/org.junit.platform.launcher/org/junit/platform/launcher/LauncherInterceptor.html[LauncherInterceptor]'
LauncherSession: '{javadoc-root}/org.junit.platform.launcher/org/junit/platform/launcher/LauncherSession.html[LauncherSession]'
LauncherSessionListener: '{javadoc-root}/org.junit.platform.launcher/org/junit/platform/launcher/LauncherSessionListener.html[LauncherSessionListener]'
LoggingListener: '{javadoc-root}/org.junit.platform.launcher/org/junit/platform/launcher/listeners/LoggingListener.html[LoggingListener]'
PostDiscoveryFilter: '{javadoc-root}/org.junit.platform.launcher/org/junit/platform/launcher/PostDiscoveryFilter.html[PostDiscoveryFilter]'
SummaryGeneratingListener: '{javadoc-root}/org.junit.platform.launcher/org/junit/platform/launcher/listeners/SummaryGeneratingListener.html[SummaryGeneratingListener]'
TestExecutionListener: '{javadoc-root}/org.junit.platform.launcher/org/junit/platform/launcher/TestExecutionListener.html[TestExecutionListener]'
TestPlan: '{javadoc-root}/org.junit.platform.launcher/org/junit/platform/launcher/TestPlan.html[TestPlan]'
UniqueIdTrackingListener: '{javadoc-root}/org.junit.platform.launcher/org/junit/platform/launcher/listeners/UniqueIdTrackingListener.html[UniqueIdTrackingListener]'
# Platform Reporting
LegacyXmlReportGeneratingListener: '{javadoc-root}/org.junit.platform.reporting/org/junit/platform/reporting/legacy/xml/LegacyXmlReportGeneratingListener.html[LegacyXmlReportGeneratingListener]'
OpenTestReportGeneratingListener: '{javadoc-root}/org.junit.platform.reporting/org/junit/platform/reporting/open/xml/OpenTestReportGeneratingListener.html[OpenTestReportGeneratingListener]'
# Platform Suite
suite-api-package: '{javadoc-root}/org.junit.platform.suite.api/org/junit/platform/suite/api/package-summary.html[org.junit.platform.suite.api]'
junit-platform-suite-engine: '{javadoc-root}/org.junit.platform.suite.engine/org/junit/platform/suite/engine/package-summary.html[junit-platform-suite-engine]'
Select: '{javadoc-root}/org.junit.platform.suite.api/org/junit/platform/suite/api/Select.html[@Select]'
SelectClasspathResource: '{javadoc-root}/org.junit.platform.suite.api/org/junit/platform/suite/api/SelectClasspathResource.html[@SelectClasspathResource]'
SelectClasses: '{javadoc-root}/org.junit.platform.suite.api/org/junit/platform/suite/api/SelectClasses.html[@SelectClasses]'
SelectDirectories: '{javadoc-root}/org.junit.platform.suite.api/org/junit/platform/suite/api/SelectDirectories.html[@SelectDirectories]'
SelectFile: '{javadoc-root}/org.junit.platform.suite.api/org/junit/platform/suite/api/SelectFile.html[@SelectFile]'
SelectMethod: '{javadoc-root}/org.junit.platform.suite.api/org/junit/platform/suite/api/SelectMethod.html[@SelectMethod]'
SelectModules: '{javadoc-root}/org.junit.platform.suite.api/org/junit/platform/suite/api/SelectModules.html[@SelectModules]'
SelectPackages: '{javadoc-root}/org.junit.platform.suite.api/org/junit/platform/suite/api/SelectPackages.html[@SelectPackages]'
SelectUris: '{javadoc-root}/org.junit.platform.suite.api/org/junit/platform/suite/api/SelectUris.html[@SelectUris]'
# Platform Test Kit
testkit-engine-package: '{javadoc-root}/org.junit.platform.testkit/org/junit/platform/testkit/engine/package-summary.html[org.junit.platform.testkit.engine]'
EngineExecutionResults: '{javadoc-root}/org.junit.platform.testkit/org/junit/platform/testkit/engine/EngineExecutionResults.html[EngineExecutionResults]'
EngineTestKit: '{javadoc-root}/org.junit.platform.testkit/org/junit/platform/testkit/engine/EngineTestKit.html[EngineTestKit]'
Event: '{javadoc-root}/org.junit.platform.testkit/org/junit/platform/testkit/engine/Event.html[Event]'
EventConditions: '{javadoc-root}/org.junit.platform.testkit/org/junit/platform/testkit/engine/EventConditions.html[EventConditions]'
Events: '{javadoc-root}/org.junit.platform.testkit/org/junit/platform/testkit/engine/Events.html[Events]'
EventStatistics: '{javadoc-root}/org.junit.platform.testkit/org/junit/platform/testkit/engine/EventStatistics.html[EventStatistics]'
EventType: '{javadoc-root}/org.junit.platform.testkit/org/junit/platform/testkit/engine/EventType.html[EventType]'
Executions: '{javadoc-root}/org.junit.platform.testkit/org/junit/platform/testkit/engine/Executions.html[Executions]'
TerminationInfo: '{javadoc-root}/org.junit.platform.testkit/org/junit/platform/testkit/engine/TerminationInfo.html[TerminationInfo]'
TestExecutionResultConditions: '{javadoc-root}/org.junit.platform.testkit/org/junit/platform/testkit/engine/TestExecutionResultConditions.html[TestExecutionResultConditions]'
# Jupiter Core API
api-package: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/package-summary.html[org.junit.jupiter.api]'
Assertions: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/Assertions.html[org.junit.jupiter.api.Assertions]'
Assumptions: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/Assumptions.html[org.junit.jupiter.api.Assumptions]'
AutoClose: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/AutoClose.html[@AutoClose]'
ClassOrderer_ClassName: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/ClassOrderer.ClassName.html[ClassOrderer.ClassName]'
ClassOrderer_Default: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/ClassOrderer.Default.html[ClassOrderer.Default]'
ClassOrderer_DisplayName: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/ClassOrderer.DisplayName.html[ClassOrderer.DisplayName]'
ClassOrderer_OrderAnnotation: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/ClassOrderer.OrderAnnotation.html[ClassOrderer.OrderAnnotation]'
ClassOrderer_Random: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/ClassOrderer.Random.html[ClassOrderer.Random]'
ClassOrderer: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/ClassOrderer.html[ClassOrderer]'
ClassTemplate: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/ClassTemplate.html[@ClassTemplate]'
Disabled: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/Disabled.html[@Disabled]'
MethodOrderer_Default: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/MethodOrderer.Default.html[MethodOrderer.Default]'
MethodOrderer_DisplayName: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/MethodOrderer.DisplayName.html[MethodOrderer.DisplayName]'
MethodOrderer_MethodName: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/MethodOrderer.MethodName.html[MethodOrderer.MethodName]'
MethodOrderer_OrderAnnotation: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/MethodOrderer.OrderAnnotation.html[MethodOrderer.OrderAnnotation]'
MethodOrderer_Random: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/MethodOrderer.Random.html[MethodOrderer.Random]'
MethodOrderer: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/MethodOrderer.html[MethodOrderer]'
Named: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/Named.html[Named]'
Order: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/Order.html[@Order]'
RepetitionInfo: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/RepetitionInfo.html[RepetitionInfo]'
TestInfo: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/TestInfo.html[TestInfo]'
TestClassOrder: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/TestClassOrder.html[@TestClassOrder]'
TestMethodOrder: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/TestMethodOrder.html[@TestMethodOrder]'
TestReporter: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/TestReporter.html[TestReporter]'
TestTemplate: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/TestTemplate.html[@TestTemplate]'
# @DefaultLocale and @DefaultTimeZone
DefaultLocale: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/util/DefaultLocale.html[@DefaultLocale]'
DefaultTimeZone: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/util/DefaultTimeZone.html[@DefaultTimeZone]'
LocaleProvider: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/util/LocaleProvider.html[LocaleProvider]'
TimeZoneProvider: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/util/TimeZoneProvider.html[TimeZoneProvider]'
ReadsDefaultLocale: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/util/ReadsDefaultLocale.html[@ReadsDefaultLocale]'
ReadsDefaultTimeZone: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/util/ReadsDefaultTimeZone.html[@ReadsDefaultTimeZone]'
WritesDefaultLocale: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/util/WritesDefaultLocale.html[@WritesDefaultLocale]'
WritesDefaultTimeZone: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/util/WritesDefaultTimeZone.html[@WritesDefaultTimeZone]'
# System Property Extensions
ClearSystemProperty: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/util/ClearSystemProperty.html[@ClearSystemProperty]'
SetSystemProperty: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/util/SetSystemProperty.html[@SetSystemProperty]'
RestoreSystemProperties: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/util/RestoreSystemProperties.html[@RestoreSystemProperties]'
ReadsSystemProperty: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/util/ReadsSystemProperty.html[@ReadsSystemProperty]'
WritesSystemProperty: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/util/WritesSystemProperty.html[@WritesSystemProperty]'
# Jupiter Parallel API
Execution: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/parallel/Execution.html[@Execution]'
Isolated: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/parallel/Isolated.html[@Isolated]'
ResourceLock: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/parallel/ResourceLock.html[@ResourceLock]'
ResourceLockTarget: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/parallel/ResourceLockTarget.html[ResourceLockTarget]'
ResourceLocksProvider: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/parallel/ResourceLocksProvider.html[ResourceLocksProvider]'
Resources: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/parallel/Resources.html[Resources]'
# Jupiter Extension APIs
extension-api-package: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/package-summary.html[org.junit.jupiter.api.extension]'
AfterAllCallback: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/AfterAllCallback.html[AfterAllCallback]'
AfterClassTemplateInvocationCallback: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/AfterClassTemplateInvocationCallback.html[AfterClassTemplateInvocationCallback]'
AfterEachCallback: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/AfterEachCallback.html[AfterEachCallback]'
AfterTestExecutionCallback: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/AfterTestExecutionCallback.html[AfterTestExecutionCallback]'
ParameterContext: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/ParameterContext.html[ParameterContext]'
BeforeAllCallback: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/BeforeAllCallback.html[BeforeAllCallback]'
BeforeClassTemplateInvocationCallback: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/BeforeClassTemplateInvocationCallback.html[BeforeClassTemplateInvocationCallback]'
BeforeEachCallback: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/BeforeEachCallback.html[BeforeEachCallback]'
BeforeTestExecutionCallback: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/BeforeTestExecutionCallback.html[BeforeTestExecutionCallback]'
ClassTemplateInvocationContext: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/ClassTemplateInvocationContext.html[ClassTemplateInvocationContext]'
ClassTemplateInvocationContextProvider: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/ClassTemplateInvocationContextProvider.html[ClassTemplateInvocationContextProvider]'
ExecutableInvoker: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/ExecutableInvoker.html[ExecutableInvoker]'
ExecutionCondition: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/ExecutionCondition.html[ExecutionCondition]'
ExtendWith: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/ExtendWith.html[@ExtendWith]'
ExtensionContext: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/ExtensionContext.html[ExtensionContext]'
ExtensionContext_Store: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/ExtensionContext.Store.html[Store]'
ExtensionContext_StoreScope: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/ExtensionContext.StoreScope.html[StoreScope]'
InvocationInterceptor: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/InvocationInterceptor.html[InvocationInterceptor]'
LifecycleMethodExecutionExceptionHandler: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/LifecycleMethodExecutionExceptionHandler.html[LifecycleMethodExecutionExceptionHandler]'
ParameterResolver: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/ParameterResolver.html[ParameterResolver]'
RegisterExtension: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/RegisterExtension.html[@RegisterExtension]'
TestExecutionExceptionHandler: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/TestExecutionExceptionHandler.html[TestExecutionExceptionHandler]'
TestInstanceFactory: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/TestInstanceFactory.html[TestInstanceFactory]'
TestInstancePostProcessor: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/TestInstancePostProcessor.html[TestInstancePostProcessor]'
TestInstancePreConstructCallback: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/TestInstancePreConstructCallback.html[TestInstancePreConstructCallback]'
TestInstancePreDestroyCallback: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/TestInstancePreDestroyCallback.html[TestInstancePreDestroyCallback]'
TestTemplateInvocationContext: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/TestTemplateInvocationContext.html[TestTemplateInvocationContext]'
TestTemplateInvocationContextProvider: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/TestTemplateInvocationContextProvider.html[TestTemplateInvocationContextProvider]'
TestWatcher: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/TestWatcher.html[TestWatcher]'
PreInterruptCallback: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/extension/PreInterruptCallback.html[PreInterruptCallback]'
# Jupiter Conditions
DisabledForJreRange: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/condition/DisabledForJreRange.html[@DisabledForJreRange]'
DisabledIf: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/condition/DisabledIf.html[@DisabledIf]'
DisabledIfEnvironmentVariable: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/condition/DisabledIfEnvironmentVariable.html[@DisabledIfEnvironmentVariable]'
DisabledIfSystemProperty: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/condition/DisabledIfSystemProperty.html[@DisabledIfSystemProperty]'
DisabledInNativeImage: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/condition/DisabledInNativeImage.html[@DisabledInNativeImage]'
DisabledOnJre: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/condition/DisabledOnJre.html[@DisabledOnJre]'
DisabledOnOs: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/condition/DisabledOnOs.html[@DisabledOnOs]'
EnabledForJreRange: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/condition/EnabledForJreRange.html[@EnabledForJreRange]'
EnabledIf: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/condition/EnabledIf.html[@EnabledIf]'
EnabledIfEnvironmentVariable: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/condition/EnabledIfEnvironmentVariable.html[@EnabledIfEnvironmentVariable]'
EnabledIfSystemProperty: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/condition/EnabledIfSystemProperty.html[@EnabledIfSystemProperty]'
EnabledInNativeImage: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/condition/EnabledInNativeImage.html[@EnabledInNativeImage]'
EnabledOnJre: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/condition/EnabledOnJre.html[@EnabledOnJre]'
EnabledOnOs: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/condition/EnabledOnOs.html[@EnabledOnOs]'
JRE: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/condition/JRE.html[JRE]'
# Jupiter I/O
TempDir: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/io/TempDir.html[@TempDir]'
TempDirDeletionStrategy: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/io/TempDirDeletionStrategy.html[TempDirDeletionStrategy]'
TempDirDeletionStrategyIgnoreFailures: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/io/TempDirDeletionStrategy.IgnoreFailures.html[IgnoreFailures]'
TempDirDeletionStrategyStandard: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/io/TempDirDeletionStrategy.Standard.html[Standard]'
TempDirFactory: '{javadoc-root}/org.junit.jupiter.api/org/junit/jupiter/api/io/TempDirFactory.html[TempDirFactory]'
# Jupiter Params
params-provider-package: '{javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/provider/package-summary.html[org.junit.jupiter.params.provider]'
AfterParameterizedClassInvocation: '{javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/AfterParameterizedClassInvocation.html[@AfterParameterizedClassInvocation]'
AnnotationBasedArgumentConverter: '{javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/converter/AnnotationBasedArgumentConverter.html[AnnotationBasedArgumentConverter]'
AnnotationBasedArgumentsProvider: '{javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/provider/AnnotationBasedArgumentsProvider.html[AnnotationBasedArgumentsProvider]'
AggregateWith: '{javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/aggregator/AggregateWith.html[@AggregateWith]'
Arguments: '{javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/provider/Arguments.html[Arguments]'
ArgumentsProvider: '{javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/provider/ArgumentsProvider.html[ArgumentsProvider]'
ArgumentsAccessor: '{javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/aggregator/ArgumentsAccessor.html[ArgumentsAccessor]'
ArgumentsAggregator: '{javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/aggregator/ArgumentsAggregator.html[ArgumentsAggregator]'
ArgumentConverter: '{javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/converter/ArgumentConverter.html[ArgumentConverter]'
BeforeParameterizedClassInvocation: '{javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/BeforeParameterizedClassInvocation.html[@BeforeParameterizedClassInvocation]'
CsvArgumentsProvider: '{junit-framework-repo}/blob/main/junit-jupiter-params/src/main/java/org/junit/jupiter/params/provider/CsvArgumentsProvider.java[CsvArgumentsProvider]'
EmptySource: '{javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/provider/EmptySource.html[@EmptySource]'
FieldSource: '{javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/provider/FieldSource.html[@FieldSource]'
MethodSource: '{javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/provider/MethodSource.html[@MethodSource]'
NullAndEmptySource: '{javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/provider/NullAndEmptySource.html[@NullAndEmptySource]'
NullSource: '{javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/provider/NullSource.html[@NullSource]'
Parameter: '{javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/Parameter.html[@Parameter]'
ParameterizedClass: '{javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/ParameterizedClass.html[@ParameterizedClass]'
ParameterizedTest: '{javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/ParameterizedTest.html[@ParameterizedTest]'
ParameterInfo: '{javadoc-root}/org.junit.jupiter.params/org/junit/jupiter/params/ParameterInfo.html[ParameterInfo]'
ValueArgumentsProvider: '{junit-framework-repo}/blob/main/junit-jupiter-params/src/main/java/org/junit/jupiter/params/provider/ValueArgumentsProvider.java[ValueArgumentsProvider]'
# Jupiter Engine
junit-jupiter-engine: '{javadoc-root}/org.junit.jupiter.engine/org/junit/jupiter/engine/package-summary.html[junit-jupiter-engine]'
# Jupiter Extension Implementations
AutoCloseExtension: '{current-branch}/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/extension/AutoCloseExtension.java[AutoCloseExtension]'
DisabledCondition: '{current-branch}/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/extension/DisabledCondition.java[DisabledCondition]'
RepetitionExtension: '{current-branch}/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/extension/RepetitionExtension.java[RepetitionExtension]'
TempDirectory: '{current-branch}/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/extension/TempDirectory.java[TempDirectory]'
TestInfoParameterResolver: '{current-branch}/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/extension/TestInfoParameterResolver.java[TestInfoParameterResolver]'
TestReporterParameterResolver: '{current-branch}/junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/extension/TestReporterParameterResolver.java[TestReporterParameterResolver]'
TypeBasedParameterResolver: '{current-branch}/junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/support/TypeBasedParameterResolver.java[TypeBasedParameterResolver]'
# Jupiter Examples
CustomAnnotationParameterResolver: '{current-branch}/jupiter-tests/src/test/java/org/junit/jupiter/engine/execution/injection/sample/CustomAnnotationParameterResolver.java[CustomAnnotationParameterResolver]'
CustomTypeParameterResolver: '{current-branch}/jupiter-tests/src/test/java/org/junit/jupiter/engine/execution/injection/sample/CustomTypeParameterResolver.java[CustomTypeParameterResolver]'
MapOfListsTypeBasedParameterResolver: '{current-branch}/jupiter-tests/src/test/java/org/junit/jupiter/engine/execution/injection/sample/MapOfListsTypeBasedParameterResolver.java[MapOfListsTypeBasedParameterResolver]'
# Jupiter Migration Support
EnableJUnit4MigrationSupport: '{javadoc-root}/org.junit.jupiter.migrationsupport/org/junit/jupiter/migrationsupport/EnableJUnit4MigrationSupport.html[@EnableJUnit4MigrationSupport]'
EnableRuleMigrationSupport: '{javadoc-root}/org.junit.jupiter.migrationsupport/org/junit/jupiter/migrationsupport/rules/EnableRuleMigrationSupport.html[@EnableRuleMigrationSupport]'
# JUnit Start
JUnit: '{javadoc-root}/org.junit.start/org/junit/start/JUnit.html[JUnit]'
# Vintage
junit-vintage-engine: '{javadoc-root}/org.junit.vintage.engine/org/junit/vintage/engine/package-summary.html[junit-vintage-engine]'
# Examples Repository
junit-examples-repo: '{junit-team}/junit-examples'
junit-jupiter-starter-ant: '{junit-examples-repo}/tree/{release-branch}/junit-jupiter-starter-ant[junit-jupiter-starter-ant]'
junit-jupiter-starter-bazel: '{junit-examples-repo}/tree/{release-branch}/junit-jupiter-starter-bazel[junit-jupiter-starter-bazel]'
junit-jupiter-starter-gradle-groovy: '{junit-examples-repo}/tree/{release-branch}/junit-jupiter-starter-gradle-groovy[junit-jupiter-starter-gradle-groovy]'
junit-jupiter-starter-gradle-kotlin: '{junit-examples-repo}/tree/{release-branch}/junit-jupiter-starter-gradle-kotlin[junit-jupiter-starter-gradle-kotlin]'
junit-jupiter-starter-gradle: '{junit-examples-repo}/tree/{release-branch}/junit-jupiter-starter-gradle[junit-jupiter-starter-gradle]'
junit-jupiter-starter-maven: '{junit-examples-repo}/tree/{release-branch}/junit-jupiter-starter-maven[junit-jupiter-starter-maven]'
junit-jupiter-starter-sbt: '{junit-examples-repo}/tree/{release-branch}/junit-jupiter-starter-sbt[junit-jupiter-starter-sbt]'
# Third-party Links
API: 'https://apiguardian-team.github.io/apiguardian/docs/current/api/[@API]'
API_Guardian: 'https://github.com/apiguardian-team/apiguardian[@API Guardian]'
AssertJ: 'https://assertj.github.io/doc/[AssertJ]'
Checkstyle: 'https://checkstyle.sourceforge.io[Checkstyle]'
DiscussionsQA: 'https://github.com/junit-team/junit-framework/discussions/categories/q-a'
Hamcrest: 'https://hamcrest.org/JavaHamcrest/[Hamcrest]'
Jimfs: 'https://google.github.io/jimfs/[Jimfs]'
Log4j: 'https://logging.apache.org/log4j/2.x/[Log4j]'
Log4j_JDK_Logging_Adapter: 'https://logging.apache.org/log4j/2.x/log4j-jul/index.html[Log4j JDK Logging Adapter]'
Logback: 'https://logback.qos.ch/[Logback]'
LogManager: 'https://docs.oracle.com/en/java/javase/17/docs/api/java.logging/java/util/logging/LogManager.html[LogManager]'
Maven_Central: 'https://central.sonatype.com/[Maven Central]'
MockitoExtension: 'https://github.com/mockito/mockito/blob/release/2.x/subprojects/junit-jupiter/src/main/java/org/mockito/junit/jupiter/MockitoExtension.java[MockitoExtension]'
ServiceLoader: '{jdk-javadoc-base-url}/java.base/java/util/ServiceLoader.html[ServiceLoader]'
SpringExtension: 'https://github.com/spring-projects/spring-framework/tree/HEAD/spring-test/src/main/java/org/springframework/test/context/junit/jupiter/SpringExtension.java[SpringExtension]'
StackOverflow: 'https://stackoverflow.com/questions/tagged/junit5[Stack Overflow]'
Truth: 'https://truth.dev/[Truth]'
OpenTestReporting: 'https://github.com/ota4j-team/open-test-reporting[Open Test Reporting]'
OpenTestReportingCliTool: 'https://github.com/ota4j-team/open-test-reporting#cli-tool-for-validation-and-format-conversion[Open Test Reporting CLI Tool]'
================================================
FILE: documentation/documentation.gradle.kts
================================================
import junitbuild.exec.CaptureJavaExecOutput
import junitbuild.exec.ClasspathSystemPropertyProvider
import junitbuild.exec.GenerateStandaloneConsoleLauncherShadowedArtifactsFile
import junitbuild.exec.RunConsoleLauncher
import junitbuild.extensions.isSnapshot
import junitbuild.extensions.javaModuleName
import junitbuild.javadoc.JavadocValuesOption
import junitbuild.javadoc.ModuleSpecificJavadocFileOption
import junitbuild.javadoc.VersionNumber
import org.gradle.api.tasks.PathSensitivity.RELATIVE
import java.nio.file.Files
import kotlin.io.path.writeLines
plugins {
alias(libs.plugins.plantuml)
id("junitbuild.antora-conventions")
id("junitbuild.build-parameters")
id("junitbuild.kotlin-library-conventions")
id("junitbuild.testing-conventions")
}
val mavenizedProjects: List<Project> by rootProject
val modularProjects: List<Project> by rootProject
// Because we need to set up Javadoc aggregation
modularProjects.forEach { evaluationDependsOn(it.path) }
javaLibrary {
mainJavaVersion = JavaVersion.VERSION_17
testJavaVersion = JavaVersion.VERSION_17
}
val apiReport = configurations.dependencyScope("apiReport")
val apiReportClasspath = configurations.resolvable("apiReportClasspath") {
extendsFrom(apiReport.get())
}
val standaloneConsoleLauncher = configurations.dependencyScope("standaloneConsoleLauncher")
val standaloneConsoleLauncherClasspath = configurations.resolvable("standaloneConsoleLauncherClasspath") {
extendsFrom(standaloneConsoleLauncher.get())
}
val attestation = configurations.dependencyScope("attestation")
val attestationClasspath = configurations.resolvable("attestationClasspath") {
extendsFrom(attestation.get())
isTransitive = false
}
val allJavadocSinceValues = configurations.dependencyScope("allJavadocSinceValues")
val allJavadocSinceValuesClasspath = configurations.resolvable("allJavadocSinceValuesClasspath") {
extendsFrom(allJavadocSinceValues.get())
attributes {
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, named("javadoc-since-values"))
}
}
val tools by sourceSets.creating
val toolsImplementation by configurations.getting
dependencies {
implementation(projects.junitJupiterApi) {
because("Jupiter API is used in src/main/java")
}
compileOnlyApi(libs.jspecify)
// Pull in all "modular projects" to ensure that they are included
// in reports generated by the ApiReportGenerator.
modularProjects.forEach { apiReport(it) }
apiReport(libs.openTestReporting.tooling.spi)
modularProjects.forEach { allJavadocSinceValues(it) }
// Pull in all "mavenized projects" to ensure that they are included
// in the generation of build provenance attestation.
mavenizedProjects.forEach { attestation(it) }
testImplementation(projects.junitJupiterMigrationsupport)
testImplementation(projects.junitPlatformConsole)
testImplementation(projects.junitPlatformSuite)
testImplementation(projects.junitPlatformTestkit)
testImplementation(projects.junitVintageEngine)
testImplementation(kotlin("stdlib"))
testImplementation(libs.kotlinx.coroutines.test)
testRuntimeOnly(kotlin("reflect"))
toolsImplementation(projects.junitPlatformCommons)
toolsImplementation(libs.classgraph)
toolsImplementation(libs.apiguardian)
testImplementation(libs.jimfs) {
because("Jimfs is used in src/test/java")
}
standaloneConsoleLauncher(projects.junitPlatformConsoleStandalone)
}
val buildRevision: String by rootProject.extra
val snapshot = version.isSnapshot()
val releaseBranch = if (snapshot) "HEAD" else "r${version}"
val replaceCurrentDocs = buildParameters.documentation.replaceCurrentDocs
val ota4jDocVersion = libs.versions.opentest4j.map { if (it.isSnapshot()) "snapshot" else it }.get()
val apiGuardianDocVersion = libs.versions.apiguardian.map { if (it.isSnapshot()) "snapshot" else it }.get()
val generatedAsciiDocPath = layout.buildDirectory.dir("generated/asciidoc")
val consoleLauncherOptionsFile = generatedAsciiDocPath.map { it.file("console-launcher-options.txt") }
val consoleLauncherDiscoverOptionsFile = generatedAsciiDocPath.map { it.file("console-launcher-discover-options.txt") }
val consoleLauncherExecuteOptionsFile = generatedAsciiDocPath.map { it.file("console-launcher-execute-options.txt") }
val consoleLauncherEnginesOptionsFile = generatedAsciiDocPath.map { it.file("console-launcher-engines-options.txt") }
val experimentalApisTableFile = generatedAsciiDocPath.map { it.file("experimental-apis-table.adoc") }
val deprecatedApisTableFile = generatedAsciiDocPath.map { it.file("deprecated-apis-table.adoc") }
val standaloneConsoleLauncherShadowedArtifactsFile = generatedAsciiDocPath.map { it.file("console-launcher-standalone-shadowed-artifacts.adoc") }
val jdkJavadocBaseUrl = "https://docs.oracle.com/en/java/javase/${JavaVersion.current().majorVersion}/docs/api"
val elementListsDir = layout.buildDirectory.dir("elementLists")
val externalModulesWithoutModularJavadoc = mapOf(
"org.apiguardian.api" to "https://apiguardian-team.github.io/apiguardian/docs/$apiGuardianDocVersion/api/",
"org.assertj.core" to "https://javadoc.io/doc/org.assertj/assertj-core/${libs.versions.assertj.get()}/",
"org.opentest4j" to "https://ota4j-team.github.io/opentest4j/docs/$ota4jDocVersion/api/",
"org.jspecify" to "https://jspecify.dev/docs/api/",
)
require(externalModulesWithoutModularJavadoc.values.all { it.endsWith("/") }) {
"all base URLs must end with a trailing slash: $externalModulesWithoutModularJavadoc"
}
tasks {
val consoleLauncherTestReportsDir = project.layout.buildDirectory.dir("console-launcher-test-results")
val consoleLauncherTestEventXmlFiles =
files(consoleLauncherTestReportsDir.map { it.asFileTree.matching { include("**/open-test-report.xml") } })
val consoleLauncherTest by registering(RunConsoleLauncher::class) {
args.addAll("execute")
args.addAll("--scan-classpath")
args.addAll("--config=junit.platform.reporting.open.xml.enabled=true")
args.addAll("--config=junit.platform.reporting.open.xml.git.enabled=true")
args.addAll("--config=junit.platform.output.capture.stdout=true")
args.addAll("--config=junit.platform.output.capture.stderr=true")
args.addAll("--config=junit.platform.discovery.issue.severity.critical=warning")
outputs.dir(consoleLauncherTestReportsDir)
argumentProviders.add(CommandLineArgumentProvider {
listOf(
"--reports-dir=${consoleLauncherTestReportsDir.get()}",
)
})
args.addAll("--include-classname", ".*Tests")
args.addAll("--include-classname", ".*Demo")
args.addAll("--exclude-tag", "exclude")
args.addAll("--exclude-tag", "timeout")
doFirst {
consoleLauncherTestReportsDir.get().asFile.deleteRecursively()
}
finalizedBy(generateOpenTestHtmlReport)
}
generateOpenTestHtmlReport {
mustRunAfter(consoleLauncherTest)
inputs.files(consoleLauncherTestEventXmlFiles).withPathSensitivity(RELATIVE).skipWhenEmpty()
argumentProviders += CommandLineArgumentProvider {
consoleLauncherTestEventXmlFiles.files.map { it.absolutePath }.toList()
}
}
register<RunConsoleLauncher>("consoleLauncher") {
hideOutput = false
outputs.upToDateWhen { false }
}
test {
include("**/*Demo.class")
(options as JUnitPlatformOptions).apply {
includeEngines("junit-vintage")
includeTags("timeout")
systemProperty("junit.platform.discovery.issue.severity.critical", "warning")
}
}
check {
dependsOn(consoleLauncherTest)
}
named<JavaCompile>(tools.compileJavaTaskName) {
options.release.set(25)
}
named<Checkstyle>("checkstyleTools") {
config = resources.text.fromFile(checkstyle.configDirectory.file("checkstyleMain.xml"))
}
val generateConsoleLauncherOptions by registering(CaptureJavaExecOutput::class) {
classpath.from(standaloneConsoleLauncherClasspath)
mainClass = "org.junit.platform.console.ConsoleLauncher"
args.addAll("--help", "--disable-banner")
outputFile = consoleLauncherOptionsFile
}
val generateConsoleLauncherDiscoverOptions by registering(CaptureJavaExecOutput::class) {
classpath.from(standaloneConsoleLauncherClasspath)
mainClass = "org.junit.platform.console.ConsoleLauncher"
args.addAll("discover", "--help", "--disable-banner")
outputFile = consoleLauncherDiscoverOptionsFile
}
val generateConsoleLauncherExecuteOptions by registering(CaptureJavaExecOutput::class) {
classpath.from(standaloneConsoleLauncherClasspath)
mainClass = "org.junit.platform.console.ConsoleLauncher"
args.addAll("execute", "--help", "--disable-banner")
outputFile = consoleLauncherExecuteOptionsFile
}
val generateConsoleLauncherEnginesOptions by registering(CaptureJavaExecOutput::class) {
classpath.from(standaloneConsoleLauncherClasspath)
mainClass = "org.junit.platform.console.ConsoleLauncher"
args.addAll("engines", "--help", "--disable-banner")
outputFile = consoleLauncherEnginesOptionsFile
}
val generateApiTables by registering(JavaExec::class) {
classpath = tools.runtimeClasspath
mainClass = "org.junit.api.tools.ApiReportGenerator"
systemProperty("api.moduleNames", modularProjects.map { it.javaModuleName }.sorted().joinToString(","))
jvmArgumentProviders += ClasspathSystemPropertyProvider("api.modulePath", apiReportClasspath.get())
argumentProviders += CommandLineArgumentProvider {
listOf(
"DEPRECATED=${deprecatedApisTableFile.get().asFile.absolutePath}",
"EXPERIMENTAL=${experimentalApisTableFile.get().asFile.absolutePath}",
)
}
outputs.cacheIf { true }
outputs.file(deprecatedApisTableFile)
outputs.file(experimentalApisTableFile)
}
val generateStandaloneConsoleLauncherShadowedArtifactsFile by registering(GenerateStandaloneConsoleLauncherShadowedArtifactsFile::class) {
inputJar.fileProvider(standaloneConsoleLauncherClasspath.flatMap { it.elements.map { it.single().asFile } })
outputFile = standaloneConsoleLauncherShadowedArtifactsFile
}
plantUml {
fileFormat = "SVG"
outputs.cacheIf { true }
}
val plantUmlOutputDirectory = plantUml.flatMap { it.outputDirectory }
val generateAsciidocInputs by registering {
dependsOn(
generateConsoleLauncherOptions,
generateConsoleLauncherDiscoverOptions,
generateConsoleLauncherExecuteOptions,
generateConsoleLauncherEnginesOptions,
generateApiTables,
generateStandaloneConsoleLauncherShadowedArtifactsFile,
plantUmlOutputDirectory
)
}
val downloadJavadocElementLists by registering {
outputs.cacheIf { true }
outputs.dir(elementListsDir).withPropertyName("elementListsDir")
inputs.property("externalModulesWithoutModularJavadoc", externalModulesWithoutModularJavadoc)
doFirst {
externalModulesWithoutModularJavadoc.forEach { (moduleName, baseUrl) ->
val resource = resources.text.fromUri("${baseUrl}element-list")
elementListsDir.get().asFile.resolve(moduleName).apply {
mkdir()
resolve("element-list").writeText("module:$moduleName\n${resource.asString()}")
}
}
}
}
val mergeJavadocSinceValues by registering {
inputs.files(allJavadocSinceValuesClasspath).withPathSensitivity(PathSensitivity.NONE)
val outputFile = layout.buildDirectory.file("docs/aggregated-javadoc-since-values.txt")
outputs.file(outputFile)
outputs.cacheIf { true }
doFirst {
val initialVersions = setOf("1.0", "4.12", "5.0")
val noPublicItems = setOf("1.3.1", "5.0.3", "5.4.1", "5.11.3")
val excludes = initialVersions + noPublicItems
val values = allJavadocSinceValuesClasspath.get().files.asSequence()
.flatMap { it.readLines().asSequence() }
.filter { it.isNotBlank() && it !in excludes }
.sortedBy { VersionNumber(it) }
.distinct()
with(outputFile.get().asFile.toPath()) {
Files.createDirectories(parent)
writeLines(values)
}
}
}
val aggregateJavadocs by registering(Javadoc::class) {
dependsOn(modularProjects.map { it.tasks.jar })
dependsOn(downloadJavadocElementLists)
group = "Documentation"
description = "Generates aggregated Javadocs"
title = "JUnit $version API"
val additionalStylesheetFile = "src/javadoc/junit-stylesheet.css"
inputs.file(additionalStylesheetFile)
val overviewFile = "src/javadoc/junit-overview.html"
inputs.file(overviewFile)
options {
memberLevel = JavadocMemberLevel.PROTECTED
header = rootProject.description
encoding = "UTF-8"
locale = "en"
overview = overviewFile
jFlags("-Xmx1g")
this as StandardJavadocDocletOptions
splitIndex(true)
addBooleanOption("Xdoclint:all,-missing", true)
addBooleanOption("Werror", true)
addBooleanOption("html5", true)
addMultilineStringsOption("tag").value = listOf(
"apiNote:a:API Note:",
"implNote:a:Implementation Note:"
)
links(jdkJavadocBaseUrl)
links("https://junit.org/junit4/javadoc/${libs.versions.junit4.get()}/")
externalModulesWithoutModularJavadoc.forEach { (moduleName, baseUrl) ->
linksOffline(baseUrl, elementListsDir.get().asFile.resolve(moduleName).absolutePath)
}
groups = mapOf(
"Jupiter" to listOf("org.junit.jupiter*"),
"Vintage" to listOf("org.junit.vintage*"),
"Platform" to listOf("org.junit.platform*")
)
addStringOption("-add-stylesheet", additionalStylesheetFile)
addBooleanOption("-no-fonts", true)
use(true)
noTimestamp(true)
addStringsOption("-module", ",").value = modularProjects.map { it.javaModuleName }
addOption(ModuleSpecificJavadocFileOption("-module-source-path", modularProjects.associate { project ->
project.javaModuleName to provider {
files(
project.sourceSets.named { it.startsWith("main") }.map {
it.allJava.srcDirs.filter { it.exists() }
}
).asPath
}
}))
addStringOption("-add-modules", "info.picocli,org.opentest4j.reporting.events,de.siegmar.fastcsv")
addOption(ModuleSpecificJavadocFileOption("-add-reads", mapOf(
"org.junit.platform.console" to provider { "info.picocli" },
"org.junit.platform.reporting" to provider { "org.opentest4j.reporting.events" },
"org.junit.jupiter.params" to provider { "de.siegmar.fastcsv" }
)))
val javadocSinceValuesFile: Provider<File> = mergeJavadocSinceValues.map { it.outputs.files.singleFile }
inputs.file(javadocSinceValuesFile)
.withPathSensitivity(PathSensitivity.NONE)
.withPropertyName("javadoc-since-values-file")
addOption(JavadocValuesOption("-since", javadocSinceValuesFile.map { file ->
file.readLines().asSequence().filter { it.isNotBlank() }.toList()
}))
}
source(modularProjects.map { project ->
files(project.sourceSets.named { it.startsWith("main") }.map { it.allJava })
})
classpath = files(modularProjects.map { it.sourceSets.main.get().compileClasspath })
setMaxMemory("1024m")
options.destinationDirectory = layout.buildDirectory.dir("docs/javadoc").get().asFile
}
val fixJavadoc by registering(Copy::class) {
dependsOn(aggregateJavadocs)
group = "Documentation"
description = "Fix links to external API specs in the locally aggregated Javadoc HTML files"
val inputDir = aggregateJavadocs.map { it.destinationDir!! }
inputs.property("externalModulesWithoutModularJavadoc", externalModulesWithoutModularJavadoc)
from(inputDir.map { File(it, "element-list") }) {
// For compatibility with pre JDK 10 versions of the Javadoc tool
rename { "package-list" }
}
from(inputDir) {
filesMatching("**/*.html") {
val favicon =
"""
<link rel="icon" type="image/png" href="https://junit.org/assets/img/junit-diamond.png">
<link rel="icon" type="image/svg+xml" href="https://junit.org/assets/img/junit-diamond-adaptive.svg" sizes="any">
""".trimIndent()
val version = project.version.toString().replace("-SNAPSHOT", "")
val targetUrl = if (buildParameters.ci)
"https://docs.junit.org/$version"
else
project.antora.siteDir.get().asFile.toURI().resolve(version).toString()
filter { line ->
var result = if (line.startsWith("<head>")) line.replace("<head>", "<head>$favicon") else line
externalModulesWithoutModularJavadoc.forEach { (moduleName, baseUrl) ->
result = result.replace("${baseUrl}$moduleName/", baseUrl)
}
result = result.replace("https://docs.junit.org/current", targetUrl)
return@filter result
}
}
filesMatching("**/stylesheet.css") {
// Remove invalid import of `dejavu.css` due to `javadoc --no-fonts`
filter { line -> if (line.startsWith("@import url('fonts/")) null else line }
}
}
into(layout.buildDirectory.dir("docs/fixedJavadoc"))
}
val prepareGitHubAttestation by registering(Sync::class) {
from(attestationClasspath)
into(layout.buildDirectory.dir("attestation"))
rename("(.*)-SNAPSHOT.jar", "$1-SNAPSHOT+${buildRevision.substring(0, 7)}.jar")
}
generateAntoraYml {
asciidocAttributes.putAll(provider {
mapOf(
"version" to project.version,
"junit4-version" to libs.versions.junit4.get(),
"apiguardian-version" to libs.versions.apiguardian.get(),
"ota4j-version" to libs.versions.opentest4j.get(),
"surefire-version" to libs.versions.surefire.get(),
"release-branch" to releaseBranch,
"jdk-javadoc-base-url" to jdkJavadocBaseUrl
)
})
}
generateAntoraResources {
dependsOn(generateAsciidocInputs, fixJavadoc)
}
}
================================================
FILE: documentation/modules/ROOT/extra-site-nav.adoc
================================================
* {javadoc-root}/index.html[Javadoc]
================================================
FILE: documentation/modules/ROOT/images/_source/extensions_BrokenLifecycleMethodConfigDemo.txt
================================================
@Starter(Platform)
Result = JupiterEngine.execute(BrokenLifecycleMethodConfigDemo) {
Extension1.beforeEach()
Extension2.beforeEach()
// @BeforeEach
BrokenLifecycleMethodConfigDemo.insertTestDataIntoDatabase()
// @BeforeEach
BrokenLifecycleMethodConfigDemo.connectToDatabase()
// @Test
BrokenLifecycleMethodConfigDemo.testDatabaseFunctionality()
// @AfterEach
BrokenLifecycleMethodConfigDemo.disconnectFromDatabase()
// @AfterEach
BrokenLifecycleMethodConfigDemo.deleteTestDataFromDatabase()
Extension2.afterEach()
Extension1.afterEach()
}
================================================
FILE: documentation/modules/ROOT/images/_source/extensions_DatabaseTestsDemo.txt
================================================
@Starter(Platform)
Result = JupiterEngine.execute(DatabaseTestsDemo) {
// @BeforeAll (static invocation)
AbstractDatabaseTests.createDatabase()
// @BeforeAll (static invocation)
DatabaseTestsDemo.beforeAll()
Extension1.beforeEach()
Extension2.beforeEach()
// @BeforeEach inherited from AbstractDatabaseTests
DatabaseTestsDemo.connectToDatabase()
// @BeforeEach
DatabaseTestsDemo.insertTestDataIntoDatabase()
// @Test
DatabaseTestsDemo.testDatabaseFunctionality()
// @AfterEach
DatabaseTestsDemo.deleteTestDataFromDatabase()
// @AfterEach inherited from AbstractDatabaseTests
DatabaseTestsDemo.disconnectFromDatabase()
Extension2.afterEach()
Extension1.afterEach()
// @AfterAll (static invocation)
DatabaseTestsDemo.afterAll()
// @AfterAll (static invocation)
AbstractDatabaseTests.destroyDatabase()
}
================================================
FILE: documentation/modules/ROOT/nav.adoc
================================================
* xref:overview.adoc[]
* xref:writing-tests/intro.adoc[]
** xref:writing-tests/annotations.adoc[]
** xref:writing-tests/definitions.adoc[]
** xref:writing-tests/test-classes-and-methods.adoc[]
** xref:writing-tests/display-names.adoc[]
** xref:writing-tests/assertions.adoc[]
** xref:writing-tests/assumptions.adoc[]
** xref:writing-tests/exception-handling.adoc[]
** xref:writing-tests/disabling-tests.adoc[]
** xref:writing-tests/conditional-test-execution.adoc[]
** xref:writing-tests/tagging-and-filtering.adoc[]
** xref:writing-tests/test-execution-order.adoc[]
** xref:writing-tests/test-instance-lifecycle.adoc[]
** xref:writing-tests/nested-tests.adoc[]
** xref:writing-tests/dependency-injection-for-constructors-and-methods.adoc[]
** xref:writing-tests/test-interfaces-and-default-methods.adoc[]
** xref:writing-tests/repeated-tests.adoc[]
** xref:writing-tests/parameterized-classes-and-tests.adoc[]
** xref:writing-tests/class-templates.adoc[]
** xref:writing-tests/test-templates.adoc[]
** xref:writing-tests/dynamic-tests.adoc[]
** xref:writing-tests/timeouts.adoc[]
** xref:writing-tests/parallel-execution.adoc[]
** xref:writing-tests/built-in-extensions.adoc[]
* xref:migrating-from-junit4.adoc[]
* xref:running-tests/intro.adoc[]
** xref:running-tests/ide-support.adoc[]
** xref:running-tests/build-support.adoc[]
** xref:running-tests/console-launcher.adoc[]
** xref:running-tests/source-launcher.adoc[]
** xref:running-tests/discovery-selectors.adoc[]
** xref:running-tests/configuration-parameters.adoc[]
** xref:running-tests/tags.adoc[]
** xref:running-tests/capturing-standard-output-error.adoc[]
** xref:running-tests/using-listeners-and-interceptors.adoc[]
** xref:running-tests/stack-trace-pruning.adoc[]
** xref:running-tests/discovery-issues.adoc[]
* xref:extensions/overview.adoc[]
** xref:extensions/registering-extensions.adoc[]
** xref:extensions/conditional-test-execution.adoc[]
** xref:extensions/test-instance-pre-construct-callback.adoc[]
** xref:extensions/test-instance-factories.adoc[]
** xref:extensions/test-instance-post-processing.adoc[]
** xref:extensions/test-instance-pre-destroy-callback.adoc[]
** xref:extensions/parameter-resolution.adoc[]
** xref:extensions/test-result-processing.adoc[]
** xref:extensions/test-lifecycle-callbacks.adoc[]
** xref:extensions/exception-handling.adoc[]
** xref:extensions/pre-interrupt-callback.adoc[]
** xref:extensions/intercepting-invocations.adoc[]
** xref:extensions/providing-invocation-contexts-for-class-templates.adoc[]
** xref:extensions/providing-invocation-contexts-for-test-templates.adoc[]
** xref:extensions/keeping-state-in-extensions.adoc[]
** xref:extensions/supported-utilities-in-extensions.adoc[]
** xref:extensions/relative-execution-order-of-user-code-and-extensions.adoc[]
* Advanced Topics
** xref:advanced-topics/junit-platform-reporting.adoc[]
** xref:advanced-topics/junit-platform-suite-engine.adoc[]
** xref:advanced-topics/testkit.adoc[]
** xref:advanced-topics/launcher-api.adoc[]
** xref:advanced-topics/engines.adoc[]
* xref:api-evolution.adoc[]
* xref:release-notes.adoc[]
* xref:appendix.adoc[]
================================================
FILE: documentation/modules/ROOT/pages/advanced-topics/engines.adoc
================================================
= Test Engines
A `TestEngine` facilitates _discovery_ and _execution_ of tests for a particular
programming model.
For example, JUnit provides a `TestEngine` that discovers and executes tests written using
the JUnit Jupiter programming model (see xref:writing-tests/intro.adoc[] and xref:extensions/overview.adoc[]).
[[junit]]
== JUnit Test Engines
JUnit provides three `TestEngine` implementations.
* `{junit-jupiter-engine}`: The core of JUnit Jupiter.
* `{junit-vintage-engine}`: A thin layer on top of JUnit 4 to allow running _vintage_
tests (based on JUnit 3.8 and JUnit 4) with the JUnit Platform launcher infrastructure.
* `{junit-platform-suite-engine}`: Executes declarative suites of tests with the JUnit
Platform launcher infrastructure.
[[custom]]
== Custom Test Engines
You can contribute your own custom `{TestEngine}` by implementing the interfaces in the
{junit-platform-engine} module and _registering_ your engine.
Every `TestEngine` must provide its own _unique ID_, _discover_ tests from an
`EngineDiscoveryRequest`, and _execute_ those tests according to an `ExecutionRequest`.
[WARNING]
.The `junit-` unique ID prefix is reserved for TestEngines from the JUnit Team
====
The JUnit Platform `Launcher` enforces that only `TestEngine` implementations published
by the JUnit Team may use the `junit-` prefix for their `TestEngine` IDs.
* If any third-party `TestEngine` claims to be `junit-jupiter` or `junit-vintage`, an
exception will be thrown, immediately halting execution of the JUnit Platform.
* If any third-party `TestEngine` uses the `junit-` prefix for its ID, a warning message
will be logged. Later releases of the JUnit Platform will throw an exception for such
violations.
====
In order to facilitate test discovery within IDEs and tools prior to launching the JUnit
Platform, `TestEngine` implementations are encouraged to make use of the `@Testable`
annotation. For example, the `@Test` and `@TestFactory` annotations in JUnit Jupiter are
meta-annotated with `@Testable`. Consult the Javadoc for `{Testable}` for further details.
If your custom `TestEngine` needs to be configured, consider allowing users to supply
configuration via xref:running-tests/configuration-parameters.adoc[configuration parameters]. Please note,
however, that you are strongly encouraged to use a unique prefix for all configuration
parameters supported by your test engine. Doing so will ensure that there are no conflicts
between the names of your configuration parameters and those from other test engines. In
addition, since configuration parameters may be supplied as JVM system properties, it is
wise to avoid conflicts with the names of other system properties. For example, JUnit
Jupiter uses `junit.jupiter.` as a prefix of all of its supported configuration
parameters. Furthermore, as with the warning above regarding the `junit-` prefix for
`TestEngine` IDs, you should not use `junit.` as a prefix for the names of your own
configuration parameters.
Although there is currently no official guide on how to implement a custom `TestEngine`,
you can consult the implementation of <<junit>> or the implementation of
third-party test engines listed in the
https://github.com/junit-team/junit-framework/wiki/Third-party-Extensions#junit-platform-test-engines[JUnit wiki].
You will also find various tutorials and blogs on the Internet that demonstrate how to
write a custom `TestEngine`.
NOTE: `{HierarchicalTestEngine}` is a convenient abstract base implementation of the
`TestEngine` SPI (used by the `{junit-jupiter-engine}`) that only requires implementors to
provide the logic for test discovery. It implements execution of `TestDescriptors` that
implement the `Node` interface, including support for parallel execution.
[[registration]]
== Registering a TestEngine
`TestEngine` registration is supported via Java's `{ServiceLoader}` mechanism.
For example, the `junit-jupiter-engine` module registers its
`org.junit.jupiter.engine.JupiterTestEngine` in a file named
`org.junit.platform.engine.TestEngine` within the `/META-INF/services` folder in the
`junit-jupiter-engine` JAR.
[[requirements]]
== Requirements
NOTE: The words "must", "must not", "required", "shall", "shall not", "should", "should
not", "recommended", "may", and "optional" in this section are to be interpreted as
described in https://www.ietf.org/rfc/rfc2119.txt[RFC 2119.]
[[requirements-mandatory]]
=== Mandatory requirements
For interoperability with build tools and IDEs, `TestEngine` implementations must adhere
to the following requirements:
* The `TestDescriptor` returned from `TestEngine.discover()` _must_ be the root of a tree
of `TestDescriptor` instances. This implies that there _must not_ be any cycles between
a node and its descendants.
* The hierarchy of test descriptors returned from `TestEngine.discover()` _must_ be
mutable, but the test descriptors _must_ otherwise be immutable after discovery.
* A `TestEngine` _must_ be able to discover `UniqueIdSelectors` for any unique ID that it
previously generated and returned from `TestEngine.discover()`. This enables selecting a
subset of tests to execute or rerun.
* The `executionSkipped`, `executionStarted`, and `executionFinished` methods of the
`EngineExecutionListener` passed to `TestEngine.execute()` _must_ be called for every
`TestDescriptor` node in the tree returned from `TestEngine.discover()` at most
once. Parent nodes _must_ be reported as started before their children and as finished
after their children. If a node is reported as skipped, there _must not_ be any events
reported for its descendants.
[[requirements-enhanced-compatibility]]
=== Enhanced compatibility
Adhering to the following requirements is optional but recommended for enhanced
compatibility with build tools and IDEs:
* Unless to indicate an empty discovery result, the `TestDescriptor` returned from
`TestEngine.discover()` _should_ have children rather than being completely dynamic.
This allows tools to display the structure of the tests and to select a subset of tests
to execute.
* When resolving `UniqueIdSelectors`, a `TestEngine` _should_ only return `TestDescriptor`
instances with matching unique IDs including their ancestors but _may_ return additional
siblings or other nodes that are required for the execution of the selected tests.
* `TestEngines` _should_ support xref:running-tests/tags.adoc[tagging] tests and containers so
that tag filters can be applied when discovering tests.
* [[requirements-cancellation]] A `TestEngine` _should_ cancel its execution
when the `{CancellationToken}` it is passed as part of the `ExecutionRequest` indicates
that cancellation has been requested. In this case, it _should_ report any remaining
`TestDescriptors` as skipped but not report any events for their descendants. It _may_
report already started `TestDescriptors` as aborted in case they have not been executed
completely. If a `TestEngine` supports cancellation, it should clean up any resources
that it has created just like if execution had finished regularly.
[[discovery-issues]]
== Reporting Discovery Issues
Test engines should report xref:running-tests/discovery-issues.adoc[discovery issues] if they
encounter any problems or potential misconfigurations during test discovery. This is
especially important if the issue could lead to tests not being executed at all or only
partially.
In order to report a `{DiscoveryIssue}`, a test engine should call the
`issueEncountered()` method on the `{EngineDiscoveryListener}` available via the
`{EngineDiscoveryRequest}` passed to its `discover()` method. Rather than passing the
listener around, the `{DiscoveryIssueReporter}` interface should be used. It also provides
a way to create a `Condition` that reports a discovery issue if its check fails and may
be used as a `Predicate` or `Consumer`. Please refer to the implementations of the
<<junit, test engines provided by JUnit>> for examples.
Moreover, xref:advanced-topics/testkit.adoc#engine-discovery[Engine Test Kit] provides a way to write tests for
reported discovery issues.
================================================
FILE: documentation/modules/ROOT/pages/advanced-topics/junit-platform-reporting.adoc
================================================
= JUnit Platform Reporting
The `junit-platform-reporting` artifact contains `{TestExecutionListener}` implementations
that generate XML test reports in two flavors:
<<open-test-reporting, Open Test Reporting>> and
<<legacy-xml, legacy>>.
NOTE: The module also contains other `TestExecutionListener` implementations that can be
used to build custom reporting. See xref:running-tests/using-listeners-and-interceptors.adoc[] for details.
[[output-directory]]
== Output Directory
The JUnit Platform provides an `{OutputDirectoryCreator}` via `{EngineDiscoveryRequest}`
and `{TestPlan}` to registered xref:advanced-topics/engines.adoc[test engines] and
xref:running-tests/using-listeners-and-interceptors.adoc[listeners], respectively. Its root directory can be configured
via the following xref:running-tests/configuration-parameters.adoc[configuration parameter]:
`junit.platform.reporting.output.dir=<path>`::
Configure the output directory for reporting. By default, `build` is used if a Gradle
build script is found, and `target` if a Maven POM is found; otherwise, the current
working directory is used.
To create a unique output directory per test run, you can use the `\{uniqueNumber}`
placeholder in the path. For example, `reports/junit-\{uniqueNumber}` will create
directories like `reports/junit-8803697269315188212`. This can be useful when using
Gradle's or Maven's parallel execution capabilities which create multiple JVM forks
that run concurrently.
[[open-test-reporting]]
== Open Test Reporting
`{OpenTestReportGeneratingListener}` writes an XML report for the entire execution in the
event-based format specified by {OpenTestReporting} which supports all features of the
JUnit Platform such as hierarchical test structures, display names, tags, etc.
The listener is auto-registered and can be configured via the following
xref:running-tests/configuration-parameters.adoc[configuration parameters]:
`junit.platform.reporting.open.xml.enabled=true|false`::
Enable/disable writing the report; defaults to `false`.
`junit.platform.reporting.open.xml.git.enabled=true|false`::
Enable/disable including information about the Git repository (see https://github.com/ota4j-team/open-test-reporting#git[Git extension schema] of open-test-reporting); defaults to `false`.
`junit.platform.reporting.open.xml.socket=<port>`::
Optional port number to redirect events to a socket instead of a file. When specified, the
listener will connect to `127.0.0.1:<port>` and send the XML events to the socket. The socket
connection is automatically closed when the test execution completes.
If enabled, the listener creates an XML report file named `open-test-report.xml` in the
configured <<output-directory, output directory>>, unless the
`junit.platform.reporting.open.xml.socket` configuration parameter is set, in which case the
events are sent to the specified socket instead.
If xref:running-tests/capturing-standard-output-error.adoc[output capturing] is enabled, the captured output
written to `System.out` and `System.err` will be included in the report as well.
TIP: The {OpenTestReportingCliTool} can be used to convert from the event-based format to
the hierarchical format which is more human-readable.
=== Gradle
For Gradle, writing Open Test Reporting compatible XML reports can be enabled and
configured via system properties. The following samples configure its output directory to
be the same directory Gradle uses for its own XML reports. A `CommandLineArgumentProvider`
is used to keep the tasks relocatable across different machines which is important when
using Gradle's Build Cache.
[source,groovy,indent=0]
[subs=attributes+]
.Groovy DSL
----
dependencies {
testRuntimeOnly("org.junit.platform:junit-platform-reporting:{version}")
}
tasks.withType(Test).configureEach {
def outputDir = reports.junitXml.outputLocation
jvmArgumentProviders << ({
[
"-Djunit.platform.reporting.open.xml.enabled=true",
"-Djunit.platform.reporting.output.dir=${outputDir.get().asFile.absolutePath}"
]
} as CommandLineArgumentProvider)
}
----
[source,kotlin,indent=0]
[subs=attributes+]
.Kotlin DSL
----
dependencies {
testRuntimeOnly("org.junit.platform:junit-platform-reporting:{version}")
}
tasks.withType<Test>().configureEach {
val outputDir = reports.junitXml.outputLocation
jvmArgumentProviders += CommandLineArgumentProvider {
listOf(
"-Djunit.platform.reporting.open.xml.enabled=true",
"-Djunit.platform.reporting.output.dir=${outputDir.get().asFile.absolutePath}"
)
}
}
----
=== Maven
For Maven Surefire/Failsafe, you can enable Open Test Reporting output and configure the
resulting XML files to be written to the same directory Surefire/Failsafe uses for its own
XML reports as follows:
[source,xml,indent=0]
[subs=attributes+]
----
<project>
<!-- ... -->
<dependencies>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-reporting</artifactId>
<version>{version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>{surefire-version}</version>
<configuration>
<properties>
<configurationParameters>
junit.platform.reporting.open.xml.enabled = true
junit.platform.reporting.output.dir = target/surefire-reports
</configurationParameters>
</properties>
</configuration>
</plugin>
</plugins>
</build>
<!-- ... -->
</project>
----
=== Console Launcher
When using the xref:running-tests/console-launcher.adoc[], you can enable Open Test Reporting
output by setting the configuration parameters via `--config`:
[source,console,subs=attributes+]
----
$ java -jar junit-platform-console-standalone-{version}.jar <OPTIONS> \
--config=junit.platform.reporting.open.xml.enabled=true \
--config=junit.platform.reporting.output.dir=reports
----
Configuration parameters can also be set in a custom properties file supplied as a
classpath resource via the `--config-resource` option:
[source,console,subs=attributes+]
----
$ java -jar junit-platform-console-standalone-{version}.jar <OPTIONS> \
--config-resource=configuration.properties
----
[[legacy-xml]]
== Legacy XML format
`{LegacyXmlReportGeneratingListener}` generates a separate XML report for each root in the
`{TestPlan}`. Note that the generated XML format is compatible with the de facto standard
for JUnit 4 based test reports that was made popular by the Ant build system.
The `LegacyXmlReportGeneratingListener` is used by the xref:running-tests/console-launcher.adoc[]
as well.
================================================
FILE: documentation/modules/ROOT/pages/advanced-topics/junit-platform-suite-engine.adoc
================================================
= JUnit Platform Suite Engine
The Suite Engine supports the declarative selection and execution of tests from _any_ test
engine on the JUnit Platform using the xref:advanced-topics/launcher-api.adoc[].
image::junit-platform-suite-engine-diagram.svg[role=text-center]
[[setup]]
== Setup
In addition to the `junit-platform-suite-api` and `junit-platform-suite-engine` artifacts,
you need _at least one_ other test engine and its dependencies on the classpath. See
xref:appendix.adoc#dependency-metadata[Dependency Metadata] for details regarding group IDs, artifact IDs, and versions.
[[setup-required-dependencies]]
=== Required Dependencies
* `junit-platform-suite-api` in _test_ scope: artifact containing annotations needed to
configure a test suite
* `junit-platform-suite-engine` in _test runtime_ scope: implementation of the
`TestEngine` API for declarative test suites
NOTE: Both of the required dependencies are aggregated in the `junit-platform-suite`
artifact which can be declared in _test_ scope instead of declaring explicit dependencies
on `junit-platform-suite-api` and `junit-platform-suite-engine`.
[[setup-transitive-dependencies]]
=== Transitive Dependencies
* `junit-platform-launcher` in _test_ scope
* `junit-platform-engine` in _test_ scope
* `junit-platform-commons` in _test_ scope
* `opentest4j` in _test_ scope
[[example]]
== @Suite Example
Annotate a class with `@Suite` to have it marked as a test suite on the JUnit Platform. As
seen in the following example, selector and filter annotations can be used to control the
contents of the suite.
[source,java,indent=0]
----
include::example$java/example/SuiteDemo.java[tags=user_guide]
----
.Additional Configuration Options
NOTE: There are numerous configuration options for discovering and filtering tests in a
test suite. Please consult the Javadoc of the `{suite-api-package}` package for a full
list of supported annotations and further details.
== @BeforeSuite and @AfterSuite
`@BeforeSuite` and `@AfterSuite` annotations can be used on methods inside a
`@Suite`-annotated class. They will be executed before and after all tests of the test
suite, respectively.
[source,java,indent=0]
----
include::example$java/example/BeforeAndAfterSuiteDemo.java[tags=user_guide]
----
[[duplicate-test-execution]]
== Duplicate Test Execution
Depending on the declared selectors, different suites may contain the same tests,
potentially with different configurations. Moreover, tests in a suite are executed in
addition to the tests executed by every other test engine, which can result in the same
tests being executed twice.
image::junit-platform-suite-engine-duplicate-test-execution-diagram.svg[role=text-center]
To prevent duplicate execution of tests within a suite, configure your build tool to
include only the `junit-platform-suite` engine, or use a custom naming pattern. For
example, name all suites `*Suite` and all tests `*Test`, and configure your build tool to
include only the former.
Alternatively, consider xref:running-tests/tags.adoc[using tags] to select specific groups of
tests.
================================================
FILE: documentation/modules/ROOT/pages/advanced-topics/launcher-api.adoc
================================================
= JUnit Platform Launcher API
One of the prominent goals of the JUnit Platform is to make the interface between JUnit
and its programmatic clients – build tools and IDEs – more powerful and stable. The
purpose is to decouple the internals of discovering and executing tests from all the
filtering and configuration that is necessary from the outside.
JUnit Platform provides a `Launcher` API that can be used to discover, filter, and execute
tests. Moreover, third party test libraries – like Spock or Cucumber – can plug into the
JUnit Platform's launching infrastructure by providing a custom
xref:advanced-topics/engines.adoc[TestEngine].
image::launcher-api-diagram.svg[role=text-center]
The launcher API is in the `{junit-platform-launcher}` module.
An example consumer of the launcher API is the `{ConsoleLauncher}` in the
`{junit-platform-console}` project.
[[discovery]]
== Discovering Tests
Having _test discovery_ as a dedicated feature of the platform frees IDEs and build tools
from most of the difficulties they had to go through to identify test classes and test
methods in previous versions of JUnit.
Usage Example:
[source,java,indent=0]
----
include::example$java/example/UsingTheLauncherForDiscoveryDemo.java[tags=imports]
----
[source,java,indent=0]
----
include::example$java/example/UsingTheLauncherForDiscoveryDemo.java[tags=discovery]
----
You can select classes, methods, and all classes in a package or even search for all tests
in the class-path or module-path. Discovery takes place across all participating test
engines.
The resulting `TestPlan` is a hierarchical (and read-only) description of all engines,
classes, and test methods that fit the `LauncherDiscoveryRequest`. The client can
traverse the tree, retrieve details about a node, and get a link to the original source
(like class, method, or file position). Every node in the test plan has a _unique ID_
that can be used to invoke a particular test or group of tests.
Clients can register one or more `{LauncherDiscoveryListener}` implementations via the
`{LauncherDiscoveryRequestBuilder}` to gain insight into events that occur during test
discovery. By default, the builder registers an "abort on failure" listener that aborts
test discovery after the first discovery failure is encountered. The default
`LauncherDiscoveryListener` can be changed via the
`junit.platform.discovery.listener.default` xref:running-tests/configuration-parameters.adoc[configuration
parameter].
[[execution]]
== Executing Tests
To execute tests, clients can use the same `LauncherDiscoveryRequest` as in the discovery
phase or create a new request. Test progress and reporting can be achieved by registering
one or more `{TestExecutionListener}` implementations with the `Launcher` as in the
following example.
[source,java,indent=0]
----
include::example$java/example/UsingTheLauncherDemo.java[tags=execution]
----
There is no return value for the `execute()` method, but you can use a
`TestExecutionListener` to aggregate the results. For examples see the
`{SummaryGeneratingListener}`, `{LegacyXmlReportGeneratingListener}`, and
`{UniqueIdTrackingListener}`.
NOTE: All `TestExecutionListener` methods are called sequentially. Methods for start
events are called in registration order while methods for finish events are called in
reverse order.
Test case execution won't start before all `executionStarted` calls have returned.
[[engines-custom]]
== Registering a TestEngine
See the dedicated section on xref:advanced-topics/engines.adoc#registration[TestEngine registration] for
details.
[[post-discovery-filters-custom]]
== Registering a PostDiscoveryFilter
In addition to specifying post-discovery filters as part of a `{LauncherDiscoveryRequest}`
passed to the `{Launcher}` API, `{PostDiscoveryFilter}` implementations will be discovered
at runtime via Java's `{ServiceLoader}` mechanism and automatically applied by the
`Launcher` in addition to those that are part of the request.
For example, an `example.CustomTagFilter` class implementing `PostDiscoveryFilter` and
declared within the `/META-INF/services/org.junit.platform.launcher.PostDiscoveryFilter`
file is loaded and applied automatically.
[[launcher-session-listeners-custom]]
== Registering a LauncherSessionListener
Registered implementations of `{LauncherSessionListener}` are notified when a
`{LauncherSession}` is opened (before a `{Launcher}` first discovers and executes tests)
and closed (when no more tests will be discovered or executed). They can be registered
programmatically via the `{LauncherConfig}` that is passed to the `{LauncherFactory}`, or
they can be discovered at runtime via Java's `{ServiceLoader}` mechanism and automatically
registered with `LauncherSession` (unless automatic registration is disabled.)
[[launcher-session-listeners-tool-support]]
=== Tool Support
The following build tools and IDEs are known to provide full support for `LauncherSession`:
* Gradle 4.6 and later
* Maven Surefire/Failsafe 3.0.0-M6 and later
* IntelliJ IDEA 2017.3 and later
Other tools might also work but have not been tested explicitly.
[[launcher-session-listeners-tool-example-usage]]
=== Example Usage
A `LauncherSessionListener` is well suited for implementing once-per-JVM setup/teardown
behavior since it's called before the first and after the last test in a launcher session,
respectively. The scope of a launcher session depends on the used IDE or build tool but
usually corresponds to the lifecycle of the test JVM. A custom listener that starts an
HTTP server before executing the first test and stops it after the last test has been
executed, could look like this:
[source,java]
.src/test/java/example/session/GlobalSetupTeardownListener.java
----
package example.session;
include::example$java/example/session/GlobalSetupTeardownListener.java[tags=user_guide]
----
<1> Get the store from the launcher session
<2> Lazily create the HTTP server and put it into the store
<3> Start the HTTP server
It uses a wrapper class to ensure the server is stopped when the launcher session is
closed:
[source,java]
.src/test/java/example/session/CloseableHttpServer.java
----
package example.session;
include::example$java/example/session/CloseableHttpServer.java[tags=user_guide]
----
<1> The `close()` method is called when the launcher session is closed
<2> Stop the HTTP server
This sample uses the HTTP server implementation from the jdk.httpserver module that comes
with the JDK but would work similarly with any other server or resource. In order for the
listener to be picked up by JUnit Platform, you need to register it as a service by adding
a resource file with the following name and contents to your test runtime classpath (e.g.
by adding the file to `src/test/resources`):
[source]
.src/test/resources/META-INF/services/org.junit.platform.launcher.LauncherSessionListener
----
include::example$resources/META-INF/services/org.junit.platform.launcher.LauncherSessionListener[]
----
You can now use the resource from your test:
[source,java]
.src/test/java/example/session/HttpTests.java
----
package example.session;
include::example$java/example/session/HttpTests.java[tags=user_guide]
----
<1> Retrieve the HTTP server instance from the store
<2> Get the host string directly from the injected HTTP server instance
<3> Get the port number directly from the injected HTTP server instance
<4> Send a request to the server
<5> Check the status code of the response
[[launcher-interceptors-custom]]
== Registering a LauncherInterceptor
In order to intercept the creation of instances of `{Launcher}` and
`{LauncherSessionListener}` and calls to the `discover` and `execute` methods of the
former, clients can register custom implementations of `{LauncherInterceptor}` via Java's
`{ServiceLoader}` mechanism by setting the
`junit.platform.launcher.interceptors.enabled` xref:running-tests/configuration-parameters.adoc[configuration parameter] to `true`.
[NOTE]
====
Since interceptors are registered before the test run starts, the
`junit.platform.launcher.interceptors.enabled` _configuration parameter_ can only be
supplied as a JVM system property or via the JUnit Platform configuration file (see
xref:running-tests/configuration-parameters.adoc[] for details). This _configuration parameter_ cannot be
supplied in the `LauncherDiscoveryRequest` that is passed to the `{Launcher}`.
====
A typical use case is to create a custom interceptor to replace the `ClassLoader` used by
the JUnit Platform to load test classes and engine implementations.
[source,java]
----
include::example$java/example/CustomLauncherInterceptor.java[tags=user_guide]
----
[[launcher-discovery-listeners-custom]]
== Registering a LauncherDiscoveryListener
In addition to specifying discovery listeners as part of a `{LauncherDiscoveryRequest}` or
registering them programmatically via the `{Launcher}` API, custom
`LauncherDiscoveryListener` implementations can be discovered at runtime via Java's
`{ServiceLoader}` mechanism and automatically registered with the `Launcher` created via
the `{LauncherFactory}`.
For example, an `example.CustomLauncherDiscoveryListener` class implementing
`LauncherDiscoveryListener` and declared within the
`/META-INF/services/org.junit.platform.launcher.LauncherDiscoveryListener` file is loaded
and registered automatically.
[[listeners-custom]]
== Registering a TestExecutionListener
In addition to the public `{Launcher}` API method for registering test execution listeners
programmatically, custom `{TestExecutionListener}` implementations will be discovered at
runtime via Java's `{ServiceLoader}` mechanism and automatically registered with the
`Launcher` created via the `{LauncherFactory}`.
For example, an `example.CustomTestExecutionListener` class implementing
`TestExecutionListener` and declared within the
`/META-INF/services/org.junit.platform.launcher.TestExecutionListener` file is loaded and
registered automatically.
[[listeners-config]]
== Configuring a TestExecutionListener
When a `{TestExecutionListener}` is registered programmatically via the `{Launcher}` API,
the listener may provide programmatic ways for it to be configured -- for example, via its
constructor, setter methods, etc. However, when a `TestExecutionListener` is registered
automatically via Java's `ServiceLoader` mechanism (see
<<listeners-custom>>), there is no way for the user to directly configure the
listener. In such cases, the author of a `TestExecutionListener` may choose to make the
listener configurable via xref:running-tests/configuration-parameters.adoc[configuration parameters]. The
listener can then access the configuration parameters via the `TestPlan` supplied to the
`testPlanExecutionStarted(TestPlan)` and `testPlanExecutionFinished(TestPlan)` callback
methods. See the `{UniqueIdTrackingListener}` for an example.
[[listeners-custom-deactivation]]
== Deactivating a TestExecutionListener
Sometimes it can be useful to run a test suite _without_ certain execution listeners being
active. For example, you might have custom a `{TestExecutionListener}` that sends the test
results to an external system for reporting purposes, and while debugging you might not
want these _debug_ results to be reported. To do this, provide a pattern for the
`junit.platform.execution.listeners.deactivate` _configuration parameter_ to specify which
execution listeners should be deactivated (i.e. not registered) for the current test run.
[NOTE]
====
Only listeners registered via the `{ServiceLoader}` mechanism within the
`/META-INF/services/org.junit.platform.launcher.TestExecutionListener` file can be
deactivated. In other words, any `TestExecutionListener` registered explicitly via the
`{LauncherDiscoveryRequest}` cannot be deactivated via the
`junit.platform.execution.listeners.deactivate` _configuration parameter_.
In addition, since execution listeners are registered before the test run starts, the
`junit.platform.execution.listeners.deactivate` _configuration parameter_ can only be
supplied as a JVM system property or via the JUnit Platform configuration file (see
xref:running-tests/configuration-parameters.adoc[] for details). This _configuration parameter_ cannot be
supplied in the `LauncherDiscoveryRequest` that is passed to the `{Launcher}`.
====
[[listeners-custom-deactivation-pattern]]
=== Pattern Matching Syntax
Refer to xref:running-tests/configuration-parameters.adoc#pattern[Pattern Matching Syntax] for details.
[[launcher-config]]
== Configuring the Launcher
If you require fine-grained control over automatic detection and registration of test
engines and listeners, you may create an instance of `{LauncherConfig}` and supply that to
the `{LauncherFactory}`. Typically, an instance of `LauncherConfig` is created via the
built-in fluent _builder_ API, as demonstrated in the following example.
[source,java,indent=0]
----
include::example$java/example/UsingTheLauncherDemo.java[tags=launcherConfig]
----
[[dry-run-mode]]
== Dry-Run Mode
When running tests via the `{Launcher}` API, you can enable _dry-run mode_ by setting the
`junit.platform.execution.dryRun.enabled` xref:running-tests/configuration-parameters.adoc[configuration parameter] to `true`. In this mode, the `{Launcher}` will not actually
execute any tests but will notify registered `{TestExecutionListener}` instances as if all
tests had been skipped and their containers had been successful. This can be useful to
test changes in the configuration of a build or to verify a listener is called as expected
without having to wait for all tests to be executed.
[[managing-state-across-test-engines]]
== Managing State Across Test Engines
When running tests on the JUnit Platform, multiple test engines may need to access shared
resources. Rather than initializing these resources multiple times, JUnit Platform
provides mechanisms to share state across test engines efficiently. Test engines can use
the Platform's `{NamespacedHierarchicalStore}` API to lazily initialize and share
resources, ensuring they are created only once regardless of execution order. Any resource
that is put into the store and implements `AutoCloseable` will be closed automatically when
the execution is finished.
TIP: The Jupiter engine allows read and write access to such resources via its
`{ExtensionContext_Store}` API.
The following example demonstrates two custom test engines sharing a `ServerSocket`
resource. `FirstCustomEngine` attempts to retrieve an existing `ServerSocket` from the
global store or creates a new one if it doesn't exist:
[source,java]
----
include::example$java/example/FirstCustomEngine.java[tags=user_guide]
----
`SecondCustomEngine` follows the same pattern, ensuring that regardless whether it runs
before or after `FirstCustomEngine`, it will use the same socket instance:
[source,java]
----
include::example$java/example/SecondCustomEngine.java[tags=user_guide]
----
TIP: In this case, the `ServerSocket` can be stored directly in the global store while
ensuring since it gets closed because it implements `AutoCloseable`. If you need to use a
type that does not do so, you can wrap it in a custom class that implements
`AutoCloseable` and delegates to the original type. This is important to ensure that the
resource is closed properly when the test run is finished.
For illustration, the following test verifies that both engines are sharing the same
`ServerSocket` instance and that it's closed after `Launcher.execute()` returns:
[source,java,indent=0]
----
include::example$java/example/sharedresources/SharedResourceDemo.java[tags=user_guide]
----
By using the Platform's `{NamespacedHierarchicalStore}` API with shared namespaces in this
way, test engines can coordinate resource creation and sharing without direct dependencies
between them.
Alternatively, it's possible to inject resources into test engines by
<<launcher-session-listeners-custom, registering a `LauncherSessionListener`>>.
[[launcher-cancellation]]
== Cancelling a Running Test Execution
The launcher API provides the ability to cancel a running test execution mid-flight while
allowing engines to clean up resources. To request an execution to be cancelled, you need
to call `cancel()` on the `{CancellationToken}` that is passed to `Launcher.execute` as
part of the `{LauncherExecutionRequest}`.
For example, implementing a listener that cancels test execution after the first test
failed can be achieved as follows.
[source,java,indent=0]
----
include::example$java/example/UsingTheLauncherDemo.java[tags=cancellation-direct]
----
<1> Create a `{CancellationToken}`
<2> Implement a `{TestExecutionListener}` that calls `cancel()` when a test fails
<3> Register the cancellation token
<4> Register the listener
<5> Pass the `{LauncherExecutionRequest}` to `Launcher.execute`
[NOTE]
.Test Engine Support for Cancellation
====
Cancelling tests relies on xref:advanced-topics/engines.adoc[] checking and responding to the
`{CancellationToken}` appropriately (see
xref:advanced-topics/engines.adoc#requirements-cancellation[Test Engine Requirements] for details). The
`Launcher` will also check the token and cancel test execution when multiple test engines
are present at runtime.
At the time of writing, the following test engines support cancellation:
* `{junit-jupiter-engine}`
* `{junit-vintage-engine}`
* `{junit-platform-suite-engine}`
* https://github.com/junit-team/testng-engine[`testng-engine`] (version 1.1.0 and later)
* Any `{TestEngine}` extending `{HierarchicalTestEngine}` such as Spock and Cucumber
====
[[launcher-cancellation-execution-request-from-discovery-request]]
=== Building a LauncherExecutionRequest from a LauncherDiscoveryRequest
Rather than building a `{LauncherExecutionRequest}` by starting with a
`{LauncherDiscoveryRequestBuilder}` and calling `forExecution()`, you can create a
`{LauncherExecutionRequestBuilder}` from a previously built `{LauncherDiscoveryRequest}`.
[source,java,indent=0]
----
include::example$java/example/UsingTheLauncherDemo.java[tags=cancellation-discovery-request]
----
<1> Build a `{LauncherDiscoveryRequest}`
<2> Create a `{LauncherExecutionRequestBuilder}` with it
<3> Register the cancellation token
<4> Register the listener
<5> Pass the `{LauncherExecutionRequest}` to `Launcher.execute`
[[launcher-cancellation-execution-request-from-test-plan]]
=== Building a LauncherExecutionRequest from a TestPlan
Alternatively, a `{LauncherExecutionRequestBuilder}` can be created from a previously
discovered `{TestPlan}`.
[source,java,indent=0]
----
include::example$java/example/UsingTheLauncherDemo.java[tags=cancellation-test-plan]
----
<1> Build a `{LauncherDiscoveryRequest}`
<2> Discover a `{TestPlan}` via `Launcher.discover`
<3> Create a `{LauncherExecutionRequestBuilder}` with it
<4> Register the cancellation token
<5> Register the listener
<6> Pass the `{LauncherExecutionRequest}` to `Launcher.execute`
================================================
FILE: documentation/modules/ROOT/pages/advanced-topics/testkit.adoc
================================================
= JUnit Platform Test Kit
The `junit-platform-testkit` artifact provides support for executing a test plan on the
JUnit Platform and then verifying the expected results. This support is currently limited
to the execution of a single `TestEngine` (see <<engine>>).
[[engine]]
== Engine Test Kit
The `{testkit-engine-package}` package provides support for discovering and executing a
`{TestPlan}` for a given `{TestEngine}` running on the JUnit Platform and then accessing
the results via convenient result objects. For execution, a fluent API may be used to
verify the expected execution events were received. The key entry point into this API is
the `{EngineTestKit}` which provides static factory methods named `engine()`,
`discover()`, and `execute()`. It is recommended that you select one of the `engine()`
variants to benefit from the fluent API for building a `LauncherDiscoveryRequest`.
NOTE: If you prefer to use the `LauncherDiscoveryRequestBuilder` from the `Launcher` API
to build your `LauncherDiscoveryRequest`, you must use one of the `discover()` or
`execute()` variants in `EngineTestKit`.
The following test class written using JUnit Jupiter will be used in subsequent examples.
[[engine-ExampleTestCase]]
[source,java,indent=0]
----
include::example$java/example/ExampleTestCase.java[tags=user_guide]
----
For the sake of brevity, the following sections demonstrate how to test JUnit's own
`JupiterTestEngine` whose unique engine ID is `"junit-jupiter"`. If you want to test your
own `TestEngine` implementation, you need to use its unique engine ID. Alternatively, you
may test your own `TestEngine` by supplying an instance of it to the
`EngineTestKit.engine(TestEngine)` static factory method.
[[engine-discovery]]
== Verifying Test Discovery
The following test demonstrates how to verify that a `TestPlan` was discovered as expected
by the JUnit Jupiter `TestEngine`.
[source,java,indent=0]
----
include::example$java/example/testkit/EngineTestKitDiscoveryDemo.java[tags=user_guide]
----
<1> Select the JUnit Jupiter `TestEngine`.
<2> Select the <<engine-ExampleTestCase, `ExampleTestCase`>> test class.
<3> Discover the `TestPlan`.
<4> Assert engine root descriptor has expected display name.
<5> Assert no discovery issues were encountered.
[[engine-statistics]]
== Asserting Execution Statistics
One of the most common features of the Test Kit is the ability to assert statistics
against events fired during the execution of a `TestPlan`. The following tests demonstrate
how to assert statistics for _containers_ and _tests_ in the JUnit Jupiter `TestEngine`.
For details on what statistics are available, consult the Javadoc for `{EventStatistics}`.
[source,java,indent=0]
----
include::example$java/example/testkit/EngineTestKitStatisticsDemo.java[tags=user_guide]
----
<1> Select the JUnit Jupiter `TestEngine`.
<2> Select the <<engine-ExampleTestCase, `ExampleTestCase`>> test class.
<3> Execute the `TestPlan`
Showing preview only (207K chars total). Download the full file or copy to clipboard to get everything.
gitextract_rqeyty5f/ ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ ├── config.yml │ │ ├── feature_request.md │ │ └── task.md │ ├── PULL_REQUEST_TEMPLATE.md │ ├── actions/ │ │ ├── main-build/ │ │ │ └── action.yml │ │ ├── maven-central-user-token/ │ │ │ └── action.yml │ │ ├── run-gradle/ │ │ │ └── action.yml │ │ └── setup-test-jdk/ │ │ └── action.yml │ ├── codecov.yml │ ├── dco.yml │ ├── renovate.json5 │ ├── scripts/ │ │ ├── checkBuildReproducibility.sh │ │ ├── close-github-milestone.js │ │ ├── create-github-release.js │ │ └── waitForUrl.sh │ ├── workflows/ │ │ ├── close-inactive-issues.yml │ │ ├── codeql.yml │ │ ├── cross-version.yml │ │ ├── deploy-docs.yml │ │ ├── gradle-dependency-submission.yml │ │ ├── label-opened-issues.yml │ │ ├── label-pull-request.yml │ │ ├── lock-resolved-issues.yml │ │ ├── main.yml │ │ ├── ossf-scorecard.yml │ │ ├── release.yml │ │ ├── reproducible-build.yml │ │ ├── sanitize-closed-issues.yml │ │ └── zizmor-analysis.yml │ └── zizmor.yml ├── .gitignore ├── .idea/ │ └── vcs.xml ├── .jitpack.yml ├── CONTRIBUTING.md ├── KEYS ├── LICENSE.md ├── NOTICE.md ├── README.md ├── RELEASING.md ├── SECURITY.md ├── build.gradle.kts ├── documentation/ │ ├── .tool-versions │ ├── README.md │ ├── antora-playbook.yml │ ├── antora.yml │ ├── documentation.gradle.kts │ ├── modules/ │ │ └── ROOT/ │ │ ├── extra-site-nav.adoc │ │ ├── images/ │ │ │ └── _source/ │ │ │ ├── extensions_BrokenLifecycleMethodConfigDemo.txt │ │ │ ├── extensions_DatabaseTestsDemo.txt │ │ │ └── extensions_lifecycle.docx │ │ ├── nav.adoc │ │ ├── pages/ │ │ │ ├── advanced-topics/ │ │ │ │ ├── engines.adoc │ │ │ │ ├── junit-platform-reporting.adoc │ │ │ │ ├── junit-platform-suite-engine.adoc │ │ │ │ ├── launcher-api.adoc │ │ │ │ └── testkit.adoc │ │ │ ├── api-evolution.adoc │ │ │ ├── appendix.adoc │ │ │ ├── extensions/ │ │ │ │ ├── conditional-test-execution.adoc │ │ │ │ ├── exception-handling.adoc │ │ │ │ ├── intercepting-invocations.adoc │ │ │ │ ├── keeping-state-in-extensions.adoc │ │ │ │ ├── overview.adoc │ │ │ │ ├── parameter-resolution.adoc │ │ │ │ ├── pre-interrupt-callback.adoc │ │ │ │ ├── providing-invocation-contexts-for-class-templates.adoc │ │ │ │ ├── providing-invocation-contexts-for-test-templates.adoc │ │ │ │ ├── registering-extensions.adoc │ │ │ │ ├── relative-execution-order-of-user-code-and-extensions.adoc │ │ │ │ ├── supported-utilities-in-extensions.adoc │ │ │ │ ├── test-instance-factories.adoc │ │ │ │ ├── test-instance-post-processing.adoc │ │ │ │ ├── test-instance-pre-construct-callback.adoc │ │ │ │ ├── test-instance-pre-destroy-callback.adoc │ │ │ │ ├── test-lifecycle-callbacks.adoc │ │ │ │ └── test-result-processing.adoc │ │ │ ├── migrating-from-junit4.adoc │ │ │ ├── overview.adoc │ │ │ ├── release-notes.adoc │ │ │ ├── running-tests/ │ │ │ │ ├── build-support.adoc │ │ │ │ ├── capturing-standard-output-error.adoc │ │ │ │ ├── configuration-parameters.adoc │ │ │ │ ├── console-launcher.adoc │ │ │ │ ├── discovery-issues.adoc │ │ │ │ ├── discovery-selectors.adoc │ │ │ │ ├── ide-support.adoc │ │ │ │ ├── intro.adoc │ │ │ │ ├── source-launcher.adoc │ │ │ │ ├── stack-trace-pruning.adoc │ │ │ │ ├── tags.adoc │ │ │ │ └── using-listeners-and-interceptors.adoc │ │ │ └── writing-tests/ │ │ │ ├── annotations.adoc │ │ │ ├── assertions.adoc │ │ │ ├── assumptions.adoc │ │ │ ├── built-in-extensions.adoc │ │ │ ├── class-templates.adoc │ │ │ ├── conditional-test-execution.adoc │ │ │ ├── definitions.adoc │ │ │ ├── dependency-injection-for-constructors-and-methods.adoc │ │ │ ├── disabling-tests.adoc │ │ │ ├── display-names.adoc │ │ │ ├── dynamic-tests.adoc │ │ │ ├── exception-handling.adoc │ │ │ ├── intro.adoc │ │ │ ├── nested-tests.adoc │ │ │ ├── parallel-execution.adoc │ │ │ ├── parameterized-classes-and-tests.adoc │ │ │ ├── repeated-tests.adoc │ │ │ ├── tagging-and-filtering.adoc │ │ │ ├── test-classes-and-methods.adoc │ │ │ ├── test-execution-order.adoc │ │ │ ├── test-instance-lifecycle.adoc │ │ │ ├── test-interfaces-and-default-methods.adoc │ │ │ ├── test-templates.adoc │ │ │ └── timeouts.adoc │ │ └── partials/ │ │ └── release-notes/ │ │ ├── release-notes-6.0.0.adoc │ │ ├── release-notes-6.0.1.adoc │ │ ├── release-notes-6.0.2.adoc │ │ ├── release-notes-6.0.3.adoc │ │ ├── release-notes-6.1.0-M1.adoc │ │ ├── release-notes-6.1.0-RC1.adoc │ │ ├── release-notes-6.1.0.adoc │ │ └── release-notes-TEMPLATE.adoc │ ├── package.json │ └── src/ │ ├── javadoc/ │ │ ├── junit-overview.html │ │ └── junit-stylesheet.css │ ├── main/ │ │ └── java/ │ │ └── example/ │ │ ├── domain/ │ │ │ ├── Person.java │ │ │ └── package-info.java │ │ ├── registration/ │ │ │ ├── WebClient.java │ │ │ ├── WebResponse.java │ │ │ ├── WebServerExtension.java │ │ │ └── package-info.java │ │ └── util/ │ │ ├── Calculator.java │ │ ├── ListWriter.java │ │ ├── StringUtils.java │ │ └── package-info.java │ ├── plantuml/ │ │ ├── component-diagram.puml │ │ ├── junit-platform-suite-engine-diagram.puml │ │ ├── junit-platform-suite-engine-duplicate-test-execution-diagram.puml │ │ └── launcher-api-diagram.puml │ ├── test/ │ │ ├── java/ │ │ │ ├── example/ │ │ │ │ ├── AssertJAssertionsDemo.java │ │ │ │ ├── AssertionsDemo.java │ │ │ │ ├── AssumptionsDemo.java │ │ │ │ ├── AutoCloseDemo.java │ │ │ │ ├── BeforeAndAfterSuiteDemo.java │ │ │ │ ├── ClassTemplateDemo.java │ │ │ │ ├── ConditionalTestExecutionDemo.java │ │ │ │ ├── CustomLauncherInterceptor.java │ │ │ │ ├── CustomTestEngine.java │ │ │ │ ├── DefaultLocaleTimezoneExtensionDemo.java │ │ │ │ ├── DisabledClassDemo.java │ │ │ │ ├── DisabledTestsDemo.java │ │ │ │ ├── DisplayNameDemo.java │ │ │ │ ├── DisplayNameGeneratorDemo.java │ │ │ │ ├── DocumentationTestSuite.java │ │ │ │ ├── DynamicTestsDemo.java │ │ │ │ ├── DynamicTestsNamedDemo.java │ │ │ │ ├── ExampleTestCase.java │ │ │ │ ├── ExplicitExecutionModeDemo.java │ │ │ │ ├── ExternalCustomConditionDemo.java │ │ │ │ ├── ExternalFieldSourceDemo.java │ │ │ │ ├── ExternalMethodSourceDemo.java │ │ │ │ ├── Fast.java │ │ │ │ ├── FastTest.java │ │ │ │ ├── FirstCustomEngine.java │ │ │ │ ├── HttpServerDemo.java │ │ │ │ ├── IgnoredTestsDemo.java │ │ │ │ ├── JUnit4Tests.java │ │ │ │ ├── MethodSourceParameterResolutionDemo.java │ │ │ │ ├── MyFirstJUnitJupiterRecordTests.java │ │ │ │ ├── MyFirstJUnitJupiterTests.java │ │ │ │ ├── MyRandomParametersTest.java │ │ │ │ ├── OrderedNestedTestClassesDemo.java │ │ │ │ ├── OrderedTestsDemo.java │ │ │ │ ├── ParameterizedClassDemo.java │ │ │ │ ├── ParameterizedLifecycleDemo.java │ │ │ │ ├── ParameterizedMigrationDemo.java │ │ │ │ ├── ParameterizedRecordDemo.java │ │ │ │ ├── ParameterizedTestDemo.java │ │ │ │ ├── PollingTimeoutDemo.java │ │ │ │ ├── RepeatedTestsDemo.java │ │ │ │ ├── SecondCustomEngine.java │ │ │ │ ├── SlowTests.java │ │ │ │ ├── StandardTests.java │ │ │ │ ├── SuiteDemo.java │ │ │ │ ├── SystemPropertyExtensionDemo.java │ │ │ │ ├── TaggingDemo.java │ │ │ │ ├── TempDirectoryDemo.java │ │ │ │ ├── TestInfoDemo.java │ │ │ │ ├── TestReporterDemo.java │ │ │ │ ├── TestTemplateDemo.java │ │ │ │ ├── TestingAStackDemo.java │ │ │ │ ├── TimeoutDemo.java │ │ │ │ ├── UsingTheLauncherDemo.java │ │ │ │ ├── UsingTheLauncherForDiscoveryDemo.java │ │ │ │ ├── callbacks/ │ │ │ │ │ ├── AbstractDatabaseTests.java │ │ │ │ │ ├── BrokenLifecycleMethodConfigDemo.java │ │ │ │ │ ├── DatabaseTestsDemo.java │ │ │ │ │ ├── Extension1.java │ │ │ │ │ ├── Extension2.java │ │ │ │ │ ├── Logger.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── defaultmethods/ │ │ │ │ │ ├── ComparableContract.java │ │ │ │ │ ├── EqualsContract.java │ │ │ │ │ ├── StringTests.java │ │ │ │ │ ├── Testable.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── exception/ │ │ │ │ │ ├── AssertDoesNotThrowExceptionDemo.java │ │ │ │ │ ├── ExceptionAssertionDemo.java │ │ │ │ │ ├── ExceptionAssertionExactDemo.java │ │ │ │ │ ├── FailedAssertionDemo.java │ │ │ │ │ ├── IgnoreIOExceptionExtension.java │ │ │ │ │ ├── IgnoreIOExceptionTests.java │ │ │ │ │ ├── MultipleHandlersTestCase.java │ │ │ │ │ ├── RecordStateOnErrorExtension.java │ │ │ │ │ ├── UncaughtExceptionHandlingDemo.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── extensions/ │ │ │ │ │ ├── HttpServerExtension.java │ │ │ │ │ ├── HttpServerResource.java │ │ │ │ │ ├── ParameterResolverConflictDemo.java │ │ │ │ │ ├── ParameterResolverCustomAnnotationDemo.java │ │ │ │ │ ├── ParameterResolverCustomTypeDemo.java │ │ │ │ │ ├── ParameterResolverNoConflictDemo.java │ │ │ │ │ ├── Random.java │ │ │ │ │ ├── RandomNumberDemo.java │ │ │ │ │ ├── RandomNumberExtension.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── interceptor/ │ │ │ │ │ ├── SwingEdtInterceptor.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── package-info.java │ │ │ │ ├── registration/ │ │ │ │ │ ├── DocumentationDemo.java │ │ │ │ │ └── WebServerDemo.java │ │ │ │ ├── session/ │ │ │ │ │ ├── CloseableHttpServer.java │ │ │ │ │ ├── GlobalSetupTeardownListener.java │ │ │ │ │ ├── HttpTests.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── sharedresources/ │ │ │ │ │ ├── ChildrenSharedResourcesDemo.java │ │ │ │ │ ├── DynamicSharedResourcesDemo.java │ │ │ │ │ ├── SharedResourceDemo.java │ │ │ │ │ ├── StaticSharedResourcesDemo.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── testinterface/ │ │ │ │ │ ├── TestInterfaceDemo.java │ │ │ │ │ ├── TestInterfaceDynamicTestsDemo.java │ │ │ │ │ ├── TestLifecycleLogger.java │ │ │ │ │ ├── TimeExecutionLogger.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── testkit/ │ │ │ │ │ ├── EngineTestKitAllEventsDemo.java │ │ │ │ │ ├── EngineTestKitDiscoveryDemo.java │ │ │ │ │ ├── EngineTestKitFailedMethodDemo.java │ │ │ │ │ ├── EngineTestKitSkippedMethodDemo.java │ │ │ │ │ ├── EngineTestKitStatisticsDemo.java │ │ │ │ │ └── package-info.java │ │ │ │ └── timing/ │ │ │ │ ├── TimingExtension.java │ │ │ │ ├── TimingExtensionTests.java │ │ │ │ └── package-info.java │ │ │ └── extensions/ │ │ │ ├── DisabledOnOpenJ9.java │ │ │ ├── ExpectToFail.java │ │ │ └── package-info.java │ │ ├── kotlin/ │ │ │ └── example/ │ │ │ ├── FibonacciCalculator.kt │ │ │ ├── KotlinAssertionsDemo.kt │ │ │ ├── KotlinCoroutinesDemo.kt │ │ │ ├── KotlinCoroutinesRunTestDemo.kt │ │ │ ├── kotlin/ │ │ │ │ ├── AssumptionsDemo.kt │ │ │ │ ├── AutoCloseDemo.kt │ │ │ │ ├── ConditionalTestExecutionDemo.kt │ │ │ │ ├── DefaultLocaleTimezoneExtensionDemo.kt │ │ │ │ ├── DisplayNameDemo.kt │ │ │ │ ├── DisplayNameGeneratorDemo.kt │ │ │ │ ├── DynamicTestsDemo.kt │ │ │ │ ├── DynamicTestsNamedDemo.kt │ │ │ │ ├── ExternalCustomConditionDemo.kt │ │ │ │ ├── Fast.kt │ │ │ │ ├── FastTest.kt │ │ │ │ ├── HttpServerDemo.kt │ │ │ │ ├── MyFirstJUnitJupiterTests.kt │ │ │ │ ├── MyRandomParametersTest.kt │ │ │ │ ├── ParameterizedClassDemo.kt │ │ │ │ ├── PollingTimeoutDemo.kt │ │ │ │ ├── RepeatedTestsDemo.kt │ │ │ │ ├── StandardTests.kt │ │ │ │ ├── SystemPropertyExtensionDemo.kt │ │ │ │ ├── TempDirectoryDemo.kt │ │ │ │ ├── TestInfoDemo.kt │ │ │ │ ├── TestReporterDemo.kt │ │ │ │ ├── TestingAStackDemo.kt │ │ │ │ ├── TimeoutDemo.kt │ │ │ │ ├── defaultmethods/ │ │ │ │ │ ├── ComparableContract.kt │ │ │ │ │ ├── EqualsContract.kt │ │ │ │ │ ├── StringTests.kt │ │ │ │ │ └── Testable.kt │ │ │ │ ├── exception/ │ │ │ │ │ ├── AssertDoesNotThrowExceptionDemo.kt │ │ │ │ │ ├── ExceptionAssertionDemo.kt │ │ │ │ │ ├── ExceptionAssertionExactDemo.kt │ │ │ │ │ ├── FailedAssertionDemo.kt │ │ │ │ │ └── UncaughtExceptionHandlingDemo.kt │ │ │ │ ├── extensions/ │ │ │ │ │ ├── HttpServerExtension.kt │ │ │ │ │ ├── HttpServerResource.kt │ │ │ │ │ ├── ParameterResolverConflictDemo.kt │ │ │ │ │ ├── ParameterResolverCustomAnnotationDemo.kt │ │ │ │ │ ├── ParameterResolverCustomTypeDemo.kt │ │ │ │ │ ├── ParameterResolverNoConflictDemo.kt │ │ │ │ │ ├── Random.kt │ │ │ │ │ ├── RandomNumberDemo.kt │ │ │ │ │ └── RandomNumberExtension.kt │ │ │ │ ├── registration/ │ │ │ │ │ ├── DocumentationDemo.kt │ │ │ │ │ └── DocumentationExtension.kt │ │ │ │ ├── testinterface/ │ │ │ │ │ ├── TestInterfaceDemo.kt │ │ │ │ │ ├── TestInterfaceDynamicTestsDemo.kt │ │ │ │ │ ├── TestLifecycleLogger.kt │ │ │ │ │ └── TimeExecutionLogger.kt │ │ │ │ └── timing/ │ │ │ │ ├── TimingExtension.kt │ │ │ │ └── TimingExtensionTests.kt │ │ │ └── registration/ │ │ │ └── KotlinWebServerDemo.kt │ │ └── resources/ │ │ ├── META-INF/ │ │ │ └── services/ │ │ │ └── org.junit.platform.launcher.LauncherSessionListener │ │ ├── junit-platform.properties │ │ ├── log4j2-test.xml │ │ └── two-column.csv │ └── tools/ │ └── java/ │ └── org/ │ └── junit/ │ └── api/ │ └── tools/ │ ├── AbstractApiReportWriter.java │ ├── ApiReport.java │ ├── ApiReportGenerator.java │ ├── ApiReportWriter.java │ ├── AsciidocApiReportWriter.java │ ├── Declaration.java │ ├── HtmlApiReportWriter.java │ ├── MarkdownApiReportWriter.java │ └── package-info.java ├── gradle/ │ ├── base/ │ │ ├── code-generator-model/ │ │ │ ├── .gitignore │ │ │ ├── build.gradle.kts │ │ │ └── src/ │ │ │ └── main/ │ │ │ ├── kotlin/ │ │ │ │ └── junitbuild/ │ │ │ │ └── generator/ │ │ │ │ └── model/ │ │ │ │ └── JRE.kt │ │ │ └── resources/ │ │ │ └── jre.yaml │ │ ├── dsl-extensions/ │ │ │ ├── .gitignore │ │ │ ├── build.gradle.kts │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── kotlin/ │ │ │ └── junitbuild/ │ │ │ └── extensions/ │ │ │ ├── DependencyExtensions.kt │ │ │ ├── ProjectExtensions.kt │ │ │ ├── StringExtensions.kt │ │ │ ├── TaskExtensions.kt │ │ │ ├── VersionExtensions.kt │ │ │ └── junitbuild.dsl-extensions.gradle.kts │ │ ├── gradle.properties │ │ └── settings.gradle.kts │ ├── config/ │ │ ├── checkstyle/ │ │ │ ├── checkstyleMain.xml │ │ │ ├── checkstyleNohttp.xml │ │ │ ├── checkstyleTest.xml │ │ │ └── suppressions.xml │ │ ├── eclipse/ │ │ │ ├── junit-eclipse-formatter-settings.xml │ │ │ └── junit-eclipse.importorder │ │ ├── roseau/ │ │ │ └── config.yaml │ │ └── spotless/ │ │ └── eclipse-public-license-2.0.java │ ├── gradle-daemon-jvm.properties │ ├── libs.versions.toml │ ├── plugins/ │ │ ├── antora/ │ │ │ ├── build.gradle.kts │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── kotlin/ │ │ │ ├── junitbuild/ │ │ │ │ └── antora/ │ │ │ │ └── AntoraConfiguration.kt │ │ │ └── junitbuild.antora-conventions.gradle.kts │ │ ├── backward-compatibility/ │ │ │ ├── build.gradle.kts │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── kotlin/ │ │ │ ├── junitbuild/ │ │ │ │ └── compatibility/ │ │ │ │ ├── BackwardCompatibilityChecksExtension.kt │ │ │ │ └── roseau/ │ │ │ │ └── RoseauDiff.kt │ │ │ └── junitbuild.backward-compatibility.gradle.kts │ │ ├── build-parameters/ │ │ │ └── build.gradle.kts │ │ ├── code-generator/ │ │ │ ├── build.gradle.kts │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── kotlin/ │ │ │ ├── junitbuild/ │ │ │ │ └── generator/ │ │ │ │ └── GenerateJreRelatedSourceCode.kt │ │ │ └── junitbuild.code-generator.gradle.kts │ │ ├── common/ │ │ │ ├── build.gradle.kts │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── kotlin/ │ │ │ ├── JavaLibraryExtension.kt │ │ │ ├── License.kt │ │ │ ├── junitbuild/ │ │ │ │ ├── deps/ │ │ │ │ │ └── ByteBuddyAlignmentRule.kt │ │ │ │ ├── eclipse/ │ │ │ │ │ └── EclipseConventionsExtension.kt │ │ │ │ ├── exec/ │ │ │ │ │ ├── CaptureJavaExecOutput.kt │ │ │ │ │ ├── ClasspathSystemPropertyProvider.kt │ │ │ │ │ ├── GenerateStandaloneConsoleLauncherShadowedArtifactsFile.kt │ │ │ │ │ └── RunConsoleLauncher.kt │ │ │ │ ├── graalvm/ │ │ │ │ │ └── NativeImagePropertiesExtension.kt │ │ │ │ ├── java/ │ │ │ │ │ ├── UpdateJarAction.kt │ │ │ │ │ └── WriteArtifactsFile.kt │ │ │ │ └── javadoc/ │ │ │ │ ├── JavadocConventionsExtension.kt │ │ │ │ ├── JavadocValuesOption.kt │ │ │ │ ├── ModuleSpecificJavadocFileOption.kt │ │ │ │ └── VersionNumber.kt │ │ │ ├── junitbuild.base-conventions.gradle.kts │ │ │ ├── junitbuild.build-metadata.gradle.kts │ │ │ ├── junitbuild.checkstyle-conventions.gradle.kts │ │ │ ├── junitbuild.checkstyle-nohttp.gradle.kts │ │ │ ├── junitbuild.eclipse-conventions.gradle.kts │ │ │ ├── junitbuild.jacoco-aggregation-conventions.gradle.kts │ │ │ ├── junitbuild.jacoco-conventions.gradle.kts │ │ │ ├── junitbuild.jacoco-java-conventions.gradle.kts │ │ │ ├── junitbuild.java-aggregator-conventions.gradle.kts │ │ │ ├── junitbuild.java-errorprone-conventions.gradle.kts │ │ │ ├── junitbuild.java-library-conventions.gradle.kts │ │ │ ├── junitbuild.java-toolchain-conventions.gradle.kts │ │ │ ├── junitbuild.javadoc-conventions.gradle.kts │ │ │ ├── junitbuild.jmh-conventions.gradle.kts │ │ │ ├── junitbuild.junit4-compatibility.gradle.kts │ │ │ ├── junitbuild.kotlin-library-conventions.gradle.kts │ │ │ ├── junitbuild.osgi-conventions.gradle.kts │ │ │ ├── junitbuild.publishing-conventions.gradle.kts │ │ │ ├── junitbuild.settings-conventions.settings.gradle.kts │ │ │ ├── junitbuild.shadow-conventions.gradle.kts │ │ │ ├── junitbuild.spotless-conventions.gradle.kts │ │ │ └── junitbuild.testing-conventions.gradle.kts │ │ ├── publishing/ │ │ │ ├── build.gradle.kts │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── kotlin/ │ │ │ ├── junitbuild/ │ │ │ │ └── release/ │ │ │ │ └── VerifyBinaryArtifactsAreIdentical.kt │ │ │ ├── junitbuild.maven-central-publishing.settings.gradle.kts │ │ │ └── junitbuild.temp-maven-repo.gradle.kts │ │ └── settings.gradle.kts │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat ├── junit-bom/ │ ├── README.md │ └── junit-bom.gradle.kts ├── junit-jupiter/ │ ├── junit-jupiter.gradle.kts │ └── src/ │ └── main/ │ └── java/ │ └── module-info.java ├── junit-jupiter-api/ │ ├── junit-jupiter-api.gradle.kts │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ ├── module-info.java │ │ │ └── org/ │ │ │ └── junit/ │ │ │ └── jupiter/ │ │ │ └── api/ │ │ │ ├── AfterAll.java │ │ │ ├── AfterEach.java │ │ │ ├── AssertAll.java │ │ │ ├── AssertArrayEquals.java │ │ │ ├── AssertDoesNotThrow.java │ │ │ ├── AssertEquals.java │ │ │ ├── AssertFalse.java │ │ │ ├── AssertInstanceOf.java │ │ │ ├── AssertIterableEquals.java │ │ │ ├── AssertLinesMatch.java │ │ │ ├── AssertNotEquals.java │ │ │ ├── AssertNotNull.java │ │ │ ├── AssertNotSame.java │ │ │ ├── AssertNull.java │ │ │ ├── AssertSame.java │ │ │ ├── AssertThrows.java │ │ │ ├── AssertThrowsExactly.java │ │ │ ├── AssertTimeout.java │ │ │ ├── AssertTimeoutPreemptively.java │ │ │ ├── AssertTrue.java │ │ │ ├── AssertionFailureBuilder.java │ │ │ ├── AssertionUtils.java │ │ │ ├── Assertions.java │ │ │ ├── Assumptions.java │ │ │ ├── AutoClose.java │ │ │ ├── BeforeAll.java │ │ │ ├── BeforeEach.java │ │ │ ├── ClassDescriptor.java │ │ │ ├── ClassOrderer.java │ │ │ ├── ClassOrdererContext.java │ │ │ ├── ClassTemplate.java │ │ │ ├── Constants.java │ │ │ ├── Disabled.java │ │ │ ├── DisplayName.java │ │ │ ├── DisplayNameGeneration.java │ │ │ ├── DisplayNameGenerator.java │ │ │ ├── DynamicContainer.java │ │ │ ├── DynamicNode.java │ │ │ ├── DynamicTest.java │ │ │ ├── IndicativeSentencesGeneration.java │ │ │ ├── MediaType.java │ │ │ ├── MethodDescriptor.java │ │ │ ├── MethodOrderer.java │ │ │ ├── MethodOrdererContext.java │ │ │ ├── Named.java │ │ │ ├── NamedExecutable.java │ │ │ ├── Nested.java │ │ │ ├── Order.java │ │ │ ├── RandomOrdererUtils.java │ │ │ ├── RepeatedTest.java │ │ │ ├── RepetitionInfo.java │ │ │ ├── Tag.java │ │ │ ├── Tags.java │ │ │ ├── Test.java │ │ │ ├── TestClassOrder.java │ │ │ ├── TestFactory.java │ │ │ ├── TestInfo.java │ │ │ ├── TestInstance.java │ │ │ ├── TestMethodOrder.java │ │ │ ├── TestReporter.java │ │ │ ├── TestTemplate.java │ │ │ ├── Timeout.java │ │ │ ├── condition/ │ │ │ │ ├── AbstractJreCondition.java │ │ │ │ ├── AbstractJreRangeCondition.java │ │ │ │ ├── AbstractOsBasedExecutionCondition.java │ │ │ │ ├── AbstractRepeatableAnnotationCondition.java │ │ │ │ ├── BooleanExecutionCondition.java │ │ │ │ ├── DisabledForJreRange.java │ │ │ │ ├── DisabledForJreRangeCondition.java │ │ │ │ ├── DisabledIf.java │ │ │ │ ├── DisabledIfCondition.java │ │ │ │ ├── DisabledIfEnvironmentVariable.java │ │ │ │ ├── DisabledIfEnvironmentVariableCondition.java │ │ │ │ ├── DisabledIfEnvironmentVariables.java │ │ │ │ ├── DisabledIfSystemProperties.java │ │ │ │ ├── DisabledIfSystemProperty.java │ │ │ │ ├── DisabledIfSystemPropertyCondition.java │ │ │ │ ├── DisabledInNativeImage.java │ │ │ │ ├── DisabledOnJre.java │ │ │ │ ├── DisabledOnJreCondition.java │ │ │ │ ├── DisabledOnOs.java │ │ │ │ ├── DisabledOnOsCondition.java │ │ │ │ ├── EnabledForJreRange.java │ │ │ │ ├── EnabledForJreRangeCondition.java │ │ │ │ ├── EnabledIf.java │ │ │ │ ├── EnabledIfCondition.java │ │ │ │ ├── EnabledIfEnvironmentVariable.java │ │ │ │ ├── EnabledIfEnvironmentVariableCondition.java │ │ │ │ ├── EnabledIfEnvironmentVariables.java │ │ │ │ ├── EnabledIfSystemProperties.java │ │ │ │ ├── EnabledIfSystemProperty.java │ │ │ │ ├── EnabledIfSystemPropertyCondition.java │ │ │ │ ├── EnabledInNativeImage.java │ │ │ │ ├── EnabledOnJre.java │ │ │ │ ├── EnabledOnJreCondition.java │ │ │ │ ├── EnabledOnOs.java │ │ │ │ ├── EnabledOnOsCondition.java │ │ │ │ ├── MethodBasedCondition.java │ │ │ │ ├── OS.java │ │ │ │ └── package-info.java │ │ │ ├── extension/ │ │ │ │ ├── AfterAllCallback.java │ │ │ │ ├── AfterClassTemplateInvocationCallback.java │ │ │ │ ├── AfterEachCallback.java │ │ │ │ ├── AfterTestExecutionCallback.java │ │ │ │ ├── AnnotatedElementContext.java │ │ │ │ ├── BeforeAllCallback.java │ │ │ │ ├── BeforeClassTemplateInvocationCallback.java │ │ │ │ ├── BeforeEachCallback.java │ │ │ │ ├── BeforeTestExecutionCallback.java │ │ │ │ ├── ClassTemplateInvocationContext.java │ │ │ │ ├── ClassTemplateInvocationContextProvider.java │ │ │ │ ├── ClassTemplateInvocationLifecycleMethod.java │ │ │ │ ├── ConditionEvaluationResult.java │ │ │ │ ├── DynamicTestInvocationContext.java │ │ │ │ ├── ExecutableInvoker.java │ │ │ │ ├── ExecutionCondition.java │ │ │ │ ├── ExtendWith.java │ │ │ │ ├── Extension.java │ │ │ │ ├── ExtensionConfigurationException.java │ │ │ │ ├── ExtensionContext.java │ │ │ │ ├── ExtensionContextException.java │ │ │ │ ├── Extensions.java │ │ │ │ ├── InvocationInterceptor.java │ │ │ │ ├── LifecycleMethodExecutionExceptionHandler.java │ │ │ │ ├── MediaType.java │ │ │ │ ├── ParameterContext.java │ │ │ │ ├── ParameterResolutionException.java │ │ │ │ ├── ParameterResolver.java │ │ │ │ ├── PreInterruptCallback.java │ │ │ │ ├── PreInterruptContext.java │ │ │ │ ├── ReflectiveInvocationContext.java │ │ │ │ ├── RegisterExtension.java │ │ │ │ ├── TemplateInvocationValidationException.java │ │ │ │ ├── TestExecutionExceptionHandler.java │ │ │ │ ├── TestInstanceFactory.java │ │ │ │ ├── TestInstanceFactoryContext.java │ │ │ │ ├── TestInstancePostProcessor.java │ │ │ │ ├── TestInstancePreConstructCallback.java │ │ │ │ ├── TestInstancePreDestroyCallback.java │ │ │ │ ├── TestInstances.java │ │ │ │ ├── TestInstantiationAwareExtension.java │ │ │ │ ├── TestInstantiationException.java │ │ │ │ ├── TestTemplateInvocationContext.java │ │ │ │ ├── TestTemplateInvocationContextProvider.java │ │ │ │ ├── TestWatcher.java │ │ │ │ ├── package-info.java │ │ │ │ └── support/ │ │ │ │ ├── TypeBasedParameterResolver.java │ │ │ │ └── package-info.java │ │ │ ├── function/ │ │ │ │ ├── Executable.java │ │ │ │ ├── ThrowingConsumer.java │ │ │ │ ├── ThrowingSupplier.java │ │ │ │ └── package-info.java │ │ │ ├── io/ │ │ │ │ ├── CleanupMode.java │ │ │ │ ├── DefaultDeletionResult.java │ │ │ │ ├── TempDir.java │ │ │ │ ├── TempDirDeletionStrategy.java │ │ │ │ ├── TempDirFactory.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── parallel/ │ │ │ │ ├── Execution.java │ │ │ │ ├── ExecutionMode.java │ │ │ │ ├── Isolated.java │ │ │ │ ├── ResourceAccessMode.java │ │ │ │ ├── ResourceLock.java │ │ │ │ ├── ResourceLockTarget.java │ │ │ │ ├── ResourceLocks.java │ │ │ │ ├── ResourceLocksProvider.java │ │ │ │ ├── Resources.java │ │ │ │ └── package-info.java │ │ │ ├── timeout/ │ │ │ │ ├── PreemptiveTimeoutUtils.java │ │ │ │ └── package-info.java │ │ │ └── util/ │ │ │ ├── ClearSystemProperty.java │ │ │ ├── DefaultLocale.java │ │ │ ├── DefaultLocaleExtension.java │ │ │ ├── DefaultTimeZone.java │ │ │ ├── DefaultTimeZoneExtension.java │ │ │ ├── JupiterLocaleUtils.java │ │ │ ├── JupiterPropertyUtils.java │ │ │ ├── LocaleProvider.java │ │ │ ├── NullLocaleProvider.java │ │ │ ├── NullTimeZoneProvider.java │ │ │ ├── ReadsDefaultLocale.java │ │ │ ├── ReadsDefaultTimeZone.java │ │ │ ├── ReadsSystemProperty.java │ │ │ ├── RestoreSystemProperties.java │ │ │ ├── SetSystemProperty.java │ │ │ ├── SystemPropertiesExtension.java │ │ │ ├── TimeZoneProvider.java │ │ │ ├── WritesDefaultLocale.java │ │ │ ├── WritesDefaultTimeZone.java │ │ │ ├── WritesSystemProperty.java │ │ │ └── package-info.java │ │ └── kotlin/ │ │ └── org/ │ │ └── junit/ │ │ └── jupiter/ │ │ └── api/ │ │ └── Assertions.kt │ ├── templates/ │ │ └── resources/ │ │ ├── main/ │ │ │ └── org/ │ │ │ └── junit/ │ │ │ └── jupiter/ │ │ │ └── api/ │ │ │ └── condition/ │ │ │ └── JRE.java.jte │ │ └── testFixtures/ │ │ └── org/ │ │ └── junit/ │ │ └── jupiter/ │ │ └── api/ │ │ └── condition/ │ │ └── JavaVersionPredicates.java.jte │ ├── test/ │ │ └── README.md │ └── testFixtures/ │ └── java/ │ └── org/ │ └── junit/ │ └── jupiter/ │ └── api/ │ ├── AssertionTestUtils.java │ ├── EqualsAndHashCodeAssertions.java │ ├── TemporaryClasspathExecutor.java │ ├── extension/ │ │ ├── DisabledInEclipse.java │ │ ├── DisabledOnOpenJ9.java │ │ └── ExtensionContextParameterResolver.java │ ├── fixtures/ │ │ └── TrackLogRecords.java │ └── io/ │ └── FailingTempDirDeletionStrategy.java ├── junit-jupiter-engine/ │ ├── junit-jupiter-engine.gradle.kts │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ ├── module-info.java │ │ │ └── org/ │ │ │ └── junit/ │ │ │ └── jupiter/ │ │ │ └── engine/ │ │ │ ├── Constants.java │ │ │ ├── JupiterTestEngine.java │ │ │ ├── config/ │ │ │ │ ├── CachingJupiterConfiguration.java │ │ │ │ ├── ConfigurationParameterConverter.java │ │ │ │ ├── DefaultJupiterConfiguration.java │ │ │ │ ├── EnumConfigurationParameterConverter.java │ │ │ │ ├── FilteringConfigurationParameterConverter.java │ │ │ │ ├── InstantiatingConfigurationParameterConverter.java │ │ │ │ ├── JupiterConfiguration.java │ │ │ │ └── package-info.java │ │ │ ├── descriptor/ │ │ │ │ ├── AbstractExtensionContext.java │ │ │ │ ├── CallbackSupport.java │ │ │ │ ├── ClassBasedTestDescriptor.java │ │ │ │ ├── ClassExtensionContext.java │ │ │ │ ├── ClassTemplateInvocationExtensionContext.java │ │ │ │ ├── ClassTemplateInvocationTestDescriptor.java │ │ │ │ ├── ClassTemplateTestDescriptor.java │ │ │ │ ├── ClassTestDescriptor.java │ │ │ │ ├── DefaultDynamicTestInvocationContext.java │ │ │ │ ├── DefaultTestInstanceFactoryContext.java │ │ │ │ ├── DisplayNameUtils.java │ │ │ │ ├── DynamicContainerTestDescriptor.java │ │ │ │ ├── DynamicDescendantFilter.java │ │ │ │ ├── DynamicExtensionContext.java │ │ │ │ ├── DynamicNodeTestDescriptor.java │ │ │ │ ├── DynamicTestTestDescriptor.java │ │ │ │ ├── ExclusiveResourceCollector.java │ │ │ │ ├── ExtensionUtils.java │ │ │ │ ├── Filterable.java │ │ │ │ ├── JupiterEngineDescriptor.java │ │ │ │ ├── JupiterEngineExtensionContext.java │ │ │ │ ├── JupiterTestDescriptor.java │ │ │ │ ├── LifecycleMethodUtils.java │ │ │ │ ├── MethodBasedTestDescriptor.java │ │ │ │ ├── MethodExtensionContext.java │ │ │ │ ├── MethodSourceSupport.java │ │ │ │ ├── NestedClassTestDescriptor.java │ │ │ │ ├── ResourceLockAware.java │ │ │ │ ├── TemplateExecutor.java │ │ │ │ ├── TestClassAware.java │ │ │ │ ├── TestFactoryTestDescriptor.java │ │ │ │ ├── TestInstanceLifecycleUtils.java │ │ │ │ ├── TestMethodTestDescriptor.java │ │ │ │ ├── TestTemplateExtensionContext.java │ │ │ │ ├── TestTemplateInvocationTestDescriptor.java │ │ │ │ ├── TestTemplateTestDescriptor.java │ │ │ │ ├── UniqueIdPrefixTransformer.java │ │ │ │ ├── Validatable.java │ │ │ │ └── package-info.java │ │ │ ├── discovery/ │ │ │ │ ├── AbstractAnnotatedDescriptorWrapper.java │ │ │ │ ├── AbstractOrderingVisitor.java │ │ │ │ ├── ClassOrderingVisitor.java │ │ │ │ ├── ClassSelectorResolver.java │ │ │ │ ├── DeclaredMethodSelector.java │ │ │ │ ├── DefaultClassDescriptor.java │ │ │ │ ├── DefaultClassOrdererContext.java │ │ │ │ ├── DefaultMethodDescriptor.java │ │ │ │ ├── DefaultMethodOrdererContext.java │ │ │ │ ├── DiscoverySelectorResolver.java │ │ │ │ ├── MethodOrderingVisitor.java │ │ │ │ ├── MethodSegmentResolver.java │ │ │ │ ├── MethodSelectorResolver.java │ │ │ │ ├── package-info.java │ │ │ │ └── predicates/ │ │ │ │ ├── IsTestFactoryMethod.java │ │ │ │ ├── IsTestMethod.java │ │ │ │ ├── IsTestTemplateMethod.java │ │ │ │ ├── IsTestableMethod.java │ │ │ │ ├── TestClassPredicates.java │ │ │ │ └── package-info.java │ │ │ ├── execution/ │ │ │ │ ├── AfterEachMethodAdapter.java │ │ │ │ ├── BeforeEachMethodAdapter.java │ │ │ │ ├── ConditionEvaluationException.java │ │ │ │ ├── ConditionEvaluator.java │ │ │ │ ├── ConstructorInvocation.java │ │ │ │ ├── DefaultExecutableInvoker.java │ │ │ │ ├── DefaultParameterContext.java │ │ │ │ ├── DefaultTestInstances.java │ │ │ │ ├── ExtensionContextSupplier.java │ │ │ │ ├── InterceptingExecutableInvoker.java │ │ │ │ ├── InvocationInterceptorChain.java │ │ │ │ ├── JupiterEngineExecutionContext.java │ │ │ │ ├── LauncherStoreFacade.java │ │ │ │ ├── MethodInvocation.java │ │ │ │ ├── NamespaceAwareStore.java │ │ │ │ ├── ParameterResolutionUtils.java │ │ │ │ ├── TestInstancesProvider.java │ │ │ │ └── package-info.java │ │ │ ├── extension/ │ │ │ │ ├── AutoCloseExtension.java │ │ │ │ ├── DefaultPreInterruptContext.java │ │ │ │ ├── DefaultRepetitionInfo.java │ │ │ │ ├── DefaultTestReporter.java │ │ │ │ ├── DisabledCondition.java │ │ │ │ ├── ExtensionContextInternal.java │ │ │ │ ├── ExtensionRegistrar.java │ │ │ │ ├── ExtensionRegistry.java │ │ │ │ ├── MutableExtensionRegistry.java │ │ │ │ ├── PreInterruptCallbackInvocation.java │ │ │ │ ├── PreInterruptCallbackInvocationFactory.java │ │ │ │ ├── PreInterruptThreadDumpPrinter.java │ │ │ │ ├── RepeatedTestDisplayNameFormatter.java │ │ │ │ ├── RepeatedTestExtension.java │ │ │ │ ├── RepeatedTestInvocationContext.java │ │ │ │ ├── RepetitionExtension.java │ │ │ │ ├── SameThreadTimeoutInvocation.java │ │ │ │ ├── SeparateThreadTimeoutInvocation.java │ │ │ │ ├── TempDirectory.java │ │ │ │ ├── TestInfoParameterResolver.java │ │ │ │ ├── TestReporterParameterResolver.java │ │ │ │ ├── TimeoutConfiguration.java │ │ │ │ ├── TimeoutDuration.java │ │ │ │ ├── TimeoutDurationParser.java │ │ │ │ ├── TimeoutExceptionFactory.java │ │ │ │ ├── TimeoutExtension.java │ │ │ │ ├── TimeoutInvocationFactory.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ └── support/ │ │ │ ├── JupiterThrowableCollectorFactory.java │ │ │ ├── MethodReflectionUtils.java │ │ │ ├── OpenTest4JAndJUnit4AwareThrowableCollector.java │ │ │ └── package-info.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── services/ │ │ └── org.junit.platform.engine.TestEngine │ ├── test/ │ │ └── README.md │ └── testFixtures/ │ └── java/ │ └── org/ │ └── junit/ │ └── jupiter/ │ └── engine/ │ └── discovery/ │ └── JupiterUniqueIdBuilder.java ├── junit-jupiter-migrationsupport/ │ ├── README.md │ ├── junit-jupiter-migrationsupport.gradle.kts │ └── src/ │ ├── main/ │ │ └── java/ │ │ ├── module-info.java │ │ └── org/ │ │ └── junit/ │ │ └── jupiter/ │ │ └── migrationsupport/ │ │ ├── EnableJUnit4MigrationSupport.java │ │ ├── conditions/ │ │ │ ├── IgnoreCondition.java │ │ │ └── package-info.java │ │ ├── package-info.java │ │ └── rules/ │ │ ├── EnableRuleMigrationSupport.java │ │ ├── ExpectedExceptionSupport.java │ │ ├── ExternalResourceSupport.java │ │ ├── TestRuleSupport.java │ │ ├── VerifierSupport.java │ │ ├── adapter/ │ │ │ ├── AbstractTestRuleAdapter.java │ │ │ ├── ExpectedExceptionAdapter.java │ │ │ ├── ExternalResourceAdapter.java │ │ │ ├── GenericBeforeAndAfterAdvice.java │ │ │ ├── VerifierAdapter.java │ │ │ └── package-info.java │ │ ├── member/ │ │ │ ├── AbstractTestRuleAnnotatedMember.java │ │ │ ├── TestRuleAnnotatedField.java │ │ │ ├── TestRuleAnnotatedMember.java │ │ │ ├── TestRuleAnnotatedMethod.java │ │ │ └── package-info.java │ │ └── package-info.java │ └── test/ │ └── README.md ├── junit-jupiter-params/ │ ├── junit-jupiter-params.gradle.kts │ └── src/ │ ├── jmh/ │ │ └── java/ │ │ └── org/ │ │ └── junit/ │ │ └── jupiter/ │ │ └── params/ │ │ └── ParameterizedInvocationNameFormatterBenchmarks.java │ ├── main/ │ │ ├── java/ │ │ │ ├── module-info.java │ │ │ └── org/ │ │ │ └── junit/ │ │ │ └── jupiter/ │ │ │ └── params/ │ │ │ ├── AbstractParameterizedClassInvocationLifecycleMethodInvoker.java │ │ │ ├── AfterParameterizedClassInvocation.java │ │ │ ├── AfterParameterizedClassInvocationMethodInvoker.java │ │ │ ├── ArgumentCountValidationMode.java │ │ │ ├── ArgumentCountValidator.java │ │ │ ├── ArgumentSetLifecycleMethod.java │ │ │ ├── BeforeClassTemplateInvocationFieldInjector.java │ │ │ ├── BeforeParameterizedClassInvocation.java │ │ │ ├── BeforeParameterizedClassInvocationMethodInvoker.java │ │ │ ├── ClassTemplateConstructorParameterResolver.java │ │ │ ├── DefaultParameterInfo.java │ │ │ ├── EvaluatedArgumentSet.java │ │ │ ├── InstancePostProcessingClassTemplateFieldInjector.java │ │ │ ├── Parameter.java │ │ │ ├── ParameterInfo.java │ │ │ ├── ParameterizedClass.java │ │ │ ├── ParameterizedClassContext.java │ │ │ ├── ParameterizedClassExtension.java │ │ │ ├── ParameterizedClassInvocationContext.java │ │ │ ├── ParameterizedDeclarationContext.java │ │ │ ├── ParameterizedInvocationConstants.java │ │ │ ├── ParameterizedInvocationContext.java │ │ │ ├── ParameterizedInvocationContextProvider.java │ │ │ ├── ParameterizedInvocationNameFormatter.java │ │ │ ├── ParameterizedInvocationParameterResolver.java │ │ │ ├── ParameterizedTest.java │ │ │ ├── ParameterizedTestContext.java │ │ │ ├── ParameterizedTestExtension.java │ │ │ ├── ParameterizedTestInvocationContext.java │ │ │ ├── ParameterizedTestMethodParameterResolver.java │ │ │ ├── ParameterizedTestSpiInstantiator.java │ │ │ ├── QuoteUtils.java │ │ │ ├── ResolutionCache.java │ │ │ ├── ResolverFacade.java │ │ │ ├── aggregator/ │ │ │ │ ├── AggregateWith.java │ │ │ │ ├── ArgumentAccessException.java │ │ │ │ ├── ArgumentsAccessor.java │ │ │ │ ├── ArgumentsAggregationException.java │ │ │ │ ├── ArgumentsAggregator.java │ │ │ │ ├── DefaultArgumentsAccessor.java │ │ │ │ ├── SimpleArgumentsAggregator.java │ │ │ │ └── package-info.java │ │ │ ├── converter/ │ │ │ │ ├── AnnotationBasedArgumentConverter.java │ │ │ │ ├── ArgumentConversionException.java │ │ │ │ ├── ArgumentConverter.java │ │ │ │ ├── ConvertWith.java │ │ │ │ ├── DefaultArgumentConverter.java │ │ │ │ ├── JavaTimeArgumentConverter.java │ │ │ │ ├── JavaTimeConversionPattern.java │ │ │ │ ├── SimpleArgumentConverter.java │ │ │ │ ├── TypedArgumentConverter.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── provider/ │ │ │ │ ├── AnnotationBasedArgumentsProvider.java │ │ │ │ ├── Arguments.java │ │ │ │ ├── ArgumentsProvider.java │ │ │ │ ├── ArgumentsSource.java │ │ │ │ ├── ArgumentsSources.java │ │ │ │ ├── ArgumentsUtils.java │ │ │ │ ├── CsvArgumentsProvider.java │ │ │ │ ├── CsvFileArgumentsProvider.java │ │ │ │ ├── CsvFileSource.java │ │ │ │ ├── CsvFileSources.java │ │ │ │ ├── CsvParsingException.java │ │ │ │ ├── CsvReaderFactory.java │ │ │ │ ├── CsvSource.java │ │ │ │ ├── CsvSources.java │ │ │ │ ├── EmptyArgumentsProvider.java │ │ │ │ ├── EmptySource.java │ │ │ │ ├── EnumArgumentsProvider.java │ │ │ │ ├── EnumSource.java │ │ │ │ ├── EnumSources.java │ │ │ │ ├── FieldArgumentsProvider.java │ │ │ │ ├── FieldSource.java │ │ │ │ ├── FieldSources.java │ │ │ │ ├── MethodArgumentsProvider.java │ │ │ │ ├── MethodSource.java │ │ │ │ ├── MethodSources.java │ │ │ │ ├── NullAndEmptySource.java │ │ │ │ ├── NullArgumentsProvider.java │ │ │ │ ├── NullEnum.java │ │ │ │ ├── NullSource.java │ │ │ │ ├── ValueArgumentsProvider.java │ │ │ │ ├── ValueSource.java │ │ │ │ ├── ValueSources.java │ │ │ │ └── package-info.java │ │ │ └── support/ │ │ │ ├── AnnotationConsumer.java │ │ │ ├── AnnotationConsumerInitializer.java │ │ │ ├── FieldContext.java │ │ │ ├── ParameterDeclaration.java │ │ │ ├── ParameterDeclarations.java │ │ │ ├── ParameterInfo.java │ │ │ ├── ParameterNameAndArgument.java │ │ │ └── package-info.java │ │ └── kotlin/ │ │ └── org/ │ │ └── junit/ │ │ └── jupiter/ │ │ └── params/ │ │ └── aggregator/ │ │ └── ArgumentsAccessor.kt │ ├── test/ │ │ └── README.md │ └── testFixtures/ │ └── java/ │ └── org/ │ └── junit/ │ └── jupiter/ │ └── params/ │ └── provider/ │ └── RecordArguments.java ├── junit-platform-commons/ │ ├── junit-platform-commons.gradle.kts │ └── src/ │ ├── main/ │ │ └── java/ │ │ ├── module-info.java │ │ └── org/ │ │ └── junit/ │ │ └── platform/ │ │ └── commons/ │ │ ├── JUnitException.java │ │ ├── PreconditionViolationException.java │ │ ├── annotation/ │ │ │ ├── Contract.java │ │ │ ├── Testable.java │ │ │ └── package-info.java │ │ ├── function/ │ │ │ ├── Try.java │ │ │ └── package-info.java │ │ ├── io/ │ │ │ ├── DefaultResource.java │ │ │ ├── Resource.java │ │ │ ├── ResourceFilter.java │ │ │ └── package-info.java │ │ ├── logging/ │ │ │ ├── LogRecordListener.java │ │ │ ├── Logger.java │ │ │ ├── LoggerFactory.java │ │ │ └── package-info.java │ │ ├── package-info.java │ │ ├── support/ │ │ │ ├── AnnotationSupport.java │ │ │ ├── ClassSupport.java │ │ │ ├── DefaultResource.java │ │ │ ├── HierarchyTraversalMode.java │ │ │ ├── ModifierSupport.java │ │ │ ├── ReflectionSupport.java │ │ │ ├── Resource.java │ │ │ ├── ResourceSupport.java │ │ │ ├── SearchOption.java │ │ │ ├── conversion/ │ │ │ │ ├── ConversionException.java │ │ │ │ ├── ConversionSupport.java │ │ │ │ ├── FallbackStringToObjectConverter.java │ │ │ │ ├── StringToBooleanConverter.java │ │ │ │ ├── StringToCharacterConverter.java │ │ │ │ ├── StringToClassConverter.java │ │ │ │ ├── StringToCommonJavaTypesConverter.java │ │ │ │ ├── StringToEnumConverter.java │ │ │ │ ├── StringToJavaTimeConverter.java │ │ │ │ ├── StringToNumberConverter.java │ │ │ │ ├── StringToObjectConverter.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ └── scanning/ │ │ │ ├── ClassFilter.java │ │ │ ├── ClasspathScanner.java │ │ │ └── package-info.java │ │ └── util/ │ │ ├── AnnotationUtils.java │ │ ├── ClassLoaderUtils.java │ │ ├── ClassNamePatternFilterUtils.java │ │ ├── ClassUtils.java │ │ ├── ClasspathFileVisitor.java │ │ ├── ClasspathScannerLoader.java │ │ ├── CloseablePath.java │ │ ├── CollectionUtils.java │ │ ├── DefaultClasspathScanner.java │ │ ├── ExceptionUtils.java │ │ ├── FunctionUtils.java │ │ ├── KotlinFunctionUtils.java │ │ ├── KotlinReflectionUtils.java │ │ ├── LruCache.java │ │ ├── ModuleUtils.java │ │ ├── PackageUtils.java │ │ ├── Preconditions.java │ │ ├── ReflectionUtils.java │ │ ├── ResourceUtils.java │ │ ├── RuntimeUtils.java │ │ ├── SearchPathUtils.java │ │ ├── ServiceLoaderUtils.java │ │ ├── StringUtils.java │ │ ├── ToStringBuilder.java │ │ ├── UnrecoverableExceptions.java │ │ └── package-info.java │ ├── test/ │ │ └── README.md │ └── testFixtures/ │ └── java/ │ └── org/ │ └── junit/ │ └── platform/ │ └── commons/ │ └── test/ │ ├── ConcurrencyTestingUtils.java │ ├── IdeUtils.java │ ├── PreconditionAssertions.java │ ├── TestClassLoader.java │ └── package-info.java ├── junit-platform-console/ │ ├── LICENSE-picocli.md │ ├── junit-platform-console.gradle.kts │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ ├── module-info.java │ │ │ └── org/ │ │ │ └── junit/ │ │ │ └── platform/ │ │ │ └── console/ │ │ │ ├── ConsoleLauncher.java │ │ │ ├── ConsoleLauncherToolProvider.java │ │ │ ├── command/ │ │ │ │ ├── BaseCommand.java │ │ │ │ ├── CommandFacade.java │ │ │ │ ├── CommandResult.java │ │ │ │ ├── ConsoleTestExecutor.java │ │ │ │ ├── CustomClassLoaderCloseStrategy.java │ │ │ │ ├── CustomContextClassLoaderExecutor.java │ │ │ │ ├── DiscoverTestsCommand.java │ │ │ │ ├── DiscoveryRequestCreator.java │ │ │ │ ├── ExecuteTestsCommand.java │ │ │ │ ├── ExitCode.java │ │ │ │ ├── FailFastListener.java │ │ │ │ ├── ListTestEnginesCommand.java │ │ │ │ ├── MainCommand.java │ │ │ │ ├── ManifestVersionProvider.java │ │ │ │ ├── OutputStreamConfig.java │ │ │ │ ├── StandardStreamsHandler.java │ │ │ │ └── package-info.java │ │ │ ├── options/ │ │ │ │ ├── AnsiColorOptionMixin.java │ │ │ │ ├── ClasspathEntriesConverter.java │ │ │ │ ├── ConsoleUtils.java │ │ │ │ ├── Details.java │ │ │ │ ├── SelectorConverter.java │ │ │ │ ├── TestConsoleOutputOptions.java │ │ │ │ ├── TestConsoleOutputOptionsMixin.java │ │ │ │ ├── TestDiscoveryOptions.java │ │ │ │ ├── TestDiscoveryOptionsMixin.java │ │ │ │ └── package-info.java │ │ │ ├── output/ │ │ │ │ ├── ColorPalette.java │ │ │ │ ├── DetailsPrintingListener.java │ │ │ │ ├── FlatPrintingListener.java │ │ │ │ ├── Style.java │ │ │ │ ├── TestFeedPrintingListener.java │ │ │ │ ├── Theme.java │ │ │ │ ├── TreeNode.java │ │ │ │ ├── TreePrinter.java │ │ │ │ ├── TreePrintingListener.java │ │ │ │ ├── VerboseTreePrintingListener.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── services/ │ │ └── java.util.spi.ToolProvider │ └── test/ │ └── README.md ├── junit-platform-console-standalone/ │ └── junit-platform-console-standalone.gradle.kts ├── junit-platform-engine/ │ ├── junit-platform-engine.gradle.kts │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ ├── module-info.java │ │ │ └── org/ │ │ │ └── junit/ │ │ │ └── platform/ │ │ │ └── engine/ │ │ │ ├── CancellationToken.java │ │ │ ├── CompositeFilter.java │ │ │ ├── CompositeTestDescriptorVisitor.java │ │ │ ├── ConfigurationParameters.java │ │ │ ├── DefaultDiscoveryIssue.java │ │ │ ├── DisabledCancellationToken.java │ │ │ ├── DiscoveryFilter.java │ │ │ ├── DiscoveryIssue.java │ │ │ ├── DiscoverySelector.java │ │ │ ├── DiscoverySelectorIdentifier.java │ │ │ ├── EngineDiscoveryListener.java │ │ │ ├── EngineDiscoveryRequest.java │ │ │ ├── EngineExecutionListener.java │ │ │ ├── ExecutionRequest.java │ │ │ ├── Filter.java │ │ │ ├── FilterResult.java │ │ │ ├── OutputDirectoryCreator.java │ │ │ ├── RegularCancellationToken.java │ │ │ ├── SelectorResolutionResult.java │ │ │ ├── TestDescriptor.java │ │ │ ├── TestEngine.java │ │ │ ├── TestExecutionResult.java │ │ │ ├── TestSource.java │ │ │ ├── TestTag.java │ │ │ ├── UniqueId.java │ │ │ ├── UniqueIdFormat.java │ │ │ ├── discovery/ │ │ │ │ ├── AbstractClassNameFilter.java │ │ │ │ ├── ClassNameFilter.java │ │ │ │ ├── ClassSelector.java │ │ │ │ ├── ClasspathResourceSelector.java │ │ │ │ ├── ClasspathRootSelector.java │ │ │ │ ├── DirectorySelector.java │ │ │ │ ├── DiscoverySelectorIdentifierParser.java │ │ │ │ ├── DiscoverySelectorIdentifierParsers.java │ │ │ │ ├── DiscoverySelectors.java │ │ │ │ ├── ExcludeClassNameFilter.java │ │ │ │ ├── ExcludePackageNameFilter.java │ │ │ │ ├── FilePosition.java │ │ │ │ ├── FileSelector.java │ │ │ │ ├── IncludeClassNameFilter.java │ │ │ │ ├── IncludePackageNameFilter.java │ │ │ │ ├── IterationSelector.java │ │ │ │ ├── MethodSelector.java │ │ │ │ ├── ModuleSelector.java │ │ │ │ ├── NestedClassSelector.java │ │ │ │ ├── NestedMethodSelector.java │ │ │ │ ├── PackageNameFilter.java │ │ │ │ ├── PackageSelector.java │ │ │ │ ├── UniqueIdSelector.java │ │ │ │ ├── UriSelector.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── reporting/ │ │ │ │ ├── FileEntry.java │ │ │ │ ├── OutputDirectoryProvider.java │ │ │ │ ├── OutputDirectoryProviderAdapter.java │ │ │ │ ├── ReportEntry.java │ │ │ │ └── package-info.java │ │ │ └── support/ │ │ │ ├── config/ │ │ │ │ ├── PrefixedConfigurationParameters.java │ │ │ │ └── package-info.java │ │ │ ├── descriptor/ │ │ │ │ ├── AbstractTestDescriptor.java │ │ │ │ ├── ClassSource.java │ │ │ │ ├── ClasspathResourceSource.java │ │ │ │ ├── CompositeTestSource.java │ │ │ │ ├── DefaultUriSource.java │ │ │ │ ├── DirectorySource.java │ │ │ │ ├── EngineDescriptor.java │ │ │ │ ├── FilePosition.java │ │ │ │ ├── FileSource.java │ │ │ │ ├── FileSystemSource.java │ │ │ │ ├── MethodSource.java │ │ │ │ ├── PackageSource.java │ │ │ │ ├── UriSource.java │ │ │ │ └── package-info.java │ │ │ ├── discovery/ │ │ │ │ ├── ClassContainerSelectorResolver.java │ │ │ │ ├── DiscoveryIssueReporter.java │ │ │ │ ├── EngineDiscoveryRequestResolution.java │ │ │ │ ├── EngineDiscoveryRequestResolver.java │ │ │ │ ├── ResourceContainerSelectorResolver.java │ │ │ │ ├── ResourceUtils.java │ │ │ │ ├── SelectorResolver.java │ │ │ │ └── package-info.java │ │ │ ├── hierarchical/ │ │ │ │ ├── BlockingAwareFuture.java │ │ │ │ ├── CompositeLock.java │ │ │ │ ├── DefaultParallelExecutionConfiguration.java │ │ │ │ ├── DefaultParallelExecutionConfigurationStrategy.java │ │ │ │ ├── DelegatingFuture.java │ │ │ │ ├── EngineExecutionContext.java │ │ │ │ ├── ExclusiveResource.java │ │ │ │ ├── ForkJoinPoolHierarchicalTestExecutorService.java │ │ │ │ ├── HierarchicalTestEngine.java │ │ │ │ ├── HierarchicalTestExecutor.java │ │ │ │ ├── HierarchicalTestExecutorService.java │ │ │ │ ├── LockManager.java │ │ │ │ ├── Node.java │ │ │ │ ├── NodeExecutionAdvisor.java │ │ │ │ ├── NodeTestTask.java │ │ │ │ ├── NodeTestTaskContext.java │ │ │ │ ├── NodeTreeWalker.java │ │ │ │ ├── NodeUtils.java │ │ │ │ ├── NopLock.java │ │ │ │ ├── OpenTest4JAwareThrowableCollector.java │ │ │ │ ├── ParallelExecutionConfiguration.java │ │ │ │ ├── ParallelExecutionConfigurationStrategy.java │ │ │ │ ├── ParallelHierarchicalTestExecutorServiceFactory.java │ │ │ │ ├── ResourceLock.java │ │ │ │ ├── SameThreadHierarchicalTestExecutorService.java │ │ │ │ ├── SingleLock.java │ │ │ │ ├── ThrowableCollector.java │ │ │ │ ├── WorkerThreadPoolHierarchicalTestExecutorService.java │ │ │ │ └── package-info.java │ │ │ └── store/ │ │ │ ├── Namespace.java │ │ │ ├── NamespacedHierarchicalStore.java │ │ │ ├── NamespacedHierarchicalStoreException.java │ │ │ └── package-info.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── services/ │ │ └── org.junit.platform.engine.discovery.DiscoverySelectorIdentifierParser │ ├── test/ │ │ └── README.md │ └── testFixtures/ │ └── java/ │ └── org/ │ └── junit/ │ └── platform/ │ ├── engine/ │ │ └── support/ │ │ └── hierarchical/ │ │ ├── DemoEngineExecutionContext.java │ │ ├── DemoHierarchicalContainerDescriptor.java │ │ ├── DemoHierarchicalEngineDescriptor.java │ │ ├── DemoHierarchicalTestDescriptor.java │ │ └── DemoHierarchicalTestEngine.java │ └── fakes/ │ ├── FaultyTestEngines.java │ ├── TestDescriptorStub.java │ ├── TestEngineSpy.java │ ├── TestEngineStub.java │ └── package-info.java ├── junit-platform-launcher/ │ ├── junit-platform-launcher.gradle.kts │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ ├── module-info.java │ │ │ └── org/ │ │ │ └── junit/ │ │ │ └── platform/ │ │ │ └── launcher/ │ │ │ ├── AbstractMethodFilter.java │ │ │ ├── EngineDiscoveryResult.java │ │ │ ├── EngineFilter.java │ │ │ ├── ExcludeMethodFilter.java │ │ │ ├── IncludeMethodFilter.java │ │ │ ├── Launcher.java │ │ │ ├── LauncherConstants.java │ │ │ ├── LauncherDiscoveryListener.java │ │ │ ├── LauncherDiscoveryRequest.java │ │ │ ├── LauncherExecutionRequest.java │ │ │ ├── LauncherInterceptor.java │ │ │ ├── LauncherSession.java │ │ │ ├── LauncherSessionListener.java │ │ │ ├── MethodFilter.java │ │ │ ├── PostDiscoveryFilter.java │ │ │ ├── TagFilter.java │ │ │ ├── TestExecutionListener.java │ │ │ ├── TestIdentifier.java │ │ │ ├── TestPlan.java │ │ │ ├── core/ │ │ │ │ ├── ClasspathAlignmentChecker.java │ │ │ │ ├── ClasspathAlignmentCheckingLauncherInterceptor.java │ │ │ │ ├── CompositeEngineExecutionListener.java │ │ │ │ ├── CompositeTestExecutionListener.java │ │ │ │ ├── DefaultDiscoveryRequest.java │ │ │ │ ├── DefaultLauncher.java │ │ │ │ ├── DefaultLauncherConfig.java │ │ │ │ ├── DefaultLauncherExecutionRequest.java │ │ │ │ ├── DefaultLauncherSession.java │ │ │ │ ├── DelegatingEngineExecutionListener.java │ │ │ │ ├── DelegatingLauncher.java │ │ │ │ ├── DelegatingLauncherDiscoveryListener.java │ │ │ │ ├── DelegatingLauncherDiscoveryRequest.java │ │ │ │ ├── DiscoveryIssueCollector.java │ │ │ │ ├── DiscoveryIssueException.java │ │ │ │ ├── DiscoveryIssueNotifier.java │ │ │ │ ├── DiscoveryIssueReportingDiscoveryListener.java │ │ │ │ ├── EngineDiscoveryOrchestrator.java │ │ │ │ ├── EngineDiscoveryResultValidator.java │ │ │ │ ├── EngineExecutionOrchestrator.java │ │ │ │ ├── EngineFilterer.java │ │ │ │ ├── EngineIdValidator.java │ │ │ │ ├── ExecutionListenerAdapter.java │ │ │ │ ├── HierarchicalOutputDirectoryCreator.java │ │ │ │ ├── InterceptingLauncher.java │ │ │ │ ├── InternalTestPlan.java │ │ │ │ ├── IterationOrder.java │ │ │ │ ├── LauncherConfig.java │ │ │ │ ├── LauncherConfigurationParameters.java │ │ │ │ ├── LauncherDiscoveryRequestBuilder.java │ │ │ │ ├── LauncherDiscoveryResult.java │ │ │ │ ├── LauncherExecutionRequestBuilder.java │ │ │ │ ├── LauncherFactory.java │ │ │ │ ├── LauncherListenerRegistry.java │ │ │ │ ├── LauncherPhase.java │ │ │ │ ├── ListenerRegistry.java │ │ │ │ ├── MemoryCleanupListener.java │ │ │ │ ├── OutcomeDelayingEngineExecutionListener.java │ │ │ │ ├── ServiceLoaderRegistry.java │ │ │ │ ├── ServiceLoaderTestEngineRegistry.java │ │ │ │ ├── SessionPerRequestLauncher.java │ │ │ │ ├── StackTracePruningEngineExecutionListener.java │ │ │ │ ├── StreamInterceptingTestExecutionListener.java │ │ │ │ ├── StreamInterceptor.java │ │ │ │ ├── TestEngineFormatter.java │ │ │ │ └── package-info.java │ │ │ ├── jfr/ │ │ │ │ ├── FlightRecordingDiscoveryListener.java │ │ │ │ ├── FlightRecordingExecutionListener.java │ │ │ │ ├── JfrUtils.java │ │ │ │ ├── UniqueId.java │ │ │ │ └── package-info.java │ │ │ ├── listeners/ │ │ │ │ ├── LoggingListener.java │ │ │ │ ├── MutableTestExecutionSummary.java │ │ │ │ ├── OutputDir.java │ │ │ │ ├── SummaryGeneratingListener.java │ │ │ │ ├── TestExecutionSummary.java │ │ │ │ ├── UniqueIdTrackingListener.java │ │ │ │ ├── discovery/ │ │ │ │ │ ├── AbortOnFailureLauncherDiscoveryListener.java │ │ │ │ │ ├── CompositeLauncherDiscoveryListener.java │ │ │ │ │ ├── LauncherDiscoveryListeners.java │ │ │ │ │ ├── LoggingLauncherDiscoveryListener.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── package-info.java │ │ │ │ └── session/ │ │ │ │ ├── CompositeLauncherSessionListener.java │ │ │ │ ├── LauncherSessionListeners.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ └── tagexpression/ │ │ │ ├── DequeStack.java │ │ │ ├── Operator.java │ │ │ ├── Operators.java │ │ │ ├── ParseResult.java │ │ │ ├── ParseResults.java │ │ │ ├── ParseStatus.java │ │ │ ├── Parser.java │ │ │ ├── ShuntingYard.java │ │ │ ├── Stack.java │ │ │ ├── TagExpression.java │ │ │ ├── TagExpressions.java │ │ │ ├── Token.java │ │ │ ├── TokenWith.java │ │ │ ├── Tokenizer.java │ │ │ └── package-info.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── services/ │ │ └── org.junit.platform.launcher.TestExecutionListener │ ├── test/ │ │ └── README.md │ └── testFixtures/ │ └── java/ │ └── org/ │ └── junit/ │ └── platform/ │ └── launcher/ │ └── core/ │ ├── ConfigurationParametersFactoryForTests.java │ ├── LauncherFactoryForTestingPurposesOnly.java │ ├── NamespacedHierarchicalStoreProviders.java │ └── OutputDirectoryCreators.java ├── junit-platform-reporting/ │ ├── LICENSE-open-test-reporting.md │ ├── junit-platform-reporting.gradle.kts │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ ├── module-info.java │ │ │ └── org/ │ │ │ └── junit/ │ │ │ └── platform/ │ │ │ └── reporting/ │ │ │ ├── legacy/ │ │ │ │ ├── LegacyReportingUtils.java │ │ │ │ ├── package-info.java │ │ │ │ └── xml/ │ │ │ │ ├── LegacyXmlReportGeneratingListener.java │ │ │ │ ├── XmlReportData.java │ │ │ │ ├── XmlReportWriter.java │ │ │ │ └── package-info.java │ │ │ ├── open/ │ │ │ │ └── xml/ │ │ │ │ ├── GitInfoCollector.java │ │ │ │ ├── JUnitContributor.java │ │ │ │ ├── JUnitFactory.java │ │ │ │ ├── LegacyReportingName.java │ │ │ │ ├── OpenTestReportGeneratingListener.java │ │ │ │ ├── Type.java │ │ │ │ ├── UniqueId.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ └── resources/ │ │ ├── META-INF/ │ │ │ └── services/ │ │ │ ├── org.junit.platform.launcher.TestExecutionListener │ │ │ └── org.opentest4j.reporting.tooling.spi.htmlreport.Contributor │ │ └── org/ │ │ └── junit/ │ │ └── platform/ │ │ └── reporting/ │ │ └── open/ │ │ └── xml/ │ │ ├── catalog.xml │ │ └── junit.xsd │ ├── test/ │ │ └── README.md │ └── testFixtures/ │ └── java/ │ └── org/ │ └── junit/ │ └── platform/ │ └── reporting/ │ └── testutil/ │ └── FileUtils.java ├── junit-platform-suite/ │ ├── junit-platform-suite.gradle.kts │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── module-info.java │ └── test/ │ └── README.md ├── junit-platform-suite-api/ │ ├── junit-platform-suite-api.gradle.kts │ └── src/ │ ├── main/ │ │ └── java/ │ │ ├── module-info.java │ │ └── org/ │ │ └── junit/ │ │ └── platform/ │ │ └── suite/ │ │ └── api/ │ │ ├── AfterSuite.java │ │ ├── BeforeSuite.java │ │ ├── ConfigurationParameter.java │ │ ├── ConfigurationParameters.java │ │ ├── ConfigurationParametersResource.java │ │ ├── ConfigurationParametersResources.java │ │ ├── DisableParentConfigurationParameters.java │ │ ├── ExcludeClassNamePatterns.java │ │ ├── ExcludeEngines.java │ │ ├── ExcludePackages.java │ │ ├── ExcludeTags.java │ │ ├── IncludeClassNamePatterns.java │ │ ├── IncludeEngines.java │ │ ├── IncludePackages.java │ │ ├── IncludeTags.java │ │ ├── Select.java │ │ ├── SelectClasses.java │ │ ├── SelectClasspathResource.java │ │ ├── SelectClasspathResources.java │ │ ├── SelectDirectories.java │ │ ├── SelectFile.java │ │ ├── SelectFiles.java │ │ ├── SelectMethod.java │ │ ├── SelectMethods.java │ │ ├── SelectModules.java │ │ ├── SelectPackages.java │ │ ├── SelectUris.java │ │ ├── Selects.java │ │ ├── Suite.java │ │ ├── SuiteDisplayName.java │ │ └── package-info.java │ └── test/ │ └── README.md ├── junit-platform-suite-engine/ │ ├── junit-platform-suite-engine.gradle.kts │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ ├── module-info.java │ │ │ └── org/ │ │ │ └── junit/ │ │ │ └── platform/ │ │ │ └── suite/ │ │ │ └── engine/ │ │ │ ├── AdditionalDiscoverySelectors.java │ │ │ ├── ClassSelectorResolver.java │ │ │ ├── DiscoverySelectorResolver.java │ │ │ ├── IsSuiteClass.java │ │ │ ├── LifecycleMethodUtils.java │ │ │ ├── NoTestsDiscoveredException.java │ │ │ ├── SuiteEngineDescriptor.java │ │ │ ├── SuiteLauncher.java │ │ │ ├── SuiteLauncherDiscoveryRequestBuilder.java │ │ │ ├── SuiteTestDescriptor.java │ │ │ ├── SuiteTestEngine.java │ │ │ └── package-info.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── services/ │ │ └── org.junit.platform.engine.TestEngine │ └── test/ │ └── README.md ├── junit-platform-testkit/ │ ├── LICENSE.md │ ├── junit-platform-testkit.gradle.kts │ └── src/ │ ├── main/ │ │ └── java/ │ │ ├── module-info.java │ │ └── org/ │ │ └── junit/ │ │ └── platform/ │ │ └── testkit/ │ │ ├── engine/ │ │ │ ├── Assertions.java │ │ │ ├── EngineDiscoveryResults.java │ │ │ ├── EngineExecutionResults.java │ │ │ ├── EngineTestKit.java │ │ │ ├── Event.java │ │ │ ├── EventConditions.java │ │ │ ├── EventStatistics.java │ │ │ ├── EventType.java │ │ │ ├── Events.java │ │ │ ├── Execution.java │ │ │ ├── ExecutionRecorder.java │ │ │ ├── Executions.java │ │ │ ├── TerminationInfo.java │ │ │ ├── TestExecutionResultConditions.java │ │ │ └── package-info.java │ │ └── package-info.java │ └── test/ │ └── README.md ├── junit-start/ │ ├── junit-start.gradle.kts │ └── src/ │ └── main/ │ └── java/ │ ├── module-info.java │ └── org/ │ └── junit/ │ └── start/ │ ├── JUnit.java │ └── package-info.java ├── junit-vintage-engine/ │ ├── junit-vintage-engine.gradle.kts │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ ├── module-info.java │ │ │ └── org/ │ │ │ └── junit/ │ │ │ └── vintage/ │ │ │ └── engine/ │ │ │ ├── Constants.java │ │ │ ├── JUnit4VersionCheck.java │ │ │ ├── VintageTestEngine.java │ │ │ ├── descriptor/ │ │ │ │ ├── DescriptionUtils.java │ │ │ │ ├── OrFilter.java │ │ │ │ ├── RunnerDecorator.java │ │ │ │ ├── RunnerRequest.java │ │ │ │ ├── RunnerTestDescriptor.java │ │ │ │ ├── TestSourceProvider.java │ │ │ │ ├── VintageEngineDescriptor.java │ │ │ │ ├── VintageTestDescriptor.java │ │ │ │ └── package-info.java │ │ │ ├── discovery/ │ │ │ │ ├── ClassSelectorResolver.java │ │ │ │ ├── DefensiveAllDefaultPossibilitiesBuilder.java │ │ │ │ ├── FilterableIgnoringRunnerDecorator.java │ │ │ │ ├── IgnoringRunnerDecorator.java │ │ │ │ ├── IsPotentialJUnit4TestClass.java │ │ │ │ ├── IsPotentialJUnit4TestMethod.java │ │ │ │ ├── MethodSelectorResolver.java │ │ │ │ ├── RunnerTestDescriptorPostProcessor.java │ │ │ │ ├── UniqueIdFilter.java │ │ │ │ ├── VintageDiscoverer.java │ │ │ │ └── package-info.java │ │ │ ├── execution/ │ │ │ │ ├── CancellationTokenAwareRunNotifier.java │ │ │ │ ├── EventType.java │ │ │ │ ├── RunListenerAdapter.java │ │ │ │ ├── RunnerExecutor.java │ │ │ │ ├── TestRun.java │ │ │ │ ├── VintageExecutor.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ └── support/ │ │ │ ├── UniqueIdReader.java │ │ │ ├── UniqueIdStringifier.java │ │ │ └── package-info.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── services/ │ │ └── org.junit.platform.engine.TestEngine │ ├── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── junit/ │ │ │ └── vintage/ │ │ │ └── engine/ │ │ │ ├── JUnit4ParameterizedTests.java │ │ │ ├── JUnit4VersionCheckTests.java │ │ │ ├── VintageLauncherIntegrationTests.java │ │ │ ├── VintageTestEngineBasicTests.java │ │ │ ├── VintageTestEngineDiscoveryTests.java │ │ │ ├── VintageTestEngineExecutionTests.java │ │ │ ├── VintageTestEngineTestSuite.java │ │ │ ├── VintageUniqueIdBuilder.java │ │ │ ├── descriptor/ │ │ │ │ ├── DescriptionUtilsTests.java │ │ │ │ ├── OrFilterTests.java │ │ │ │ ├── TestSourceProviderTests.java │ │ │ │ └── VintageTestDescriptorTests.java │ │ │ ├── discovery/ │ │ │ │ ├── IsPotentialJUnit4TestClassTests.java │ │ │ │ ├── RunnerTestDescriptorPostProcessorTests.java │ │ │ │ └── VintageDiscovererTests.java │ │ │ ├── execution/ │ │ │ │ ├── ParallelExecutionIntegrationTests.java │ │ │ │ └── TestRunTests.java │ │ │ └── support/ │ │ │ ├── UniqueIdReaderTests.java │ │ │ └── UniqueIdStringifierTests.java │ │ └── resources/ │ │ ├── junit-platform.properties │ │ ├── log4j2-test.xml │ │ └── vintage-testjar.jar │ └── testFixtures/ │ ├── groovy/ │ │ └── org/ │ │ └── junit/ │ │ └── vintage/ │ │ └── engine/ │ │ └── samples/ │ │ └── spock/ │ │ └── SpockTestCaseWithUnrolledAndRegularFeatureMethods.groovy │ └── java/ │ └── org/ │ └── junit/ │ ├── platform/ │ │ └── runner/ │ │ └── JUnitPlatform.java │ └── vintage/ │ └── engine/ │ └── samples/ │ ├── PlainOldJavaClassWithoutAnyTestsTestCase.java │ ├── junit3/ │ │ ├── AbstractJUnit3TestCase.java │ │ ├── IgnoredJUnit3TestCase.java │ │ ├── JUnit3ParallelSuiteWithSubsuites.java │ │ ├── JUnit3SuiteWithSingleTestCaseWithSingleTestWhichFails.java │ │ ├── JUnit3SuiteWithSubsuites.java │ │ ├── JUnit4SuiteWithIgnoredJUnit3TestCase.java │ │ └── PlainJUnit3TestCaseWithSingleTestWhichFails.java │ └── junit4/ │ ├── AbstractJUnit4TestCase.java │ ├── AbstractJunit4TestCaseWithConstructorParameter.java │ ├── CancellingTestCase.java │ ├── Categories.java │ ├── CompletelyDynamicTestCase.java │ ├── ConcreteJUnit4TestCase.java │ ├── ConfigurableRunner.java │ ├── DynamicRunner.java │ ├── EmptyIgnoredTestCase.java │ ├── EnclosedJUnit4TestCase.java │ ├── EnclosedWithParameterizedChildrenJUnit4TestCase.java │ ├── ExceptionThrowingRunner.java │ ├── IgnoredJUnit4TestCase.java │ ├── IgnoredJUnit4TestCaseWithNotFilterableRunner.java │ ├── IgnoredParameterizedTestCase.java │ ├── JUnit4ParallelClassesTestCase.java │ ├── JUnit4ParallelMethodsTestCase.java │ ├── JUnit4ParameterizedTestCase.java │ ├── JUnit4SuiteOfSuiteWithFilterableChildRunner.java │ ├── JUnit4SuiteOfSuiteWithIgnoredJUnit4TestCase.java │ ├── JUnit4SuiteOfSuiteWithJUnit4TestCaseWithAssumptionFailureInBeforeClass.java │ ├── JUnit4SuiteOfSuiteWithJUnit4TestCaseWithErrorInBeforeClass.java │ ├── JUnit4SuiteWithExceptionThrowingRunner.java │ ├── JUnit4SuiteWithIgnoredJUnit4TestCase.java │ ├── JUnit4SuiteWithJUnit3SuiteWithSingleTestCase.java │ ├── JUnit4SuiteWithJUnit4TestCaseWithAssumptionFailureInBeforeClass.java │ ├── JUnit4SuiteWithJUnit4TestCaseWithErrorInBeforeClass.java │ ├── JUnit4SuiteWithJUnit4TestCaseWithFailingDescriptionThatIsNotReportedAsFinished.java │ ├── JUnit4SuiteWithJUnit4TestCaseWithRunnerWithCustomUniqueIdsAndDisplayNames.java │ ├── JUnit4SuiteWithPlainJUnit4TestCaseWithSingleTestWhichIsIgnored.java │ ├── JUnit4SuiteWithTwoTestCases.java │ ├── JUnit4TestCaseWithAssumptionFailureInBeforeClass.java │ ├── JUnit4TestCaseWithDistinguishableOverloadedMethod.java │ ├── JUnit4TestCaseWithErrorCollectorStoringMultipleFailures.java │ ├── JUnit4TestCaseWithErrorInAfterClass.java │ ├── JUnit4TestCaseWithErrorInBeforeClass.java │ ├── JUnit4TestCaseWithExceptionThrowingRunner.java │ ├── JUnit4TestCaseWithFailingDescriptionThatIsNotReportedAsFinished.java │ ├── JUnit4TestCaseWithIndistinguishableOverloadedMethod.java │ ├── JUnit4TestCaseWithNotFilterableRunner.java │ ├── JUnit4TestCaseWithRunnerWithCustomUniqueIdsAndDisplayNames.java │ ├── JUnit4TestCaseWithRunnerWithDuplicateChangingChildDescriptions.java │ ├── Label.java │ ├── MalformedJUnit4TestCase.java │ ├── NotFilterableRunner.java │ ├── ParameterizedTestCase.java │ ├── ParameterizedTimingTestCase.java │ ├── ParameterizedWithAfterParamFailureTestCase.java │ ├── ParameterizedWithBeforeParamFailureTestCase.java │ ├── PlainJUnit4TestCaseWithFiveTestMethods.java │ ├── PlainJUnit4TestCaseWithLifecycleMethods.java │ ├── PlainJUnit4TestCaseWithSingleInheritedTestWhichFails.java │ ├── PlainJUnit4TestCaseWithSingleTestWhichFails.java │ ├── PlainJUnit4TestCaseWithSingleTestWhichIsIgnored.java │ ├── PlainJUnit4TestCaseWithTwoTestMethods.java │ ├── RunnerThatOnlyReportsFailures.java │ ├── RunnerWithCustomUniqueIdsAndDisplayNames.java │ ├── SingleFailingTheoryTestCase.java │ ├── TestCaseRunWithJUnitPlatformRunner.java │ └── package-info.java ├── jupiter-tests/ │ ├── jupiter-tests.gradle.kts │ └── src/ │ ├── templates/ │ │ └── resources/ │ │ └── test/ │ │ └── org/ │ │ └── junit/ │ │ └── jupiter/ │ │ └── api/ │ │ └── condition/ │ │ ├── DisabledOnJreConditionTests.java.jte │ │ ├── DisabledOnJreIntegrationTests.java.jte │ │ ├── EnabledOnJreConditionTests.java.jte │ │ └── EnabledOnJreIntegrationTests.java.jte │ └── test/ │ ├── groovy/ │ │ └── org/ │ │ └── junit/ │ │ └── jupiter/ │ │ └── api/ │ │ ├── GroovyAssertEqualsTests.groovy │ │ ├── GroovyAssertNotEqualsTests.groovy │ │ └── PrimitiveAndWrapperTypeHelpers.groovy │ ├── java/ │ │ ├── DefaultPackageTestCase.java │ │ ├── example/ │ │ │ └── B_TestCase.java │ │ └── org/ │ │ └── junit/ │ │ └── jupiter/ │ │ ├── JupiterTestSuite.java │ │ ├── api/ │ │ │ ├── AssertAllAssertionsTests.java │ │ │ ├── AssertArrayEqualsAssertionsTests.java │ │ │ ├── AssertDoesNotThrowAssertionsTests.java │ │ │ ├── AssertEqualsAssertionsTests.java │ │ │ ├── AssertFalseAssertionsTests.java │ │ │ ├── AssertInstanceOfAssertionsTests.java │ │ │ ├── AssertIterableEqualsAssertionsTests.java │ │ │ ├── AssertLinesMatchAssertionsTests.java │ │ │ ├── AssertNotEqualsAssertionsTests.java │ │ │ ├── AssertNotNullAssertionsTests.java │ │ │ ├── AssertNotSameAssertionsTests.java │ │ │ ├── AssertNullAssertionsTests.java │ │ │ ├── AssertSameAssertionsTests.java │ │ │ ├── AssertThrowsAssertionsTests.java │ │ │ ├── AssertThrowsExactlyAssertionsTests.java │ │ │ ├── AssertTimeoutAssertionsTests.java │ │ │ ├── AssertTimeoutPreemptivelyAssertionsTests.java │ │ │ ├── AssertTrueAssertionsTests.java │ │ │ ├── AssertionFailureBuilderTest.java │ │ │ ├── AssumptionsTests.java │ │ │ ├── ConstantTests.java │ │ │ ├── DisplayNameGenerationInheritanceTestCase.java │ │ │ ├── DisplayNameGenerationTests.java │ │ │ ├── DynamicContainerTests.java │ │ │ ├── DynamicTestTests.java │ │ │ ├── EnigmaThrowable.java │ │ │ ├── FailAssertionsTests.java │ │ │ ├── IndicativeSentencesGenerationInheritanceTestCase.java │ │ │ ├── IndicativeSentencesNestedTestCase.java │ │ │ ├── IndicativeSentencesOnSubClassScenarioOneTestCase.java │ │ │ ├── IndicativeSentencesOnSubClassTestCase.java │ │ │ ├── IndicativeSentencesRuntimeEnclosingTypeScenarioOneTestCase.java │ │ │ ├── IndicativeSentencesRuntimeEnclosingTypeScenarioTwoTestCase.java │ │ │ ├── IndicativeSentencesRuntimeEnclosingTypeTestCase.java │ │ │ ├── IndicativeSentencesTopLevelTestCase.java │ │ │ ├── IterableFactory.java │ │ │ ├── MediaTypeTests.java │ │ │ ├── RandomlyOrderedTests.java │ │ │ ├── condition/ │ │ │ │ ├── AbstractExecutionConditionTests.java │ │ │ │ ├── ConditionEvaluationResultTests.java │ │ │ │ ├── DisabledForJreRangeConditionTests.java │ │ │ │ ├── DisabledForJreRangeIntegrationTests.java │ │ │ │ ├── DisabledIfConditionClassLoaderTests.java │ │ │ │ ├── DisabledIfConditionTests.java │ │ │ │ ├── DisabledIfEnvironmentVariableConditionTests.java │ │ │ │ ├── DisabledIfEnvironmentVariableIntegrationTests.java │ │ │ │ ├── DisabledIfIntegrationTests.java │ │ │ │ ├── DisabledIfSystemPropertyConditionTests.java │ │ │ │ ├── DisabledIfSystemPropertyIntegrationTests.java │ │ │ │ ├── DisabledOnOsConditionTests.java │ │ │ │ ├── DisabledOnOsIntegrationTests.java │ │ │ │ ├── EnabledForJreRangeConditionTests.java │ │ │ │ ├── EnabledForJreRangeIntegrationTests.java │ │ │ │ ├── EnabledIfConditionClassLoaderTests.java │ │ │ │ ├── EnabledIfConditionTests.java │ │ │ │ ├── EnabledIfEnvironmentVariableConditionTests.java │ │ │ │ ├── EnabledIfEnvironmentVariableIntegrationTests.java │ │ │ │ ├── EnabledIfIntegrationTests.java │ │ │ │ ├── EnabledIfSystemPropertyConditionTests.java │ │ │ │ ├── EnabledIfSystemPropertyIntegrationTests.java │ │ │ │ ├── EnabledOnOsConditionTests.java │ │ │ │ ├── EnabledOnOsIntegrationTests.java │ │ │ │ ├── JRETests.java │ │ │ │ ├── OSTests.java │ │ │ │ ├── StaticConditionMethods.java │ │ │ │ └── TestDoubleJRETests.java │ │ │ ├── extension/ │ │ │ │ ├── CloseableResourceIntegrationTests.java │ │ │ │ ├── DeprecatedMediaTypeTests.java │ │ │ │ ├── ExecutableInvokerIntegrationTests.java │ │ │ │ ├── ExtensionComposabilityTests.java │ │ │ │ ├── Heavyweight.java │ │ │ │ ├── HeavyweightTests.java │ │ │ │ ├── KitchenSinkExtension.java │ │ │ │ ├── MediaTypeInteroperabilityTests.java │ │ │ │ └── support/ │ │ │ │ └── TypeBasedParameterResolverTests.java │ │ │ ├── io/ │ │ │ │ └── TempDirDeletionStrategyTests.java │ │ │ ├── parallel/ │ │ │ │ ├── LockTests.java │ │ │ │ ├── ResourceLockAnnotationTests.java │ │ │ │ └── ResourceLocksProviderTests.java │ │ │ ├── subpackage/ │ │ │ │ ├── SubclassedAssertionsTests.java │ │ │ │ └── SubclassedAssumptionsTests.java │ │ │ ├── timeout/ │ │ │ │ └── PreemptiveTimeoutUtilsTest.java │ │ │ └── util/ │ │ │ ├── DefaultLocaleTests.java │ │ │ ├── DefaultTimeZoneTests.java │ │ │ ├── JupiterPropertyUtilsTests.java │ │ │ └── SystemPropertiesExtensionTests.java │ │ ├── engine/ │ │ │ ├── AbstractJupiterTestEngineTests.java │ │ │ ├── AtypicalJvmMethodNameTests.java │ │ │ ├── BeforeAllAndAfterAllComposedAnnotationTests.java │ │ │ ├── BeforeEachAndAfterEachComposedAnnotationTests.java │ │ │ ├── ClassTemplateInvocationTests.java │ │ │ ├── DefaultExecutionModeTests.java │ │ │ ├── DefaultMethodTests.java │ │ │ ├── DisabledTests.java │ │ │ ├── DynamicNodeGenerationTests.java │ │ │ ├── ExceptionHandlingTests.java │ │ │ ├── ExecutionCancellationTests.java │ │ │ ├── FailedAssumptionsTests.java │ │ │ ├── InvalidLifecycleMethodConfigurationTests.java │ │ │ ├── JupiterTestEngineTests.java │ │ │ ├── LifecycleMethodOverridingTests.java │ │ │ ├── MultipleTestableAnnotationsTests.java │ │ │ ├── NestedTestClassesTests.java │ │ │ ├── NestedWithInheritanceTests.java │ │ │ ├── NestedWithSeparateInheritanceTests.java │ │ │ ├── OverloadedTestMethodTests.java │ │ │ ├── RecordTests.java │ │ │ ├── ReportingTests.java │ │ │ ├── SealedClassTests.java │ │ │ ├── StandardTestClassTests.java │ │ │ ├── StaticNestedBeforeAllAndAfterAllMethodsTests.java │ │ │ ├── StaticNestedTestCase.java │ │ │ ├── TestClassInheritanceTests.java │ │ │ ├── TestInstanceLifecycleConfigurationTests.java │ │ │ ├── TestInstanceLifecycleKotlinTests.java │ │ │ ├── TestInstanceLifecycleTests.java │ │ │ ├── TestMethodOverridingTests.java │ │ │ ├── TestTemplateInvocationTests.java │ │ │ ├── TopLevelComposedNested.java │ │ │ ├── TopLevelNestedTestCase.java │ │ │ ├── bridge/ │ │ │ │ ├── AbstractNonGenericTests.java │ │ │ │ ├── AbstractNumberTests.java │ │ │ │ ├── BridgeMethodTests.java │ │ │ │ ├── ChildWithBridgeMethods.java │ │ │ │ ├── ChildWithoutBridgeMethods.java │ │ │ │ ├── NumberResolver.java │ │ │ │ ├── NumberTestGroup.java │ │ │ │ └── PackagePrivateParent.java │ │ │ ├── config/ │ │ │ │ ├── CachingJupiterConfigurationTests.java │ │ │ │ ├── DefaultJupiterConfigurationTests.java │ │ │ │ └── InstantiatingConfigurationParameterConverterTests.java │ │ │ ├── descriptor/ │ │ │ │ ├── CustomDisplayNameGenerator.java │ │ │ │ ├── DisplayNameUtilsTests.java │ │ │ │ ├── ExtensionContextTests.java │ │ │ │ ├── ExtensionsUtilsTests.java │ │ │ │ ├── JupiterTestDescriptorTests.java │ │ │ │ ├── LauncherStoreFacadeTest.java │ │ │ │ ├── LifecycleMethodUtilsTests.java │ │ │ │ ├── NamespaceTests.java │ │ │ │ ├── ResourceAutoClosingTests.java │ │ │ │ ├── TestFactoryTestDescriptorTests.java │ │ │ │ ├── TestInstanceLifecycleUtilsTests.java │ │ │ │ ├── TestTemplateInvocationTestDescriptorTests.java │ │ │ │ ├── TestTemplateTestDescriptorTests.java │ │ │ │ └── subpackage/ │ │ │ │ ├── Class1WithTestCases.java │ │ │ │ ├── Class2WithTestCases.java │ │ │ │ ├── ClassWithStaticInnerTestCases.java │ │ │ │ └── ClassWithoutTestCases.java │ │ │ ├── discovery/ │ │ │ │ ├── DiscoverySelectorResolverTests.java │ │ │ │ ├── DiscoveryTests.java │ │ │ │ └── predicates/ │ │ │ │ ├── IsTestFactoryMethodTests.java │ │ │ │ ├── IsTestMethodTests.java │ │ │ │ ├── IsTestTemplateMethodTests.java │ │ │ │ └── TestClassPredicatesTests.java │ │ │ ├── execution/ │ │ │ │ ├── AbstractExecutableInvokerTests.java │ │ │ │ ├── DefaultExecutableInvokerTests.java │ │ │ │ ├── DefaultTestInstancesTests.java │ │ │ │ ├── DynamicTestIntegrationTests.java │ │ │ │ ├── ExtensionContextStoreConcurrencyTests.java │ │ │ │ ├── ExtensionContextStoreTests.java │ │ │ │ ├── InterceptingExecutableInvokerTests.java │ │ │ │ ├── JupiterEngineExecutionContextTests.java │ │ │ │ ├── ParameterResolutionUtilsTests.java │ │ │ │ ├── UniqueIdParsingForArrayParameterIntegrationTests.java │ │ │ │ └── injection/ │ │ │ │ └── sample/ │ │ │ │ ├── CustomAnnotation.java │ │ │ │ ├── CustomAnnotationParameterResolver.java │ │ │ │ ├── CustomType.java │ │ │ │ ├── CustomTypeParameterResolver.java │ │ │ │ ├── DoubleParameterResolver.java │ │ │ │ ├── LongParameterResolver.java │ │ │ │ ├── MapOfListsTypeBasedParameterResolver.java │ │ │ │ ├── MapOfStringsParameterResolver.java │ │ │ │ ├── NullIntegerParameterResolver.java │ │ │ │ ├── NumberParameterResolver.java │ │ │ │ ├── PrimitiveArrayParameterResolver.java │ │ │ │ └── PrimitiveIntegerParameterResolver.java │ │ │ ├── extension/ │ │ │ │ ├── AutoCloseTests.java │ │ │ │ ├── BeforeAndAfterAllTests.java │ │ │ │ ├── BeforeAndAfterEachTests.java │ │ │ │ ├── BeforeAndAfterTestExecutionCallbackTests.java │ │ │ │ ├── CloseablePathTests.java │ │ │ │ ├── ConfigLoaderExtension.java │ │ │ │ ├── DefaultTestReporterTests.java │ │ │ │ ├── EnigmaException.java │ │ │ │ ├── EventuallyInterruptibleInvocation.java │ │ │ │ ├── ExecutionConditionTests.java │ │ │ │ ├── ExtensionContextExecutionTests.java │ │ │ │ ├── ExtensionRegistrationViaParametersAndFieldsTests.java │ │ │ │ ├── ExtensionRegistryTests.java │ │ │ │ ├── InvocationInterceptorTests.java │ │ │ │ ├── LifecycleMethodExecutionExceptionHandlerTests.java │ │ │ │ ├── OrderedClassTests.java │ │ │ │ ├── OrderedMethodTests.java │ │ │ │ ├── OrderedProgrammaticExtensionRegistrationTests.java │ │ │ │ ├── ParameterResolverTests.java │ │ │ │ ├── PreInterruptCallbackTests.java │ │ │ │ ├── ProgrammaticExtensionRegistrationTests.java │ │ │ │ ├── RepeatedTestTests.java │ │ │ │ ├── SameThreadTimeoutInvocationTests.java │ │ │ │ ├── SeparateThreadTimeoutInvocationTests.java │ │ │ │ ├── ServiceLoaderExtension.java │ │ │ │ ├── TempDirectoryCleanupTests.java │ │ │ │ ├── TempDirectoryMetaAnnotationTests.java │ │ │ │ ├── TempDirectoryPreconditionTests.java │ │ │ │ ├── TempDirectoryTests.java │ │ │ │ ├── TestExecutionExceptionHandlerTests.java │ │ │ │ ├── TestInfoParameterResolverTests.java │ │ │ │ ├── TestInstanceFactoryTests.java │ │ │ │ ├── TestInstancePostProcessorAndPreDestroyCallbackTests.java │ │ │ │ ├── TestInstancePostProcessorTests.java │ │ │ │ ├── TestInstancePreConstructCallbackTests.java │ │ │ │ ├── TestInstancePreDestroyCallbackTests.java │ │ │ │ ├── TestInstancePreDestroyCallbackUtilityMethodTests.java │ │ │ │ ├── TestReporterParameterResolverTests.java │ │ │ │ ├── TestWatcherTests.java │ │ │ │ ├── TimeoutConfigurationTests.java │ │ │ │ ├── TimeoutDurationParserTests.java │ │ │ │ ├── TimeoutDurationTests.java │ │ │ │ ├── TimeoutExceptionFactoryTests.java │ │ │ │ ├── TimeoutExtensionTests.java │ │ │ │ ├── TimeoutInvocationFactoryTests.java │ │ │ │ └── sub/ │ │ │ │ ├── AlwaysDisabledCondition.java │ │ │ │ ├── AnotherAlwaysDisabledCondition.java │ │ │ │ └── SystemPropertyCondition.java │ │ │ ├── subpackage/ │ │ │ │ └── SuperClassWithPackagePrivateLifecycleMethodInDifferentPackageTestCase.java │ │ │ └── support/ │ │ │ └── OpenTest4JAndJUnit4AwareThrowableCollectorTests.java │ │ ├── migrationsupport/ │ │ │ ├── JupiterMigrationSupportTestSuite.java │ │ │ ├── conditions/ │ │ │ │ ├── IgnoreAnnotationIntegrationTests.java │ │ │ │ └── IgnoreConditionTests.java │ │ │ └── rules/ │ │ │ ├── AbstractTestRuleAdapterTests.java │ │ │ ├── EnableRuleMigrationSupportWithBothRuleTypesTests.java │ │ │ ├── ExpectedExceptionSupportTests.java │ │ │ ├── ExternalResourceSupportForDifferentDeclaredReturnTypesRulesTests.java │ │ │ ├── ExternalResourceSupportForMixedMethodAndFieldRulesTests.java │ │ │ ├── ExternalResourceSupportForMultipleFieldRulesTests.java │ │ │ ├── ExternalResourceSupportForMultipleMethodRulesTests.java │ │ │ ├── ExternalResourceSupportForTemporaryFolderFieldTests.java │ │ │ ├── ExternalResourceSupportWithInheritanceTests.java │ │ │ ├── ExternalResourceWithoutAdapterTests.java │ │ │ ├── FailAfterAllHelper.java │ │ │ ├── LauncherBasedEnableRuleMigrationSupportTests.java │ │ │ ├── VerifierSupportForMixedMethodAndFieldRulesTests.java │ │ │ ├── WrongExtendWithForVerifierFieldTests.java │ │ │ └── WrongExtendWithForVerifierMethodTests.java │ │ └── params/ │ │ ├── ParameterInfoIntegrationTests.java │ │ ├── ParameterizedClassIntegrationTests.java │ │ ├── ParameterizedInvocationNameFormatterTests.java │ │ ├── ParameterizedTestContextTests.java │ │ ├── ParameterizedTestExtensionTests.java │ │ ├── ParameterizedTestIntegrationTests.java │ │ ├── ParameterizedTestSuite.java │ │ ├── aggregator/ │ │ │ ├── AggregatorIntegrationTests.java │ │ │ └── DefaultArgumentsAccessorTests.java │ │ ├── converter/ │ │ │ ├── DefaultArgumentConverterTests.java │ │ │ ├── JavaTimeArgumentConverterTests.java │ │ │ └── TypedArgumentConverterTests.java │ │ ├── provider/ │ │ │ ├── AnnotationBasedArgumentsProviderTests.java │ │ │ ├── ArgumentsTests.java │ │ │ ├── CsvArgumentsProviderTests.java │ │ │ ├── CsvFileArgumentsProviderTests.java │ │ │ ├── EnumArgumentsProviderTests.java │ │ │ ├── EnumSourceTests.java │ │ │ ├── FieldArgumentsProviderTests.java │ │ │ ├── MethodArgumentsProviderTests.java │ │ │ ├── MockCsvAnnotationBuilder.java │ │ │ └── ValueArgumentsProviderTests.java │ │ └── support/ │ │ ├── AnnotationConsumerInitializerTests.java │ │ └── DeprecatedParameterInfoIntegrationTests.java │ ├── kotlin/ │ │ └── org/ │ │ └── junit/ │ │ └── jupiter/ │ │ ├── api/ │ │ │ └── kotlin/ │ │ │ ├── GenericInlineValueClassTests.kt │ │ │ ├── KotlinAssertTimeoutAssertionsTests.kt │ │ │ ├── KotlinAssertionsTests.kt │ │ │ ├── KotlinDynamicTests.kt │ │ │ ├── KotlinFailAssertionsTests.kt │ │ │ ├── KotlinSuspendFunctionsTests.kt │ │ │ └── PrimitiveWrapperInlineValueClassTests.kt │ │ ├── engine/ │ │ │ └── kotlin/ │ │ │ ├── ArbitraryNamingKotlinTestCase.kt │ │ │ ├── InstancePerClassKotlinTestCase.kt │ │ │ ├── InstancePerMethodKotlinTestCase.kt │ │ │ ├── KotlinDefaultImplsTestCase.kt │ │ │ ├── KotlinInterfaceImplementationTestCase.kt │ │ │ └── KotlinInterfaceTestCase.kt │ │ └── params/ │ │ ├── ParameterizedClassKotlinIntegrationTests.kt │ │ ├── ParameterizedInvocationNameFormatterIntegrationTests.kt │ │ ├── ParameterizedTestKotlinSequenceIntegrationTests.kt │ │ ├── aggregator/ │ │ │ ├── ArgumentsAccessorKotlinTests.kt │ │ │ └── DisplayNameTests.kt │ │ └── converter/ │ │ └── TypedArgumentConverterKotlinTests.kt │ └── resources/ │ ├── META-INF/ │ │ └── services/ │ │ └── org.junit.jupiter.api.extension.Extension │ ├── junit-platform.properties │ ├── jupiter-testjar.jar │ ├── log4j2-test.xml │ └── org/ │ └── junit/ │ └── jupiter/ │ └── params/ │ ├── provider/ │ │ ├── broken.csv │ │ ├── default-max-chars.csv │ │ ├── exceeds-default-max-chars.csv │ │ ├── leading-trailing-spaces.csv │ │ └── single-column.csv │ ├── two-column-with-headers.csv │ └── two-column.csv ├── platform-tests/ │ ├── platform-tests.gradle.kts │ └── src/ │ ├── jmh/ │ │ └── java/ │ │ └── org/ │ │ └── junit/ │ │ └── jupiter/ │ │ └── jmh/ │ │ └── AssertionBenchmarks.java │ ├── processStarter/ │ │ └── java/ │ │ └── org/ │ │ └── junit/ │ │ └── platform/ │ │ └── tests/ │ │ └── process/ │ │ ├── OutputFiles.java │ │ ├── ProcessResult.java │ │ ├── ProcessStarter.java │ │ ├── WatchedOutput.java │ │ ├── WatchedProcess.java │ │ └── package-info.java │ └── test/ │ ├── java/ │ │ ├── DefaultPackageTestCase.java │ │ └── org/ │ │ └── junit/ │ │ └── platform/ │ │ ├── JUnitPlatformTestSuite.java │ │ ├── StackTracePruningTests.java │ │ ├── TestEngineTests.java │ │ ├── commons/ │ │ │ ├── annotation/ │ │ │ │ └── TestableAnnotationTests.java │ │ │ ├── function/ │ │ │ │ └── TryTests.java │ │ │ ├── support/ │ │ │ │ ├── AnnotationSupportTests.java │ │ │ │ ├── ClassSupportTests.java │ │ │ │ ├── ModifierSupportTests.java │ │ │ │ ├── ReflectionSupportTests.java │ │ │ │ ├── ResourceInteroperabilityTests.java │ │ │ │ ├── ResourceSupportTests.java │ │ │ │ └── conversion/ │ │ │ │ ├── ConversionSupportTests.java │ │ │ │ └── FallbackStringToObjectConverterTests.java │ │ │ └── util/ │ │ │ ├── AnnotationUtilsTests.java │ │ │ ├── ClassLoaderUtilsTests.java │ │ │ ├── ClassNamePatternFilterUtilsTests.java │ │ │ ├── ClassUtilsTests.java │ │ │ ├── CloseablePathTests.java │ │ │ ├── CollectionUtilsTests.java │ │ │ ├── DefaultClasspathScannerTests.java │ │ │ ├── ExceptionUtilsTests.java │ │ │ ├── FunctionUtilsTests.java │ │ │ ├── LruCacheTests.java │ │ │ ├── PackageUtilsTests.java │ │ │ ├── PreconditionsTests.java │ │ │ ├── ReflectionUtilsTests.java │ │ │ ├── ReflectionUtilsWithGenericTypeHierarchiesTests.java │ │ │ ├── RuntimeUtilsTests.java │ │ │ ├── SerializationUtils.java │ │ │ ├── StringUtilsTests.java │ │ │ ├── ToStringBuilderTests.java │ │ │ ├── classes/ │ │ │ │ ├── AExecutionConditionClass.java │ │ │ │ ├── ATestExecutionListenerClass.java │ │ │ │ ├── AVanillaEmpty.java │ │ │ │ ├── BExecutionConditionClass.java │ │ │ │ ├── BTestExecutionListenerClass.java │ │ │ │ ├── BVanillaEmpty.java │ │ │ │ └── CustomType.java │ │ │ └── pkg1/ │ │ │ ├── ClassLevelDir.java │ │ │ ├── InstanceLevelDir.java │ │ │ ├── SuperclassWithStaticPackagePrivateBeforeMethod.java │ │ │ ├── SuperclassWithStaticPackagePrivateTempDirField.java │ │ │ └── subpkg/ │ │ │ ├── SubclassWithNonStaticPackagePrivateBeforeMethod.java │ │ │ └── SubclassWithNonStaticPackagePrivateTempDirField.java │ │ ├── console/ │ │ │ ├── ConsoleDetailsTests.java │ │ │ ├── ConsoleLauncherIntegrationTests.java │ │ │ ├── ConsoleLauncherTests.java │ │ │ ├── ConsoleLauncherWrapper.java │ │ │ ├── ConsoleLauncherWrapperResult.java │ │ │ ├── command/ │ │ │ │ ├── CommandLineOptionsParsingTests.java │ │ │ │ ├── ConsoleTestExecutorTests.java │ │ │ │ ├── ConsoleUtilsTests.java │ │ │ │ ├── CustomContextClassLoaderExecutorTests.java │ │ │ │ ├── DiscoveryRequestCreatorTests.java │ │ │ │ ├── ExecuteTestsCommandTests.java │ │ │ │ ├── StdStreamTestCase.java │ │ │ │ └── ThemeTests.java │ │ │ ├── output/ │ │ │ │ ├── ColorPaletteTests.java │ │ │ │ ├── FlatPrintingListenerTests.java │ │ │ │ ├── TestFeedPrintingListenerTests.java │ │ │ │ ├── TreeNodeTests.java │ │ │ │ ├── TreePrinterTests.java │ │ │ │ └── VerboseTreePrintingListenerTests.java │ │ │ └── subpackage/ │ │ │ ├── ContainerForInnerTest.java │ │ │ ├── ContainerForInnerTests.java │ │ │ ├── ContainerForStaticNestedTest.java │ │ │ ├── ContainerForStaticNestedTests.java │ │ │ ├── FailingTestCase.java │ │ │ ├── SecondTest.java │ │ │ ├── Test.java │ │ │ ├── Test1.java │ │ │ ├── Tests.java │ │ │ └── ThirdTests.java │ │ ├── engine/ │ │ │ ├── CompositeTestDescriptorVisitorTests.java │ │ │ ├── DiscoveryIssueTests.java │ │ │ ├── FilterCompositionTests.java │ │ │ ├── TestDescriptorTests.java │ │ │ ├── TestTagTests.java │ │ │ ├── UniqueIdFormatTests.java │ │ │ ├── UniqueIdTests.java │ │ │ ├── discovery/ │ │ │ │ ├── ClassNameFilterTests.java │ │ │ │ ├── ClassSelectorTests.java │ │ │ │ ├── ClasspathResourceSelectorTests.java │ │ │ │ ├── ClasspathRootSelectorTests.java │ │ │ │ ├── DirectorySelectorTests.java │ │ │ │ ├── DiscoverySelectorsTests.java │ │ │ │ ├── FilePositionTests.java │ │ │ │ ├── FileSelectorTests.java │ │ │ │ ├── IterationSelectorTests.java │ │ │ │ ├── MethodSelectorTests.java │ │ │ │ ├── ModuleSelectorTests.java │ │ │ │ ├── NestedClassSelectorTests.java │ │ │ │ ├── NestedMethodSelectorTests.java │ │ │ │ ├── PackageNameFilterTests.java │ │ │ │ ├── PackageSelectorTests.java │ │ │ │ ├── UniqueIdSelectorTests.java │ │ │ │ └── UriSelectorTests.java │ │ │ └── support/ │ │ │ ├── config/ │ │ │ │ └── PrefixedConfigurationParametersTests.java │ │ │ ├── descriptor/ │ │ │ │ ├── AbstractTestDescriptorTests.java │ │ │ │ ├── AbstractTestSourceTests.java │ │ │ │ ├── ClassSourceTests.java │ │ │ │ ├── ClasspathResourceSourceTests.java │ │ │ │ ├── CompositeTestSourceTests.java │ │ │ │ ├── DefaultUriSourceTests.java │ │ │ │ ├── DemoClassTestDescriptor.java │ │ │ │ ├── DemoMethodTestDescriptor.java │ │ │ │ ├── FilePositionTests.java │ │ │ │ ├── FileSystemSourceTests.java │ │ │ │ ├── MethodSourceTests.java │ │ │ │ ├── PackageSourceTests.java │ │ │ │ ├── TestDescriptorOrderChildrenTests.java │ │ │ │ └── TestDescriptorTests.java │ │ │ ├── discovery/ │ │ │ │ ├── EngineDiscoveryRequestResolverTests.java │ │ │ │ └── ResourceContainerSelectorResolverTest.java │ │ │ ├── hierarchical/ │ │ │ │ ├── CompositeLockTests.java │ │ │ │ ├── DefaultParallelExecutionConfigurationStrategyTests.java │ │ │ │ ├── ForkJoinDeadLockTests.java │ │ │ │ ├── ForkJoinPoolHierarchicalTestExecutorServiceTests.java │ │ │ │ ├── HierarchicalTestExecutorTests.java │ │ │ │ ├── LockManagerTests.java │ │ │ │ ├── MemoryLeakTests.java │ │ │ │ ├── NodeTreeWalkerIntegrationTests.java │ │ │ │ ├── ParallelExecutionIntegrationTests.java │ │ │ │ ├── ResourceLockSupport.java │ │ │ │ ├── ResourceLockTests.java │ │ │ │ ├── SameThreadExecutionIntegrationTests.java │ │ │ │ ├── SingleLockTests.java │ │ │ │ ├── ThrowableCollectorTests.java │ │ │ │ ├── WorkerLeaseManagerTests.java │ │ │ │ └── WorkerThreadPoolHierarchicalTestExecutorServiceTests.java │ │ │ └── store/ │ │ │ ├── NamespaceTests.java │ │ │ └── NamespacedHierarchicalStoreTests.java │ │ ├── launcher/ │ │ │ ├── DiscoveryFilterStub.java │ │ │ ├── FilterStub.java │ │ │ ├── InterceptedTestEngine.java │ │ │ ├── InterceptorInjectedLauncherSessionListener.java │ │ │ ├── MethodFilterTests.java │ │ │ ├── PostDiscoveryFilterStub.java │ │ │ ├── TagFilterTests.java │ │ │ ├── TagIntegrationTests.java │ │ │ ├── TestIdentifierTests.java │ │ │ ├── TestLauncherDiscoveryListener.java │ │ │ ├── TestLauncherInterceptor1.java │ │ │ ├── TestLauncherInterceptor2.java │ │ │ ├── TestLauncherSessionListener.java │ │ │ ├── TestPlanTests.java │ │ │ ├── TestPostDiscoveryTagFilter.java │ │ │ ├── core/ │ │ │ │ ├── ClasspathAlignmentCheckerTests.java │ │ │ │ ├── CompositeEngineExecutionListenerTests.java │ │ │ │ ├── CompositeTestExecutionListenerTests.java │ │ │ │ ├── DefaultLauncherEngineFilterTests.java │ │ │ │ ├── DefaultLauncherTests.java │ │ │ │ ├── DiscoveryIssueCollectorTests.java │ │ │ │ ├── DiscoveryIssueReportingDiscoveryListenerTests.java │ │ │ │ ├── EngineDiscoveryResultValidatorTests.java │ │ │ │ ├── ExecutionListenerAdapterTests.java │ │ │ │ ├── HierarchicalOutputDirectoryCreatorTests.java │ │ │ │ ├── InternalTestPlanTests.java │ │ │ │ ├── LauncherConfigTests.java │ │ │ │ ├── LauncherConfigurationParametersTests.java │ │ │ │ ├── LauncherDiscoveryRequestBuilderTests.java │ │ │ │ ├── LauncherDiscoveryResultTests.java │ │ │ │ ├── LauncherFactoryTests.java │ │ │ │ ├── LauncherPreconditionTests.java │ │ │ │ ├── LauncherSessionTests.java │ │ │ │ ├── ListenerRegistryTests.java │ │ │ │ ├── StoreSharingTests.java │ │ │ │ ├── StreamInterceptingTestExecutionListenerIntegrationTests.java │ │ │ │ └── StreamInterceptorTests.java │ │ │ ├── jfr/ │ │ │ │ ├── FlightRecordingDiscoveryListenerIntegrationTests.java │ │ │ │ └── FlightRecordingExecutionListenerIntegrationTests.java │ │ │ ├── listeners/ │ │ │ │ ├── AnotherUnusedTestExecutionListener.java │ │ │ │ ├── LoggingListenerTests.java │ │ │ │ ├── NoopTestExecutionListener.java │ │ │ │ ├── OutputDirTests.java │ │ │ │ ├── SummaryGenerationTests.java │ │ │ │ ├── UniqueIdTrackingListenerIntegrationTests.java │ │ │ │ ├── UnusedTestExecutionListener.java │ │ │ │ ├── discovery/ │ │ │ │ │ ├── AbortOnFailureLauncherDiscoveryListenerTests.java │ │ │ │ │ ├── CompositeLauncherDiscoveryListenerTests.java │ │ │ │ │ └── LoggingLauncherDiscoveryListenerTests.java │ │ │ │ └── session/ │ │ │ │ └── CompositeLauncherSessionListenerTests.java │ │ │ └── tagexpression/ │ │ │ ├── ParserErrorTests.java │ │ │ ├── ParserTests.java │ │ │ ├── TagExpressionsTests.java │ │ │ ├── TokenTests.java │ │ │ └── TokenizerTests.java │ │ ├── reporting/ │ │ │ ├── legacy/ │ │ │ │ └── xml/ │ │ │ │ ├── IncrementingClock.java │ │ │ │ ├── LegacyXmlReportGeneratingListenerTests.java │ │ │ │ ├── XmlReportAssertions.java │ │ │ │ ├── XmlReportDataTests.java │ │ │ │ └── XmlReportWriterTests.java │ │ │ └── open/ │ │ │ └── xml/ │ │ │ ├── JUnitContributorTests.java │ │ │ └── OpenTestReportGeneratingListenerTests.java │ │ ├── suite/ │ │ │ └── engine/ │ │ │ ├── BeforeAndAfterSuiteTests.java │ │ │ ├── SuiteEngineTests.java │ │ │ ├── SuiteLauncherDiscoveryRequestBuilderTests.java │ │ │ ├── SuiteTestDescriptorTests.java │ │ │ ├── error/ │ │ │ │ ├── ErrorSelector.java │ │ │ │ ├── ErrorSelectorIdentifierParser.java │ │ │ │ ├── SelectorProcessingErrorCausingEngine.java │ │ │ │ └── package-info.java │ │ │ ├── testcases/ │ │ │ │ ├── ConfigurationSensitiveTestCase.java │ │ │ │ ├── DynamicTestsTestCase.java │ │ │ │ ├── EmptyDynamicTestsTestCase.java │ │ │ │ ├── EmptyTestTestCase.java │ │ │ │ ├── ErroneousTestCase.java │ │ │ │ ├── JUnit4TestsTestCase.java │ │ │ │ ├── MultipleTestsTestCase.java │ │ │ │ ├── SingleTestTestCase.java │ │ │ │ ├── StatefulTestCase.java │ │ │ │ └── TaggedTestTestCase.java │ │ │ └── testsuites/ │ │ │ ├── AbstractSuite.java │ │ │ ├── BlankSuiteDisplayNameSuite.java │ │ │ ├── ConfigurationSuite.java │ │ │ ├── CyclicSuite.java │ │ │ ├── DynamicSuite.java │ │ │ ├── EmptyCyclicSuite.java │ │ │ ├── EmptyDynamicTestSuite.java │ │ │ ├── EmptyDynamicTestWithFailIfNoTestFalseSuite.java │ │ │ ├── EmptyTestCaseSuite.java │ │ │ ├── EmptyTestCaseWithFailIfNoTestFalseSuite.java │ │ │ ├── ErroneousTestSuite.java │ │ │ ├── InheritedSuite.java │ │ │ ├── LifecycleMethodsSuites.java │ │ │ ├── MultiEngineSuite.java │ │ │ ├── MultipleSuite.java │ │ │ ├── NestedSuite.java │ │ │ ├── SelectByIdentifierSuite.java │ │ │ ├── SelectClassesSuite.java │ │ │ ├── SelectMethodsSuite.java │ │ │ ├── SelectorProcessingErrorTestSuite.java │ │ │ ├── SuiteDisplayNameSuite.java │ │ │ ├── SuiteSuite.java │ │ │ ├── SuiteWithErroneousTestSuite.java │ │ │ ├── ThreePartCyclicSuite.java │ │ │ └── WhitespaceSuiteDisplayNameSuite.java │ │ └── testkit/ │ │ └── engine/ │ │ ├── EngineDiscoveryResultsIntegrationTests.java │ │ ├── EngineTestKitTests.java │ │ ├── EventsTests.java │ │ ├── ExecutionsIntegrationTests.java │ │ ├── NestedContainerEventConditionTests.java │ │ └── TestExecutionResultConditionsTests.java │ ├── kotlin/ │ │ └── org/ │ │ └── junit/ │ │ └── platform/ │ │ └── commons/ │ │ └── util/ │ │ └── KotlinReflectionUtilsTests.kt │ └── resources/ │ ├── META-INF/ │ │ └── services/ │ │ └── org.junit.platform.engine.discovery.DiscoverySelectorIdentifierParser │ ├── config-test-override.properties │ ├── config-test.properties │ ├── console/ │ │ └── details/ │ │ ├── basic/ │ │ │ ├── Basic-changeDisplayName-flat-ascii.out.txt │ │ │ ├── Basic-changeDisplayName-flat-unicode.out.txt │ │ │ ├── Basic-changeDisplayName-none-ascii.out.txt │ │ │ ├── Basic-changeDisplayName-none-unicode.out.txt │ │ │ ├── Basic-changeDisplayName-summary-ascii.out.txt │ │ │ ├── Basic-changeDisplayName-summary-unicode.out.txt │ │ │ ├── Basic-changeDisplayName-testfeed-ascii.out.txt │ │ │ ├── Basic-changeDisplayName-testfeed-unicode.out.txt │ │ │ ├── Basic-changeDisplayName-tree-ascii.out.txt │ │ │ ├── Basic-changeDisplayName-tree-unicode.out.txt │ │ │ ├── Basic-changeDisplayName-verbose-ascii.out.txt │ │ │ ├── Basic-changeDisplayName-verbose-unicode.out.txt │ │ │ ├── Basic-empty-flat-ascii.out.txt │ │ │ ├── Basic-empty-flat-unicode.out.txt │ │ │ ├── Basic-empty-none-ascii.out.txt │ │ │ ├── Basic-empty-none-unicode.out.txt │ │ │ ├── Basic-empty-summary-ascii.out.txt │ │ │ ├── Basic-empty-summary-unicode.out.txt │ │ │ ├── Basic-empty-testfeed-ascii.out.txt │ │ │ ├── Basic-empty-testfeed-unicode.out.txt │ │ │ ├── Basic-empty-tree-ascii.out.txt │ │ │ ├── Basic-empty-tree-unicode.out.txt │ │ │ ├── Basic-empty-verbose-ascii.out.txt │ │ │ └── Basic-empty-verbose-unicode.out.txt │ │ ├── fail/ │ │ │ ├── Fail-failWithMultiLineMessage-flat-ascii.out.txt │ │ │ ├── Fail-failWithMultiLineMessage-flat-unicode.out.txt │ │ │ ├── Fail-failWithMultiLineMessage-none-ascii.out.txt │ │ │ ├── Fail-failWithMultiLineMessage-none-unicode.out.txt │ │ │ ├── Fail-failWithMultiLineMessage-summary-ascii.out.txt │ │ │ ├── Fail-failWithMultiLineMessage-summary-unicode.out.txt │ │ │ ├── Fail-failWithMultiLineMessage-testfeed-ascii.out.txt │ │ │ ├── Fail-failWithMultiLineMessage-testfeed-unicode.out.txt │ │ │ ├── Fail-failWithMultiLineMessage-tree-ascii.out.txt │ │ │ ├── Fail-failWithMultiLineMessage-tree-unicode.out.txt │ │ │ ├── Fail-failWithMultiLineMessage-verbose-ascii.out.txt │ │ │ ├── Fail-failWithMultiLineMessage-verbose-unicode.out.txt │ │ │ ├── Fail-failWithSingleLineMessage-flat-ascii.out.txt │ │ │ ├── Fail-failWithSingleLineMessage-flat-unicode.out.txt │ │ │ ├── Fail-failWithSingleLineMessage-none-ascii.out.txt │ │ │ ├── Fail-failWithSingleLineMessage-none-unicode.out.txt │ │ │ ├── Fail-failWithSingleLineMessage-summary-ascii.out.txt │ │ │ ├── Fail-failWithSingleLineMessage-summary-unicode.out.txt │ │ │ ├── Fail-failWithSingleLineMessage-testfeed-ascii.out.txt │ │ │ ├── Fail-failWithSingleLineMessage-testfeed-unicode.out.txt │ │ │ ├── Fail-failWithSingleLineMessage-tree-ascii.out.txt │ │ │ ├── Fail-failWithSingleLineMessage-tree-unicode.out.txt │ │ │ ├── Fail-failWithSingleLineMessage-verbose-ascii.out.txt │ │ │ └── Fail-failWithSingleLineMessage-verbose-unicode.out.txt │ │ ├── report/ │ │ │ ├── Report-reportMultiEntriesWithMultiMappings-flat-ascii.out.txt │ │ │ ├── Report-reportMultiEntriesWithMultiMappings-flat-unicode.out.txt │ │ │ ├── Report-reportMultiEntriesWithMultiMappings-none-ascii.out.txt │ │ │ ├── Report-reportMultiEntriesWithMultiMappings-none-unicode.out.txt │ │ │ ├── Report-reportMultiEntriesWithMultiMappings-summary-ascii.out.txt │ │ │ ├── Report-reportMultiEntriesWithMultiMappings-summary-unicode.out.txt │ │ │ ├── Report-reportMultiEntriesWithMultiMappings-testfeed-ascii.out.txt │ │ │ ├── Report-reportMultiEntriesWithMultiMappings-testfeed-unicode.out.txt │ │ │ ├── Report-reportMultiEntriesWithMultiMappings-tree-ascii.out.txt │ │ │ ├── Report-reportMultiEntriesWithMultiMappings-tree-unicode.out.txt │ │ │ ├── Report-reportMultiEntriesWithMultiMappings-verbose-ascii.out.txt │ │ │ ├── Report-reportMultiEntriesWithMultiMappings-verbose-unicode.out.txt │ │ │ ├── Report-reportMultiEntriesWithSingleMapping-flat-ascii.out.txt │ │ │ ├── Report-reportMultiEntriesWithSingleMapping-flat-unicode.out.txt │ │ │ ├── Report-reportMultiEntriesWithSingleMapping-none-ascii.out.txt │ │ │ ├── Report-reportMultiEntriesWithSingleMapping-none-unicode.out.txt │ │ │ ├── Report-reportMultiEntriesWithSingleMapping-summary-ascii.out.txt │ │ │ ├── Report-reportMultiEntriesWithSingleMapping-summary-unicode.out.txt │ │ │ ├── Report-reportMultiEntriesWithSingleMapping-testfeed-ascii.out.txt │ │ │ ├── Report-reportMultiEntriesWithSingleMapping-testfeed-unicode.out.txt │ │ │ ├── Report-reportMultiEntriesWithSingleMapping-tree-ascii.out.txt │ │ │ ├── Report-reportMultiEntriesWithSingleMapping-tree-unicode.out.txt │ │ │ ├── Report-reportMultiEntriesWithSingleMapping-verbose-ascii.out.txt │ │ │ ├── Report-reportMultiEntriesWithSingleMapping-verbose-unicode.out.txt │ │ │ ├── Report-reportMultipleMessages-flat-ascii.out.txt │ │ │ ├── Report-reportMultipleMessages-flat-unicode.out.txt │ │ │ ├── Report-reportMultipleMessages-none-ascii.out.txt │ │ │ ├── Report-reportMultipleMessages-none-unicode.out.txt │ │ │ ├── Report-reportMultipleMessages-summary-ascii.out.txt │ │ │ ├── Report-reportMultipleMessages-summary-unicode.out.txt │ │ │ ├── Report-reportMultipleMessages-testfeed-ascii.out.txt │ │ │ ├── Report-reportMultipleMessages-testfeed-unicode.out.txt │ │ │ ├── Report-reportMultipleMessages-tree-ascii.out.txt │ │ │ ├── Report-reportMultipleMessages-tree-unicode.out.txt │ │ │ ├── Report-reportMultipleMessages-verbose-ascii.out.txt │ │ │ ├── Report-reportMultipleMessages-verbose-unicode.out.txt │ │ │ ├── Report-reportSingleEntryWithSingleMapping-flat-ascii.out.txt │ │ │ ├── Report-reportSingleEntryWithSingleMapping-flat-unicode.out.txt │ │ │ ├── Report-reportSingleEntryWithSingleMapping-none-ascii.out.txt │ │ │ ├── Report-reportSingleEntryWithSingleMapping-none-unicode.out.txt │ │ │ ├── Report-reportSingleEntryWithSingleMapping-summary-ascii.out.txt │ │ │ ├── Report-reportSingleEntryWithSingleMapping-summary-unicode.out.txt │ │ │ ├── Report-reportSingleEntryWithSingleMapping-testfeed-ascii.out.txt │ │ │ ├── Report-reportSingleEntryWithSingleMapping-testfeed-unicode.out.txt │ │ │ ├── Report-reportSingleEntryWithSingleMapping-tree-ascii.out.txt │ │ │ ├── Report-reportSingleEntryWithSingleMapping-tree-unicode.out.txt │ │ │ ├── Report-reportSingleEntryWithSingleMapping-verbose-ascii.out.txt │ │ │ ├── Report-reportSingleEntryWithSingleMapping-verbose-unicode.out.txt │ │ │ ├── Report-reportSingleMessage-flat-ascii.out.txt │ │ │ ├── Report-reportSingleMessage-flat-unicode.out.txt │ │ │ ├── Report-reportSingleMessage-none-ascii.out.txt │ │ │ ├── Report-reportSingleMessage-none-unicode.out.txt │ │ │ ├── Report-reportSingleMessage-summary-ascii.out.txt │ │ │ ├── Report-reportSingleMessage-summary-unicode.out.txt │ │ │ ├── Report-reportSingleMessage-testfeed-ascii.out.txt │ │ │ ├── Report-reportSingleMessage-testfeed-unicode.out.txt │ │ │ ├── Report-reportSingleMessage-tree-ascii.out.txt │ │ │ ├── Report-reportSingleMessage-tree-unicode.out.txt │ │ │ ├── Report-reportSingleMessage-verbose-ascii.out.txt │ │ │ └── Report-reportSingleMessage-verbose-unicode.out.txt │ │ └── skip/ │ │ ├── Skip-skipWithMultiLineMessage-flat-ascii.out.txt │ │ ├── Skip-skipWithMultiLineMessage-flat-unicode.out.txt │ │ ├── Skip-skipWithMultiLineMessage-none-ascii.out.txt │ │ ├── Skip-skipWithMultiLineMessage-none-unicode.out.txt │ │ ├── Skip-skipWithMultiLineMessage-summary-ascii.out.txt │ │ ├── Skip-skipWithMultiLineMessage-summary-unicode.out.txt │ │ ├── Skip-skipWithMultiLineMessage-testfeed-ascii.out.txt │ │ ├── Skip-skipWithMultiLineMessage-testfeed-unicode.out.txt │ │ ├── Skip-skipWithMultiLineMessage-tree-ascii.out.txt │ │ ├── Skip-skipWithMultiLineMessage-tree-unicode.out.txt │ │ ├── Skip-skipWithMultiLineMessage-verbose-ascii.out.txt │ │ ├── Skip-skipWithMultiLineMessage-verbose-unicode.out.txt │ │ ├── Skip-skipWithSingleLineReason-flat-ascii.out.txt │ │ ├── Skip-skipWithSingleLineReason-flat-unicode.out.txt │ │ ├── Skip-skipWithSingleLineReason-none-ascii.out.txt │ │ ├── Skip-skipWithSingleLineReason-none-unicode.out.txt │ │ ├── Skip-skipWithSingleLineReason-summary-ascii.out.txt │ │ ├── Skip-skipWithSingleLineReason-summary-unicode.out.txt │ │ ├── Skip-skipWithSingleLineReason-testfeed-ascii.out.txt │ │ ├── Skip-skipWithSingleLineReason-testfeed-unicode.out.txt │ │ ├── Skip-skipWithSingleLineReason-tree-ascii.out.txt │ │ ├── Skip-skipWithSingleLineReason-tree-unicode.out.txt │ │ ├── Skip-skipWithSingleLineReason-verbose-ascii.out.txt │ │ └── Skip-skipWithSingleLineReason-verbose-unicode.out.txt │ ├── default-package.resource │ ├── do_not_delete_me.txt │ ├── error-engine/ │ │ └── META-INF/ │ │ └── services/ │ │ └── org.junit.platform.engine.TestEngine │ ├── folder with spaces/ │ │ └── jar test with spaces.jar │ ├── gh-1436-invalid-nested-class-file.jar │ ├── intercepted-testservices/ │ │ └── META-INF/ │ │ └── services/ │ │ ├── org.junit.platform.engine.TestEngine │ │ └── org.junit.platform.launcher.LauncherSessionListener │ ├── jartest-shadowed.jar │ ├── jartest.jar │ ├── jenkins-junit.xsd │ ├── junit-platform.properties │ ├── log4j2-test.xml │ ├── modules-2500/ │ │ ├── foo/ │ │ │ ├── Foo.java │ │ │ └── module-info.java │ │ └── foo.bar/ │ │ ├── FooBar.java │ │ └── module-info.java │ ├── org/ │ │ └── junit/ │ │ └── platform/ │ │ └── commons/ │ │ ├── example.resource │ │ └── other-example.resource │ ├── test-junit-platform.properties │ └── testservices/ │ └── META-INF/ │ └── services/ │ ├── org.junit.platform.launcher.LauncherDiscoveryListener │ ├── org.junit.platform.launcher.LauncherInterceptor │ ├── org.junit.platform.launcher.LauncherSessionListener │ ├── org.junit.platform.launcher.PostDiscoveryFilter │ └── org.junit.platform.launcher.TestExecutionListener ├── platform-tooling-support-tests/ │ ├── platform-tooling-support-tests.gradle.kts │ ├── projects/ │ │ ├── graalvm-starter/ │ │ │ ├── build.gradle.kts │ │ │ ├── settings.gradle.kts │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── example/ │ │ │ │ └── project/ │ │ │ │ └── Calculator.java │ │ │ └── test/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── example/ │ │ │ │ └── project/ │ │ │ │ ├── CalculatorParameterizedClassTests.java │ │ │ │ ├── CalculatorTests.java │ │ │ │ ├── ClassLevelAnnotationTests.java │ │ │ │ ├── GraalvmSuite.java │ │ │ │ └── VintageTests.java │ │ │ └── resources/ │ │ │ └── junit-platform.properties │ │ ├── gradle-kotlin-extensions/ │ │ │ ├── build.gradle.kts │ │ │ ├── gradle.properties │ │ │ ├── settings.gradle.kts │ │ │ └── src/ │ │ │ └── test/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── project/ │ │ │ └── ExtensionFunctionsTests.kt │ │ ├── gradle-missing-engine/ │ │ │ ├── build.gradle.kts │ │ │ ├── gradle.properties │ │ │ ├── settings.gradle.kts │ │ │ └── src/ │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── FooTests.java │ │ ├── jar-describe-module/ │ │ │ ├── junit-jupiter-api.expected.txt │ │ │ ├── junit-jupiter-engine.expected.txt │ │ │ ├── junit-jupiter-migrationsupport.expected.txt │ │ │ ├── junit-jupiter-params.expected.txt │ │ │ ├── junit-jupiter.expected.txt │ │ │ ├── junit-platform-commons.expected.txt │ │ │ ├── junit-platform-console.expected.txt │ │ │ ├── junit-platform-engine.expected.txt │ │ │ ├── junit-platform-launcher.expected.txt │ │ │ ├── junit-platform-reporting.expected.txt │ │ │ ├── junit-platform-suite-api.expected.txt │ │ │ ├── junit-platform-suite-engine.expected.txt │ │ │ ├── junit-platform-suite.expected.txt │ │ │ ├── junit-platform-testkit.expected.txt │ │ │ ├── junit-start.expected.txt │ │ │ └── junit-vintage-engine.expected.txt │ │ ├── junit-start/ │ │ │ ├── compact/ │ │ │ │ ├── JUnitRun.java │ │ │ │ └── JUnitRunClass.java │ │ │ └── modular/ │ │ │ ├── module-info.java │ │ │ └── p/ │ │ │ ├── JUnitRunModule.java │ │ │ └── MultiplicationTests.java │ │ ├── jupiter-starter/ │ │ │ ├── build.gradle.kts │ │ │ ├── build.xml │ │ │ ├── gradle.properties │ │ │ ├── pom.xml │ │ │ ├── settings.gradle.kts │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── java/ │ │ │ │ └── com/ │ │ │ │ └── example/ │ │ │ │ └── project/ │ │ │ │ └── Calculator.java │ │ │ └── test/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── example/ │ │ │ │ └── project/ │ │ │ │ ├── CalculatorParameterizedClassTests.java │ │ │ │ └── CalculatorTests.java │ │ │ └── resources/ │ │ │ └── junit-platform.properties │ │ ├── kotlin-coroutines/ │ │ │ ├── build.gradle.kts │ │ │ ├── settings.gradle.kts │ │ │ └── src/ │ │ │ └── test/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── project/ │ │ │ └── SuspendFunctionTests.kt │ │ ├── maven-surefire-compatibility/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── project/ │ │ │ └── DummyTests.java │ │ ├── memory-cleanup/ │ │ │ └── src/ │ │ │ └── OneMillionTests.java │ │ ├── reflection-tests/ │ │ │ ├── build.gradle.kts │ │ │ ├── gradle.properties │ │ │ ├── settings.gradle.kts │ │ │ └── src/ │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── ReflectionTestCase.java │ │ ├── standalone/ │ │ │ ├── expected-err.txt │ │ │ ├── expected-out.txt │ │ │ ├── logging.properties │ │ │ └── src/ │ │ │ ├── other/ │ │ │ │ └── OtherwiseNotReferencedClass.java │ │ │ └── standalone/ │ │ │ ├── JupiterIntegration.java │ │ │ ├── JupiterParamsIntegration.java │ │ │ ├── SuiteIntegration.java │ │ │ └── VintageIntegration.java │ │ └── vintage/ │ │ ├── build.gradle.kts │ │ ├── gradle.properties │ │ ├── pom.xml │ │ ├── settings.gradle.kts │ │ └── src/ │ │ └── test/ │ │ └── java/ │ │ ├── DefaultPackageTest.java │ │ └── com/ │ │ └── example/ │ │ └── vintage/ │ │ └── VintageTest.java │ └── src/ │ ├── archUnit/ │ │ └── java/ │ │ └── platform/ │ │ └── tooling/ │ │ └── support/ │ │ └── tests/ │ │ └── ArchUnitTests.java │ ├── main/ │ │ └── java/ │ │ └── platform/ │ │ └── tooling/ │ │ └── support/ │ │ ├── Helper.java │ │ ├── MavenRepo.java │ │ ├── ProcessStarters.java │ │ ├── ThirdPartyJars.java │ │ └── package-info.java │ └── test/ │ ├── java/ │ │ └── platform/ │ │ └── tooling/ │ │ └── support/ │ │ ├── HelperTests.java │ │ └── tests/ │ │ ├── AntStarterTests.java │ │ ├── FilePrefix.java │ │ ├── GraalVmStarterTests.java │ │ ├── GradleKotlinExtensionsTests.java │ │ ├── GradleMissingEngineTests.java │ │ ├── GradleModuleFileTests.java │ │ ├── GradleStarterTests.java │ │ ├── JUnitStartTests.java │ │ ├── JarContainsManifestFirstTests.java │ │ ├── JarDescribeModuleTests.java │ │ ├── KotlinCoroutinesTests.java │ │ ├── LocalMavenRepo.java │ │ ├── ManagedResource.java │ │ ├── ManifestTests.java │ │ ├── MavenEnvVars.java │ │ ├── MavenPomFileTests.java │ │ ├── MavenRepoProxy.java │ │ ├── MavenStarterTests.java │ │ ├── MavenSurefireCompatibilityTests.java │ │ ├── MemoryCleanupTests.java │ │ ├── ModularCompilationTests.java │ │ ├── ModularUserGuideTests.java │ │ ├── OutputAttachingExtension.java │ │ ├── Projects.java │ │ ├── ReflectionCompatibilityTests.java │ │ ├── StandaloneTests.java │ │ ├── ToolProviderTests.java │ │ ├── UnalignedClasspathTests.java │ │ ├── VintageGradleIntegrationTests.java │ │ ├── VintageMavenIntegrationTests.java │ │ └── XmlAssertions.java │ └── resources/ │ ├── junit-platform.properties │ ├── log4j2-test.xml │ └── platform/ │ └── tooling/ │ └── support/ │ └── tests/ │ ├── AntStarterTests_snapshots/ │ │ └── open-test-report.xml.snapshot │ ├── GradleStarterTests_snapshots/ │ │ └── open-test-report.xml.snapshot │ └── MavenStarterTests_snapshots/ │ └── open-test-report.xml.snapshot └── settings.gradle.kts
Showing preview only (1,551K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (18034 symbols across 1476 files)
FILE: documentation/src/main/java/example/domain/Person.java
class Person (line 15) | public final class Person {
type Gender (line 17) | public enum Gender {
method Person (line 26) | public Person(String firstName, String lastName) {
method Person (line 31) | public Person(String firstName, String lastName, Gender gender, LocalD...
method getFirstName (line 37) | public String getFirstName() {
method getLastName (line 41) | public String getLastName() {
method getGender (line 45) | public Gender getGender() {
method getDateOfBirth (line 49) | public LocalDate getDateOfBirth() {
method hashCode (line 53) | @Override
method equals (line 62) | @Override
method toString (line 93) | @Override
FILE: documentation/src/main/java/example/registration/WebClient.java
class WebClient (line 13) | public class WebClient implements AutoCloseable {
method get (line 15) | public WebResponse get(String string) {
method close (line 19) | @Override
FILE: documentation/src/main/java/example/registration/WebResponse.java
class WebResponse (line 13) | public class WebResponse {
method getResponseStatus (line 15) | public int getResponseStatus() {
FILE: documentation/src/main/java/example/registration/WebServerExtension.java
class WebServerExtension (line 16) | public class WebServerExtension implements BeforeAllCallback {
method beforeAll (line 18) | @Override
method getServerUrl (line 23) | public String getServerUrl() {
method builder (line 27) | public static Builder builder() {
class Builder (line 31) | public static class Builder {
method enableSecurity (line 33) | public Builder enableSecurity(boolean b) {
method build (line 37) | public WebServerExtension build() {
FILE: documentation/src/main/java/example/util/Calculator.java
class Calculator (line 13) | public class Calculator {
method add (line 15) | public int add(int a, int b) {
method subtract (line 19) | public int subtract(int a, int b) {
method multiply (line 23) | public int multiply(int a, int b) {
method divide (line 27) | public int divide(int a, int b) {
FILE: documentation/src/main/java/example/util/ListWriter.java
class ListWriter (line 18) | public class ListWriter {
method ListWriter (line 22) | public ListWriter(Path file) {
method write (line 26) | public void write(String... items) throws IOException {
FILE: documentation/src/main/java/example/util/StringUtils.java
class StringUtils (line 17) | public class StringUtils {
method isPalindrome (line 19) | public static boolean isPalindrome(@Nullable String candidate) {
method StringUtils (line 29) | private StringUtils() {
FILE: documentation/src/test/java/example/AssertJAssertionsDemo.java
class AssertJAssertionsDemo (line 20) | class AssertJAssertionsDemo {
method assertWithAssertJ (line 24) | @Test
FILE: documentation/src/test/java/example/AssertionsDemo.java
class AssertionsDemo (line 33) | class AssertionsDemo {
method standardAssertions (line 39) | @Test
method groupedAssertions (line 49) | @Test
method dependentAssertions (line 59) | @Test
method exceptionTesting (line 90) | @extensions.DisabledOnOpenJ9
method timeoutNotExceeded (line 100) | @Tag("timeout")
method timeoutNotExceededWithResult (line 111) | @Tag("timeout")
method timeoutNotExceededWithMethod (line 123) | @Tag("timeout")
method timeoutExceeded (line 133) | @Tag("timeout")
method timeoutExceededWithPreemptiveTermination (line 147) | @Tag("timeout")
method greeting (line 160) | private static String greeting() {
method generateFailureMessage (line 164) | private static String generateFailureMessage(char a, char b) {
FILE: documentation/src/test/java/example/AssumptionsDemo.java
class AssumptionsDemo (line 24) | class AssumptionsDemo {
method testOnlyOnCiServer (line 28) | @Test
method testOnlyOnDeveloperWorkstation (line 34) | @Test
method testInAllEnvironments (line 41) | @Test
FILE: documentation/src/test/java/example/AutoCloseDemo.java
class AutoCloseDemo (line 21) | class AutoCloseDemo {
method getProductList (line 31) | @Test
FILE: documentation/src/test/java/example/BeforeAndAfterSuiteDemo.java
class BeforeAndAfterSuiteDemo (line 19) | @Suite
method beforeSuite (line 23) | @BeforeSuite
method afterSuite (line 28) | @AfterSuite
FILE: documentation/src/test/java/example/ClassTemplateDemo.java
class ClassTemplateDemo (line 30) | @ClassTemplate
method notNull (line 43) | @Test
method wellKnown (line 48) | @Test
class MyClassTemplateInvocationContextProvider (line 54) | static
method supportsClassTemplate (line 60) | @Override
method provideClassTemplateInvocationContexts (line 65) | @Override
method invocationContext (line 73) | private ClassTemplateInvocationContext invocationContext(String para...
FILE: documentation/src/test/java/example/ConditionalTestExecutionDemo.java
class ConditionalTestExecutionDemo (line 43) | class ConditionalTestExecutionDemo {
method onlyOnMacOs (line 46) | @Test
method testOnMac (line 52) | @TestOnMac
method onLinuxOrMac (line 57) | @Test
method notOnWindows (line 63) | @Test
method onAarch64 (line 78) | @Test
method notOnX86_64 (line 84) | @Test
method onNewMacs (line 90) | @Test
method notOnNewMacs (line 96) | @Test
method onlyOnJava17 (line 104) | @Test
method onJava17And21 (line 110) | @Test
method fromJava21To25 (line 116) | @Test
method onJava21ndHigher (line 122) | @Test
method fromJava17To18 (line 128) | @Test
method notOnJava19 (line 134) | @Test
method notFromJava17To19 (line 140) | @Test
method notOnJava19AndHigher (line 146) | @Test
method notFromJava17To18 (line 152) | @Test
method onlyOnJava26 (line 160) | @Test
method onJava25And26 (line 166) | @Test
method onJava26AndHigher (line 174) | @Test
method fromJava25To27 (line 180) | @Test
method notOnJava26 (line 188) | @Test
method notOnJava25And26 (line 194) | @Test
method notOnJava26AndHigher (line 202) | @Test
method notFromJava25To27 (line 208) | @Test
method onlyWithinNativeImage (line 218) | @Test
method neverWithinNativeImage (line 224) | @Test
method onlyOn64BitArchitectures (line 232) | @Test
method notOnCiServer (line 238) | @Test
method onlyOnStagingServer (line 246) | @Test
method notOnDeveloperWorkstation (line 252) | @Test
method enabled (line 260) | @Test
method disabled (line 266) | @Test
method customCondition (line 272) | boolean customCondition() {
FILE: documentation/src/test/java/example/CustomLauncherInterceptor.java
class CustomLauncherInterceptor (line 23) | public class CustomLauncherInterceptor implements LauncherInterceptor {
method CustomLauncherInterceptor (line 27) | public CustomLauncherInterceptor() throws Exception {
method intercept (line 32) | @Override
method close (line 45) | @Override
FILE: documentation/src/test/java/example/CustomTestEngine.java
class CustomTestEngine (line 24) | class CustomTestEngine implements TestEngine {
method getId (line 26) | @Override
method discover (line 31) | @Override
method execute (line 36) | @Override
FILE: documentation/src/test/java/example/DefaultLocaleTimezoneExtensionDemo.java
class DefaultLocaleTimezoneExtensionDemo (line 26) | public class DefaultLocaleTimezoneExtensionDemo {
method test_with_language (line 29) | @Test
method test_with_language_only (line 37) | @Test
method test_with_language_and_country (line 43) | @Test
method test_with_language_and_country_and_vairant (line 49) | @Test
class MyLocaleTests (line 57) | @Nested
method test_with_class_level_configuration (line 62) | @Test
method test_with_method_level_configuration (line 67) | @Test
method test_with_locale_provider (line 77) | @Test
class EnglishProvider (line 83) | static class EnglishProvider implements LocaleProvider {
method get (line 84) | @Override
method test_with_short_zone_id (line 92) | @Test
method test_with_long_zone_id (line 98) | @Test
class MyTimeZoneTests (line 105) | @Nested
method test_with_class_level_configuration (line 110) | @Test
method test_with_method_level_configuration (line 115) | @Test
method test_with_time_zone_provider (line 125) | @Test
class UtcTimeZoneProvider (line 131) | static class UtcTimeZoneProvider implements TimeZoneProvider {
method get (line 132) | @Override
FILE: documentation/src/test/java/example/DisabledClassDemo.java
class DisabledClassDemo (line 17) | @Disabled("Disabled until bug #99 has been fixed")
method testWillBeSkipped (line 20) | @Test
FILE: documentation/src/test/java/example/DisabledTestsDemo.java
class DisabledTestsDemo (line 17) | class DisabledTestsDemo {
method testWillBeSkipped (line 19) | @Disabled("Disabled until bug #42 has been resolved")
method testWillBeExecuted (line 24) | @Test
FILE: documentation/src/test/java/example/DisplayNameDemo.java
class DisplayNameDemo (line 17) | @DisplayName("A special test case")
method testWithDisplayNameContainingSpaces (line 20) | @Test
method testWithDisplayNameContainingSpecialCharacters (line 25) | @Test
method testWithDisplayNameContainingEmoji (line 30) | @Test
FILE: documentation/src/test/java/example/DisplayNameGeneratorDemo.java
class DisplayNameGeneratorDemo (line 24) | class DisplayNameGeneratorDemo {
class A_year_is_not_supported (line 26) | @Nested
method if_it_is_zero (line 31) | @Test
method if_it_is_negative (line 35) | @DisplayName("A negative value for year is not supported by the leap...
class A_year_is_a_leap_year (line 44) | @Nested
method if_it_is_divisible_by_4_but_not_by_100 (line 49) | @Test
method if_it_is_one_of_the_following_years (line 53) | @ParameterizedTest(name = "Year {0} is a leap year.")
class LeapYearTests (line 61) | @Nested
method divisibleBy4ButNotBy100 (line 67) | @SentenceFragment("if it is divisible by 4 but not by 100")
method validLeapYear (line 72) | @SentenceFragment("if it is one of the following years")
FILE: documentation/src/test/java/example/DocumentationTestSuite.java
class DocumentationTestSuite (line 31) | @Suite
FILE: documentation/src/test/java/example/DynamicTestsDemo.java
class DynamicTestsDemo (line 45) | class DynamicTestsDemo {
method dummy (line 50) | @TestFactory
method dynamicTestsWithInvalidReturnType (line 55) | List<String> dynamicTestsWithInvalidReturnType() {
method dynamicTestsFromCollection (line 59) | @TestFactory
method dynamicTestsFromIterable (line 67) | @TestFactory
method dynamicTestsFromIterator (line 75) | @TestFactory
method dynamicTestsFromArray (line 83) | @TestFactory
method dynamicTestsFromStream (line 91) | @TestFactory
method dynamicTestsFromIntStream (line 97) | @TestFactory
method generateRandomNumberOfTests (line 104) | @TestFactory
method dynamicTestsFromStreamFactoryMethod (line 142) | @TestFactory
method dynamicTestsWithContainers (line 157) | @TestFactory
method dynamicTestsWithConfiguredExecutionMode (line 171) | @TestFactory
method dynamicNodeSingleTest (line 207) | @TestFactory
method dynamicNodeSingleContainer (line 212) | @TestFactory
FILE: documentation/src/test/java/example/DynamicTestsNamedDemo.java
class DynamicTestsNamedDemo (line 25) | public class DynamicTestsNamedDemo {
method dynamicTestsFromStreamFactoryMethodWithNames (line 27) | @TestFactory
method dynamicTestsFromStreamFactoryMethodWithNamedExecutables (line 47) | @TestFactory
method getName (line 65) | @Override
method execute (line 70) | @Override
FILE: documentation/src/test/java/example/ExampleTestCase.java
class ExampleTestCase (line 26) | @TestMethodOrder(OrderAnnotation.class)
method skippedTest (line 31) | @Test
method succeedingTest (line 38) | @Test
method abortedTest (line 44) | @Test
method failingTest (line 51) | @Test
FILE: documentation/src/test/java/example/ExplicitExecutionModeDemo.java
class ExplicitExecutionModeDemo (line 18) | @Execution(ExecutionMode.CONCURRENT)
method testA (line 21) | @Test
method testB (line 26) | @Test
FILE: documentation/src/test/java/example/ExternalCustomConditionDemo.java
class ExternalCustomConditionDemo (line 17) | class ExternalCustomConditionDemo {
method enabled (line 19) | @Test
class ExternalCondition (line 27) | class ExternalCondition {
method customCondition (line 29) | static boolean customCondition() {
FILE: documentation/src/test/java/example/ExternalFieldSourceDemo.java
class ExternalFieldSourceDemo (line 18) | class ExternalFieldSourceDemo {
method testWithExternalFieldSource (line 21) | @ParameterizedTest
class FruitUtils (line 29) | class FruitUtils {
FILE: documentation/src/test/java/example/ExternalMethodSourceDemo.java
class ExternalMethodSourceDemo (line 19) | class ExternalMethodSourceDemo {
method testWithExternalMethodSource (line 21) | @ParameterizedTest
class StringsProviders (line 28) | class StringsProviders {
method tinyStrings (line 30) | static Stream<String> tinyStrings() {
FILE: documentation/src/test/java/example/FirstCustomEngine.java
class FirstCustomEngine (line 34) | public class FirstCustomEngine implements TestEngine {
method getId (line 41) | @Override
method getSocket (line 47) | @Nullable
method discover (line 53) | @Override
method execute (line 58) | @Override
FILE: documentation/src/test/java/example/HttpServerDemo.java
class HttpServerDemo (line 30) | @ExtendWith(HttpServerExtension.class)
method httpCall (line 34) | @SuppressWarnings("HttpUrlsUsage")
method sendRequest (line 48) | private static String sendRequest(URL url) throws IOException {
FILE: documentation/src/test/java/example/IgnoredTestsDemo.java
class IgnoredTestsDemo (line 19) | @SuppressWarnings("removal")
method testWillBeIgnored (line 23) | @Ignore
method testWillBeExecuted (line 28) | @Test
FILE: documentation/src/test/java/example/JUnit4Tests.java
class JUnit4Tests (line 15) | public class JUnit4Tests {
method standardJUnit4Test (line 17) | @Test
FILE: documentation/src/test/java/example/MethodSourceParameterResolutionDemo.java
class MethodSourceParameterResolutionDemo (line 26) | class MethodSourceParameterResolutionDemo {
method testWithFactoryMethodWithArguments (line 33) | @ParameterizedTest
method factoryMethodWithArguments (line 39) | static Stream<Arguments> factoryMethodWithArguments(int quantity) {
class IntegerResolver (line 46) | static class IntegerResolver implements ParameterResolver {
method supportsParameter (line 48) | @Override
method resolveParameter (line 55) | @Override
FILE: documentation/src/test/java/example/MyFirstJUnitJupiterRecordTests.java
method addition (line 22) | @Test
FILE: documentation/src/test/java/example/MyFirstJUnitJupiterTests.java
class MyFirstJUnitJupiterTests (line 20) | class MyFirstJUnitJupiterTests {
method addition (line 24) | @Test
FILE: documentation/src/test/java/example/MyRandomParametersTest.java
class MyRandomParametersTest (line 20) | class MyRandomParametersTest {
method MyRandomParametersTest (line 22) | MyRandomParametersTest(@Random int randomNumber) {
method injectsInteger (line 26) | @Test
FILE: documentation/src/test/java/example/OrderedNestedTestClassesDemo.java
class OrderedNestedTestClassesDemo (line 20) | @TestClassOrder(ClassOrderer.OrderAnnotation.class)
class PrimaryTests (line 23) | @Nested
method test1 (line 27) | @Test
class SecondaryTests (line 32) | @Nested
method test2 (line 36) | @Test
FILE: documentation/src/test/java/example/OrderedTestsDemo.java
class OrderedTestsDemo (line 19) | @TestMethodOrder(OrderAnnotation.class)
method nullValues (line 22) | @Test
method emptyValues (line 28) | @Test
method validValues (line 34) | @Test
FILE: documentation/src/test/java/example/ParameterizedClassDemo.java
class ParameterizedClassDemo (line 31) | public class ParameterizedClassDemo {
class PalindromeTests (line 33) | @Nested
method palindrome (line 42) | @Test
method reversePalindrome (line 47) | @Test
class ConstructorInjection (line 55) | @Nested
class FruitTests (line 57) | @Nested
method FruitTests (line 66) | FruitTests(String fruit, int quantity) {
method test (line 71) | @Test
method anotherTest (line 77) | @Test
class FieldInjection (line 85) | @Nested
class FruitTests (line 87) | @Nested
method test (line 99) | @Test
method anotherTest (line 105) | @Test
class FruitTests (line 113) | @Nested
class QuantityTests (line 123) | @Nested
method test (line 131) | @ParameterizedTest
method assertFruit (line 142) | static void assertFruit(String fruit) {
method assertQuantity (line 147) | static void assertQuantity(int quantity) {
FILE: documentation/src/test/java/example/ParameterizedLifecycleDemo.java
class ParameterizedLifecycleDemo (line 30) | public class ParameterizedLifecycleDemo {
class TextFileTests (line 32) | @Nested
method textFiles (line 38) | static List<TextFile> textFiles() {
method beforeInvocation (line 51) | @BeforeParameterizedClassInvocation
method afterInvocation (line 58) | @SuppressWarnings("DataFlowIssue")
method test (line 69) | @SuppressWarnings("DataFlowIssue")
method anotherTest (line 76) | @Test
class TextFile (line 81) | static class TextFile {
method TextFile (line 90) | TextFile(String fileName, String content) {
method toString (line 95) | @Override
FILE: documentation/src/test/java/example/ParameterizedMigrationDemo.java
class ParameterizedMigrationDemo (line 22) | public class ParameterizedMigrationDemo {
class JUnit4ParameterizedClassTests (line 25) | @RunWith(Parameterized.class)
method data (line 31) | @Parameterized.Parameters
method before (line 45) | @Parameterized.BeforeParam
method after (line 49) | @Parameterized.AfterParam
method someTest (line 53) | @org.junit.Test
method anotherTest (line 57) | @org.junit.Test
class JupiterParameterizedClassTests (line 64) | @ParameterizedClass
method data (line 71) | static Iterable<Object[]> data() {
method before (line 81) | @BeforeParameterizedClassInvocation
method after (line 85) | @AfterParameterizedClassInvocation
method someTest (line 89) | @org.junit.jupiter.api.Test
method anotherTest (line 93) | @org.junit.jupiter.api.Test
FILE: documentation/src/test/java/example/ParameterizedRecordDemo.java
class ParameterizedRecordDemo (line 21) | public class ParameterizedRecordDemo {
method test (line 28) | @Test
method anotherTest (line 34) | @Test
method assertFruit (line 41) | static void assertFruit(String fruit) {
method assertQuantity (line 45) | static void assertQuantity(int quantity) {
FILE: documentation/src/test/java/example/ParameterizedTestDemo.java
class ParameterizedTestDemo (line 78) | @Execution(SAME_THREAD)
method printDisplayName (line 81) | @BeforeEach
method palindromes (line 87) | @ParameterizedTest
method testWithValueSource (line 95) | @ParameterizedTest
class NullAndEmptySource_1 (line 102) | @Nested
method nullEmptyAndBlankStrings (line 106) | @ParameterizedTest
class NullAndEmptySource_2 (line 116) | @Nested
method nullEmptyAndBlankStrings (line 120) | @ParameterizedTest
method testWithEnumSource (line 130) | @ParameterizedTest
method testWithEnumSourceWithAutoDetection (line 138) | @ParameterizedTest
method testWithEnumSourceInclude (line 146) | @ParameterizedTest
method testWithEnumSourceRange (line 154) | @ParameterizedTest
method testWithEnumSourceExclude (line 162) | @ParameterizedTest
method testWithEnumSourceRegex (line 170) | @ParameterizedTest
method testWithEnumSourceRangeExclude (line 178) | @ParameterizedTest
method testWithExplicitLocalMethodSource (line 187) | @ParameterizedTest
method stringProvider (line 193) | static Stream<String> stringProvider() {
method testWithDefaultLocalMethodSource (line 199) | @ParameterizedTest
method testWithDefaultLocalMethodSource (line 205) | static Stream<String> testWithDefaultLocalMethodSource() {
method testWithRangeMethodSource (line 211) | @ParameterizedTest
method range (line 217) | static IntStream range() {
method testWithMultiArgMethodSource (line 224) | @ParameterizedTest
method stringIntAndListProvider (line 232) | static Stream<Arguments> stringIntAndListProvider() {
method arrayOfFruits (line 243) | @ParameterizedTest
method singleFieldSource (line 255) | @ParameterizedTest
method multipleFieldSources (line 267) | @ParameterizedTest
method namedArgumentsSupplier (line 279) | @ParameterizedTest
method assertFruit (line 292) | private static void assertFruit(String fruit) {
method testWithMultiArgFieldSource (line 298) | @ParameterizedTest
method testWithCsvSource (line 315) | @ParameterizedTest
method testWithCsvFileSourceFromClasspath (line 330) | @ParameterizedTest
method testWithCsvFileSourceFromFile (line 337) | @ParameterizedTest
method testWithCsvFileSourceAndHeaders (line 344) | @ParameterizedTest
method testWithArgumentsSource (line 353) | @ParameterizedTest
class MyArgumentsProvider (line 360) | static
method provideArguments (line 364) | @Override
method testWithArgumentsSourceWithConstructorInjection (line 372) | @ParameterizedTest
class MyArgumentsProviderWithConstructorInjection (line 378) | static
method MyArgumentsProviderWithConstructorInjection (line 385) | @SuppressWarnings("RedundantModifier")
method provideArguments (line 391) | @Override
method beforeEach (line 400) | @BeforeEach
method testWithRegularParameterResolver (line 405) | @ParameterizedTest
method afterEach (line 411) | @AfterEach
method testWithImplicitArgumentConversion (line 418) | @ParameterizedTest
method testWithImplicitFallbackArgumentConversion (line 426) | @ParameterizedTest
class Book (line 433) | static
method Book (line 439) | private Book(String title) {
method fromTitle (line 443) | public static Book fromTitle(String title) {
method getTitle (line 447) | public String getTitle() {
method testWithExplicitArgumentConversion (line 455) | @ParameterizedTest
class ToStringArgumentConverter (line 464) | static
method convert (line 469) | @Override
class ToLengthArgumentConverter (line 480) | static
method ToLengthArgumentConverter (line 485) | protected ToLengthArgumentConverter() {
method convert (line 489) | @Override
method testWithExplicitJavaTimeConverter (line 498) | @ParameterizedTest
method testWithArgumentsAccessor (line 510) | @ParameterizedTest
method testWithArgumentsAggregator (line 536) | @ParameterizedTest
class PersonAggregator (line 546) | static
method aggregateArguments (line 549) | @Override
method testWithCustomAggregatorAnnotation (line 564) | @ParameterizedTest
method testWithCustomDisplayNames (line 584) | @DisplayName("Display name of container")
method testWithNamedArguments (line 593) | @DisplayName("A parameterized test with named arguments")
method namedArguments (line 599) | static Stream<Arguments> namedArguments() {
method testWithArgumentSets (line 610) | @DisplayName("A parameterized test with named argument sets")
method testWithRepeatedAnnotation (line 624) | @DisplayName("A parameterized test that makes use of repeatable annota...
method someProvider (line 632) | static Stream<String> someProvider() {
method otherProvider (line 636) | static Stream<String> otherProvider() {
method testWithArgumentCountValidation (line 641) | @Disabled("Fails prior to invoking the test method")
FILE: documentation/src/test/java/example/PollingTimeoutDemo.java
class PollingTimeoutDemo (line 16) | class PollingTimeoutDemo {
method pollUntil (line 19) | @Test
method asynchronousResultNotAvailable (line 29) | private boolean asynchronousResultNotAvailable() {
FILE: documentation/src/test/java/example/RepeatedTestsDemo.java
class RepeatedTestsDemo (line 27) | @org.junit.jupiter.api.parallel.Execution(org.junit.jupiter.api.parallel...
method beforeEach (line 36) | @BeforeEach
method repeatedTest (line 45) | @RepeatedTest(10)
method repeatedTestWithRepetitionInfo (line 50) | @RepeatedTest(5)
method repeatedTestWithFailureThreshold (line 57) | @org.junit.jupiter.api.Disabled("intentional failures would break the ...
method customDisplayName (line 67) | @RepeatedTest(value = 1, name = "{displayName} {currentRepetition}/{to...
method customDisplayNameWithLongPattern (line 73) | @RepeatedTest(value = 1, name = RepeatedTest.LONG_DISPLAY_NAME)
method repeatedTestInGerman (line 79) | @RepeatedTest(value = 5, name = "Wiederholung {currentRepetition} von ...
FILE: documentation/src/test/java/example/SecondCustomEngine.java
class SecondCustomEngine (line 34) | public class SecondCustomEngine implements TestEngine {
method getId (line 41) | @Override
method getSocket (line 47) | @Nullable
method discover (line 53) | @Override
method execute (line 58) | @Override
FILE: documentation/src/test/java/example/SlowTests.java
class SlowTests (line 22) | @Tag("exclude")
method a (line 26) | @Execution(SAME_THREAD)
method b (line 32) | @Test
method c (line 37) | @Test
method d (line 42) | @Test
method e (line 47) | @Test
method f (line 52) | @Test
method g (line 57) | @Test
method h (line 62) | @Test
method i (line 67) | @Test
method j (line 72) | @Test
method k (line 77) | @Test
method l (line 82) | @Test
method m (line 87) | @Test
method n (line 92) | @Test
method o (line 97) | @Test
method p (line 102) | @Test
method q (line 107) | @Execution(SAME_THREAD)
method r (line 113) | @Test
method s (line 118) | @Test
method foo (line 123) | private void foo() {
FILE: documentation/src/test/java/example/StandardTests.java
class StandardTests (line 24) | class StandardTests {
method initAll (line 26) | @BeforeAll
method init (line 30) | @BeforeEach
method succeedingTest (line 34) | @Test
method failingTest (line 39) | @extensions.ExpectToFail
method skippedTest (line 46) | @Test
method abortedTest (line 52) | @Test
method tearDown (line 58) | @AfterEach
method tearDownAll (line 62) | @AfterAll
FILE: documentation/src/test/java/example/SuiteDemo.java
class SuiteDemo (line 19) | @Suite
FILE: documentation/src/test/java/example/SystemPropertyExtensionDemo.java
class SystemPropertyExtensionDemo (line 30) | public class SystemPropertyExtensionDemo {
method testClearingProperty (line 33) | @Test
method testSettingProperty (line 41) | @Test
method testClearingAndSettingProperty (line 49) | @Test
class MySystemPropertyTest (line 60) | @Nested
method clearedAtClasslevel (line 65) | @Test
method parameterizedTest (line 75) | @ParameterizedTest
class SystemPropertyRestoreExample (line 84) | @Nested
class MySystemPropertyRestoreTest (line 88) | @Nested
method beforeAll (line 95) | @BeforeAll
method beforeEach (line 100) | @BeforeEach
method isolatedTest1 (line 105) | @Test
method isolatedTest2 (line 110) | @Test
class SomeOtherTestClass (line 122) | @Nested
method isolatedTest (line 128) | @Test
method imageGenerationTest (line 140) | @ParameterizedTest
FILE: documentation/src/test/java/example/TaggingDemo.java
class TaggingDemo (line 17) | @Tag("fast")
method testingTaxCalculation (line 21) | @Test
FILE: documentation/src/test/java/example/TempDirectoryDemo.java
class TempDirectoryDemo (line 41) | @SuppressWarnings("NewClassNamingConvention")
method writeItemsToFile (line 45) | @Test
method copyFileFromSourceToTarget (line 56) | @Test
class SharedTempDirectoryDemo (line 68) | static
method writeItemsToFile (line 75) | @Test
method anotherTestThatUsesTheSameTempDir (line 84) | @Test
class CleanupModeDemo (line 92) | static
method fileTest (line 96) | @Test
class TempDirFactoryDemo (line 104) | static
method factoryTest (line 108) | @Test
class Factory (line 113) | static class Factory implements TempDirFactory {
method createTempDirectory (line 115) | @Override
class InMemoryTempDirDemo (line 126) | static
method test (line 130) | @Test
class JimfsTempDirFactory (line 135) | static class JimfsTempDirFactory implements TempDirFactory {
method createTempDirectory (line 139) | @Override
method close (line 145) | @Override
class DeletionStrategyDemo (line 155) | static
method test (line 159) | @Test
class JimfsTempDirAnnotationDemo (line 175) | static
method test (line 179) | @Test
FILE: documentation/src/test/java/example/TestInfoDemo.java
class TestInfoDemo (line 24) | @DisplayName("TestInfo Demo")
method beforeAll (line 27) | @BeforeAll
method TestInfoDemo (line 32) | TestInfoDemo(TestInfo testInfo) {
method init (line 37) | @BeforeEach
method test1 (line 43) | @Test
method test2 (line 51) | @Test
FILE: documentation/src/test/java/example/TestReporterDemo.java
class TestReporterDemo (line 25) | class TestReporterDemo {
method reportSingleValue (line 27) | @Test
method reportKeyValuePair (line 32) | @Test
method reportMultipleKeyValuePairs (line 37) | @Test
method reportFiles (line 46) | @Test
FILE: documentation/src/test/java/example/TestTemplateDemo.java
class TestTemplateDemo (line 28) | class TestTemplateDemo {
method testTemplate (line 33) | @TestTemplate
class MyTestTemplateInvocationContextProvider (line 40) | static
method supportsTestTemplate (line 46) | @Override
method provideTestTemplateInvocationContexts (line 51) | @Override
method invocationContext (line 58) | private TestTemplateInvocationContext invocationContext(String param...
FILE: documentation/src/test/java/example/TestingAStackDemo.java
class TestingAStackDemo (line 27) | @DisplayName("A stack")
method isInstantiatedWithNew (line 30) | @Test
class WhenNew (line 36) | @Nested
method createNewStack (line 42) | @BeforeEach
method isEmpty (line 47) | @Test
method throwsExceptionWhenPopped (line 53) | @Test
method throwsExceptionWhenPeeked (line 59) | @Test
class AfterPushing (line 65) | @Nested
method pushAnElement (line 71) | @BeforeEach
method isNotEmpty (line 76) | @Test
method returnElementWhenPopped (line 82) | @Test
method returnElementWhenPeeked (line 89) | @Test
FILE: documentation/src/test/java/example/TimeoutDemo.java
class TimeoutDemo (line 22) | @Tag("timeout")
method setUp (line 25) | @BeforeEach
method failsIfExecutionTimeExceeds500Milliseconds (line 31) | @Test
method failsIfExecutionTimeExceeds500MillisecondsInSeparateThread (line 37) | @Test
FILE: documentation/src/test/java/example/UsingTheLauncherDemo.java
class UsingTheLauncherDemo (line 48) | class UsingTheLauncherDemo {
method execution (line 50) | @Tag("exclude")
method launcherConfig (line 90) | @Test
method cancellationDirect (line 121) | @Test
method cancellationFromDiscoveryRequest (line 155) | @Test
method cancellationFromTestPlan (line 189) | @Test
class MyTestClass (line 226) | class MyTestClass {
class CustomTestExecutionListener (line 229) | class CustomTestExecutionListener implements TestExecutionListener {
class CustomLauncherSessionListener (line 232) | class CustomLauncherSessionListener implements LauncherSessionListener {
class CustomLauncherDiscoveryListener (line 235) | class CustomLauncherDiscoveryListener implements LauncherDiscoveryListen...
class CustomPostDiscoveryFilter (line 238) | class CustomPostDiscoveryFilter implements PostDiscoveryFilter {
method apply (line 239) | @Override
FILE: documentation/src/test/java/example/UsingTheLauncherForDiscoveryDemo.java
class UsingTheLauncherForDiscoveryDemo (line 28) | class UsingTheLauncherForDiscoveryDemo {
method discovery (line 30) | @org.junit.jupiter.api.Test
class MyTestClass (line 54) | static class MyTestClass {
FILE: documentation/src/test/java/example/callbacks/AbstractDatabaseTests.java
class AbstractDatabaseTests (line 28) | abstract class AbstractDatabaseTests {
method createDatabase (line 30) | @BeforeAll
method connectToDatabase (line 35) | @BeforeEach
method disconnectFromDatabase (line 40) | @AfterEach
method destroyDatabase (line 45) | @AfterAll
FILE: documentation/src/test/java/example/callbacks/BrokenLifecycleMethodConfigDemo.java
class BrokenLifecycleMethodConfigDemo (line 31) | @ExtendWith({ Extension1.class, Extension2.class })
method connectToDatabase (line 34) | @BeforeEach
method insertTestDataIntoDatabase (line 39) | @BeforeEach
method testDatabaseFunctionality (line 44) | @Test
method deleteTestDataFromDatabase (line 49) | @AfterEach
method disconnectFromDatabase (line 54) | @AfterEach
FILE: documentation/src/test/java/example/callbacks/DatabaseTestsDemo.java
class DatabaseTestsDemo (line 32) | @ExtendWith({ Extension1.class, Extension2.class })
method beforeAll (line 35) | @BeforeAll
method insertTestDataIntoDatabase (line 40) | @BeforeEach
method testDatabaseFunctionality (line 45) | @Test
method deleteTestDataFromDatabase (line 50) | @AfterEach
method afterAll (line 55) | @AfterAll
FILE: documentation/src/test/java/example/callbacks/Extension1.java
class Extension1 (line 22) | public class Extension1 implements BeforeEachCallback, AfterEachCallback {
method beforeEach (line 24) | @Override
method afterEach (line 29) | @Override
FILE: documentation/src/test/java/example/callbacks/Extension2.java
class Extension2 (line 22) | public class Extension2 implements BeforeEachCallback, AfterEachCallback {
method beforeEach (line 24) | @Override
method afterEach (line 29) | @Override
FILE: documentation/src/test/java/example/callbacks/Logger.java
class Logger (line 17) | class Logger {
method beforeAllMethod (line 21) | static void beforeAllMethod(String text) {
method beforeEachCallback (line 25) | static void beforeEachCallback(Extension extension) {
method beforeEachMethod (line 29) | static void beforeEachMethod(String text) {
method testMethod (line 33) | static void testMethod(String text) {
method afterEachMethod (line 37) | static void afterEachMethod(String text) {
method afterEachCallback (line 41) | static void afterEachCallback(Extension extension) {
method afterAllMethod (line 45) | static void afterAllMethod(String text) {
method log (line 49) | private static void log(Supplier<String> supplier) {
FILE: documentation/src/test/java/example/defaultmethods/ComparableContract.java
type ComparableContract (line 19) | public interface ComparableContract<T extends Comparable<T>> extends Tes...
method createSmallerValue (line 21) | T createSmallerValue();
method returnsZeroWhenComparedToItself (line 23) | @Test
method returnsPositiveNumberWhenComparedToSmallerValue (line 29) | @Test
method returnsNegativeNumberWhenComparedToLargerValue (line 36) | @Test
FILE: documentation/src/test/java/example/defaultmethods/EqualsContract.java
type EqualsContract (line 19) | public interface EqualsContract<T> extends Testable<T> {
method createNotEqualValue (line 21) | T createNotEqualValue();
method valueEqualsItself (line 23) | @Test
method valueDoesNotEqualNull (line 29) | @Test
method valueDoesNotEqualDifferentValue (line 35) | @Test
FILE: documentation/src/test/java/example/defaultmethods/StringTests.java
class StringTests (line 14) | class StringTests implements ComparableContract<String>, EqualsContract<...
method createValue (line 16) | @Override
method createSmallerValue (line 21) | @Override
method createNotEqualValue (line 26) | @Override
FILE: documentation/src/test/java/example/defaultmethods/Testable.java
type Testable (line 14) | public interface Testable<T> {
method createValue (line 16) | T createValue();
FILE: documentation/src/test/java/example/exception/AssertDoesNotThrowExceptionDemo.java
class AssertDoesNotThrowExceptionDemo (line 17) | class AssertDoesNotThrowExceptionDemo {
method testExceptionIsNotThrown (line 20) | @Test
method shouldNotThrowException (line 27) | void shouldNotThrowException() {
FILE: documentation/src/test/java/example/exception/ExceptionAssertionDemo.java
class ExceptionAssertionDemo (line 18) | class ExceptionAssertionDemo {
method testExpectedExceptionIsThrown (line 22) | @Test
FILE: documentation/src/test/java/example/exception/ExceptionAssertionExactDemo.java
class ExceptionAssertionExactDemo (line 20) | public class ExceptionAssertionExactDemo {
method testExpectedExceptionIsThrown (line 22) | @ExpectToFail
FILE: documentation/src/test/java/example/exception/FailedAssertionDemo.java
class FailedAssertionDemo (line 21) | class FailedAssertionDemo {
method failsDueToUncaughtAssertionError (line 28) | @ExpectToFail
FILE: documentation/src/test/java/example/exception/IgnoreIOExceptionExtension.java
class IgnoreIOExceptionExtension (line 20) | public class IgnoreIOExceptionExtension implements TestExecutionExceptio...
method handleTestExecutionException (line 22) | @Override
FILE: documentation/src/test/java/example/exception/IgnoreIOExceptionTests.java
class IgnoreIOExceptionTests (line 20) | @ExtendWith(IgnoreIOExceptionExtension.class)
method shouldSucceed (line 23) | @Test
method shouldFail (line 28) | @Test
FILE: documentation/src/test/java/example/exception/MultipleHandlersTestCase.java
class MultipleHandlersTestCase (line 24) | @ExtendWith(ThirdExecutedHandler.class)
method testMethod (line 28) | @ExtendWith(SecondExecutedHandler.class)
class FirstExecutedHandler (line 36) | static class FirstExecutedHandler implements TestExecutionExceptionHan...
method handleTestExecutionException (line 37) | @Override
class SecondExecutedHandler (line 44) | static class SecondExecutedHandler implements LifecycleMethodExecution...
method handleBeforeEachMethodExecutionException (line 45) | @Override
class ThirdExecutedHandler (line 52) | static class ThirdExecutedHandler implements LifecycleMethodExecutionE...
method handleBeforeAllMethodExecutionException (line 53) | @Override
FILE: documentation/src/test/java/example/exception/RecordStateOnErrorExtension.java
class RecordStateOnErrorExtension (line 18) | class RecordStateOnErrorExtension implements LifecycleMethodExecutionExc...
method handleBeforeAllMethodExecutionException (line 20) | @Override
method handleBeforeEachMethodExecutionException (line 27) | @Override
method handleAfterEachMethodExecutionException (line 34) | @Override
method handleAfterAllMethodExecutionException (line 41) | @Override
method memoryDumpForFurtherInvestigation (line 49) | private void memoryDumpForFurtherInvestigation(String error) {
FILE: documentation/src/test/java/example/exception/UncaughtExceptionHandlingDemo.java
class UncaughtExceptionHandlingDemo (line 19) | class UncaughtExceptionHandlingDemo {
method failsDueToUncaughtException (line 26) | @ExpectToFail
FILE: documentation/src/test/java/example/extensions/HttpServerExtension.java
class HttpServerExtension (line 24) | public class HttpServerExtension implements ParameterResolver {
method supportsParameter (line 26) | @Override
method resolveParameter (line 31) | @Override
FILE: documentation/src/test/java/example/extensions/HttpServerResource.java
class HttpServerResource (line 26) | class HttpServerResource implements AutoCloseable {
method HttpServerResource (line 39) | HttpServerResource(int port) throws IOException {
method getHttpServer (line 44) | HttpServer getHttpServer() {
method start (line 54) | void start() {
method close (line 67) | @Override
FILE: documentation/src/test/java/example/extensions/ParameterResolverConflictDemo.java
class ParameterResolverConflictDemo (line 24) | public class ParameterResolverConflictDemo {
method testInt (line 27) | @ExpectToFail
class FirstIntegerResolver (line 36) | static class FirstIntegerResolver implements ParameterResolver {
method supportsParameter (line 38) | @Override
method resolveParameter (line 43) | @Override
class SecondIntegerResolver (line 49) | static class SecondIntegerResolver implements ParameterResolver {
method supportsParameter (line 51) | @Override
method resolveParameter (line 56) | @Override
FILE: documentation/src/test/java/example/extensions/ParameterResolverCustomAnnotationDemo.java
class ParameterResolverCustomAnnotationDemo (line 27) | public class ParameterResolverCustomAnnotationDemo {
method testInt (line 29) | @Test
class Extension (line 40) | class Extension implements ParameterResolver {
method supportsParameter (line 42) | @Override
method resolveParameter (line 48) | @Override
method supportsParameter (line 62) | @Override
method resolveParameter (line 67) | @Override
class Extension (line 60) | class Extension implements ParameterResolver {
method supportsParameter (line 42) | @Override
method resolveParameter (line 48) | @Override
method supportsParameter (line 62) | @Override
method resolveParameter (line 67) | @Override
FILE: documentation/src/test/java/example/extensions/ParameterResolverCustomTypeDemo.java
class ParameterResolverCustomTypeDemo (line 22) | public class ParameterResolverCustomTypeDemo {
method testInt (line 24) | @Test
class FirstIntegerResolver (line 31) | static class FirstIntegerResolver implements ParameterResolver {
method supportsParameter (line 33) | @Override
method resolveParameter (line 38) | @Override
class SecondIntegerResolver (line 44) | static class SecondIntegerResolver implements ParameterResolver {
method supportsParameter (line 46) | @Override
method resolveParameter (line 51) | @Override
class WrappedInteger (line 57) | static class WrappedInteger {
method WrappedInteger (line 61) | WrappedInteger(int value) {
FILE: documentation/src/test/java/example/extensions/ParameterResolverNoConflictDemo.java
class ParameterResolverNoConflictDemo (line 22) | public class ParameterResolverNoConflictDemo {
method firstResolution (line 24) | @Test
method secondResolution (line 30) | @Test
class FirstIntegerResolver (line 36) | static class FirstIntegerResolver implements ParameterResolver {
method supportsParameter (line 38) | @Override
method resolveParameter (line 43) | @Override
class SecondIntegerResolver (line 49) | static class SecondIntegerResolver implements ParameterResolver {
method supportsParameter (line 51) | @Override
method resolveParameter (line 56) | @Override
FILE: documentation/src/test/java/example/extensions/RandomNumberDemo.java
class RandomNumberDemo (line 18) | class RandomNumberDemo {
method RandomNumberDemo (line 33) | RandomNumberDemo(@Random int randomNumber2) {
method beforeEach (line 37) | @BeforeEach
method test (line 42) | @Test
FILE: documentation/src/test/java/example/extensions/RandomNumberExtension.java
class RandomNumberExtension (line 31) | class RandomNumberExtension
method beforeAll (line 40) | @Override
method postProcessTestInstance (line 50) | @Override
method supportsParameter (line 60) | @Override
method resolveParameter (line 68) | @Override
method injectFields (line 73) | private void injectFields(Class<?> testClass, @Nullable Object testIns...
method isInteger (line 89) | private static boolean isInteger(Class<?> type) {
FILE: documentation/src/test/java/example/interceptor/SwingEdtInterceptor.java
class SwingEdtInterceptor (line 24) | public class SwingEdtInterceptor implements InvocationInterceptor {
method interceptTestMethod (line 27) | @SuppressWarnings("NullAway")
FILE: documentation/src/test/java/example/registration/DocumentationDemo.java
class DocumentationDemo (line 23) | class DocumentationDemo {
method lookUpDocsDir (line 26) | @Nullable
method generateDocumentation (line 38) | @Test
class DocumentationExtension (line 45) | @NullMarked
method DocumentationExtension (line 51) | private DocumentationExtension(@Nullable Path path) {
method forPath (line 55) | static DocumentationExtension forPath(@Nullable Path path) {
method afterEach (line 59) | @Override
FILE: documentation/src/test/java/example/registration/WebServerDemo.java
class WebServerDemo (line 19) | class WebServerDemo {
method getProductList (line 32) | @Test
FILE: documentation/src/test/java/example/session/CloseableHttpServer.java
class CloseableHttpServer (line 18) | public class CloseableHttpServer implements AutoCloseable {
method CloseableHttpServer (line 23) | CloseableHttpServer(HttpServer server, ExecutorService executorService) {
method getServer (line 28) | public HttpServer getServer() {
method close (line 32) | @Override
FILE: documentation/src/test/java/example/session/GlobalSetupTeardownListener.java
class GlobalSetupTeardownListener (line 31) | public class GlobalSetupTeardownListener implements LauncherSessionListe...
method launcherSessionOpened (line 33) | @Override
FILE: documentation/src/test/java/example/session/HttpTests.java
class HttpTests (line 29) | @ExtendWith(HttpServerParameterResolver.class)
method respondsWith204 (line 32) | @Test
class HttpServerParameterResolver (line 46) | class HttpServerParameterResolver implements ParameterResolver {
method supportsParameter (line 47) | @Override
method resolveParameter (line 53) | @SuppressWarnings("DataFlowIssue")
FILE: documentation/src/test/java/example/sharedresources/ChildrenSharedResourcesDemo.java
class ChildrenSharedResourcesDemo (line 23) | @Execution(CONCURRENT)
method test1 (line 27) | @ResourceLock(value = "a", mode = READ_WRITE)
method test2 (line 33) | @Test
method test3 (line 38) | @Test
method test4 (line 43) | @Test
method test5 (line 48) | @Test
FILE: documentation/src/test/java/example/sharedresources/DynamicSharedResourcesDemo.java
class DynamicSharedResourcesDemo (line 34) | @Execution(CONCURRENT)
method backup (line 40) | @BeforeEach
method restore (line 46) | @AfterEach
method customPropertyIsNotSetByDefault (line 51) | @Test
method canSetCustomPropertyToApple (line 56) | @Test
method canSetCustomPropertyToBanana (line 62) | @Test
class Provider (line 68) | static class Provider implements ResourceLocksProvider {
method provideForMethod (line 70) | @Override
FILE: documentation/src/test/java/example/sharedresources/SharedResourceDemo.java
class SharedResourceDemo (line 27) | class SharedResourceDemo {
method runBothCustomEnginesTest (line 29) | @SuppressWarnings("DataFlowIssue")
FILE: documentation/src/test/java/example/sharedresources/StaticSharedResourcesDemo.java
class StaticSharedResourcesDemo (line 29) | @Execution(CONCURRENT)
method backup (line 34) | @BeforeEach
method restore (line 40) | @AfterEach
method customPropertyIsNotSetByDefault (line 45) | @Test
method canSetCustomPropertyToApple (line 51) | @Test
method canSetCustomPropertyToBanana (line 58) | @Test
FILE: documentation/src/test/java/example/testinterface/TestInterfaceDemo.java
class TestInterfaceDemo (line 19) | class TestInterfaceDemo implements TestLifecycleLogger,
method isEqualValue (line 22) | @Test
FILE: documentation/src/test/java/example/testinterface/TestInterfaceDynamicTestsDemo.java
type TestInterfaceDynamicTestsDemo (line 24) | interface TestInterfaceDynamicTestsDemo {
method dynamicTestsForPalindromes (line 26) | @TestFactory
FILE: documentation/src/test/java/example/testinterface/TestLifecycleLogger.java
type TestLifecycleLogger (line 25) | @TestInstance(Lifecycle.PER_CLASS)
method beforeAllTests (line 30) | @BeforeAll
method afterAllTests (line 35) | @AfterAll
method beforeEachTest (line 40) | @BeforeEach
method afterEachTest (line 46) | @AfterEach
FILE: documentation/src/test/java/example/testinterface/TimeExecutionLogger.java
type TimeExecutionLogger (line 19) | @Tag("timed")
FILE: documentation/src/test/java/example/testkit/EngineTestKitAllEventsDemo.java
class EngineTestKitAllEventsDemo (line 38) | class EngineTestKitAllEventsDemo {
method verifyAllJupiterEvents (line 40) | @Test
FILE: documentation/src/test/java/example/testkit/EngineTestKitDiscoveryDemo.java
class EngineTestKitDiscoveryDemo (line 24) | class EngineTestKitDiscoveryDemo {
method verifyJupiterDiscovery (line 26) | @Test
FILE: documentation/src/test/java/example/testkit/EngineTestKitFailedMethodDemo.java
class EngineTestKitFailedMethodDemo (line 28) | class EngineTestKitFailedMethodDemo {
method verifyJupiterMethodFailed (line 30) | @Test
FILE: documentation/src/test/java/example/testkit/EngineTestKitSkippedMethodDemo.java
class EngineTestKitSkippedMethodDemo (line 27) | class EngineTestKitSkippedMethodDemo {
method verifyJupiterMethodWasSkipped (line 29) | @Test
FILE: documentation/src/test/java/example/testkit/EngineTestKitStatisticsDemo.java
class EngineTestKitStatisticsDemo (line 23) | class EngineTestKitStatisticsDemo {
method verifyJupiterContainerStats (line 25) | @Test
method verifyJupiterTestStats (line 35) | @Test
FILE: documentation/src/test/java/example/timing/TimingExtension.java
class TimingExtension (line 32) | public class TimingExtension implements BeforeTestExecutionCallback, Aft...
method beforeTestExecution (line 38) | @Override
method afterTestExecution (line 44) | @SuppressWarnings("DataFlowIssue")
method getStore (line 56) | private Store getStore(ExtensionContext context) {
FILE: documentation/src/test/java/example/timing/TimingExtensionTests.java
class TimingExtensionTests (line 22) | @ExtendWith(TimingExtension.class)
method sleep20ms (line 25) | @Test
method sleep50ms (line 30) | @Test
FILE: documentation/src/test/java/extensions/ExpectToFail.java
class Extension (line 32) | class Extension implements TestExecutionExceptionHandler, AfterEachCallb...
method handleTestExecutionException (line 36) | @Override
method afterEach (line 41) | @Override
method getExceptionStore (line 46) | private Store getExceptionStore(ExtensionContext context) {
FILE: documentation/src/tools/java/org/junit/api/tools/AbstractApiReportWriter.java
class AbstractApiReportWriter (line 27) | abstract class AbstractApiReportWriter implements ApiReportWriter {
method AbstractApiReportWriter (line 33) | AbstractApiReportWriter(ApiReport apiReport) {
method printReportHeader (line 37) | @Override
method printDeclarationInfo (line 46) | @Override
method printDeclarationSection (line 52) | protected void printDeclarationSection(Set<Status> statuses, Status st...
method printDeclarationSectionHeader (line 78) | protected void printDeclarationSectionHeader(Set<Status> statuses, Sta...
method h1 (line 91) | protected abstract String h1(String header);
method h2 (line 93) | protected abstract String h2(String header);
method h3 (line 95) | protected abstract String h3(String header);
method h4 (line 97) | protected abstract String h4(String header);
method code (line 99) | protected abstract String code(String element);
method italic (line 101) | protected abstract String italic(String element);
method paragraph (line 103) | protected String paragraph(String element) {
method printDeclarationTableHeader (line 107) | protected abstract void printDeclarationTableHeader(PrintWriter out);
method printDeclarationTableRow (line 109) | protected abstract void printDeclarationTableRow(Declaration declarati...
method printDeclarationTableFooter (line 111) | protected abstract void printDeclarationTableFooter(PrintWriter out);
FILE: documentation/src/tools/java/org/junit/api/tools/ApiReportGenerator.java
class ApiReportGenerator (line 49) | class ApiReportGenerator {
method main (line 54) | public static void main(String... args) {
method parseArgs (line 87) | private static Map<Status, StreamOpener> parseArgs(String[] args) {
type StreamOpener (line 105) | private interface StreamOpener {
method openStream (line 106) | OutputStream openStream() throws IOException;
method generateReport (line 109) | private static ApiReport generateReport(ScanResult scanResult) {
method scanClasspath (line 134) | private static ScanResult scanClasspath() {
method collectTypes (line 158) | private static SortedSet<ClassInfo> collectTypes(ScanResult scanResult) {
method collectMethods (line 173) | private static Stream<MethodInfo> collectMethods(ScanResult scanResult) {
method ApiReportGenerator (line 179) | private ApiReportGenerator() {
FILE: documentation/src/tools/java/org/junit/api/tools/ApiReportWriter.java
type ApiReportWriter (line 21) | interface ApiReportWriter {
method printReportHeader (line 23) | void printReportHeader(PrintWriter out);
method printDeclarationInfo (line 25) | void printDeclarationInfo(PrintWriter out, Set<Status> statuses);
FILE: documentation/src/tools/java/org/junit/api/tools/AsciidocApiReportWriter.java
class AsciidocApiReportWriter (line 18) | class AsciidocApiReportWriter extends AbstractApiReportWriter {
method AsciidocApiReportWriter (line 22) | AsciidocApiReportWriter(ApiReport apiReport) {
method h1 (line 26) | @Override
method h2 (line 31) | @Override
method h3 (line 36) | @Override
method h4 (line 41) | @Override
method code (line 46) | @Override
method italic (line 51) | @Override
method printDeclarationTableHeader (line 56) | @Override
method printDeclarationTableRow (line 64) | @Override
method printDeclarationTableFooter (line 72) | @Override
FILE: documentation/src/tools/java/org/junit/api/tools/Declaration.java
type Declaration (line 25) | sealed interface Declaration extends Comparable<Declaration> {
method moduleName (line 27) | String moduleName();
method packageName (line 29) | String packageName();
method fullName (line 31) | String fullName();
method name (line 33) | String name();
method kind (line 35) | String kind();
method status (line 37) | Status status();
method since (line 39) | String since();
method compareTo (line 41) | @Override
method moduleName (line 48) | @Override
method packageName (line 53) | @Override
method fullName (line 58) | @Override
method name (line 63) | @Override
method kind (line 69) | @Override
method status (line 80) | @Override
method since (line 85) | @Override
method getParameterValues (line 90) | private AnnotationParameterValueList getParameterValues() {
method moduleName (line 97) | @Override
method packageName (line 102) | @Override
method fullName (line 107) | @Override
method name (line 112) | @Override
method methodSignature (line 123) | private String methodSignature() {
method methodParameters (line 127) | private String methodParameters() {
method kind (line 133) | @Override
method status (line 144) | @Override
method since (line 149) | @Override
method getParameterValues (line 154) | private AnnotationParameterValueList getParameterValues() {
method classInfo (line 158) | public ClassInfo classInfo() {
method readStatus (line 163) | private static Status readStatus(AnnotationParameterValueList paramete...
method readSince (line 167) | private static String readSince(AnnotationParameterValueList parameter...
method getShortClassName (line 171) | private static String getShortClassName(ClassInfo classInfo) {
FILE: documentation/src/tools/java/org/junit/api/tools/HtmlApiReportWriter.java
class HtmlApiReportWriter (line 18) | class HtmlApiReportWriter extends AbstractApiReportWriter {
method HtmlApiReportWriter (line 23) | HtmlApiReportWriter(ApiReport apiReport) {
method h1 (line 27) | @Override
method h2 (line 32) | @Override
method h3 (line 37) | @Override
method h4 (line 42) | @Override
method code (line 47) | @Override
method italic (line 52) | @Override
method paragraph (line 57) | @Override
method printDeclarationTableHeader (line 62) | @Override
method printDeclarationTableRow (line 68) | @Override
method printDeclarationTableFooter (line 76) | @Override
FILE: documentation/src/tools/java/org/junit/api/tools/MarkdownApiReportWriter.java
class MarkdownApiReportWriter (line 19) | class MarkdownApiReportWriter extends AbstractApiReportWriter {
method MarkdownApiReportWriter (line 23) | MarkdownApiReportWriter(ApiReport apiReport) {
method h1 (line 27) | @Override
method h2 (line 32) | @Override
method h3 (line 37) | @Override
method h4 (line 42) | @Override
method code (line 47) | @Override
method italic (line 52) | @Override
method printDeclarationTableHeader (line 57) | @Override
method dashes (line 63) | private String dashes(int length) {
method printDeclarationTableRow (line 67) | @Override
method printDeclarationTableFooter (line 75) | @Override
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertAll.java
class AssertAll (line 31) | class AssertAll {
method AssertAll (line 33) | private AssertAll() {
method assertAll (line 37) | static void assertAll(Executable... executables) {
method assertAll (line 41) | static void assertAll(@Nullable String heading, Executable... executab...
method assertAll (line 47) | static void assertAll(Collection<Executable> executables) {
method assertAll (line 51) | static void assertAll(@Nullable String heading, Collection<Executable>...
method assertAll (line 57) | static void assertAll(Stream<Executable> executables) {
method assertAll (line 61) | static void assertAll(@Nullable String heading, Stream<Executable> exe...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertArrayEquals.java
class AssertArrayEquals (line 31) | class AssertArrayEquals {
method AssertArrayEquals (line 33) | private AssertArrayEquals() {
method assertArrayEquals (line 37) | static void assertArrayEquals(boolean @Nullable [] expected, boolean @...
method assertArrayEquals (line 41) | static void assertArrayEquals(boolean @Nullable [] expected, boolean @...
method assertArrayEquals (line 46) | static void assertArrayEquals(boolean @Nullable [] expected, boolean @...
method assertArrayEquals (line 51) | static void assertArrayEquals(char @Nullable [] expected, char @Nullab...
method assertArrayEquals (line 55) | static void assertArrayEquals(char @Nullable [] expected, char @Nullab...
method assertArrayEquals (line 59) | static void assertArrayEquals(char @Nullable [] expected, char @Nullab...
method assertArrayEquals (line 64) | static void assertArrayEquals(byte @Nullable [] expected, byte @Nullab...
method assertArrayEquals (line 68) | static void assertArrayEquals(byte @Nullable [] expected, byte @Nullab...
method assertArrayEquals (line 72) | static void assertArrayEquals(byte @Nullable [] expected, byte @Nullab...
method assertArrayEquals (line 77) | static void assertArrayEquals(short @Nullable [] expected, short @Null...
method assertArrayEquals (line 81) | static void assertArrayEquals(short @Nullable [] expected, short @Null...
method assertArrayEquals (line 85) | static void assertArrayEquals(short @Nullable [] expected, short @Null...
method assertArrayEquals (line 90) | static void assertArrayEquals(int @Nullable [] expected, int @Nullable...
method assertArrayEquals (line 94) | static void assertArrayEquals(int @Nullable [] expected, int @Nullable...
method assertArrayEquals (line 98) | static void assertArrayEquals(int @Nullable [] expected, int @Nullable...
method assertArrayEquals (line 103) | static void assertArrayEquals(long @Nullable [] expected, long @Nullab...
method assertArrayEquals (line 107) | static void assertArrayEquals(long @Nullable [] expected, long @Nullab...
method assertArrayEquals (line 111) | static void assertArrayEquals(long @Nullable [] expected, long @Nullab...
method assertArrayEquals (line 116) | static void assertArrayEquals(float @Nullable [] expected, float @Null...
method assertArrayEquals (line 120) | static void assertArrayEquals(float @Nullable [] expected, float @Null...
method assertArrayEquals (line 124) | static void assertArrayEquals(float @Nullable [] expected, float @Null...
method assertArrayEquals (line 129) | static void assertArrayEquals(float @Nullable [] expected, float @Null...
method assertArrayEquals (line 133) | static void assertArrayEquals(float @Nullable [] expected, float @Null...
method assertArrayEquals (line 138) | static void assertArrayEquals(float @Nullable [] expected, float @Null...
method assertArrayEquals (line 143) | static void assertArrayEquals(double @Nullable [] expected, double @Nu...
method assertArrayEquals (line 147) | static void assertArrayEquals(double @Nullable [] expected, double @Nu...
method assertArrayEquals (line 151) | static void assertArrayEquals(double @Nullable [] expected, double @Nu...
method assertArrayEquals (line 156) | static void assertArrayEquals(double @Nullable [] expected, double @Nu...
method assertArrayEquals (line 160) | static void assertArrayEquals(double @Nullable [] expected, double @Nu...
method assertArrayEquals (line 165) | static void assertArrayEquals(double @Nullable [] expected, double @Nu...
method assertArrayEquals (line 170) | static void assertArrayEquals(@Nullable Object @Nullable [] expected, ...
method assertArrayEquals (line 174) | static void assertArrayEquals(@Nullable Object @Nullable [] expected, ...
method assertArrayEquals (line 179) | static void assertArrayEquals(@Nullable Object @Nullable [] expected, ...
method assertArrayEquals (line 184) | private static void assertArrayEquals(boolean @Nullable [] expected, b...
method assertArrayEquals (line 205) | private static void assertArrayEquals(char @Nullable [] expected, char...
method assertArrayEquals (line 227) | private static void assertArrayEquals(byte @Nullable [] expected, byte...
method assertArrayEquals (line 249) | private static void assertArrayEquals(short @Nullable [] expected, sho...
method assertArrayEquals (line 271) | private static void assertArrayEquals(int @Nullable [] expected, int @...
method assertArrayEquals (line 293) | private static void assertArrayEquals(long @Nullable [] expected, long...
method assertArrayEquals (line 315) | private static void assertArrayEquals(float @Nullable [] expected, flo...
method assertArrayEquals (line 337) | private static void assertArrayEquals(float @Nullable [] expected, flo...
method assertArrayEquals (line 360) | private static void assertArrayEquals(double @Nullable [] expected, do...
method assertArrayEquals (line 382) | private static void assertArrayEquals(double @Nullable [] expected, do...
method assertArrayEquals (line 405) | private static void assertArrayEquals(@Nullable Object @Nullable [] ex...
method assertArrayElementsEqual (line 434) | private static void assertArrayElementsEqual(@Nullable Object expected...
method failExpectedArrayIsNull (line 477) | private static void failExpectedArrayIsNull(@Nullable Deque<Integer> i...
method expectedArrayIsNullFailure (line 481) | private static AssertionFailedError expectedArrayIsNullFailure(@Nullab...
method failActualArrayIsNull (line 490) | private static void failActualArrayIsNull(@Nullable Deque<Integer> ind...
method actualArrayIsNullFailure (line 494) | private static AssertionFailedError actualArrayIsNullFailure(@Nullable...
method assertArraysHaveSameLength (line 503) | private static void assertArraysHaveSameLength(int expected, int actua...
method failArraysNotEqual (line 517) | private static void failArraysNotEqual(@Nullable Object expected, @Nul...
method nullSafeIndexes (line 529) | private static Deque<Integer> nullSafeIndexes(@Nullable Deque<Integer>...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertDoesNotThrow.java
class AssertDoesNotThrow (line 32) | class AssertDoesNotThrow {
method AssertDoesNotThrow (line 34) | private AssertDoesNotThrow() {
method assertDoesNotThrow (line 38) | static void assertDoesNotThrow(Executable executable) {
method assertDoesNotThrow (line 42) | static void assertDoesNotThrow(Executable executable, @Nullable String...
method assertDoesNotThrow (line 46) | static void assertDoesNotThrow(Executable executable, Supplier<@Nullab...
method assertDoesNotThrow (line 50) | private static void assertDoesNotThrow(Executable executable, @Nullabl...
method assertDoesNotThrow (line 60) | static <T extends @Nullable Object> T assertDoesNotThrow(ThrowingSuppl...
method assertDoesNotThrow (line 64) | static <T extends @Nullable Object> T assertDoesNotThrow(ThrowingSuppl...
method assertDoesNotThrow (line 68) | static <T extends @Nullable Object> T assertDoesNotThrow(ThrowingSuppl...
method assertDoesNotThrow (line 73) | private static <T extends @Nullable Object> T assertDoesNotThrow(Throw...
method createAssertionFailedError (line 84) | @API(status = INTERNAL, since = "6.0")
method buildSuffix (line 94) | private static String buildSuffix(@Nullable String message) {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertEquals.java
class AssertEquals (line 28) | class AssertEquals {
method AssertEquals (line 30) | private AssertEquals() {
method assertEquals (line 34) | static void assertEquals(byte expected, byte actual) {
method assertEquals (line 38) | static void assertEquals(byte expected, byte actual, @Nullable String ...
method assertEquals (line 44) | static void assertEquals(byte expected, byte actual, Supplier<@Nullabl...
method assertEquals (line 50) | static void assertEquals(char expected, char actual) {
method assertEquals (line 54) | static void assertEquals(char expected, char actual, @Nullable String ...
method assertEquals (line 60) | static void assertEquals(char expected, char actual, Supplier<@Nullabl...
method assertEquals (line 66) | static void assertEquals(double expected, double actual) {
method assertEquals (line 70) | static void assertEquals(double expected, double actual, @Nullable Str...
method assertEquals (line 76) | static void assertEquals(double expected, double actual, Supplier<@Nul...
method assertEquals (line 82) | static void assertEquals(double expected, double actual, double delta) {
method assertEquals (line 86) | static void assertEquals(double expected, double actual, double delta,...
method assertEquals (line 92) | static void assertEquals(double expected, double actual, double delta,...
method assertEquals (line 98) | static void assertEquals(float expected, float actual) {
method assertEquals (line 102) | static void assertEquals(float expected, float actual, @Nullable Strin...
method assertEquals (line 108) | static void assertEquals(float expected, float actual, Supplier<@Nulla...
method assertEquals (line 114) | static void assertEquals(float expected, float actual, float delta) {
method assertEquals (line 118) | static void assertEquals(float expected, float actual, float delta, @N...
method assertEquals (line 124) | static void assertEquals(float expected, float actual, float delta, Su...
method assertEquals (line 130) | static void assertEquals(short expected, short actual) {
method assertEquals (line 134) | static void assertEquals(short expected, short actual, @Nullable Strin...
method assertEquals (line 140) | static void assertEquals(short expected, short actual, Supplier<@Nulla...
method assertEquals (line 146) | static void assertEquals(int expected, int actual) {
method assertEquals (line 150) | static void assertEquals(int expected, int actual, @Nullable String me...
method assertEquals (line 156) | static void assertEquals(int expected, int actual, Supplier<@Nullable ...
method assertEquals (line 162) | static void assertEquals(long expected, long actual) {
method assertEquals (line 166) | static void assertEquals(long expected, long actual, @Nullable String ...
method assertEquals (line 172) | static void assertEquals(long expected, long actual, Supplier<@Nullabl...
method assertEquals (line 178) | static void assertEquals(@Nullable Object expected, @Nullable Object a...
method assertEquals (line 182) | static void assertEquals(@Nullable Object expected, @Nullable Object a...
method assertEquals (line 188) | static void assertEquals(@Nullable Object expected, @Nullable Object a...
method failNotEqual (line 195) | private static void failNotEqual(@Nullable Object expected, @Nullable ...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertFalse.java
class AssertFalse (line 27) | class AssertFalse {
method AssertFalse (line 29) | private AssertFalse() {
method assertFalse (line 33) | @Contract("true -> fail")
method assertFalse (line 38) | @Contract("true, _ -> fail")
method assertFalse (line 45) | @Contract("true, _ -> fail")
method assertFalse (line 52) | static void assertFalse(BooleanSupplier booleanSupplier) {
method assertFalse (line 56) | static void assertFalse(BooleanSupplier booleanSupplier, @Nullable Str...
method assertFalse (line 60) | static void assertFalse(BooleanSupplier booleanSupplier, Supplier<@Nul...
method failNotFalse (line 64) | private static void failNotFalse(@Nullable Object messageOrSupplier) {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertInstanceOf.java
class AssertInstanceOf (line 27) | class AssertInstanceOf {
method AssertInstanceOf (line 29) | private AssertInstanceOf() {
method assertInstanceOf (line 33) | @Contract("_, null -> fail")
method assertInstanceOf (line 38) | @Contract("_, null, _ -> fail")
method assertInstanceOf (line 43) | @Contract("_, null, _ -> fail")
method assertInstanceOf (line 49) | private static <T> T assertInstanceOf(Class<T> expectedType, @Nullable...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertIterableEquals.java
class AssertIterableEquals (line 34) | class AssertIterableEquals {
method AssertIterableEquals (line 36) | private AssertIterableEquals() {
method assertIterableEquals (line 40) | static void assertIterableEquals(@Nullable Iterable<?> expected, @Null...
method assertIterableEquals (line 44) | static void assertIterableEquals(@Nullable Iterable<?> expected, @Null...
method assertIterableEquals (line 49) | static void assertIterableEquals(@Nullable Iterable<?> expected, @Null...
method assertIterableEquals (line 54) | private static void assertIterableEquals(@Nullable Iterable<?> expecte...
method assertIterableEquals (line 59) | private static void assertIterableEquals(@Nullable Iterable<?> expecte...
method assertIterableElementsEqual (line 92) | private static void assertIterableElementsEqual(Object expected, Objec...
method assertIterablesNotNull (line 136) | private static void assertIterablesNotNull(@Nullable Object expected, ...
method failExpectedIterableIsNull (line 147) | private static void failExpectedIterableIsNull(Deque<Integer> indexes,...
method expectedIterableIsNullFailure (line 151) | private static AssertionFailedError expectedIterableIsNullFailure(Dequ...
method failActualIterableIsNull (line 160) | private static void failActualIterableIsNull(Deque<Integer> indexes, @...
method actualIterableIsNullFailure (line 164) | private static AssertionFailedError actualIterableIsNullFailure(Deque<...
method assertIteratorsAreEmpty (line 173) | private static void assertIteratorsAreEmpty(Iterator<?> expected, Iter...
method failIterablesNotEqual (line 192) | private static void failIterablesNotEqual(Object expected, Object actu...
type Status (line 206) | private enum Status {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertLinesMatch.java
class AssertLinesMatch (line 33) | class AssertLinesMatch {
method AssertLinesMatch (line 35) | private AssertLinesMatch() {
method assertLinesMatch (line 41) | static void assertLinesMatch(List<String> expectedLines, List<String> ...
method assertLinesMatch (line 45) | static void assertLinesMatch(List<String> expectedLines, List<String> ...
method assertLinesMatch (line 49) | static void assertLinesMatch(Stream<String> expectedLines, Stream<Stri...
method assertLinesMatch (line 53) | static void assertLinesMatch(Stream<String> expectedLines, Stream<Stri...
method assertLinesMatch (line 57) | @SuppressWarnings("ReferenceEquality")
method assertLinesMatch (line 73) | @SuppressWarnings("ReferenceEquality")
method assertLinesMatch (line 90) | void assertLinesMatch() {
method assertLinesMatchWithFastForward (line 110) | void assertLinesMatchWithFastForward() {
method snippet (line 183) | String snippet(String line) {
method fail (line 190) | void fail(String format, Object... args) {
method isFastForwardLine (line 203) | static boolean isFastForwardLine(String line) {
method parseFastForwardLimit (line 208) | static int parseFastForwardLimit(String fastForwardLine) {
method matches (line 221) | static boolean matches(String expectedLine, String actualLine) {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertNotEquals.java
class AssertNotEquals (line 28) | class AssertNotEquals {
method AssertNotEquals (line 30) | private AssertNotEquals() {
method assertNotEquals (line 37) | static void assertNotEquals(byte unexpected, byte actual) {
method assertNotEquals (line 44) | static void assertNotEquals(byte unexpected, byte actual, @Nullable St...
method assertNotEquals (line 53) | static void assertNotEquals(byte unexpected, byte actual, Supplier<@Nu...
method assertNotEquals (line 62) | static void assertNotEquals(short unexpected, short actual) {
method assertNotEquals (line 69) | static void assertNotEquals(short unexpected, short actual, @Nullable ...
method assertNotEquals (line 78) | static void assertNotEquals(short unexpected, short actual, Supplier<@...
method assertNotEquals (line 87) | static void assertNotEquals(int unexpected, int actual) {
method assertNotEquals (line 94) | static void assertNotEquals(int unexpected, int actual, @Nullable Stri...
method assertNotEquals (line 103) | static void assertNotEquals(int unexpected, int actual, Supplier<@Null...
method assertNotEquals (line 112) | static void assertNotEquals(long unexpected, long actual) {
method assertNotEquals (line 119) | static void assertNotEquals(long unexpected, long actual, @Nullable St...
method assertNotEquals (line 128) | static void assertNotEquals(long unexpected, long actual, Supplier<@Nu...
method assertNotEquals (line 137) | static void assertNotEquals(float unexpected, float actual) {
method assertNotEquals (line 144) | static void assertNotEquals(float unexpected, float actual, @Nullable ...
method assertNotEquals (line 153) | static void assertNotEquals(float unexpected, float actual, Supplier<@...
method assertNotEquals (line 162) | static void assertNotEquals(float unexpected, float actual, float delt...
method assertNotEquals (line 169) | static void assertNotEquals(float unexpected, float actual, float delt...
method assertNotEquals (line 178) | static void assertNotEquals(float unexpected, float actual, float delta,
method assertNotEquals (line 188) | static void assertNotEquals(double unexpected, double actual) {
method assertNotEquals (line 195) | static void assertNotEquals(double unexpected, double actual, @Nullabl...
method assertNotEquals (line 204) | static void assertNotEquals(double unexpected, double actual, Supplier...
method assertNotEquals (line 213) | static void assertNotEquals(double unexpected, double actual, double d...
method assertNotEquals (line 220) | static void assertNotEquals(double unexpected, double actual, double d...
method assertNotEquals (line 229) | static void assertNotEquals(double unexpected, double actual, double d...
method assertNotEquals (line 239) | static void assertNotEquals(char unexpected, char actual) {
method assertNotEquals (line 246) | static void assertNotEquals(char unexpected, char actual, @Nullable St...
method assertNotEquals (line 255) | static void assertNotEquals(char unexpected, char actual, Supplier<@Nu...
method assertNotEquals (line 261) | static void assertNotEquals(@Nullable Object unexpected, @Nullable Obj...
method assertNotEquals (line 265) | static void assertNotEquals(@Nullable Object unexpected, @Nullable Obj...
method assertNotEquals (line 271) | static void assertNotEquals(@Nullable Object unexpected, @Nullable Obj...
method failEqual (line 278) | private static void failEqual(@Nullable Object actual, @Nullable Objec...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertNotNull.java
class AssertNotNull (line 26) | class AssertNotNull {
method AssertNotNull (line 28) | private AssertNotNull() {
method assertNotNull (line 32) | @Contract("null -> fail")
method assertNotNull (line 37) | @Contract("null, _ -> fail")
method assertNotNull (line 44) | @Contract("null, _ -> fail")
method failNull (line 51) | private static void failNull(@Nullable Object messageOrSupplier) {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertNotSame.java
class AssertNotSame (line 25) | class AssertNotSame {
method AssertNotSame (line 27) | private AssertNotSame() {
method assertNotSame (line 31) | static void assertNotSame(@Nullable Object unexpected, @Nullable Objec...
method assertNotSame (line 35) | static void assertNotSame(@Nullable Object unexpected, @Nullable Objec...
method assertNotSame (line 41) | static void assertNotSame(@Nullable Object unexpected, @Nullable Objec...
method failSame (line 48) | private static void failSame(@Nullable Object actual, @Nullable Object...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertNull.java
class AssertNull (line 26) | class AssertNull {
method AssertNull (line 28) | private AssertNull() {
method assertNull (line 32) | @Contract("!null -> fail")
method assertNull (line 37) | @Contract("!null, _ -> fail")
method assertNull (line 44) | @Contract("!null, _ -> fail")
method failNotNull (line 51) | private static void failNotNull(@Nullable Object actual, @Nullable Obj...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertSame.java
class AssertSame (line 25) | class AssertSame {
method AssertSame (line 27) | private AssertSame() {
method assertSame (line 31) | static void assertSame(@Nullable Object expected, @Nullable Object act...
method assertSame (line 35) | static void assertSame(@Nullable Object expected, @Nullable Object act...
method assertSame (line 41) | static void assertSame(@Nullable Object expected, @Nullable Object act...
method failNotSame (line 48) | private static void failNotSame(@Nullable Object expected, @Nullable O...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertThrows.java
class AssertThrows (line 28) | class AssertThrows {
method AssertThrows (line 30) | private AssertThrows() {
method assertThrows (line 34) | static <T extends Throwable> T assertThrows(Class<T> expectedType, Exe...
method assertThrows (line 38) | static <T extends Throwable> T assertThrows(Class<T> expectedType, Exe...
method assertThrows (line 43) | static <T extends Throwable> T assertThrows(Class<T> expectedType, Exe...
method assertThrows (line 49) | @SuppressWarnings("unchecked")
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertThrowsExactly.java
class AssertThrowsExactly (line 28) | class AssertThrowsExactly {
method AssertThrowsExactly (line 30) | private AssertThrowsExactly() {
method assertThrowsExactly (line 34) | static <T extends Throwable> T assertThrowsExactly(Class<T> expectedTy...
method assertThrowsExactly (line 38) | static <T extends Throwable> T assertThrowsExactly(Class<T> expectedTy...
method assertThrowsExactly (line 43) | static <T extends Throwable> T assertThrowsExactly(Class<T> expectedTy...
method assertThrowsExactly (line 49) | @SuppressWarnings("unchecked")
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertTimeout.java
class AssertTimeout (line 29) | class AssertTimeout {
method AssertTimeout (line 31) | private AssertTimeout() {
method assertTimeout (line 35) | static void assertTimeout(Duration timeout, Executable executable) {
method assertTimeout (line 39) | static void assertTimeout(Duration timeout, Executable executable, @Nu...
method assertTimeout (line 46) | static void assertTimeout(Duration timeout, Executable executable, Sup...
method assertTimeout (line 53) | static <T extends @Nullable Object> T assertTimeout(Duration timeout, ...
method assertTimeout (line 57) | static <T extends @Nullable Object> T assertTimeout(Duration timeout, ...
method assertTimeout (line 62) | static <T extends @Nullable Object> T assertTimeout(Duration timeout, ...
method assertTimeout (line 67) | private static <T extends @Nullable Object> T assertTimeout(Duration t...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertTimeoutPreemptively.java
class AssertTimeoutPreemptively (line 31) | class AssertTimeoutPreemptively {
method assertTimeoutPreemptively (line 33) | static void assertTimeoutPreemptively(Duration timeout, Executable exe...
method assertTimeoutPreemptively (line 37) | @SuppressWarnings("NullAway")
method assertTimeoutPreemptively (line 45) | @SuppressWarnings("NullAway")
method assertTimeoutPreemptively (line 54) | static <T extends @Nullable Object> T assertTimeoutPreemptively(Durati...
method assertTimeoutPreemptively (line 58) | static <T extends @Nullable Object> T assertTimeoutPreemptively(Durati...
method assertTimeoutPreemptively (line 64) | static <T extends @Nullable Object> T assertTimeoutPreemptively(Durati...
method createAssertionFailure (line 70) | private static AssertionFailedError createAssertionFailure(Duration ti...
method AssertTimeoutPreemptively (line 80) | private AssertTimeoutPreemptively() {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertTrue.java
class AssertTrue (line 26) | class AssertTrue {
method AssertTrue (line 28) | private AssertTrue() {
method assertTrue (line 32) | @Contract("false -> fail")
method assertTrue (line 37) | @Contract("false, _ -> fail")
method assertTrue (line 44) | @Contract("false, _ -> fail")
method failNotTrue (line 51) | private static void failNotTrue(@Nullable Object messageOrSupplier) {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertionFailureBuilder.java
class AssertionFailureBuilder (line 36) | @API(status = STABLE, since = "5.9")
method assertionFailure (line 62) | public static AssertionFailureBuilder assertionFailure() {
method AssertionFailureBuilder (line 66) | private AssertionFailureBuilder() {
method message (line 79) | public AssertionFailureBuilder message(@Nullable Object message) {
method reason (line 90) | public AssertionFailureBuilder reason(@Nullable String reason) {
method cause (line 101) | public AssertionFailureBuilder cause(@Nullable Throwable cause) {
method expected (line 112) | public AssertionFailureBuilder expected(@Nullable Object expected) {
method actual (line 124) | public AssertionFailureBuilder actual(@Nullable Object actual) {
method includeValuesInMessage (line 138) | public AssertionFailureBuilder includeValuesInMessage(boolean includeV...
method trimStacktrace (line 152) | @API(status = EXPERIMENTAL, since = "6.1")
method retainStackTraceElements (line 171) | @API(status = EXPERIMENTAL, since = "6.1")
method buildAndThrow (line 184) | @Contract(" -> fail")
method build (line 195) | public AssertionFailedError build() {
method maybeTrimStackTrace (line 213) | private void maybeTrimStackTrace(Throwable throwable) {
method clamp0 (line 237) | private static int clamp0(int value, int max) {
method nullSafeGet (line 241) | private static @Nullable String nullSafeGet(@Nullable Object messageOr...
method buildPrefix (line 252) | private static String buildPrefix(@Nullable String message) {
method formatValues (line 256) | private static String formatValues(@Nullable Object expected, @Nullabl...
method formatClassAndValue (line 266) | private static String formatClassAndValue(@Nullable Object value, Stri...
method toString (line 276) | private static String toString(@Nullable Object obj) {
method toHash (line 283) | private static String toHash(@Nullable Object obj) {
method getClassName (line 287) | private static String getClassName(@Nullable Object obj) {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/AssertionUtils.java
class AssertionUtils (line 29) | class AssertionUtils {
method AssertionUtils (line 31) | private AssertionUtils() {
method failure (line 35) | static AssertionFailedError failure() {
method failure (line 41) | static AssertionFailedError failure(@Nullable String message) {
method failure (line 48) | static AssertionFailedError failure(@Nullable String message, @Nullabl...
method failure (line 56) | static AssertionFailedError failure(@Nullable Throwable cause) {
method failure (line 63) | static AssertionFailedError failure(Supplier<@Nullable String> message...
method nullSafeGet (line 70) | static @Nullable String nullSafeGet(@Nullable Supplier<@Nullable Strin...
method getCanonicalName (line 74) | static String getCanonicalName(Class<?> clazz) {
method formatIndexes (line 85) | static String formatIndexes(@Nullable Deque<Integer> indexes) {
method floatsAreEqual (line 93) | static boolean floatsAreEqual(float value1, float value2, float delta) {
method assertValidDelta (line 98) | static void assertValidDelta(float delta) {
method assertValidDelta (line 104) | static void assertValidDelta(double delta) {
method floatsAreEqual (line 110) | static boolean floatsAreEqual(float value1, float value2) {
method doublesAreEqual (line 114) | static boolean doublesAreEqual(double value1, double value2, double de...
method doublesAreEqual (line 119) | static boolean doublesAreEqual(double value1, double value2) {
method objectsAreEqual (line 123) | static boolean objectsAreEqual(@Nullable Object obj1, @Nullable Object...
method failIllegalDelta (line 130) | private static void failIllegalDelta(String delta) {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/Assertions.java
class Assertions (line 95) | @API(status = STABLE, since = "5.0")
method Assertions (line 103) | @API(status = STABLE, since = "5.3")
method fail (line 119) | @Contract(" -> fail")
method fail (line 139) | @Contract("_ -> fail")
method fail (line 152) | @Contract("_, _ -> fail")
method fail (line 164) | @Contract("_ -> fail")
method fail (line 177) | @Contract("_ -> fail")
method assertTrue (line 188) | @Contract("false -> fail")
method assertTrue (line 197) | @Contract("false, _ -> fail")
method assertTrue (line 209) | public static void assertTrue(BooleanSupplier booleanSupplier) {
method assertTrue (line 222) | public static void assertTrue(BooleanSupplier booleanSupplier, @Nullab...
method assertTrue (line 230) | @Contract("false, _ -> fail")
method assertTrue (line 246) | public static void assertTrue(BooleanSupplier booleanSupplier, Supplie...
method assertFalse (line 255) | @Contract("true -> fail")
method assertFalse (line 264) | @Contract("true, _ -> fail")
method assertFalse (line 273) | @Contract("true, _ -> fail")
method assertFalse (line 281) | public static void assertFalse(BooleanSupplier booleanSupplier) {
method assertFalse (line 289) | public static void assertFalse(BooleanSupplier booleanSupplier, @Nulla...
method assertFalse (line 297) | public static void assertFalse(BooleanSupplier booleanSupplier, Suppli...
method assertNull (line 306) | @Contract("!null -> fail")
method assertNull (line 315) | @Contract("!null, _ -> fail")
method assertNull (line 324) | @Contract("!null, _ -> fail")
method assertNotNull (line 334) | @Contract("null -> fail")
method assertNotNull (line 343) | @Contract("null, _ -> fail")
method assertNotNull (line 352) | @Contract("null, _ -> fail")
method assertEquals (line 362) | public static void assertEquals(short expected, short actual) {
method assertEquals (line 369) | public static void assertEquals(short expected, @Nullable Short actual) {
method assertEquals (line 376) | public static void assertEquals(@Nullable Short expected, short actual) {
method assertEquals (line 385) | @API(status = STABLE, since = "5.4")
method assertEquals (line 394) | public static void assertEquals(short expected, short actual, @Nullabl...
method assertEquals (line 402) | public static void assertEquals(short expected, @Nullable Short actual...
method assertEquals (line 410) | public static void assertEquals(@Nullable Short expected, short actual...
method assertEquals (line 420) | @API(status = STABLE, since = "5.4")
method assertEquals (line 429) | public static void assertEquals(short expected, short actual, Supplier...
method assertEquals (line 437) | public static void assertEquals(short expected, @Nullable Short actual,
method assertEquals (line 446) | public static void assertEquals(@Nullable Short expected, short actual,
method assertEquals (line 457) | @API(status = STABLE, since = "5.4")
method assertEquals (line 466) | public static void assertEquals(byte expected, byte actual) {
method assertEquals (line 473) | public static void assertEquals(byte expected, @Nullable Byte actual) {
method assertEquals (line 480) | public static void assertEquals(@Nullable Byte expected, byte actual) {
method assertEquals (line 489) | @API(status = STABLE, since = "5.4")
method assertEquals (line 498) | public static void assertEquals(byte expected, byte actual, @Nullable ...
method assertEquals (line 506) | public static void assertEquals(byte expected, @Nullable Byte actual, ...
method assertEquals (line 514) | public static void assertEquals(@Nullable Byte expected, byte actual, ...
method assertEquals (line 524) | @API(status = STABLE, since = "5.4")
method assertEquals (line 533) | public static void assertEquals(byte expected, byte actual, Supplier<@...
method assertEquals (line 541) | public static void assertEquals(byte expected, @Nullable Byte actual, ...
method assertEquals (line 549) | public static void assertEquals(@Nullable Byte expected, byte actual, ...
method assertEquals (line 559) | @API(status = STABLE, since = "5.4")
method assertEquals (line 568) | public static void assertEquals(int expected, int actual) {
method assertEquals (line 575) | public static void assertEquals(int expected, @Nullable Integer actual) {
method assertEquals (line 582) | public static void assertEquals(@Nullable Integer expected, int actual) {
method assertEquals (line 591) | @API(status = STABLE, since = "5.4")
method assertEquals (line 600) | public static void assertEquals(int expected, int actual, @Nullable St...
method assertEquals (line 608) | public static void assertEquals(int expected, @Nullable Integer actual...
method assertEquals (line 616) | public static void assertEquals(@Nullable Integer expected, int actual...
method assertEquals (line 626) | @API(status = STABLE, since = "5.4")
method assertEquals (line 635) | public static void assertEquals(int expected, int actual, Supplier<@Nu...
method assertEquals (line 643) | public static void assertEquals(int expected, @Nullable Integer actual,
method assertEquals (line 652) | public static void assertEquals(@Nullable Integer expected, int actual,
method assertEquals (line 663) | @API(status = STABLE, since = "5.4")
method assertEquals (line 672) | public static void assertEquals(long expected, long actual) {
method assertEquals (line 679) | public static void assertEquals(long expected, @Nullable Long actual) {
method assertEquals (line 686) | public static void assertEquals(@Nullable Long expected, long actual) {
method assertEquals (line 695) | @API(status = STABLE, since = "5.4")
method assertEquals (line 704) | public static void assertEquals(long expected, long actual, @Nullable ...
method assertEquals (line 712) | public static void assertEquals(long expected, @Nullable Long actual, ...
method assertEquals (line 720) | public static void assertEquals(@Nullable Long expected, long actual, ...
method assertEquals (line 730) | @API(status = STABLE, since = "5.4")
method assertEquals (line 739) | public static void assertEquals(long expected, long actual, Supplier<@...
method assertEquals (line 747) | public static void assertEquals(long expected, @Nullable Long actual, ...
method assertEquals (line 755) | public static void assertEquals(@Nullable Long expected, long actual, ...
method assertEquals (line 765) | @API(status = STABLE, since = "5.4")
method assertEquals (line 776) | public static void assertEquals(float expected, float actual) {
method assertEquals (line 785) | public static void assertEquals(float expected, @Nullable Float actual) {
method assertEquals (line 794) | public static void assertEquals(@Nullable Float expected, float actual) {
method assertEquals (line 805) | @API(status = STABLE, since = "5.4")
method assertEquals (line 816) | public static void assertEquals(float expected, float actual, @Nullabl...
method assertEquals (line 826) | public static void assertEquals(float expected, @Nullable Float actual...
method assertEquals (line 836) | public static void assertEquals(@Nullable Float expected, float actual...
method assertEquals (line 848) | @API(status = STABLE, since = "5.4")
method assertEquals (line 859) | public static void assertEquals(float expected, float actual, Supplier...
method assertEquals (line 869) | public static void assertEquals(float expected, @Nullable Float actual,
method assertEquals (line 880) | public static void assertEquals(@Nullable Float expected, float actual,
method assertEquals (line 893) | @API(status = STABLE, since = "5.4")
method assertEquals (line 904) | public static void assertEquals(float expected, float actual, float de...
method assertEquals (line 914) | public static void assertEquals(float expected, float actual, float de...
method assertEquals (line 924) | public static void assertEquals(float expected, float actual, float de...
method assertEquals (line 934) | public static void assertEquals(double expected, double actual) {
method assertEquals (line 943) | public static void assertEquals(double expected, @Nullable Double actu...
method assertEquals (line 952) | public static void assertEquals(@Nullable Double expected, double actu...
method assertEquals (line 963) | @API(status = STABLE, since = "5.4")
method assertEquals (line 974) | public static void assertEquals(double expected, double actual, @Nulla...
method assertEquals (line 984) | public static void assertEquals(double expected, @Nullable Double actu...
method assertEquals (line 994) | public static void assertEquals(@Nullable Double expected, double actu...
method assertEquals (line 1006) | @API(status = STABLE, since = "5.4")
method assertEquals (line 1017) | public static void assertEquals(double expected, double actual, Suppli...
method assertEquals (line 1027) | public static void assertEquals(double expected, @Nullable Double actual,
method assertEquals (line 1038) | public static void assertEquals(@Nullable Double expected, double actual,
method assertEquals (line 1051) | @API(status = STABLE, since = "5.4")
method assertEquals (line 1062) | public static void assertEquals(double expected, double actual, double...
method assertEquals (line 1072) | public static void assertEquals(double expected, double actual, double...
method assertEquals (line 1082) | public static void assertEquals(double expected, double actual, double...
method assertEquals (line 1090) | public static void assertEquals(char expected, char actual) {
method assertEquals (line 1097) | public static void assertEquals(char expected, @Nullable Character act...
method assertEquals (line 1104) | public static void assertEquals(@Nullable Character expected, char act...
method assertEquals (line 1113) | @API(status = STABLE, since = "5.4")
method assertEquals (line 1122) | public static void assertEquals(char expected, char actual, @Nullable ...
method assertEquals (line 1130) | public static void assertEquals(char expected, @Nullable Character act...
method assertEquals (line 1138) | public static void assertEquals(@Nullable Character expected, char act...
method assertEquals (line 1148) | @API(status = STABLE, since = "5.4")
method assertEquals (line 1158) | public static void assertEquals(char expected, char actual, Supplier<@...
method assertEquals (line 1166) | public static void assertEquals(char expected, @Nullable Character act...
method assertEquals (line 1175) | public static void assertEquals(@Nullable Character expected, char act...
method assertEquals (line 1186) | @API(status = STABLE, since = "5.4")
method assertEquals (line 1198) | public static void assertEquals(@Nullable Object expected, @Nullable O...
method assertEquals (line 1209) | public static void assertEquals(@Nullable Object expected, @Nullable O...
method assertEquals (line 1220) | public static void assertEquals(@Nullable Object expected, @Nullable O...
method assertArrayEquals (line 1231) | public static void assertArrayEquals(boolean @Nullable [] expected, bo...
method assertArrayEquals (line 1240) | public static void assertArrayEquals(boolean @Nullable [] expected, bo...
method assertArrayEquals (line 1250) | public static void assertArrayEquals(boolean @Nullable [] expected, bo...
method assertArrayEquals (line 1259) | public static void assertArrayEquals(char @Nullable [] expected, char ...
method assertArrayEquals (line 1268) | public static void assertArrayEquals(char @Nullable [] expected, char ...
method assertArrayEquals (line 1278) | public static void assertArrayEquals(char @Nullable [] expected, char ...
method assertArrayEquals (line 1287) | public static void assertArrayEquals(byte @Nullable [] expected, byte ...
method assertArrayEquals (line 1296) | public static void assertArrayEquals(byte @Nullable [] expected, byte ...
method assertArrayEquals (line 1306) | public static void assertArrayEquals(byte @Nullable [] expected, byte ...
method assertArrayEquals (line 1315) | public static void assertArrayEquals(short @Nullable [] expected, shor...
method assertArrayEquals (line 1324) | public static void assertArrayEquals(short @Nullable [] expected, shor...
method assertArrayEquals (line 1334) | public static void assertArrayEquals(short @Nullable [] expected, shor...
method assertArrayEquals (line 1343) | public static void assertArrayEquals(int @Nullable [] expected, int @N...
method assertArrayEquals (line 1352) | public static void assertArrayEquals(int @Nullable [] expected, int @N...
method assertArrayEquals (line 1361) | public static void assertArrayEquals(int @Nullable [] expected, int @N...
method assertArrayEquals (line 1370) | public static void assertArrayEquals(long @Nullable [] expected, long ...
method assertArrayEquals (line 1379) | public static void assertArrayEquals(long @Nullable [] expected, long ...
method assertArrayEquals (line 1389) | public static void assertArrayEquals(long @Nullable [] expected, long ...
method assertArrayEquals (line 1399) | public static void assertArrayEquals(float @Nullable [] expected, floa...
method assertArrayEquals (line 1409) | public static void assertArrayEquals(float @Nullable [] expected, floa...
method assertArrayEquals (line 1420) | public static void assertArrayEquals(float @Nullable [] expected, floa...
method assertArrayEquals (line 1430) | public static void assertArrayEquals(float @Nullable [] expected, floa...
method assertArrayEquals (line 1440) | public static void assertArrayEquals(float @Nullable [] expected, floa...
method assertArrayEquals (line 1451) | public static void assertArrayEquals(float @Nullable [] expected, floa...
method assertArrayEquals (line 1461) | public static void assertArrayEquals(double @Nullable [] expected, dou...
method assertArrayEquals (line 1471) | public static void assertArrayEquals(double @Nullable [] expected, dou...
method assertArrayEquals (line 1482) | public static void assertArrayEquals(double @Nullable [] expected, dou...
method assertArrayEquals (line 1492) | public static void assertArrayEquals(double @Nullable [] expected, dou...
method assertArrayEquals (line 1502) | public static void assertArrayEquals(double @Nullable [] expected, dou...
method assertArrayEquals (line 1513) | public static void assertArrayEquals(double @Nullable [] expected, dou...
method assertArrayEquals (line 1527) | public static void assertArrayEquals(@Nullable Object @Nullable [] exp...
method assertArrayEquals (line 1541) | public static void assertArrayEquals(@Nullable Object @Nullable [] exp...
method assertArrayEquals (line 1556) | public static void assertArrayEquals(@Nullable Object @Nullable [] exp...
method assertIterableEquals (line 1581) | public static void assertIterableEquals(@Nullable Iterable<?> expected...
method assertIterableEquals (line 1605) | public static void assertIterableEquals(@Nullable Iterable<?> expected...
method assertIterableEquals (line 1630) | public static void assertIterableEquals(@Nullable Iterable<?> expected...
method assertLinesMatch (line 1677) | public static void assertLinesMatch(List<String> expectedLines, List<S...
method assertLinesMatch (line 1691) | public static void assertLinesMatch(List<String> expectedLines, List<S...
method assertLinesMatch (line 1708) | public static void assertLinesMatch(List<String> expectedLines, List<S...
method assertLinesMatch (line 1725) | public static void assertLinesMatch(Stream<String> expectedLines, Stre...
method assertLinesMatch (line 1743) | public static void assertLinesMatch(Stream<String> expectedLines, Stre...
method assertLinesMatch (line 1764) | public static void assertLinesMatch(Stream<String> expectedLines, Stre...
method assertNotEquals (line 1776) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 1786) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 1796) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 1806) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 1818) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 1830) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 1842) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 1854) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 1867) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 1880) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 1894) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 1908) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 1919) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 1929) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 1939) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 1949) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 1961) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 1973) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 1985) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 1997) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2010) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2023) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2037) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2051) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2062) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2072) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2082) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2092) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2104) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2116) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2128) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2140) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2154) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2167) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2181) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2195) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2206) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2216) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2226) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2236) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2248) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2260) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2272) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2284) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2297) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2310) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2324) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2338) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2352) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2365) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2378) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2391) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2406) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2421) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2436) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2451) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2464) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2477) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2491) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2505) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2520) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2536) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2550) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2564) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2577) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2590) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2603) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2618) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2633) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2648) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2663) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2676) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2689) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2703) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2717) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2732) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2748) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2762) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2773) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2783) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2793) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2803) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2815) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2827) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2839) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2851) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2865) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2878) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2892) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2906) | @API(status = STABLE, since = "5.4")
method assertNotEquals (line 2919) | public static void assertNotEquals(@Nullable Object unexpected, @Nulla...
method assertNotEquals (line 2932) | public static void assertNotEquals(@Nullable Object unexpected, @Nulla...
method assertNotEquals (line 2946) | public static void assertNotEquals(@Nullable Object unexpected, @Nulla...
method assertSame (line 2961) | public static void assertSame(@Nullable Object expected, @Nullable Obj...
method assertSame (line 2974) | public static void assertSame(@Nullable Object expected, @Nullable Obj...
method assertSame (line 2988) | public static void assertSame(@Nullable Object expected, @Nullable Obj...
method assertNotSame (line 3002) | public static void assertNotSame(@Nullable Object unexpected, @Nullabl...
method assertNotSame (line 3014) | public static void assertNotSame(@Nullable Object unexpected, @Nullabl...
method assertNotSame (line 3027) | public static void assertNotSame(@Nullable Object unexpected, @Nullabl...
method assertAll (line 3047) | public static void assertAll(Executable... executables) throws Multipl...
method assertAll (line 3064) | public static void assertAll(@Nullable String heading, Executable... e...
method assertAll (line 3081) | public static void assertAll(Collection<Executable> executables) throw...
method assertAll (line 3098) | public static void assertAll(@Nullable String heading, Collection<Exec...
method assertAll (line 3116) | public static void assertAll(Stream<Executable> executables) throws Mu...
method assertAll (line 3143) | public static void assertAll(@Nullable String heading, Stream<Executab...
method assertThrowsExactly (line 3164) | @API(status = STABLE, since = "5.10")
method assertThrowsExactly (line 3187) | @API(status = STABLE, since = "5.10")
method assertThrowsExactly (line 3212) | @API(status = STABLE, since = "5.10")
method assertThrows (line 3233) | public static <T extends Throwable> T assertThrows(Class<T> expectedTy...
method assertThrows (line 3258) | public static <T extends Throwable> T assertThrows(Class<T> expectedTy...
method assertThrows (line 3285) | public static <T extends Throwable> T assertThrows(Class<T> expectedTy...
method assertDoesNotThrow (line 3304) | @API(status = STABLE, since = "5.2")
method assertDoesNotThrow (line 3323) | @API(status = STABLE, since = "5.2")
method assertDoesNotThrow (line 3343) | @API(status = STABLE, since = "5.2")
method assertDoesNotThrow (line 3364) | @API(status = STABLE, since = "5.2")
method assertDoesNotThrow (line 3385) | @API(status = STABLE, since = "5.2")
method assertDoesNotThrow (line 3408) | @API(status = STABLE, since = "5.2")
method assertTimeout (line 3433) | public static void assertTimeout(Duration timeout, Executable executab...
method assertTimeout (line 3454) | public static void assertTimeout(Duration timeout, Executable executab...
method assertTimeout (line 3476) | public static void assertTimeout(Duration timeout, Executable executable,
method assertTimeout (line 3500) | public static <T extends @Nullable Object> T assertTimeout(Duration ti...
method assertTimeout (line 3523) | public static <T extends @Nullable Object> T assertTimeout(Duration ti...
method assertTimeout (line 3548) | public static <T extends @Nullable Object> T assertTimeout(Duration ti...
method assertTimeoutPreemptively (line 3569) | public static void assertTimeoutPreemptively(Duration timeout, Executa...
method assertTimeoutPreemptively (line 3589) | public static void assertTimeoutPreemptively(Duration timeout, Executa...
method assertTimeoutPreemptively (line 3610) | public static void assertTimeoutPreemptively(Duration timeout, Executa...
method assertTimeoutPreemptively (line 3633) | public static <T extends @Nullable Object> T assertTimeoutPreemptively...
method assertTimeoutPreemptively (line 3656) | public static <T extends @Nullable Object> T assertTimeoutPreemptively...
method assertTimeoutPreemptively (line 3680) | public static <T extends @Nullable Object> T assertTimeoutPreemptively...
method assertInstanceOf (line 3696) | @API(status = STABLE, since = "5.10")
method assertInstanceOf (line 3713) | @API(status = STABLE, since = "5.10")
method assertInstanceOf (line 3732) | @Contract("_, null, _ -> fail")
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/Assumptions.java
class Assumptions (line 52) | @API(status = STABLE, since = "5.0")
method Assumptions (line 60) | protected Assumptions() {
method assumeTrue (line 72) | @Contract("false -> fail")
method assumeTrue (line 83) | public static void assumeTrue(BooleanSupplier assumptionSupplier) thro...
method assumeTrue (line 95) | public static void assumeTrue(BooleanSupplier assumptionSupplier, @Nul...
method assumeTrue (line 108) | @Contract("false, _ -> fail")
method assumeTrue (line 124) | @Contract("false, _ -> fail")
method assumeTrue (line 139) | public static void assumeTrue(BooleanSupplier assumptionSupplier, Supp...
method assumeFalse (line 153) | @Contract("true -> fail")
method assumeFalse (line 164) | public static void assumeFalse(BooleanSupplier assumptionSupplier) thr...
method assumeFalse (line 176) | public static void assumeFalse(BooleanSupplier assumptionSupplier, @Nu...
method assumeFalse (line 189) | @Contract("true, _ -> fail")
method assumeFalse (line 205) | @Contract("true, _ -> fail")
method assumeFalse (line 220) | public static void assumeFalse(BooleanSupplier assumptionSupplier, Sup...
method assumingThat (line 243) | public static void assumingThat(BooleanSupplier assumptionSupplier, Ex...
method assumingThat (line 262) | public static void assumingThat(boolean assumption, Executable executa...
method abort (line 287) | @Contract(" -> fail")
method abort (line 312) | @Contract("_ -> fail")
method abort (line 330) | @Contract("_ -> fail")
method throwAssumptionFailed (line 337) | @Contract("_ -> fail")
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/ClassDescriptor.java
type ClassDescriptor (line 27) | @API(status = STABLE, since = "5.10")
method getTestClass (line 35) | Class<?> getTestClass();
method getDisplayName (line 43) | String getDisplayName();
method isAnnotated (line 55) | boolean isAnnotated(Class<? extends Annotation> annotationType);
method findAnnotation (line 69) | <A extends Annotation> Optional<A> findAnnotation(Class<A> annotationT...
method findRepeatableAnnotations (line 85) | <A extends Annotation> List<A> findRepeatableAnnotations(Class<A> anno...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/ClassOrderer.java
type ClassOrderer (line 63) | @API(status = STABLE, since = "5.10")
method orderClasses (line 101) | void orderClasses(ClassOrdererContext context);
class Default (line 119) | @API(status = EXPERIMENTAL, since = "6.0")
method Default (line 122) | private Default() {
method orderClasses (line 126) | @Override
class ClassName (line 136) | class ClassName implements ClassOrderer {
method ClassName (line 138) | public ClassName() {
method orderClasses (line 146) | @Override
class DisplayName (line 159) | class DisplayName implements ClassOrderer {
method DisplayName (line 161) | public DisplayName() {
method orderClasses (line 169) | @Override
class OrderAnnotation (line 192) | class OrderAnnotation implements ClassOrderer {
method OrderAnnotation (line 194) | public OrderAnnotation() {
method orderClasses (line 202) | @Override
method getOrder (line 207) | private static int getOrder(ClassDescriptor descriptor) {
class Random (line 231) | class Random implements ClassOrderer {
method Random (line 259) | public Random() {
method orderClasses (line 266) | @Override
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/ClassOrdererContext.java
type ClassOrdererContext (line 28) | @API(status = STABLE, since = "5.10")
method getClassDescriptors (line 37) | List<? extends ClassDescriptor> getClassDescriptors();
method getConfigurationParameter (line 54) | Optional<String> getConfigurationParameter(String key);
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/Constants.java
class Constants (line 31) | @API(status = STABLE, since = "6.1")
method Constants (line 432) | private Constants() {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/DisplayNameGenerator.java
type DisplayNameGenerator (line 67) | @API(status = STABLE, since = "5.7")
method generateDisplayNameForClass (line 96) | String generateDisplayNameForClass(Class<?> testClass);
method generateDisplayNameForNestedClass (line 109) | @API(status = DEPRECATED, since = "5.12")
method generateDisplayNameForNestedClass (line 135) | @API(status = MAINTAINED, since = "5.13.3")
method generateDisplayNameForMethod (line 155) | @API(status = DEPRECATED, since = "5.12")
method generateDisplayNameForMethod (line 184) | @API(status = MAINTAINED, since = "5.13.3")
method parameterTypesAsString (line 200) | static String parameterTypesAsString(Method method) {
class Standard (line 214) | class Standard implements DisplayNameGenerator {
method Standard (line 218) | public Standard() {
method generateDisplayNameForClass (line 221) | @Override
method generateDisplayNameForNestedClass (line 228) | @Override
method generateDisplayNameForMethod (line 233) | @Override
class Simple (line 250) | @API(status = STABLE, since = "5.7")
method Simple (line 255) | public Simple() {
method generateDisplayNameForMethod (line 258) | @Override
method hasParameters (line 268) | private static boolean hasParameters(Method method) {
class ReplaceUnderscores (line 281) | class ReplaceUnderscores extends Simple {
method ReplaceUnderscores (line 285) | public ReplaceUnderscores() {
method generateDisplayNameForClass (line 288) | @Override
method generateDisplayNameForNestedClass (line 293) | @Override
method generateDisplayNameForMethod (line 298) | @Override
method replaceUnderscores (line 305) | private static String replaceUnderscores(String name) {
class IndicativeSentences (line 327) | @API(status = STABLE, since = "5.10")
method IndicativeSentences (line 359) | public IndicativeSentences() {
method generateDisplayNameForClass (line 362) | @Override
method generateDisplayNameForNestedClass (line 369) | @Override
method generateDisplayNameForMethod (line 374) | @Override
method getSentenceBeginning (line 388) | private String getSentenceBeginning(Class<?> testClass, List<Class<?...
method getFragmentSeparator (line 446) | private static String getFragmentSeparator(Class<?> testClass, List<...
method getGeneratorFor (line 466) | private static DisplayNameGenerator getGeneratorFor(Class<?> testCla...
method findDisplayNameGeneration (line 484) | @API(status = INTERNAL, since = "5.12")
method findIndicativeSentencesGeneration (line 500) | private static Optional<IndicativeSentencesGeneration> findIndicativ...
method getSentenceFragment (line 505) | private static @Nullable String getSentenceFragment(AnnotatedElement...
method getDisplayNameGenerator (line 526) | static DisplayNameGenerator getDisplayNameGenerator(Class<?> generator...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/DynamicContainer.java
class DynamicContainer (line 43) | @API(status = MAINTAINED, since = "5.3")
method dynamicContainer (line 60) | public static DynamicContainer dynamicContainer(String displayName, It...
method dynamicContainer (line 76) | public static DynamicContainer dynamicContainer(String displayName, St...
method dynamicContainer (line 95) | public static DynamicContainer dynamicContainer(String displayName, @N...
method dynamicContainer (line 111) | @API(status = EXPERIMENTAL, since = "6.1")
method DynamicContainer (line 120) | private DynamicContainer(DefaultConfiguration configuration) {
method getChildren (line 130) | public Stream<? extends DynamicNode> getChildren() {
method getChildExecutionMode (line 143) | @API(status = EXPERIMENTAL, since = "6.1")
type Configuration (line 154) | @API(status = EXPERIMENTAL, since = "6.1")
method childExecutionMode (line 164) | Configuration childExecutionMode(ExecutionMode executionMode);
method children (line 176) | default Configuration children(Iterable<? extends DynamicNode> child...
method children (line 191) | default Configuration children(DynamicNode... children) {
method children (line 207) | Configuration children(Stream<? extends DynamicNode> children);
class DefaultConfiguration (line 211) | static final class DefaultConfiguration extends AbstractConfiguration<...
method childExecutionMode (line 216) | @Override
method children (line 222) | @Override
method self (line 230) | @Override
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/DynamicNode.java
class DynamicNode (line 33) | @API(status = MAINTAINED, since = "5.3")
method DynamicNode (line 43) | DynamicNode(AbstractConfiguration<?> configuration) {
method getDisplayName (line 54) | public String getDisplayName() {
method getTestSourceUri (line 65) | public Optional<URI> getTestSourceUri() {
method getExecutionMode (line 75) | @API(status = EXPERIMENTAL, since = "6.1")
method toString (line 80) | @Override
type Configuration (line 96) | @API(status = EXPERIMENTAL, since = "6.1")
method displayName (line 107) | T displayName(String displayName);
method testSourceUri (line 116) | T testSourceUri(@Nullable URI testSourceUri);
method executionMode (line 125) | T executionMode(ExecutionMode executionMode);
class AbstractConfiguration (line 129) | abstract static sealed class AbstractConfiguration<T extends Configura...
method displayName (line 136) | @Override
method testSourceUri (line 142) | @Override
method executionMode (line 148) | @Override
method self (line 154) | protected abstract T self();
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/DynamicTest.java
class DynamicTest (line 52) | @API(status = MAINTAINED, since = "5.3")
method dynamicTest (line 65) | public static DynamicTest dynamicTest(String displayName, Executable e...
method dynamicTest (line 83) | public static DynamicTest dynamicTest(String displayName, @Nullable UR...
method dynamicTest (line 97) | @API(status = EXPERIMENTAL, since = "6.1")
method stream (line 130) | public static <T> Stream<DynamicTest> stream(Iterator<T> inputGenerator,
method stream (line 166) | @API(status = MAINTAINED, since = "5.7")
method stream (line 205) | @API(status = MAINTAINED, since = "5.8")
method stream (line 239) | @API(status = MAINTAINED, since = "5.8")
method stream (line 271) | @API(status = MAINTAINED, since = "5.13.3")
method stream (line 301) | @API(status = MAINTAINED, since = "5.13.3")
method DynamicTest (line 312) | private DynamicTest(DefaultConfiguration configuration) {
method getExecutable (line 320) | public Executable getExecutable() {
type Configuration (line 330) | @API(status = EXPERIMENTAL, since = "6.1")
method executable (line 340) | Configuration executable(Executable executable);
class DefaultConfiguration (line 344) | static final class DefaultConfiguration extends AbstractConfiguration<...
method executable (line 348) | @Override
method self (line 354) | @Override
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/MediaType.java
class MediaType (line 37) | @SuppressWarnings("removal")
method parse (line 93) | public static MediaType parse(String value) {
method create (line 104) | public static MediaType create(String type, String subtype) {
method create (line 116) | public static MediaType create(String type, String subtype, Charset ch...
method MediaType (line 121) | protected MediaType(String type, String subtype, @Nullable Charset cha...
method MediaType (line 128) | protected MediaType(String value) {
method toString (line 138) | @Override
method equals (line 143) | @Override
method hashCode (line 148) | @Override
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/MethodDescriptor.java
type MethodDescriptor (line 28) | @API(status = STABLE, since = "5.7")
method getMethod (line 36) | Method getMethod();
method getDisplayName (line 45) | @API(status = STABLE, since = "5.10")
method isAnnotated (line 58) | boolean isAnnotated(Class<? extends Annotation> annotationType);
method findAnnotation (line 72) | <A extends Annotation> Optional<A> findAnnotation(Class<A> annotationT...
method findRepeatableAnnotations (line 88) | <A extends Annotation> List<A> findRepeatableAnnotations(Class<A> anno...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/MethodOrderer.java
type MethodOrderer (line 60) | @API(status = STABLE, since = "5.7")
method orderMethods (line 99) | void orderMethods(MethodOrdererContext context);
method getDefaultExecutionMode (line 127) | default Optional<ExecutionMode> getDefaultExecutionMode() {
class Default (line 147) | @API(status = EXPERIMENTAL, since = "6.0")
method Default (line 150) | private Default() {
method orderMethods (line 154) | @Override
class MethodName (line 170) | @API(status = STABLE, since = "5.10")
method MethodName (line 173) | public MethodName() {
method orderMethods (line 181) | @Override
method parameterList (line 190) | private static String parameterList(Method method) {
class DisplayName (line 201) | @API(status = STABLE, since = "5.10")
method DisplayName (line 204) | public DisplayName() {
method orderMethods (line 212) | @Override
class OrderAnnotation (line 235) | class OrderAnnotation implements MethodOrderer {
method OrderAnnotation (line 237) | public OrderAnnotation() {
method orderMethods (line 245) | @Override
method getOrder (line 250) | private static int getOrder(MethodDescriptor descriptor) {
class Random (line 274) | class Random implements MethodOrderer {
method Random (line 302) | public Random() {
method orderMethods (line 309) | @Override
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/MethodOrdererContext.java
type MethodOrdererContext (line 28) | @API(status = STABLE, since = "5.7")
method getTestClass (line 36) | Class<?> getTestClass();
method getMethodDescriptors (line 44) | List<? extends MethodDescriptor> getMethodDescriptors();
method getConfigurationParameter (line 61) | Optional<String> getConfigurationParameter(String key);
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/Named.java
type Named (line 26) | @API(status = STABLE, since = "5.8")
method of (line 41) | static <T extends @Nullable Object> Named<T> of(String name, T payload) {
method named (line 77) | static <T extends @Nullable Object> Named<T> named(String name, T payl...
method getName (line 86) | String getName();
method getPayload (line 93) | T getPayload();
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/NamedExecutable.java
type NamedExecutable (line 35) | @FunctionalInterface
method getName (line 38) | @Override
method getPayload (line 43) | @Override
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/RandomOrdererUtils.java
class RandomOrdererUtils (line 25) | class RandomOrdererUtils {
method getSeed (line 31) | static Long getSeed(Function<String, Optional<String>> configurationPa...
method getCustomSeed (line 35) | private static Optional<Long> getCustomSeed(Function<String, Optional<...
method RandomOrdererUtils (line 53) | private RandomOrdererUtils() {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/RepetitionInfo.java
type RepetitionInfo (line 37) | @API(status = STABLE, since = "5.0")
method getCurrentRepetition (line 44) | int getCurrentRepetition();
method getTotalRepetitions (line 52) | int getTotalRepetitions();
method getFailureCount (line 61) | @API(status = MAINTAINED, since = "5.13.3")
method getFailureThreshold (line 71) | @API(status = MAINTAINED, since = "5.13.3")
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/TestInfo.java
type TestInfo (line 42) | @API(status = STABLE, since = "5.0")
method getDisplayName (line 88) | String getDisplayName();
method getTags (line 96) | Set<String> getTags();
method getTestClass (line 101) | Optional<Class<?>> getTestClass();
method getTestMethod (line 106) | Optional<Method> getTestMethod();
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/TestInstance.java
type Lifecycle (line 83) | enum Lifecycle {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/TestReporter.java
type TestReporter (line 45) | @FunctionalInterface
method publishEntry (line 58) | void publishEntry(Map<String, String> map);
method publishEntry (line 68) | default void publishEntry(String key, String value) {
method publishEntry (line 86) | @API(status = STABLE, since = "5.3")
method publishFile (line 104) | @Deprecated(since = "5.14", forRemoval = true)
method publishFile (line 123) | @API(status = MAINTAINED, since = "5.14")
method publishDirectory (line 142) | @API(status = MAINTAINED, since = "5.13.3")
method publishFile (line 183) | @Deprecated(since = "5.14", forRemoval = true)
method publishFile (line 207) | @API(status = MAINTAINED, since = "5.14")
method publishDirectory (line 226) | @API(status = MAINTAINED, since = "5.13.3")
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/Timeout.java
type ThreadMode (line 371) | @API(status = STABLE, since = "5.11")
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/condition/AbstractJreCondition.java
class AbstractJreCondition (line 28) | abstract class AbstractJreCondition<A extends Annotation> extends Boolea...
method AbstractJreCondition (line 36) | AbstractJreCondition(Class<A> annotationType, Function<A, String> cust...
method validatedVersions (line 40) | protected final IntStream validatedVersions(JRE[] jres, int[] versions) {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/condition/AbstractJreRangeCondition.java
class AbstractJreRangeCondition (line 27) | abstract class AbstractJreRangeCondition<A extends Annotation> extends B...
method AbstractJreRangeCondition (line 34) | AbstractJreRangeCondition(Class<A> annotationType, Function<A, String>...
method isCurrentVersionWithinRange (line 38) | protected final boolean isCurrentVersionWithinRange(JRE minJre, JRE ma...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/condition/AbstractOsBasedExecutionCondition.java
class AbstractOsBasedExecutionCondition (line 27) | abstract class AbstractOsBasedExecutionCondition<A extends Annotation> i...
method AbstractOsBasedExecutionCondition (line 34) | AbstractOsBasedExecutionCondition(Class<A> annotationType) {
method evaluateExecutionCondition (line 38) | @Override
method evaluateExecutionCondition (line 45) | abstract ConditionEvaluationResult evaluateExecutionCondition(A annota...
method createReason (line 47) | String createReason(boolean enabled, boolean osSpecified, boolean arch...
method enabledByDefault (line 65) | private ConditionEvaluationResult enabledByDefault() {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/condition/AbstractRepeatableAnnotationCondition.java
class AbstractRepeatableAnnotationCondition (line 33) | abstract class AbstractRepeatableAnnotationCondition<A extends Annotatio...
method AbstractRepeatableAnnotationCondition (line 39) | AbstractRepeatableAnnotationCondition(Class<A> annotationType) {
method evaluateExecutionCondition (line 43) | @Override
method evaluate (line 63) | protected abstract ConditionEvaluationResult evaluate(A annotation);
method getNoDisabledConditionsEncounteredResult (line 65) | protected abstract ConditionEvaluationResult getNoDisabledConditionsEn...
method logResult (line 67) | private void logResult(A annotation, AnnotatedElement annotatedElement...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/condition/BooleanExecutionCondition.java
class BooleanExecutionCondition (line 24) | abstract class BooleanExecutionCondition<A extends Annotation> implement...
method BooleanExecutionCondition (line 31) | BooleanExecutionCondition(Class<A> annotationType, String enabledReaso...
method evaluateExecutionCondition (line 40) | @Override
method isEnabled (line 48) | abstract boolean isEnabled(A annotation);
method enabledByDefault (line 50) | private ConditionEvaluationResult enabledByDefault() {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/condition/DisabledForJreRangeCondition.java
class DisabledForJreRangeCondition (line 21) | class DisabledForJreRangeCondition extends AbstractJreRangeCondition<Dis...
method DisabledForJreRangeCondition (line 23) | DisabledForJreRangeCondition() {
method isEnabled (line 27) | @Override
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/condition/DisabledIfCondition.java
class DisabledIfCondition (line 21) | class DisabledIfCondition extends MethodBasedCondition<DisabledIf> {
method DisabledIfCondition (line 23) | DisabledIfCondition() {
method isEnabled (line 27) | @Override
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/condition/DisabledIfEnvironmentVariableCondition.java
class DisabledIfEnvironmentVariableCondition (line 27) | class DisabledIfEnvironmentVariableCondition
method DisabledIfEnvironmentVariableCondition (line 33) | DisabledIfEnvironmentVariableCondition() {
method getNoDisabledConditionsEncounteredResult (line 37) | @Override
method evaluate (line 42) | @Override
method getEnvironmentVariable (line 71) | protected @Nullable String getEnvironmentVariable(String name) {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/condition/DisabledIfSystemPropertyCondition.java
class DisabledIfSystemPropertyCondition (line 26) | class DisabledIfSystemPropertyCondition extends AbstractRepeatableAnnota...
method DisabledIfSystemPropertyCondition (line 31) | DisabledIfSystemPropertyCondition() {
method getNoDisabledConditionsEncounteredResult (line 35) | @Override
method evaluate (line 40) | @Override
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/condition/DisabledOnJreCondition.java
class DisabledOnJreCondition (line 21) | class DisabledOnJreCondition extends AbstractJreCondition<DisabledOnJre> {
method DisabledOnJreCondition (line 23) | DisabledOnJreCondition() {
method isEnabled (line 27) | @Override
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/condition/DisabledOnOsCondition.java
class DisabledOnOsCondition (line 25) | class DisabledOnOsCondition extends AbstractOsBasedExecutionCondition<Di...
method DisabledOnOsCondition (line 27) | DisabledOnOsCondition() {
method evaluateExecutionCondition (line 31) | @Override
method isEnabledBasedOnOs (line 45) | private boolean isEnabledBasedOnOs(DisabledOnOs annotation) {
method isEnabledBasedOnArchitecture (line 53) | private boolean isEnabledBasedOnArchitecture(DisabledOnOs annotation) {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/condition/EnabledForJreRangeCondition.java
class EnabledForJreRangeCondition (line 21) | class EnabledForJreRangeCondition extends AbstractJreRangeCondition<Enab...
method EnabledForJreRangeCondition (line 23) | EnabledForJreRangeCondition() {
method isEnabled (line 27) | @Override
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/condition/EnabledIfCondition.java
class EnabledIfCondition (line 21) | class EnabledIfCondition extends MethodBasedCondition<EnabledIf> {
method EnabledIfCondition (line 23) | EnabledIfCondition() {
method isEnabled (line 27) | @Override
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/condition/EnabledIfEnvironmentVariableCondition.java
class EnabledIfEnvironmentVariableCondition (line 27) | class EnabledIfEnvironmentVariableCondition
method EnabledIfEnvironmentVariableCondition (line 33) | EnabledIfEnvironmentVariableCondition() {
method getNoDisabledConditionsEncounteredResult (line 37) | @Override
method evaluate (line 42) | @Override
method getEnvironmentVariable (line 70) | protected @Nullable String getEnvironmentVariable(String name) {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/condition/EnabledIfSystemPropertyCondition.java
class EnabledIfSystemPropertyCondition (line 26) | class EnabledIfSystemPropertyCondition extends AbstractRepeatableAnnotat...
method EnabledIfSystemPropertyCondition (line 31) | EnabledIfSystemPropertyCondition() {
method getNoDisabledConditionsEncounteredResult (line 35) | @Override
method evaluate (line 40) | @Override
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/condition/EnabledOnJreCondition.java
class EnabledOnJreCondition (line 21) | class EnabledOnJreCondition extends AbstractJreCondition<EnabledOnJre> {
method EnabledOnJreCondition (line 23) | EnabledOnJreCondition() {
method isEnabled (line 27) | @Override
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/condition/EnabledOnOsCondition.java
class EnabledOnOsCondition (line 25) | class EnabledOnOsCondition extends AbstractOsBasedExecutionCondition<Ena...
method EnabledOnOsCondition (line 27) | EnabledOnOsCondition() {
method evaluateExecutionCondition (line 31) | @Override
method isEnabledBasedOnOs (line 45) | private boolean isEnabledBasedOnOs(EnabledOnOs annotation) {
method isEnabledBasedOnArchitecture (line 53) | private boolean isEnabledBasedOnArchitecture(EnabledOnOs annotation) {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/condition/MethodBasedCondition.java
class MethodBasedCondition (line 37) | abstract class MethodBasedCondition<A extends Annotation> implements Exe...
method MethodBasedCondition (line 43) | MethodBasedCondition(Class<A> annotationType, Function<A, String> meth...
method evaluateExecutionCondition (line 50) | @Override
method getConditionMethod (line 62) | Method getConditionMethod(String fullyQualifiedMethodName, ExtensionCo...
method findMethod (line 76) | private Method findMethod(Class<?> clazz, String methodName) {
method invokeConditionMethod (line 81) | private boolean invokeConditionMethod(Method method, ExtensionContext ...
method invokeMethod (line 91) | @SuppressWarnings("DataFlowIssue")
method acceptsExtensionContextOrNoArguments (line 99) | private boolean acceptsExtensionContextOrNoArguments(Method method) {
method buildConditionEvaluationResult (line 104) | private ConditionEvaluationResult buildConditionEvaluationResult(boole...
method isEnabled (line 114) | protected abstract boolean isEnabled(boolean methodResult);
method enabledByDefault (line 116) | private ConditionEvaluationResult enabledByDefault() {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/condition/OS.java
type OS (line 43) | @API(status = STABLE, since = "5.1")
method current (line 105) | @API(status = STABLE, since = "5.10")
method determineCurrentOs (line 110) | private static @Nullable OS determineCurrentOs() {
method parse (line 114) | static @Nullable OS parse(String osName) {
method isCurrentOs (line 153) | public boolean isCurrentOs() {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/AfterAllCallback.java
type AfterAllCallback (line 62) | @FunctionalInterface
method afterAll (line 72) | void afterAll(ExtensionContext context) throws Exception;
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/AfterClassTemplateInvocationCallback.java
type AfterClassTemplateInvocationCallback (line 62) | @FunctionalInterface
method afterClassTemplateInvocation (line 72) | void afterClassTemplateInvocation(ExtensionContext context) throws Exc...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/AfterEachCallback.java
type AfterEachCallback (line 65) | @FunctionalInterface
method afterEach (line 75) | void afterEach(ExtensionContext context) throws Exception;
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/AfterTestExecutionCallback.java
type AfterTestExecutionCallback (line 66) | @FunctionalInterface
method afterTestExecution (line 77) | void afterTestExecution(ExtensionContext context) throws Exception;
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/AnnotatedElementContext.java
type AnnotatedElementContext (line 36) | @API(status = MAINTAINED, since = "5.13.3")
method getAnnotatedElement (line 51) | AnnotatedElement getAnnotatedElement();
method isAnnotated (line 72) | default boolean isAnnotated(Class<? extends Annotation> annotationType) {
method findAnnotation (line 93) | default <A extends Annotation> Optional<A> findAnnotation(Class<A> ann...
method findRepeatableAnnotations (line 116) | default <A extends Annotation> List<A> findRepeatableAnnotations(Class...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/BeforeAllCallback.java
type BeforeAllCallback (line 62) | @FunctionalInterface
method beforeAll (line 72) | void beforeAll(ExtensionContext context) throws Exception;
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/BeforeClassTemplateInvocationCallback.java
type BeforeClassTemplateInvocationCallback (line 62) | @FunctionalInterface
method beforeClassTemplateInvocation (line 72) | void beforeClassTemplateInvocation(ExtensionContext context) throws Ex...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/BeforeEachCallback.java
type BeforeEachCallback (line 65) | @FunctionalInterface
method beforeEach (line 75) | void beforeEach(ExtensionContext context) throws Exception;
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/BeforeTestExecutionCallback.java
type BeforeTestExecutionCallback (line 66) | @FunctionalInterface
method beforeTestExecution (line 77) | void beforeTestExecution(ExtensionContext context) throws Exception;
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/ClassTemplateInvocationContext.java
type ClassTemplateInvocationContext (line 31) | @API(status = EXPERIMENTAL, since = "6.0")
method getDisplayName (line 48) | default String getDisplayName(int invocationIndex) {
method getAdditionalExtensions (line 65) | default List<Extension> getAdditionalExtensions() {
method prepareInvocation (line 78) | default void prepareInvocation(ExtensionContext context) {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/ClassTemplateInvocationContextProvider.java
type ClassTemplateInvocationContextProvider (line 58) | @API(status = EXPERIMENTAL, since = "6.0")
method supportsClassTemplate (line 71) | boolean supportsClassTemplate(ExtensionContext context);
method provideClassTemplateInvocationContexts (line 95) | Stream<? extends ClassTemplateInvocationContext> provideClassTemplateI...
method mayReturnZeroClassTemplateInvocationContexts (line 113) | default boolean mayReturnZeroClassTemplateInvocationContexts(Extension...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/ConditionEvaluationResult.java
class ConditionEvaluationResult (line 27) | @API(status = STABLE, since = "5.0")
method enabled (line 39) | public static ConditionEvaluationResult enabled(@Nullable String reaso...
method disabled (line 52) | public static ConditionEvaluationResult disabled(@Nullable String reas...
method disabled (line 72) | @API(status = STABLE, since = "5.7")
method ConditionEvaluationResult (line 87) | private ConditionEvaluationResult(boolean enabled, @Nullable String re...
method isDisabled (line 97) | public boolean isDisabled() {
method getReason (line 105) | public Optional<String> getReason() {
method toString (line 109) | @Override
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/DynamicTestInvocationContext.java
type DynamicTestInvocationContext (line 26) | @API(status = STABLE, since = "5.11")
method getExecutable (line 34) | Executable getExecutable();
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/ExecutableInvoker.java
type ExecutableInvoker (line 28) | @API(status = STABLE, since = "5.11")
method invoke (line 37) | default @Nullable Object invoke(Method method) {
method invoke (line 48) | @Nullable
method invoke (line 57) | default <T> T invoke(Constructor<T> constructor) {
method invoke (line 72) | <T> T invoke(Constructor<T> constructor, @Nullable Object outerInstance);
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/ExecutionCondition.java
type ExecutionCondition (line 56) | @FunctionalInterface
method evaluateExecutionCondition (line 71) | ConditionEvaluationResult evaluateExecutionCondition(ExtensionContext ...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/Extension.java
type Extension (line 39) | @API(status = STABLE, since = "5.0")
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/ExtensionConfigurationException.java
class ExtensionConfigurationException (line 27) | @API(status = STABLE, since = "5.0")
method ExtensionConfigurationException (line 33) | public ExtensionConfigurationException(String message) {
method ExtensionConfigurationException (line 37) | public ExtensionConfigurationException(String message, @Nullable Throw...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/ExtensionContext.java
type ExtensionContext (line 53) | @API(status = STABLE, since = "5.0")
method getParent (line 63) | Optional<ExtensionContext> getParent();
method getRoot (line 72) | ExtensionContext getRoot();
method getUniqueId (line 79) | String getUniqueId();
method getDisplayName (line 95) | String getDisplayName();
method getTags (line 106) | Set<String> getTags();
method getElement (line 126) | Optional<AnnotatedElement> getElement();
method getTestClass (line 136) | Optional<Class<?>> getTestClass();
method getRequiredTestClass (line 149) | default Class<?> getRequiredTestClass() {
method getEnclosingTestClasses (line 176) | @API(status = MAINTAINED, since = "5.13.3")
method getTestInstanceLifecycle (line 188) | @API(status = STABLE, since = "5.1")
method getTestInstance (line 200) | Optional<Object> getTestInstance();
method getRequiredTestInstance (line 215) | default Object getRequiredTestInstance() {
method getTestInstances (line 232) | @API(status = STABLE, since = "5.7")
method getRequiredTestInstances (line 247) | @API(status = STABLE, since = "5.7")
method getTestMethod (line 260) | Optional<Method> getTestMethod();
method getRequiredTestMethod (line 273) | default Method getRequiredTestMethod() {
method getExecutionException (line 306) | Optional<Throwable> getExecutionException();
method getConfigurationParameter (line 324) | @API(status = STABLE, since = "5.1")
method getConfigurationParameter (line 349) | @API(status = STABLE, since = "5.10")
method publishReportEntry (line 364) | void publishReportEntry(Map<String, String> map);
method publishReportEntry (line 377) | default void publishReportEntry(String key, String value) {
method publishReportEntry (line 398) | @API(status = STABLE, since = "5.3")
method publishFile (line 422) | @Deprecated(since = "5.14", forRemoval = true)
method publishFile (line 447) | @API(status = MAINTAINED, since = "5.14")
method publishDirectory (line 464) | @API(status = MAINTAINED, since = "5.13.3")
method getStore (line 483) | Store getStore(Namespace namespace);
method getStore (line 500) | @API(status = EXPERIMENTAL, since = "6.0")
method getExecutionMode (line 511) | @API(status = STABLE, since = "5.8.1")
method getExecutableInvoker (line 520) | @API(status = STABLE, since = "5.11")
type Store (line 526) | interface Store {
type CloseableResource (line 542) | @Deprecated(since = "5.13")
method close (line 551) | void close() throws Throwable;
method get (line 571) | @Nullable
method get (line 590) | <V> @Nullable V get(Object key, Class<V> requiredType);
method getOrDefault (line 611) | @API(status = STABLE, since = "5.5")
method getOrComputeIfAbsent (line 652) | @Deprecated(since = "6.0")
method computeIfAbsent (line 691) | @API(status = MAINTAINED, since = "6.0")
method getOrComputeIfAbsent (line 728) | @Deprecated(since = "6.0")
method computeIfAbsent (line 767) | @API(status = MAINTAINED, since = "6.0")
method getOrComputeIfAbsent (line 801) | @Deprecated(since = "6.0")
method computeIfAbsent (line 838) | @API(status = MAINTAINED, since = "6.0")
method put (line 860) | void put(Object key, @Nullable Object value);
method remove (line 877) | @Nullable
method remove (line 895) | <V> @Nullable V remove(Object key, Class<V> requiredType);
class Namespace (line 907) | final class Namespace {
method create (line 923) | public static Namespace create(Object... parts) {
method Namespace (line 931) | private Namespace(List<Object> parts) {
method equals (line 935) | @Override
method hashCode (line 947) | @Override
method append (line 959) | @API(status = STABLE, since = "5.10")
method getParts (line 969) | @API(status = INTERNAL, since = "5.13")
type StoreScope (line 982) | @API(status = EXPERIMENTAL, since = "6.0")
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/ExtensionContextException.java
class ExtensionContextException (line 29) | @API(status = STABLE, since = "5.0")
method ExtensionContextException (line 35) | @SuppressWarnings("unused")
method ExtensionContextException (line 40) | @API(status = MAINTAINED, since = "5.13.3")
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/InvocationInterceptor.java
type InvocationInterceptor (line 63) | @API(status = STABLE, since = "5.10")
method interceptTestClassConstructor (line 91) | default <T> T interceptTestClassConstructor(Invocation<T> invocation,
method interceptBeforeAllMethod (line 107) | default void interceptBeforeAllMethod(Invocation<@Nullable Void> invoc...
method interceptBeforeEachMethod (line 122) | default void interceptBeforeEachMethod(Invocation<@Nullable Void> invo...
method interceptTestMethod (line 137) | default void interceptTestMethod(Invocation<@Nullable Void> invocation,
method interceptTestFactoryMethod (line 156) | default <T extends @Nullable Object> T interceptTestFactoryMethod(Invo...
method interceptTestTemplateMethod (line 171) | default void interceptTestTemplateMethod(Invocation<@Nullable Void> in...
method interceptDynamicTest (line 186) | @API(status = STABLE, since = "5.11")
method interceptAfterEachMethod (line 202) | default void interceptAfterEachMethod(Invocation<@Nullable Void> invoc...
method interceptAfterAllMethod (line 217) | default void interceptAfterAllMethod(Invocation<@Nullable Void> invoca...
type Invocation (line 230) | @API(status = STABLE, since = "5.10")
method proceed (line 239) | T proceed() throws Throwable;
method skip (line 247) | @API(status = STABLE, since = "5.10")
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/LifecycleMethodExecutionExceptionHandler.java
type LifecycleMethodExecutionExceptionHandler (line 56) | @API(status = STABLE, since = "5.10")
method handleBeforeAllMethodExecutionException (line 69) | default void handleBeforeAllMethodExecutionException(ExtensionContext ...
method handleBeforeEachMethodExecutionException (line 85) | default void handleBeforeEachMethodExecutionException(ExtensionContext...
method handleAfterEachMethodExecutionException (line 101) | default void handleAfterEachMethodExecutionException(ExtensionContext ...
method handleAfterAllMethodExecutionException (line 117) | default void handleAfterAllMethodExecutionException(ExtensionContext c...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/MediaType.java
class MediaType (line 34) | @Deprecated(since = "5.14", forRemoval = true)
method parse (line 86) | public static MediaType parse(String value) {
method create (line 97) | public static MediaType create(String type, String subtype) {
method create (line 109) | public static MediaType create(String type, String subtype, Charset ch...
method MediaType (line 114) | private MediaType(String type, String subtype, @Nullable Charset chars...
method MediaType (line 118) | private MediaType(String value) {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/ParameterContext.java
type ParameterContext (line 41) | @API(status = STABLE, since = "5.0")
method getParameter (line 57) | Parameter getParameter();
method getIndex (line 68) | int getIndex();
method getDeclaringExecutable (line 78) | default Executable getDeclaringExecutable() {
method getTarget (line 92) | Optional<Object> getTarget();
method getAnnotatedElement (line 98) | @API(status = MAINTAINED, since = "5.13.3")
method isAnnotated (line 120) | @API(status = STABLE, since = "5.10")
method findAnnotation (line 144) | @API(status = STABLE, since = "5.10")
method findRepeatableAnnotations (line 170) | @API(status = STABLE, since = "5.10")
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/ParameterResolutionException.java
class ParameterResolutionException (line 28) | @API(status = STABLE, since = "5.0")
method ParameterResolutionException (line 39) | public ParameterResolutionException(String message) {
method ParameterResolutionException (line 50) | public ParameterResolutionException(String message, Throwable cause) {
method getMessage (line 58) | @Override
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/ParameterResolver.java
type ParameterResolver (line 68) | @API(status = STABLE, since = "5.0")
method supportsParameter (line 88) | boolean supportsParameter(ParameterContext parameterContext, Extension...
method resolveParameter (line 112) | @Nullable
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/PreInterruptCallback.java
type PreInterruptCallback (line 31) | @API(status = MAINTAINED, since = "5.13.3")
method beforeThreadInterrupt (line 57) | @API(status = MAINTAINED, since = "5.13.3")
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/PreInterruptContext.java
type PreInterruptContext (line 24) | @API(status = MAINTAINED, since = "5.13.3")
method getThreadToInterrupt (line 33) | @API(status = MAINTAINED, since = "5.13.3")
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/ReflectiveInvocationContext.java
type ReflectiveInvocationContext (line 29) | @API(status = STABLE, since = "5.10")
method getTargetClass (line 44) | Class<?> getTargetClass();
method getExecutable (line 51) | T getExecutable();
method getArguments (line 59) | List<Object> getArguments();
method getTarget (line 72) | Optional<Object> getTarget();
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/TemplateInvocationValidationException.java
class TemplateInvocationValidationException (line 29) | @API(status = EXPERIMENTAL, since = "6.0")
method TemplateInvocationValidationException (line 35) | public TemplateInvocationValidationException(String message) {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/TestExecutionExceptionHandler.java
type TestExecutionExceptionHandler (line 36) | @FunctionalInterface
method handleTestExecutionException (line 63) | void handleTestExecutionException(ExtensionContext context, Throwable ...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/TestInstanceFactory.java
type TestInstanceFactory (line 64) | @FunctionalInterface
method createTestInstance (line 95) | Object createTestInstance(TestInstanceFactoryContext factoryContext, E...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/TestInstanceFactoryContext.java
type TestInstanceFactoryContext (line 27) | @API(status = STABLE, since = "5.7")
method getTestClass (line 35) | Class<?> getTestClass();
method getOuterInstance (line 48) | Optional<Object> getOuterInstance();
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/TestInstancePostProcessor.java
type TestInstancePostProcessor (line 52) | @FunctionalInterface
method postProcessTestInstance (line 78) | void postProcessTestInstance(Object testInstance, ExtensionContext con...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/TestInstancePreConstructCallback.java
type TestInstancePreConstructCallback (line 57) | @FunctionalInterface
method preConstructTestInstance (line 78) | void preConstructTestInstance(TestInstanceFactoryContext factoryContex...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/TestInstancePreDestroyCallback.java
type TestInstancePreDestroyCallback (line 58) | @FunctionalInterface
method preDestroyTestInstance (line 79) | void preDestroyTestInstance(ExtensionContext context) throws Exception;
method preDestroyTestInstances (line 110) | @API(status = STABLE, since = "5.10")
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/TestInstances.java
type TestInstances (line 30) | @API(status = STABLE, since = "5.7")
method getInnermostInstance (line 40) | Object getInnermostInstance();
method getEnclosingInstances (line 49) | List<Object> getEnclosingInstances();
method getAllInstances (line 57) | List<Object> getAllInstances();
method findInstance (line 67) | <T> Optional<T> findInstance(Class<T> requiredType);
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/TestInstantiationAwareExtension.java
type TestInstantiationAwareExtension (line 38) | @API(status = MAINTAINED, since = "5.13.3")
method getTestInstantiationExtensionContextScope (line 132) | @API(status = MAINTAINED, since = "5.13.3")
type ExtensionContextScope (line 145) | @API(status = MAINTAINED, since = "5.13.3")
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/TestInstantiationException.java
class TestInstantiationException (line 26) | @API(status = STABLE, since = "5.10")
method TestInstantiationException (line 32) | public TestInstantiationException(String message) {
method TestInstantiationException (line 36) | public TestInstantiationException(String message, Throwable cause) {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/TestTemplateInvocationContext.java
type TestTemplateInvocationContext (line 32) | @API(status = STABLE, since = "5.0")
method getDisplayName (line 49) | default String getDisplayName(int invocationIndex) {
method getAdditionalExtensions (line 66) | default List<Extension> getAdditionalExtensions() {
method prepareInvocation (line 80) | @API(status = EXPERIMENTAL, since = "6.0")
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/TestTemplateInvocationContextProvider.java
type TestTemplateInvocationContextProvider (line 58) | @API(status = STABLE, since = "5.0")
method supportsTestTemplate (line 71) | boolean supportsTestTemplate(ExtensionContext context);
method provideTestTemplateInvocationContexts (line 94) | Stream<? extends TestTemplateInvocationContext> provideTestTemplateInv...
method mayReturnZeroTestTemplateInvocationContexts (line 114) | @API(status = MAINTAINED, since = "5.13.3")
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/TestWatcher.java
type TestWatcher (line 69) | @API(status = STABLE, since = "5.7")
method testDisabled (line 82) | default void testDisabled(ExtensionContext context, Optional<String> r...
method testSuccessful (line 94) | default void testSuccessful(ExtensionContext context) {
method testAborted (line 107) | default void testAborted(ExtensionContext context, @Nullable Throwable...
method testFailed (line 120) | default void testFailed(ExtensionContext context, @Nullable Throwable ...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/extension/support/TypeBasedParameterResolver.java
class TypeBasedParameterResolver (line 32) | @API(status = STABLE, since = "5.10")
method TypeBasedParameterResolver (line 37) | public TypeBasedParameterResolver() {
method supportsParameter (line 41) | @Override
method resolveParameter (line 46) | @Override
method getParameterType (line 50) | private Type getParameterType(ParameterContext parameterContext) {
method enclosedTypeOfParameterResolver (line 54) | private Type enclosedTypeOfParameterResolver() {
method findTypeBasedParameterResolverSuperclass (line 63) | private @Nullable ParameterizedType findTypeBasedParameterResolverSupe...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/function/Executable.java
type Executable (line 43) | @FunctionalInterface
method execute (line 47) | void execute() throws Throwable;
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/function/ThrowingConsumer.java
type ThrowingConsumer (line 43) | @FunctionalInterface
method accept (line 52) | void accept(T t) throws Throwable;
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/function/ThrowingSupplier.java
type ThrowingSupplier (line 44) | @FunctionalInterface
method get (line 53) | T get() throws Throwable;
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/io/CleanupMode.java
type CleanupMode (line 28) | @API(status = STABLE, since = "5.11")
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/io/DefaultDeletionResult.java
method DefaultDeletionResult (line 28) | DefaultDeletionResult(Path rootDir, List<DeletionFailure> failures) {
method toException (line 33) | @Override
method relativizeSafely (line 54) | private static Path relativizeSafely(Path rootDir, Path path) {
class Builder (line 63) | static final class Builder implements DeletionResult.Builder {
method Builder (line 68) | Builder(Path rootDir) {
method addFailure (line 72) | @Override
method build (line 80) | @Override
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/io/TempDirDeletionStrategy.java
type TempDirDeletionStrategy (line 70) | @API(status = EXPERIMENTAL, since = "6.1")
method delete (line 89) | DeletionResult delete(Path tempDir, AnnotatedElementContext elementCon...
class IgnoreFailures (line 97) | final class IgnoreFailures implements TempDirDeletionStrategy {
method IgnoreFailures (line 106) | public IgnoreFailures() {
method IgnoreFailures (line 110) | IgnoreFailures(TempDirDeletionStrategy delegate) {
method delete (line 114) | @Override
method logWarning (line 125) | private void logWarning(AnnotatedElementContext elementContext, Dele...
method descriptionFor (line 130) | @API(status = INTERNAL, since = "6.1")
method descriptionFor (line 142) | private static String descriptionFor(Executable executable) {
class Standard (line 165) | final class Standard implements TempDirDeletionStrategy {
method Standard (line 174) | private Standard() {
method delete (line 177) | @Override
method delete (line 185) | DeletionResult delete(Path tempDir, FileOperations fileOperations) t...
method delete (line 194) | private void delete(Path tempDir, FileOperations fileOperations, BiC...
method deleteWithLogging (line 305) | private void deleteWithLogging(Path file, FileOperations fileOperati...
method tryToResetPermissions (line 317) | @SuppressWarnings("ResultOfMethodCallIgnored")
method tryToDeleteOnExit (line 343) | @SuppressWarnings("EmptyCatch")
type FileOperations (line 355) | interface FileOperations {
method delete (line 357) | void delete(Path path) throws IOException;
type DeletionResult (line 366) | sealed interface DeletionResult permits DefaultDeletionResult {
method builder (line 374) | static Builder builder(Path rootDir) {
method rootDir (line 383) | Path rootDir();
method failures (line 390) | List<DeletionFailure> failures();
method isSuccessful (line 396) | default boolean isSuccessful() {
method toException (line 411) | Optional<DeletionException> toException();
type Builder (line 416) | sealed interface Builder permits DefaultDeletionResult.Builder {
method addFailure (line 425) | Builder addFailure(Path path, Exception cause);
method build (line 432) | DeletionResult build();
type DeletionFailure (line 442) | sealed interface DeletionFailure permits DefaultDeletionResult.Default...
method path (line 449) | Path path();
method cause (line 456) | Exception cause();
class DeletionException (line 464) | final class DeletionException extends JUnitException {
method DeletionException (line 469) | DeletionException(String message) {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/io/TempDirFactory.java
type TempDirFactory (line 47) | @FunctionalInterface
method createTempDirectory (line 64) | Path createTempDirectory(AnnotatedElementContext elementContext, Exten...
method close (line 70) | @Override
class Standard (line 83) | class Standard implements TempDirFactory {
method Standard (line 89) | public Standard() {
method createTempDirectory (line 92) | @Override
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/parallel/ExecutionMode.java
type ExecutionMode (line 24) | @API(status = STABLE, since = "5.10")
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/parallel/ResourceAccessMode.java
type ResourceAccessMode (line 24) | @API(status = STABLE, since = "5.10")
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/parallel/ResourceLockTarget.java
type ResourceLockTarget (line 23) | @API(status = MAINTAINED, since = "5.13.3")
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/parallel/ResourceLocksProvider.java
type ResourceLocksProvider (line 43) | @API(status = MAINTAINED, since = "5.13.3")
method provideForClass (line 59) | default Set<Lock> provideForClass(Class<?> testClass) {
method provideForNestedClass (line 91) | default Set<Lock> provideForNestedClass(List<Class<?>> enclosingInstan...
method provideForMethod (line 126) | default Set<Lock> provideForMethod(List<Class<?>> enclosingInstanceTyp...
class Lock (line 149) | final class Lock {
method Lock (line 161) | public Lock(String key) {
method Lock (line 174) | public Lock(String key, ResourceAccessMode accessMode) {
method getKey (line 184) | public String getKey() {
method getAccessMode (line 193) | public ResourceAccessMode getAccessMode() {
method equals (line 197) | @Override
method hashCode (line 209) | @Override
method toString (line 214) | @Override
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/parallel/Resources.java
class Resources (line 24) | @API(status = STABLE, since = "5.10")
method Resources (line 81) | private Resources() {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/timeout/PreemptiveTimeoutUtils.java
class PreemptiveTimeoutUtils (line 41) | @API(status = INTERNAL, since = "6.0")
method executeWithPreemptiveTimeout (line 60) | public static <T extends @Nullable Object, E extends Throwable> T exec...
method submitTask (line 77) | private static <T extends @Nullable Object> Future<T> submitTask(Throw...
method resolveFutureAndHandleException (line 90) | private static <T extends @Nullable Object, E extends Throwable> T res...
method PreemptiveTimeoutUtils (line 114) | private PreemptiveTimeoutUtils() {
type TimeoutFailureFactory (line 124) | public interface TimeoutFailureFactory<T extends Throwable> {
method createTimeoutFailure (line 131) | T createTimeoutFailure(Duration timeout, @Nullable Supplier<@Nullabl...
class ExecutionTimeoutException (line 135) | private static class ExecutionTimeoutException extends JUnitException {
method ExecutionTimeoutException (line 140) | ExecutionTimeoutException(String message) {
class TimeoutThreadFactory (line 152) | private static class TimeoutThreadFactory implements ThreadFactory {
method newThread (line 156) | @Override
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/util/DefaultLocaleExtension.java
class DefaultLocaleExtension (line 28) | final class DefaultLocaleExtension implements BeforeAllCallback, BeforeE...
method beforeAll (line 35) | @Override
method beforeEach (line 41) | @Override
method setDefaultLocale (line 48) | private void setDefaultLocale(ExtensionContext context, Locale customL...
method createLocaleFromAnnotation (line 53) | private static Optional<Locale> createLocaleFromAnnotation(ExtensionCo...
method createLocale (line 58) | private static Locale createLocale(DefaultLocale annotation) {
method createFromLanguageTag (line 70) | private static Locale createFromLanguageTag(DefaultLocale annotation) {
method createFromParts (line 79) | private static Locale createFromParts(DefaultLocale annotation) {
method getFromProvider (line 102) | private static Locale getFromProvider(DefaultLocale annotation) {
method invoke (line 118) | @SuppressWarnings("ConstantValue")
method afterEach (line 127) | @Override
method store (line 132) | private static void store(ExtensionContext context, String key, Locale...
method load (line 136) | private static Optional<Locale> load(ExtensionContext context, String ...
method getStore (line 140) | private static ExtensionContext.Store getStore(ExtensionContext contex...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/util/DefaultTimeZoneExtension.java
class DefaultTimeZoneExtension (line 28) | final class DefaultTimeZoneExtension implements BeforeAllCallback, Befor...
method beforeAll (line 35) | @Override
method beforeEach (line 41) | @Override
method setDefaultTimeZone (line 48) | private void setDefaultTimeZone(ExtensionContext context, TimeZone cus...
method createTimeZoneFromAnnotation (line 53) | private static Optional<TimeZone> createTimeZoneFromAnnotation(Extensi...
method createTimeZone (line 58) | private static TimeZone createTimeZone(DefaultTimeZone annotation) {
method validateCorrectConfiguration (line 69) | private static void validateCorrectConfiguration(DefaultTimeZone annot...
method createTimeZoneFromZoneId (line 79) | private static TimeZone createTimeZoneFromZoneId(String timeZoneId) {
method createTimeZoneFromProvider (line 92) | private static TimeZone createTimeZoneFromProvider(Class<? extends Tim...
method afterEach (line 103) | @Override
method store (line 108) | private static void store(ExtensionContext context, String key, TimeZo...
method load (line 112) | private static Optional<TimeZone> load(ExtensionContext context, Strin...
method getStore (line 116) | private static ExtensionContext.Store getStore(ExtensionContext contex...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/util/JupiterLocaleUtils.java
class JupiterLocaleUtils (line 20) | final class JupiterLocaleUtils {
method JupiterLocaleUtils (line 22) | private JupiterLocaleUtils() {
method createLocale (line 26) | public static Locale createLocale(String language, String country, Str...
method createLocale (line 30) | public static Locale createLocale(String language, String country) {
method createLocale (line 34) | public static Locale createLocale(String language) {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/util/JupiterPropertyUtils.java
class JupiterPropertyUtils (line 20) | final class JupiterPropertyUtils {
method JupiterPropertyUtils (line 22) | private JupiterPropertyUtils() {
method cloneWithoutDefaults (line 26) | static Properties cloneWithoutDefaults(ExtensionContext context, Prope...
method throwIfHasObservableDefaults (line 34) | private static void throwIfHasObservableDefaults(ExtensionContext cont...
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/util/LocaleProvider.java
type LocaleProvider (line 26) | @API(status = STABLE, since = "6.1")
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/util/NullLocaleProvider.java
type NullLocaleProvider (line 16) | interface NullLocaleProvider extends LocaleProvider {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/util/NullTimeZoneProvider.java
type NullTimeZoneProvider (line 16) | interface NullTimeZoneProvider extends TimeZoneProvider {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/util/SystemPropertiesExtension.java
class SystemPropertiesExtension (line 49) | final class SystemPropertiesExtension
method prepareToEnterRestorableContext (line 61) | Properties prepareToEnterRestorableContext(ExtensionContext context) {
method prepareToExitRestorableContext (line 76) | void prepareToExitRestorableContext(Properties properties) {
method beforeAll (line 80) | @Override
method beforeEach (line 85) | @Override
method applyForAllContexts (line 90) | private void applyForAllContexts(ExtensionContext originalContext) {
method findFirstRestoreAnnotationContext (line 104) | private Optional<ExtensionContext> findFirstRestoreAnnotationContext(L...
method clearAndSetEntries (line 110) | private void clearAndSetEntries(ExtensionContext currentContext, Exten...
method findEntriesToClear (line 134) | private Set<String> findEntriesToClear(AnnotatedElement element) {
method findEntriesToSet (line 141) | private Map<String, String> findEntriesToSet(AnnotatedElement element) {
method preventClearAndSetSameEntries (line 157) | private void preventClearAndSetSameEntries(AnnotatedElement element, S...
method requireUniqueEntries (line 165) | private static void requireUniqueEntries(AnnotatedElement annotatedEle...
method storeIncrementalBackup (line 178) | private void storeIncrementalBackup(ExtensionContext context, Collecti...
method storeCompleteBackup (line 184) | private void storeCompleteBackup(ExtensionContext context, Properties ...
method restoreOriginalCompleteBackup (line 196) | private boolean restoreOriginalCompleteBackup(ExtensionContext context) {
method getCompleteBackup (line 206) | private @Nullable Properties getCompleteBackup(ExtensionContext contex...
method afterEach (line 211) | @Override
method afterAll (line 216) | @Override
method restoreForAllContexts (line 221) | private void restoreForAllContexts(ExtensionContext originalContext) {
method restoreOriginalIncrementalBackup (line 229) | private void restoreOriginalIncrementalBackup(ExtensionContext origina...
method findAllExtensionContexts (line 236) | private static List<ExtensionContext> findAllExtensionContexts(Extensi...
method getIncrementalBackup (line 245) | private @Nullable EntriesBackup getIncrementalBackup(ExtensionContext ...
method getStore (line 250) | private ExtensionContext.Store getStore(ExtensionContext context) {
method getStoreKey (line 254) | private StoreKey getStoreKey(ExtensionContext context, BackupType type) {
type BackupType (line 261) | private enum BackupType {
class EntriesBackup (line 272) | private static final class EntriesBackup {
method EntriesBackup (line 277) | EntriesBackup(Collection<String> entriesToClear, Collection<String> ...
method restoreBackup (line 292) | void restoreBackup() {
FILE: junit-jupiter-api/src/main/java/org/junit/jupiter/api/util/TimeZoneProvider.java
type TimeZoneProvider (line 26) | @API(status = STABLE, since = "6.1")
FILE: junit-jupiter-api/src/testFixtures/java/org/junit/jupiter/api/AssertionTestUtils.java
class AssertionTestUtils (line 25) | public class AssertionTestUtils {
method AssertionTestUtils (line 27) | private AssertionTestUtils() {
method expectAssertionFailedError (line 31) | public static void expectAssertionFailedError() {
method assertEmptyMessage (line 35) | public static void assertEmptyMessage(Throwable ex) throws AssertionEr...
method assertMessageEquals (line 41) | public static void assertMessageEquals(Throwable ex, String msg) throw...
method assertMessageMatches (line 47) | public static void assertMessageMatches(Throwable ex, String regex) th...
method assertMessageStartsWith (line 54) | public static void assertMessageStartsWith(@Nullable Throwable ex, Str...
method assertMessageEndsWith (line 64) | public static void assertMessageEndsWith(Throwable ex, String msg) thr...
method assertMessageContains (line 71) | public static void assertMessageContains(@Nullable Throwable ex, Strin...
method assertExpectedAndActualValues (line 81) | public static void assertExpectedAndActualValues(AssertionFailedError ...
method wrapsEqualValue (line 93) | public static boolean wrapsEqualValue(ValueWrapper wrapper, @Nullable ...
method recurseIndefinitely (line 102) | public static void recurseIndefinitely() {
method runOutOfMemory (line 107) | public static void runOutOfMemory() {
method assertExpectedExceptionTypes (line 112) | @SafeVarargs
FILE: junit-jupiter-api/src/testFixtures/java/org/junit/jupiter/api/EqualsAndHashCodeAssertions.java
class EqualsAndHashCodeAssertions (line 21) | public class EqualsAndHashCodeAssertions {
method EqualsAndHashCodeAssertions (line 23) | private EqualsAndHashCodeAssertions() {
method assertEqualsAndHashCode (line 26) | @SuppressWarnings("EqualsWithItself")
FILE: junit-jupiter-api/src/testFixtures/java/org/junit/jupiter/api/TemporaryClasspathExecutor.java
class TemporaryClasspathExecutor (line 23) | public class TemporaryClasspathExecutor {
method TemporaryClasspathExecutor (line 25) | private TemporaryClasspathExecutor() {
method withAdditionalClasspathRoot (line 40) | public static void withAdditionalClasspathRoot(String classpathRoot, R...
FILE: junit-jupiter-api/src/testFixtures/java/org/junit/jupiter/api/extension/ExtensionContextParameterResolver.java
class ExtensionContextParameterResolver (line 13) | public class ExtensionContextParameterResolver implements ParameterResol...
method supportsParameter (line 15) | @Override
method resolveParameter (line 21) | @Override
FILE: junit-jupiter-api/src/testFixtures/java/org/junit/jupiter/api/fixtures/TrackLogRecords.java
class Extension (line 49) | class Extension implements BeforeEachCallback, AfterEachCallback, Parame...
method beforeEach (line 51) | @Override
method afterEach (line 56) | @Override
method supportsParameter (line 61) | @Override
method resolveParameter (line 68) | @Override
method getListener (line 73) | private LogRecordListener getListener(ExtensionContext context) {
method getStore (line 77) | private Store getStore(ExtensionContext context) {
FILE: junit-jupiter-api/src/testFixtures/java/org/junit/jupiter/api/io/FailingTempDirDeletionStrategy.java
class FailingTempDirDeletionStrategy (line 25) | @NullMarked
method delete (line 34) | @Override
FILE: junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/Constants.java
class Constants (line 39) | @API(status = DEPRECATED, since = "6.1")
method Constants (line 597) | private Constants() {
FILE: junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/JupiterTestEngine.java
class JupiterTestEngine (line 43) | @API(status = INTERNAL, since = "5.0")
method getId (line 46) | @Override
method getGroupId (line 54) | @Override
method getArtifactId (line 62) | @Override
method discover (line 67) | @Override
method createExecutorService (line 79) | @Override
method createExecutionContext (line 89) | @Override
method createThrowableCollectorFactory (line 98) | @Override
method getJupiterConfiguration (line 103) | private JupiterConfiguration getJupiterConfiguration(ExecutionRequest ...
FILE: junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/CachingJupiterConfiguration.java
class CachingJupiterConfiguration (line 56) | @API(status = INTERNAL, since = "5.4")
method CachingJupiterConfiguration (line 62) | public CachingJupiterConfiguration(JupiterConfiguration delegate) {
method getFilterForAutoDetectedExtensions (line 66) | @Override
method getRawConfigurationParameter (line 71) | @Override
method getRawConfigurationParameter (line 76) | @Override
method isParallelExecutionEnabled (line 82) | @Override
method isClosingStoredAutoCloseablesEnabled (line 88) | @Override
method isExtensionAutoDetectionEnabled (line 94) | @Override
method isThreadDumpOnTimeoutEnabled (line 100) | @Override
method getDefaultExecutionMode (line 106) | @Override
method getDefaultClassesExecutionMode (line 112) | @Override
method getDefaultTestInstanceLifecycle (line 118) | @Override
method getExecutionConditionFilter (line 124) | @SuppressWarnings("unchecked")
method getDefaultDisplayNameGenerator (line 131) | @Override
method getDefaultTestMethodOrderer (line 137) | @SuppressWarnings("unchecked")
method getDefaultTestClassOrderer (line 144) | @SuppressWarnings("unchecked")
method getDefaultTempDirCleanupMode (line 151) | @Override
method getDefaultTempDirFactorySupplier (line 157) | @SuppressWarnings("unchecked")
method getDefaultTempDirDeletionStrategySupplier (line 164) | @SuppressWarnings("unchecked")
method getDefaultTestInstantiationExtensionContextScope (line 172) | @Override
method getOutputDirectoryCreator (line 179) | @Override
FILE: junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/ConfigurationParameterConverter.java
type ConfigurationParameterConverter (line 20) | interface ConfigurationParameterConverter<T> {
method getOrDefault (line 22) | default T getOrDefault(ConfigurationParameters configParams, String ke...
method get (line 26) | Optional<T> get(ConfigurationParameters configurationParameters, Strin...
FILE: junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/DefaultJupiterConfiguration.java
class DefaultJupiterConfiguration (line 70) | @API(status = INTERNAL, since = "5.4")
method DefaultJupiterConfiguration (line 110) | public DefaultJupiterConfiguration(ConfigurationParameters configurati...
method validateConfigurationParameters (line 118) | private void validateConfigurationParameters(DiscoveryIssueReporter is...
method getFilterForAutoDetectedExtensions (line 139) | @Override
method getExtensionAutoDetectionIncludePattern (line 148) | private String getExtensionAutoDetectionIncludePattern() {
method getExtensionAutoDetectionExcludePattern (line 153) | private String getExtensionAutoDetectionExcludePattern() {
method getRawConfigurationParameter (line 158) | @Override
method getRawConfigurationParameter (line 163) | @Override
method isParallelExecutionEnabled (line 169) | @Override
method isClosingStoredAutoCloseablesEnabled (line 174) | @Override
method isExtensionAutoDetectionEnabled (line 179) | @Override
method isThreadDumpOnTimeoutEnabled (line 184) | @Override
method getDefaultExecutionMode (line 189) | @Override
method getDefaultClassesExecutionMode (line 195) | @Override
method getDefaultTestInstanceLifecycle (line 201) | @Override
method getExecutionConditionFilter (line 207) | @Override
method getDefaultDisplayNameGenerator (line 213) | @Override
method getDefaultTestMethodOrderer (line 219) | @Override
method getDefaultTestClassOrderer (line 224) | @Override
method getDefaultTempDirCleanupMode (line 229) | @Override
method getDefaultTempDirFactorySupplier (line 235) | @Override
method getDefaultTempDirDeletionStrategySupplier (line 242) | @Override
method getDefaultTestInstantiationExtensionContextScope (line 249) | @SuppressWarnings("deprecation")
method getOutputDirectoryCreator (line 257) | @Override
FILE: junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/EnumConfigurationParameterConverter.java
class EnumConfigurationParameterConverter (line 28) | @API(status = INTERNAL, since = "5.8")
method EnumConfigurationParameterConverter (line 36) | public EnumConfigurationParameterConverter(Class<E> enumType, String e...
method get (line 41) | @Override
method get (line 47) | public Optional<E> get(ExtensionContext extensionContext, String key) {
method convert (line 51) | private E convert(String key, String value) {
FILE: junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/FilteringConfigurationParameterConverter.java
class FilteringConfigurationParameterConverter (line 23) | class FilteringConfigurationParameterConverter<T> implements Configurati...
method exclude (line 28) | static <T> FilteringConfigurationParameterConverter<T> exclude(Predica...
method FilteringConfigurationParameterConverter (line 33) | private FilteringConfigurationParameterConverter(Predicate<? super Str...
method get (line 39) | @Override
FILE: junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/InstantiatingConfigurationParameterConverter.java
class InstantiatingConfigurationParameterConverter (line 25) | class InstantiatingConfigurationParameterConverter<T> implements Configu...
method InstantiatingConfigurationParameterConverter (line 32) | InstantiatingConfigurationParameterConverter(Class<T> clazz, String na...
method get (line 37) | @Override
method supply (line 42) | Supplier<Optional<T>> supply(ConfigurationParameters configurationPara...
method newInstanceSupplier (line 52) | private Supplier<Optional<T>> newInstanceSupplier(String className, St...
method logFailureMessage (line 63) | private void logFailureMessage(String className, String key, Exception...
method logSuccessMessage (line 69) | private void logSuccessMessage(String className, String key) {
FILE: junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/config/JupiterConfiguration.java
type JupiterConfiguration (line 38) | @API(status = INTERNAL, since = "5.4")
method getFilterForAutoDetectedExtensions (line 41) | Predicate<Class<? extends Extension>> getFilterForAutoDetectedExtensio...
method getRawConfigurationParameter (line 43) | Optional<String> getRawConfigurationParameter(String key);
method getRawConfigurationParameter (line 45) | <T> Optional<T> getRawConfigurationParameter(String key,
method isParallelExecutionEnabled (line 48) | boolean isParallelExecutionEnabled();
method isClosingStoredAutoCloseablesEnabled (line 50) | boolean isClosingStoredAutoCloseablesEnabled();
method isExtensionAutoDetectionEnabled (line 52) | boolean isExtensionAutoDetectionEnabled();
method isThreadDumpOnTimeoutEnabled (line 54) | boolean isThreadDumpOnTimeoutEnabled();
method getDefaultExecutionMode (line 56) | ExecutionMode getDefaultExecutionMode();
method getDefaultClassesExecutionMode (line 58) | ExecutionMode getDefaultClassesExecutionMode();
method getDefaultTestInstanceLifecycle (line 60) | TestInstance.Lifecycle getDefaultTestInstanceLifecycle();
method getExecutionConditionFilter (line 62) | Predicate<ExecutionCondition> getExecutionConditionFilter();
method getDefaultDisplayNameGenerator (line 64) | DisplayNameGenerator getDefaultDisplayNameGenerator();
method getDefaultTestMethodOrderer (line 66) | Optional<MethodOrderer> getDefaultTestMethodOrderer();
method getDefaultTestClassOrderer (line 68) | Optional<ClassOrderer> getDefaultTestClassOrderer();
method getDefaultTempDirCleanupMode (line 70) | CleanupMode getDefaultTempDirCleanupMode();
method getDefaultTempDirFactorySupplier (line 72) | Supplier<TempDirFactory> getDefaultTempDirFactorySupplier();
method getDefaultTempDirDeletionStrategySupplier (line 74) | Supplier<TempDirDeletionStrategy> getDefaultTempDirDeletionStrategySup...
method getDefaultTestInstantiationExtensionContextScope (line 76) | ExtensionContextScope getDefaultTestInstantiationExtensionContextScope();
method getOutputDirectoryCreator (line 78) | OutputDirectoryCreator getOutputDirectoryCreator();
FILE: junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/AbstractExtensionContext.java
class AbstractExtensionContext (line 55) | abstract class AbstractExtensionContext<T extends TestDescriptor> implem...
method AbstractExtensionContext (line 71) | AbstractExtensionContext(@Nullable ExtensionContext parent, EngineExec...
method getParentStore (line 95) | private NamespacedHierarchicalStore<org.junit.platform.engine.support....
method createCloseAction (line 102) | @SuppressWarnings("deprecation")
method close (line 125) | @Override
method getUniqueId (line 130) | @Override
method getDisplayName (line 135) | @Override
method publishReportEntry (line 140) | @Override
method publishFile (line 145) | @Override
method publishDirectory (line 157) | @Override
method publishFileEntry (line 174) | private void publishFileEntry(String name, ThrowingConsumer<Path> action,
method createOutputDirectory (line 192) | private Path createOutputDirectory() {
method getParent (line 201) | @Override
method getRoot (line 206) | @Override
method getTestDescriptor (line 214) | protected T getTestDescriptor() {
method getStore (line 218) | @Override
method getStore (line 223) | @Override
method getTags (line 232) | @Override
method getConfigurationParameter (line 238) | @Override
method getConfigurationParameter (line 243) | @Override
method getExecutionMode (line 249) | @Override
method getExecutableInvoker (line 254) | @Override
method getExtensions (line 259) | @Override
method getPlatformExecutionMode (line 264) | protected abstract Node.ExecutionMode getPlatformExecutionMode();
method toJupiterExecutionMode (line 266) | private ExecutionMode toJupiterExecutionMode(Node.ExecutionMode mode) {
FILE: junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/CallbackSupport.java
class CallbackSupport (line 24) | class CallbackSupport {
method invokeBeforeCallbacks (line 26) | static <T extends Extension> void invokeBeforeCallbacks(Class<T> type,...
method invokeAfterCallbacks (line 41) | static <T extends Extension> void invokeAfterCallbacks(Class<T> type, ...
type CallbackInvoker (line 52) | @FunctionalInterface
method invoke (line 55) | void invoke(T t, ExtensionContext context) throws Throwable;
method CallbackSupport (line 59) | private CallbackSupport() {
FILE: junit-jupiter-engine/src/main/java/org/junit/jupiter/engine/descriptor/ClassBasedTestDescriptor.java
class ClassBasedTestDescriptor (line 88) | @API(status = INTERNAL, since = "5.5")
method ClassBasedTestDescriptor (line 100) | ClassBasedTestDescriptor(UniqueId uniqueId, Class<?> testClass, Suppli...
method ClassBasedTestDescriptor (line 108) | ClassBasedTestDescriptor(UniqueId uniqueId, Class<?> testClass, String...
method getTestClass (line 118) | @Override
method getType (line 125) | @Override
method getLegacyReportingBaseName (line 130) | @Override
method validate (line 137) | @Override
method validateDisplayNameAnnotation (line 145) | private void validateDisplayNameAnnotation(DiscoveryIssueReporter repo...
method validateCoreLifecycleMethods (line 152) | protected void validateCoreLifecycleMethods(DiscoveryIssueReporter rep...
method validateClassTemplateInvocationLifecycleMethods (line 156) | protected void validateClassTemplateInvocationLifecycleMethods(Discove...
method validateTags (line 160) | private void validateTags(DiscoveryIssueReporter reporter) {
method getExplicitExecutionMode (line 166) | @Override
method getDefaultChildExecutionMode (line 171) | @Override
method setDefaultChildExecutionMode (line 176) | public final void setDefaultChildExecutionMode(ExecutionMode defaultCh...
method getExclusiveResourceCollector (line 180) | @Override
method prepare (line 185) | @Override
method before (line 231) | @Override
method after (line 260) | @Override
method cleanUp (line 288) | @Override
method resolveTestInstanceFactory (line 295) | private @Nullable TestInstanceFactory resolveTestInstanceFactory(Exten...
method testInstancesProvider (line 316) | private TestInstancesProvider testInstancesProvider(JupiterEngineExecu...
method instantiateAndPostProcessTestInstance (line 326) | private TestInstances instantiateAndPostProcessTestInstance(JupiterEng...
method instantiateTestClass (line 343) | protected abstract TestInstances instantiateTestClass(JupiterEngineExe...
method instantiateTestClass (line 347) | protected final TestInstances instantiateTestClass(Optional<TestInstan...
method invokeTestInstanceFactory (line 360) | private Object invokeTestInstanceFactory(TestInstanceFactory testInsta...
method invokeTestClassConstructor (line 405) | private Object invokeTestClassConstructor(Optional<Object> outerInstan...
method invokeTestInstancePreConstructCallbacks (line 413) | private void invokeTestInstancePreConstructCallbacks(TestInstanceFacto...
method invokeTestInstancePostProcessors (line 419) | private void invokeTestInstancePostProcessors(Object instance, Extensi...
method executeAndMaskThrowable (line 426) | private void executeAndMaskThrowable(Executable executable) {
method invokeBeforeAllCallbacks (line 435) | private void invokeBeforeAllCallbacks(JupiterEngineExecutionContext co...
method invokeBeforeAllMethods (line 439) | private void invokeBeforeAllMethods(JupiterEngineExecutionContext cont...
method invokeBeforeAllMethodExecutionExceptionHandlers (line 461) | private void invokeBeforeAllMethodExecutionExceptionHandlers(Extension...
method invokeAfterAllMethods (line 468) | private void invokeAfterAllMethods(JupiterEngineExecutionContext conte...
method invokeAfterAllMethodExecutionExceptionHandlers (line 485) | private void invokeAfterAllMethodExecutionExceptionHandlers(ExtensionR...
method invokeAfterAllCallbacks (line 492) | private void invokeAfterAllCallbacks(JupiterEngineExecutionContext con...
method invokeTestInstancePreDestroyCallbacks (line 496) | private void invokeTestInstancePreDestroyCallbacks(JupiterEngineExecut...
method isPerClassLifecycle (line 501) | private boolean isPerClassLifecycle(JupiterEngineExecutionContext cont...
method registerBeforeEachMethodAdapters (line 506) | private void registerBeforeEachMethodAdapters(ExtensionRegistrar regis...
method registerAfterEachMethodAdapters (line 511) | private void registerAfterEachMethodAdapters(ExtensionRegistrar regist...
method registerMethodsAsExtensions (line 524) | private void registerMethodsAsExtensions(List<Method> methods, Extensi...
method synthesizeBeforeEachMethodAdapter (line 533) | private BeforeEachMethodAdapter synthesizeBeforeEachMethodAdapter(Meth...
method synthesizeAfterEachMethodAdapter (line 538) | private AfterEachMethodAdapter synthesizeAfterEachMethodAdapter(Method...
method invokeMethodInExtensionContext (line 543) | private void invokeMethodInExtensionContext(Method method, ExtensionCo...
method requireLifecycleMethods (line 552) | private LifecycleMethods requireLifecycleMethods() {
class ClassInfo (line 556) | protected static class ClassInfo {
method ClassInfo (line 569) | ClassInfo(Class<?> testClass, JupiterConfiguration configuration) {
class LifecycleMethods (line 581) | private static class LifecycleMethods {
m
Condensed preview — 2298 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (9,763K chars).
[
{
"path": ".editorconfig",
"chars": 393,
"preview": "root = true\n\n[*]\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n[*.bat]\nend_of_line = crlf"
},
{
"path": ".gitattributes",
"chars": 114,
"preview": "* text eol=lf\n*.bat text eol=crlf\n*.png binary\n*.key binary\n*.jar binary\n*.ttf binary\nrelease-notes-* merge=union\n"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.md",
"chars": 753,
"preview": "---\nname: Report a bug or regression\nabout: Create a report to help us improve\ntype: Bug\nlabels: [\"type: bug\"]\n---\n\n<!--"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 344,
"preview": "blank_issues_enabled: false\ncontact_links:\n - name: Ask a question\n url: https://github.com/junit-team/junit-framewo"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 353,
"preview": "---\nname: Request a feature or enhancement\nabout: Suggest an idea for this project\ntype: Feature\nlabels: [\"type: new fea"
},
{
"path": ".github/ISSUE_TEMPLATE/task.md",
"chars": 221,
"preview": "---\nname: Create a task\nabout: Create a task for a specific piece of work\ntype: Task\nlabels: [\"type: task\"]\n---\n\n<!-- Pl"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 1299,
"preview": "<!-- Please describe your changes here and list any open questions you might have. -->\n\n---\n\nI hereby agree to the terms"
},
{
"path": ".github/actions/main-build/action.yml",
"chars": 848,
"preview": "name: Main build\ndescription: Sets up JDKs and runs Gradle\ninputs:\n arguments:\n required: true\n description: Grad"
},
{
"path": ".github/actions/maven-central-user-token/action.yml",
"chars": 625,
"preview": "name: Prepare Maven Central user token\ndescription: Compute the Maven Central user token from username and password\ninpu"
},
{
"path": ".github/actions/run-gradle/action.yml",
"chars": 2487,
"preview": "name: Run Gradle\ndescription: Sets up Gradle JDKs and runs Gradle\ninputs:\n arguments:\n required: true\n descriptio"
},
{
"path": ".github/actions/setup-test-jdk/action.yml",
"chars": 538,
"preview": "name: Set up Test JDK\ndescription: Sets up the JDK required to run platform-tooling-support-tests\ninputs:\n distribution"
},
{
"path": ".github/codecov.yml",
"chars": 162,
"preview": "comment: false\n\ncoverage:\n status:\n project:\n default:\n threshold: \"1\"\n informational: true\n p"
},
{
"path": ".github/dco.yml",
"chars": 26,
"preview": "require:\n members: false\n"
},
{
"path": ".github/renovate.json5",
"chars": 886,
"preview": "{\n $schema: 'https://docs.renovatebot.com/renovate-schema.json',\n extends: [\n 'github>junit-team/renovate-config',\n"
},
{
"path": ".github/scripts/checkBuildReproducibility.sh",
"chars": 639,
"preview": "#!/bin/bash -e\n\nrm -f checksums-1.txt checksums-2.txt\n\nSOURCE_DATE_EPOCH=$(date +%s)\nexport SOURCE_DATE_EPOCH\n\nfunction "
},
{
"path": ".github/scripts/close-github-milestone.js",
"chars": 1402,
"preview": "module.exports = async ({ github, context }) => {\n const releaseVersion = process.env.RELEASE_VERSION;\n const quer"
},
{
"path": ".github/scripts/create-github-release.js",
"chars": 676,
"preview": "module.exports = async ({ github, context }) => {\n const releaseVersion = process.env.RELEASE_VERSION;\n const requ"
},
{
"path": ".github/scripts/waitForUrl.sh",
"chars": 177,
"preview": "#!/usr/bin/env bash\n\nURL=$1\nprintf 'Waiting for %s' \"$URL\"\nuntil curl --output /dev/null --silent --location --head --fa"
},
{
"path": ".github/workflows/close-inactive-issues.yml",
"chars": 1650,
"preview": "name: Close inactive issues and PRs\non:\n schedule:\n - cron: \"30 1 * * *\"\n workflow_dispatch:\npermissions: {}\njobs:\n"
},
{
"path": ".github/workflows/codeql.yml",
"chars": 1748,
"preview": "name: \"CodeQL\"\n\non:\n push:\n branches:\n - main\n - 'releases/**'\n pull_request:\n # The branches below mu"
},
{
"path": ".github/workflows/cross-version.yml",
"chars": 4500,
"preview": "name: Cross-Version\n\non:\n schedule:\n - cron: '0 0 * * 6' # Every Saturday at 00:00 UTC\n push:\n branches:\n -"
},
{
"path": ".github/workflows/deploy-docs.yml",
"chars": 621,
"preview": "name: Deploy Documentation\n\non: [ workflow_call, workflow_dispatch ]\n\npermissions: {}\n\njobs:\n deploy_documentation:\n "
},
{
"path": ".github/workflows/gradle-dependency-submission.yml",
"chars": 1132,
"preview": "name: Gradle Dependency Submission\n\non:\n push:\n branches:\n - main\n\npermissions: {}\n\nenv:\n DEVELOCITY_ACCESS_KE"
},
{
"path": ".github/workflows/label-opened-issues.yml",
"chars": 1008,
"preview": "name: Add label to opened issues\non:\n issues:\n types:\n - opened\npermissions: {}\njobs:\n label_issues:\n runs-"
},
{
"path": ".github/workflows/label-pull-request.yml",
"chars": 1852,
"preview": "name: Copy labels from linked issues to PR\n\non:\n pull_request_target:\n types: [opened, reopened] # zizmor: ignore[da"
},
{
"path": ".github/workflows/lock-resolved-issues.yml",
"chars": 452,
"preview": "name: Lock resolved issues\n\non:\n schedule:\n - cron: \"39 1 * * 0\"\n workflow_dispatch:\n\npermissions: {}\n\nconcurrency:"
},
{
"path": ".github/workflows/main.yml",
"chars": 4497,
"preview": "name: CI\n\non:\n push:\n branches:\n - main\n - 'releases/**'\n tags-ignore:\n - '**'\n pull_request:\n "
},
{
"path": ".github/workflows/ossf-scorecard.yml",
"chars": 2482,
"preview": "name: OpenSSF Scorecard supply-chain security analysis\n\non:\n branch_protection_rule:\n schedule:\n - cron: '31 20 * *"
},
{
"path": ".github/workflows/release.yml",
"chars": 10122,
"preview": "name: Release\n\non:\n workflow_dispatch:\n inputs:\n releaseVersion:\n description: Version to be released (e"
},
{
"path": ".github/workflows/reproducible-build.yml",
"chars": 1132,
"preview": "name: Reproducible build\n\non:\n push:\n branches:\n - main\n - 'releases/**'\n pull_request:\n branches:\n "
},
{
"path": ".github/workflows/sanitize-closed-issues.yml",
"chars": 4512,
"preview": "name: Sanitizes assigned labels and milestone on closed issues\non:\n issues:\n types:\n - closed\npermissions: {}\nj"
},
{
"path": ".github/workflows/zizmor-analysis.yml",
"chars": 605,
"preview": "name: GitHub Actions Security Analysis\n\non:\n push:\n branches:\n - main\n - 'releases/**'\n paths:\n - "
},
{
"path": ".github/zizmor.yml",
"chars": 167,
"preview": "rules:\n cache-poisoning:\n ignore:\n # reports issues for setup-node which isn't used while releasing\n - mai"
},
{
"path": ".gitignore",
"chars": 425,
"preview": "# Gradle\n.gradle\n.kotlin\nbuild\n\n# Ignore Gradle GUI config\ngradle-app.setting\n\n# Eclipse\n.classpath\n.settings/\n.project\n"
},
{
"path": ".idea/vcs.xml",
"chars": 1060,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"CommitMessageInspectionProfile\">\n <pr"
},
{
"path": ".jitpack.yml",
"chars": 308,
"preview": "before_install:\n - sdk update\n - sdk install java 25-open\n - sdk use java 25-open\ninstall:\n - |\n ./gradlew \\\n "
},
{
"path": "CONTRIBUTING.md",
"chars": 9667,
"preview": "# Contributing\n\n## Getting Started\n\nWe welcome new contributors to the project!\nIf you're interested, please check for ["
},
{
"path": "KEYS",
"chars": 3833,
"preview": "This file contains the PGP key that is used to sign releases.\n\nImporting: `pgp < KEYS` or `gpg --import KEYS`\n\nAdding a "
},
{
"path": "LICENSE.md",
"chars": 14163,
"preview": "Eclipse Public License - v 2.0\n==============================\n\nTHE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF T"
},
{
"path": "NOTICE.md",
"chars": 320,
"preview": "Open Source Licenses\n====================\n\nThis product may include a number of subcomponents with separate\ncopyright no"
},
{
"path": "README.md",
"chars": 6074,
"preview": "<h1>\n <picture width=\"200\">\n <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://junit.org/assets/img/junit"
},
{
"path": "RELEASING.md",
"chars": 2830,
"preview": "# Releasing\n\n## Pre-release steps\n\n- [ ] Switch or create the release branch for this feature release (e.g. `releases/5."
},
{
"path": "SECURITY.md",
"chars": 1270,
"preview": "# Security Policy\n\n[](https://www.bestpracti"
},
{
"path": "build.gradle.kts",
"chars": 1704,
"preview": "import junitbuild.extensions.dependencyProject\n\nplugins {\n\tid(\"junitbuild.base-conventions\")\n\tid(\"junitbuild.build-metad"
},
{
"path": "documentation/.tool-versions",
"chars": 15,
"preview": "nodejs 24.15.0\n"
},
{
"path": "documentation/README.md",
"chars": 759,
"preview": "# JUnit User Guide\n\nThis subproject contains the Antora/AsciiDoc sources for the JUnit User Guide.\n\n## Structure\n\n- `mod"
},
{
"path": "documentation/antora-playbook.yml",
"chars": 2062,
"preview": "antora:\n extensions:\n - '@antora/collector-extension'\n - require: '@antora/lunr-extension'\n index_latest_only: tru"
},
{
"path": "documentation/antora.yml",
"chars": 37423,
"preview": "name: junit\nversion: true\ntitle: JUnit\nnav:\n - modules/ROOT/nav.adoc\n - modules/ROOT/extra-site-nav.adoc\next:\n collec"
},
{
"path": "documentation/documentation.gradle.kts",
"chars": 17124,
"preview": "import junitbuild.exec.CaptureJavaExecOutput\nimport junitbuild.exec.ClasspathSystemPropertyProvider\nimport junitbuild.ex"
},
{
"path": "documentation/modules/ROOT/extra-site-nav.adoc",
"chars": 37,
"preview": "* {javadoc-root}/index.html[Javadoc]\n"
},
{
"path": "documentation/modules/ROOT/images/_source/extensions_BrokenLifecycleMethodConfigDemo.txt",
"chars": 569,
"preview": "@Starter(Platform)\nResult = JupiterEngine.execute(BrokenLifecycleMethodConfigDemo) {\n\n Extension1.beforeEach()\n Extens"
},
{
"path": "documentation/modules/ROOT/images/_source/extensions_DatabaseTestsDemo.txt",
"chars": 847,
"preview": "@Starter(Platform)\nResult = JupiterEngine.execute(DatabaseTestsDemo) {\n\n // @BeforeAll (static invocation)\n AbstractDa"
},
{
"path": "documentation/modules/ROOT/nav.adoc",
"chars": 3114,
"preview": "* xref:overview.adoc[]\n* xref:writing-tests/intro.adoc[]\n** xref:writing-tests/annotations.adoc[]\n** xref:writing-tests/"
},
{
"path": "documentation/modules/ROOT/pages/advanced-topics/engines.adoc",
"chars": 8144,
"preview": "= Test Engines\n\nA `TestEngine` facilitates _discovery_ and _execution_ of tests for a particular\nprogramming model.\n\nFor"
},
{
"path": "documentation/modules/ROOT/pages/advanced-topics/junit-platform-reporting.adoc",
"chars": 6670,
"preview": "= JUnit Platform Reporting\n\nThe `junit-platform-reporting` artifact contains `{TestExecutionListener}` implementations\nt"
},
{
"path": "documentation/modules/ROOT/pages/advanced-topics/junit-platform-suite-engine.adoc",
"chars": 3094,
"preview": "= JUnit Platform Suite Engine\n\nThe Suite Engine supports the declarative selection and execution of tests from _any_ tes"
},
{
"path": "documentation/modules/ROOT/pages/advanced-topics/launcher-api.adoc",
"chars": 18935,
"preview": "= JUnit Platform Launcher API\n\nOne of the prominent goals of the JUnit Platform is to make the interface between JUnit\na"
},
{
"path": "documentation/modules/ROOT/pages/advanced-topics/testkit.adoc",
"chars": 9668,
"preview": "= JUnit Platform Test Kit\n\nThe `junit-platform-testkit` artifact provides support for executing a test plan on the\nJUnit"
},
{
"path": "documentation/modules/ROOT/pages/api-evolution.adoc",
"chars": 2933,
"preview": "= API Evolution\n:page-toclevels: 1\n\nOne of the major goals of the JUnit Platform architecture is to improve maintainers'"
},
{
"path": "documentation/modules/ROOT/pages/appendix.adoc",
"chars": 6850,
"preview": "= Appendix\n\n[[reproducible-builds]]\n== Reproducible Builds\n\nJUnit aims for its non-javadoc JARs to be https://reproducib"
},
{
"path": "documentation/modules/ROOT/pages/extensions/conditional-test-execution.adoc",
"chars": 2016,
"preview": "= Conditional Test Execution\n\n`{ExecutionCondition}` defines the `Extension` API for programmatic, _conditional test\nexe"
},
{
"path": "documentation/modules/ROOT/pages/extensions/exception-handling.adoc",
"chars": 2334,
"preview": "= Exception Handling\n\nExceptions thrown during the test execution may be intercepted and handled accordingly\nbefore prop"
},
{
"path": "documentation/modules/ROOT/pages/extensions/intercepting-invocations.adoc",
"chars": 789,
"preview": "= Intercepting Invocations\n\n`{InvocationInterceptor}` defines the API for `Extensions` that wish to intercept calls to\nt"
},
{
"path": "documentation/modules/ROOT/pages/extensions/keeping-state-in-extensions.adoc",
"chars": 4770,
"preview": "= Keeping State in Extensions\n\nUsually, an extension is instantiated only once. So the question becomes relevant: How do"
},
{
"path": "documentation/modules/ROOT/pages/extensions/overview.adoc",
"chars": 278,
"preview": "= Extension Model\n\nIn contrast to the competing `Runner`, `TestRule`, and `MethodRule` extension points in\nJUnit 4, the "
},
{
"path": "documentation/modules/ROOT/pages/extensions/parameter-resolution.adoc",
"chars": 5579,
"preview": "= Parameter Resolution\n\n`{ParameterResolver}` defines the `Extension` API for dynamically resolving parameters at\nruntim"
},
{
"path": "documentation/modules/ROOT/pages/extensions/pre-interrupt-callback.adoc",
"chars": 266,
"preview": "= Pre-Interrupt Callback\n\n`{PreInterruptCallback}` defines the API for `Extensions` that wish to react on\ntimeouts befor"
},
{
"path": "documentation/modules/ROOT/pages/extensions/providing-invocation-contexts-for-class-templates.adoc",
"chars": 1843,
"preview": "= Providing Invocation Contexts for Class Templates\n\nA `{ClassTemplate}` class can only be executed when at least one\n`{"
},
{
"path": "documentation/modules/ROOT/pages/extensions/providing-invocation-contexts-for-test-templates.adoc",
"chars": 1704,
"preview": "= Providing Invocation Contexts for Test Templates\n\nA `{TestTemplate}` method can only be executed when at least one\n`{T"
},
{
"path": "documentation/modules/ROOT/pages/extensions/registering-extensions.adoc",
"chars": 17232,
"preview": "= Registering Extensions\n\nExtensions can be registered _declaratively_ via\n<<registration-declarative, `@ExtendWith`>>, "
},
{
"path": "documentation/modules/ROOT/pages/extensions/relative-execution-order-of-user-code-and-extensions.adoc",
"chars": 11875,
"preview": "= Relative Execution Order of User Code and Extensions\n\nWhen executing a test class that contains one or more test metho"
},
{
"path": "documentation/modules/ROOT/pages/extensions/supported-utilities-in-extensions.adoc",
"chars": 3299,
"preview": "= Supported Utilities in Extensions\n\nThe `junit-platform-commons` artifact provides _maintained_ utilities for working w"
},
{
"path": "documentation/modules/ROOT/pages/extensions/test-instance-factories.adoc",
"chars": 1486,
"preview": "= Test Instance Factories\n\n`{TestInstanceFactory}` defines the API for `Extensions` that wish to _create_ test class\nins"
},
{
"path": "documentation/modules/ROOT/pages/extensions/test-instance-post-processing.adoc",
"chars": 726,
"preview": "= Test Instance Post-processing\n\n`{TestInstancePostProcessor}` defines the API for `Extensions` that wish to _post\nproce"
},
{
"path": "documentation/modules/ROOT/pages/extensions/test-instance-pre-construct-callback.adoc",
"chars": 795,
"preview": "= Test Instance Pre-construct Callback\n\n`{TestInstancePreConstructCallback}` defines the API for `Extensions` that wish "
},
{
"path": "documentation/modules/ROOT/pages/extensions/test-instance-pre-destroy-callback.adoc",
"chars": 377,
"preview": "= Test Instance Pre-destroy Callback\n\n`{TestInstancePreDestroyCallback}` defines the API for `Extensions` that wish to p"
},
{
"path": "documentation/modules/ROOT/pages/extensions/test-lifecycle-callbacks.adoc",
"chars": 2778,
"preview": "= Test Lifecycle Callbacks\n\nThe following interfaces define the APIs for extending tests at various points in the\ntest e"
},
{
"path": "documentation/modules/ROOT/pages/extensions/test-result-processing.adoc",
"chars": 2673,
"preview": "= Test Result Processing\n\n`{TestWatcher}` defines the API for extensions that wish to process the results of _test\nmetho"
},
{
"path": "documentation/modules/ROOT/pages/migrating-from-junit4.adoc",
"chars": 14629,
"preview": "= Migrating from JUnit 4\n\nAlthough the JUnit Jupiter programming model and extension model do not support JUnit 4\nfeatur"
},
{
"path": "documentation/modules/ROOT/pages/overview.adoc",
"chars": 4587,
"preview": "= Overview\n:page-aliases: index.adoc, user-guide/index.adoc\n\nThe goal of this document is to provide comprehensive refer"
},
{
"path": "documentation/modules/ROOT/pages/release-notes.adoc",
"chars": 558,
"preview": "= Release Notes\n:page-aliases: release-notes/index.adoc\n//\n//\n\nThis document contains the change log for all JUnit relea"
},
{
"path": "documentation/modules/ROOT/pages/running-tests/build-support.adoc",
"chars": 21009,
"preview": "= Build Support\n\n[[gradle]]\n== Gradle\n\nStarting with https://docs.gradle.org/4.6/release-notes.html[version 4.6], Gradle"
},
{
"path": "documentation/modules/ROOT/pages/running-tests/capturing-standard-output-error.adoc",
"chars": 1092,
"preview": "= Capturing Standard Output/Error\n\nThe JUnit Platform provides opt-in support for capturing output printed to `System.ou"
},
{
"path": "documentation/modules/ROOT/pages/running-tests/configuration-parameters.adoc",
"chars": 4505,
"preview": "= Configuration Parameters\n\nIn addition to instructing the platform which test classes and test engines to include,\nwhic"
},
{
"path": "documentation/modules/ROOT/pages/running-tests/console-launcher.adoc",
"chars": 6538,
"preview": "= Console Launcher\n\nThe `{ConsoleLauncher}` is a command-line Java application that lets you launch the JUnit\nPlatform f"
},
{
"path": "documentation/modules/ROOT/pages/running-tests/discovery-issues.adoc",
"chars": 1886,
"preview": "= Discovery Issues\n\nTest engines may encounter issues during test discovery. For example, the declaration of a\ntest clas"
},
{
"path": "documentation/modules/ROOT/pages/running-tests/discovery-selectors.adoc",
"chars": 3210,
"preview": "= Discovery Selectors\n\nThe JUnit Platform provides a rich set of discovery selectors that can be used to specify\nwhich t"
},
{
"path": "documentation/modules/ROOT/pages/running-tests/ide-support.adoc",
"chars": 3368,
"preview": "= IDE Support\n\n[[intellij-idea]]\n== IntelliJ IDEA\n\nIntelliJ IDEA supports running tests on the JUnit Platform since vers"
},
{
"path": "documentation/modules/ROOT/pages/running-tests/intro.adoc",
"chars": 83,
"preview": "= Running Tests\n\nThis section explains how to run tests from IDEs and build tools.\n"
},
{
"path": "documentation/modules/ROOT/pages/running-tests/source-launcher.adoc",
"chars": 826,
"preview": "= Source Launcher\n\nStarting with Java 25 it is possible to write minimal source code test programs\nusing the `org.junit."
},
{
"path": "documentation/modules/ROOT/pages/running-tests/stack-trace-pruning.adoc",
"chars": 675,
"preview": "= Stack Trace Pruning\n\nThe JUnit Platform provides built-in support for pruning stack traces produced by failing\ntests. "
},
{
"path": "documentation/modules/ROOT/pages/running-tests/tags.adoc",
"chars": 2622,
"preview": "= Tags\n\nTags are a JUnit Platform concept for marking and filtering tests. The programming model\nfor adding tags to cont"
},
{
"path": "documentation/modules/ROOT/pages/running-tests/using-listeners-and-interceptors.adoc",
"chars": 4444,
"preview": "= Using Listeners and Interceptors\n\nThe JUnit Platform provides the following listener APIs that allow JUnit, third part"
},
{
"path": "documentation/modules/ROOT/pages/writing-tests/annotations.adoc",
"chars": 8382,
"preview": "= Annotations\n\nJUnit Jupiter supports the following annotations for configuring tests and extending the\nframework.\n\nUnle"
},
{
"path": "documentation/modules/ROOT/pages/writing-tests/assertions.adoc",
"chars": 4332,
"preview": "= Assertions\n\nJUnit Jupiter comes with many of the assertion methods that JUnit 4 has and adds a few\nthat lend themselve"
},
{
"path": "documentation/modules/ROOT/pages/writing-tests/assumptions.adoc",
"chars": 1588,
"preview": "= Assumptions\n\nAssumptions are typically used whenever it does not make sense to continue execution of a\ngiven test — fo"
},
{
"path": "documentation/modules/ROOT/pages/writing-tests/built-in-extensions.adoc",
"chars": 28008,
"preview": "= Built-in Extensions\n\nWhile the JUnit team encourages reusable extensions to be packaged and maintained in\nseparate lib"
},
{
"path": "documentation/modules/ROOT/pages/writing-tests/class-templates.adoc",
"chars": 751,
"preview": "= Class Templates\n\nA `{ClassTemplate}` is not a regular test class but rather a template for the contained\ntest cases. A"
},
{
"path": "documentation/modules/ROOT/pages/writing-tests/conditional-test-execution.adoc",
"chars": 11176,
"preview": "= Conditional Test Execution\n\nThe xref:extensions/conditional-test-execution.adoc[`ExecutionCondition`] extension API in"
},
{
"path": "documentation/modules/ROOT/pages/writing-tests/definitions.adoc",
"chars": 1032,
"preview": "= Definitions\n\n== Platform Concepts\n\nContainer::\na node in the test tree that contains other containers or tests as its "
},
{
"path": "documentation/modules/ROOT/pages/writing-tests/dependency-injection-for-constructors-and-methods.adoc",
"chars": 4692,
"preview": "= Dependency Injection for Constructors and Methods\n\nIn JUnit Jupiter, both test constructors and methods are permitted "
},
{
"path": "documentation/modules/ROOT/pages/writing-tests/disabling-tests.adoc",
"chars": 1815,
"preview": "= Disabling Tests\n\nEntire test classes or individual test methods may be _disabled_ via the `{Disabled}`\nannotation, via"
},
{
"path": "documentation/modules/ROOT/pages/writing-tests/display-names.adoc",
"chars": 6494,
"preview": "= Display Names\n\nTest classes and test methods can declare custom display names via `@DisplayName` -- with\nspaces, speci"
},
{
"path": "documentation/modules/ROOT/pages/writing-tests/dynamic-tests.adoc",
"chars": 8218,
"preview": "= Dynamic Tests\n\nThe standard `@Test` annotation in JUnit Jupiter described in\nxref:writing-tests/annotations.adoc[] is "
},
{
"path": "documentation/modules/ROOT/pages/writing-tests/exception-handling.adoc",
"chars": 6246,
"preview": "= Exception Handling\n\nJUnit Jupiter provides robust support for handling test exceptions. This includes the\nbuilt-in mec"
},
{
"path": "documentation/modules/ROOT/pages/writing-tests/intro.adoc",
"chars": 514,
"preview": "= Writing Tests\n\nThe following example provides a glimpse at the minimum requirements for writing a test in\nJUnit Jupite"
},
{
"path": "documentation/modules/ROOT/pages/writing-tests/nested-tests.adoc",
"chars": 3038,
"preview": "= Nested Tests\n\n`@Nested` tests give the test writer more capabilities to express the relationship among\nseveral groups "
},
{
"path": "documentation/modules/ROOT/pages/writing-tests/parallel-execution.adoc",
"chars": 17183,
"preview": "= Parallel Execution\n\nBy default, JUnit Jupiter tests are run sequentially in a single thread; however, running\ntests in"
},
{
"path": "documentation/modules/ROOT/pages/writing-tests/parameterized-classes-and-tests.adoc",
"chars": 57808,
"preview": "= Parameterized Classes and Tests\n\n_Parameterized tests_ make it possible to run a test method multiple times with diffe"
},
{
"path": "documentation/modules/ROOT/pages/writing-tests/repeated-tests.adoc",
"chars": 9019,
"preview": "= Repeated Tests\n\nJUnit Jupiter provides the ability to repeat a test a specified number of times by\nannotating a method"
},
{
"path": "documentation/modules/ROOT/pages/writing-tests/tagging-and-filtering.adoc",
"chars": 581,
"preview": "= Tagging and Filtering\n\nTest classes and methods can be tagged via the `@Tag` annotation. Those tags can later be\nused "
},
{
"path": "documentation/modules/ROOT/pages/writing-tests/test-classes-and-methods.adoc",
"chars": 4117,
"preview": "= Test Classes and Methods\n\nTest methods and lifecycle methods may be declared locally within the current test class,\nin"
},
{
"path": "documentation/modules/ROOT/pages/writing-tests/test-execution-order.adoc",
"chars": 6970,
"preview": "= Test Execution Order\n\nBy default, test classes and methods will be ordered using an algorithm that is\ndeterministic bu"
},
{
"path": "documentation/modules/ROOT/pages/writing-tests/test-instance-lifecycle.adoc",
"chars": 3728,
"preview": "= Test Instance Lifecycle\n\nIn order to allow individual test methods to be executed in isolation and to avoid\nunexpected"
},
{
"path": "documentation/modules/ROOT/pages/writing-tests/test-interfaces-and-default-methods.adoc",
"chars": 4459,
"preview": "= Test Interfaces and Default Methods\n\nJUnit Jupiter allows `@Test`, `@RepeatedTest`, `@ParameterizedTest`, `@TestFactor"
},
{
"path": "documentation/modules/ROOT/pages/writing-tests/test-templates.adoc",
"chars": 805,
"preview": "= Test Templates\n\nA `{TestTemplate}` method is not a regular test case but rather a template for a test\ncase. As such, i"
},
{
"path": "documentation/modules/ROOT/pages/writing-tests/timeouts.adoc",
"chars": 7957,
"preview": "= Timeouts\n\nThe `@Timeout` annotation allows one to declare that a test, test factory, test template,\nor lifecycle metho"
},
{
"path": "documentation/modules/ROOT/partials/release-notes/release-notes-6.0.0.adoc",
"chars": 926,
"preview": "[[v6.0.0]]\n== 6.0.0\n\n*Date of Release:* September 30, 2025\n\n*Scope:*\n\n* Java 17 and Kotlin 2.1 baseline\n* Single version"
},
{
"path": "documentation/modules/ROOT/partials/release-notes/release-notes-6.0.1.adoc",
"chars": 2741,
"preview": "[[v6.0.1]]\n== 6.0.1\n\n*Date of Release:* October 31, 2025\n\n*Scope:* Bug fixes and enhancements since 6.0.0\n\nFor a complet"
},
{
"path": "documentation/modules/ROOT/partials/release-notes/release-notes-6.0.2.adoc",
"chars": 1107,
"preview": "[[v6.0.2]]\n== 6.0.2\n\n*Date of Release:* January 6, 2026\n\n*Scope:* Bug fixes and enhancements since 6.0.1\n\nFor a complete"
},
{
"path": "documentation/modules/ROOT/partials/release-notes/release-notes-6.0.3.adoc",
"chars": 887,
"preview": "[[v6.0.3]]\n== 6.0.3\n\n*Date of Release:* February 15, 2026\n\n*Scope:* Bug fixes and enhancements since 6.0.2\n\nFor a comple"
},
{
"path": "documentation/modules/ROOT/partials/release-notes/release-notes-6.1.0-M1.adoc",
"chars": 3426,
"preview": "[[v6.1.0-M1]]\n== 6.1.0-M1\n\n*Date of Release:* November 17, 2025\n\n*Scope:*\n\n* New `org.junit.start` module for usage in c"
},
{
"path": "documentation/modules/ROOT/partials/release-notes/release-notes-6.1.0-RC1.adoc",
"chars": 6157,
"preview": "[[v6.1.0-RC1]]\n== 6.1.0-RC1\n\n*Date of Release:* April 25, 2026\n\n*Scope:*\n\n* New `@DefaultLocale` and `@DefaultTimeZone` "
},
{
"path": "documentation/modules/ROOT/partials/release-notes/release-notes-6.1.0.adoc",
"chars": 1280,
"preview": "[[v6.1.0]]\n== 6.1.0\n\n*Date of Release:* ❓\n\n*Scope:* ❓\n\nFor a complete list of all _closed_ issues and pull requests for "
},
{
"path": "documentation/modules/ROOT/partials/release-notes/release-notes-TEMPLATE.adoc",
"chars": 2072,
"preview": "// TODO:\n//\n// 1) Make a copy of this template file, replacing TEMPLATE in the file name with the\n// current version "
},
{
"path": "documentation/package.json",
"chars": 354,
"preview": "{\n \"devDependencies\": {\n \"antora\": \"3.2.0-alpha.11\"\n },\n \"dependencies\": {\n \"@antora/collector-extension\": \"1.0"
},
{
"path": "documentation/src/javadoc/junit-overview.html",
"chars": 1140,
"preview": "<body>\n\n<p>This document consists of four sections:</p>\n\n<dl>\n <dt>Platform</dt>\n <dd>The JUnit Platform serves as"
},
{
"path": "documentation/src/javadoc/junit-stylesheet.css",
"chars": 2406,
"preview": "/*\n * CSS customizations for JUnit\n */\n\n@import url('https://assets.junit.org/fonts/index.css');\n\n:root {\n /* body, b"
},
{
"path": "documentation/src/main/java/example/domain/Person.java",
"chars": 1985,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/main/java/example/domain/package-info.java",
"chars": 370,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/main/java/example/registration/WebClient.java",
"chars": 533,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/main/java/example/registration/WebResponse.java",
"chars": 428,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/main/java/example/registration/WebServerExtension.java",
"chars": 934,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/main/java/example/registration/package-info.java",
"chars": 394,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/main/java/example/util/Calculator.java",
"chars": 588,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/main/java/example/util/ListWriter.java",
"chars": 673,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/main/java/example/util/StringUtils.java",
"chars": 761,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/main/java/example/util/package-info.java",
"chars": 365,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/plantuml/component-diagram.puml",
"chars": 1997,
"preview": "@startuml\n\nskinparam {\n defaultFontName sans-serif\n}\n\npackage org.junit.jupiter {\n [junit-jupiter] as jupiter\n "
},
{
"path": "documentation/src/plantuml/junit-platform-suite-engine-diagram.puml",
"chars": 1094,
"preview": "@startuml\nobject \"IDEs\"\nobject \"Build Tools\"\nobject \"Console Launcher\"\n\nobject \"JUnit Platform\"\nobject \"Suite Test Engin"
},
{
"path": "documentation/src/plantuml/junit-platform-suite-engine-duplicate-test-execution-diagram.puml",
"chars": 1038,
"preview": "@startuml\nobject \"IDEs\"\nobject \"Build Tools\"\nobject \"Console Launcher\"\nobject \"JUnit Platform\"\ntogether {\n object \"Su"
},
{
"path": "documentation/src/plantuml/launcher-api-diagram.puml",
"chars": 695,
"preview": "@startuml\nobject \"IDEs\"\nobject \"Build Tools\"\nobject \"Console Launcher\"\nobject \"JUnit Platform\"\nobject \"Jupiter Test Engi"
},
{
"path": "documentation/src/test/java/example/AssertJAssertionsDemo.java",
"chars": 687,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/AssertionsDemo.java",
"chars": 4824,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/AssumptionsDemo.java",
"chars": 1351,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/AutoCloseDemo.java",
"chars": 973,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/BeforeAndAfterSuiteDemo.java",
"chars": 798,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/ClassTemplateDemo.java",
"chars": 2728,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/ConditionalTestExecutionDemo.java",
"chars": 5754,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/CustomLauncherInterceptor.java",
"chars": 1480,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/CustomTestEngine.java",
"chars": 1118,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/DefaultLocaleTimezoneExtensionDemo.java",
"chars": 3933,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/DisabledClassDemo.java",
"chars": 569,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/DisabledTestsDemo.java",
"chars": 613,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/DisplayNameDemo.java",
"chars": 792,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/DisplayNameGeneratorDemo.java",
"chars": 2327,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/DocumentationTestSuite.java",
"chars": 1048,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/DynamicTestsDemo.java",
"chars": 6948,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/DynamicTestsNamedDemo.java",
"chars": 2089,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/ExampleTestCase.java",
"chars": 1331,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/ExplicitExecutionModeDemo.java",
"chars": 724,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/ExternalCustomConditionDemo.java",
"chars": 732,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/ExternalFieldSourceDemo.java",
"chars": 856,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/ExternalMethodSourceDemo.java",
"chars": 859,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/Fast.java",
"chars": 698,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/FastTest.java",
"chars": 721,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/FirstCustomEngine.java",
"chars": 2332,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/HttpServerDemo.java",
"chars": 1722,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/IgnoredTestsDemo.java",
"chars": 720,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/JUnit4Tests.java",
"chars": 458,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/MethodSourceParameterResolutionDemo.java",
"chars": 1907,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/MyFirstJUnitJupiterRecordTests.java",
"chars": 628,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/MyFirstJUnitJupiterTests.java",
"chars": 670,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/MyRandomParametersTest.java",
"chars": 727,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/OrderedNestedTestClassesDemo.java",
"chars": 816,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/OrderedTestsDemo.java",
"chars": 886,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/ParameterizedClassDemo.java",
"chars": 3175,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/ParameterizedLifecycleDemo.java",
"chars": 2669,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/ParameterizedMigrationDemo.java",
"chars": 2136,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/ParameterizedRecordDemo.java",
"chars": 1090,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/ParameterizedTestDemo.java",
"chars": 19777,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/PollingTimeoutDemo.java",
"chars": 805,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/RepeatedTestsDemo.java",
"chars": 2769,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/SecondCustomEngine.java",
"chars": 2336,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/SlowTests.java",
"chars": 1420,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/StandardTests.java",
"chars": 1267,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/SuiteDemo.java",
"chars": 816,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/SystemPropertyExtensionDemo.java",
"chars": 4537,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/TaggingDemo.java",
"chars": 553,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/TempDirectoryDemo.java",
"chars": 4940,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/TestInfoDemo.java",
"chars": 1461,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/TestReporterDemo.java",
"chars": 1996,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/TestTemplateDemo.java",
"chars": 2505,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/TestingAStackDemo.java",
"chars": 2263,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/TimeoutDemo.java",
"chars": 1191,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/UsingTheLauncherDemo.java",
"chars": 8309,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/UsingTheLauncherForDiscoveryDemo.java",
"chars": 1640,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/callbacks/AbstractDatabaseTests.java",
"chars": 1424,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/callbacks/BrokenLifecycleMethodConfigDemo.java",
"chars": 1658,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
},
{
"path": "documentation/src/test/java/example/callbacks/DatabaseTestsDemo.java",
"chars": 1809,
"preview": "/*\n * Copyright 2015-2026 the original author or authors.\n *\n * All rights reserved. This program and the accompanying m"
}
]
// ... and 2098 more files (download for full content)
About this extraction
This page contains the full source code of the junit-team/junit-lambda GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2298 files (8.5 MB), approximately 2.4M tokens, and a symbol index with 18034 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.