Right now, most of our API is marked as "experimental".
Before the GA release...
@API declarations on non-public types.value of all @API annotations.@API annotations to Groovy source code for the Gradle plugin.@API(Stable)
@API(Maintained)
@API(Experimental)
@API(Internal)
Update: I've already made one pass through the code base removing @API declarations on non-public types.
Edit: deleted outdated list of @API usage. A new one will be linked here, soon.
Move all Experimental to Stable?
11 types from the list above are not public:
and
and
Remove API annotation or make (some of) them public or, if they are internally used only, make siblings non-public as well?
Non-public types should not be annotated with @API.
If there are any remaining public types annotated with @API, then that was an oversight on my part, since I thought I already addressed those.
Furthermore, any type that can be made non-public should be.
11 types from the list above are not
public:
What did you run this against?
From what I can tell, none of the types you mention that are not public are annotated with @API in master.
Mh, the parser code is on another machine and branch. Will check tonight.
I guess the parser/scanner also included "inherited" annotations. E.g. ExtensionContext is annotated with @API(Experimental) which leaded to a positive result for TestTemplateExtensionContext as well. Seems like I need to fine-tune the scanner part...
Yep. That fast class path scanner discovers meta annotations by default.
Perhaps that's configurable.
New compiled list is available at https://gist.github.com/sormuras/2f3df0f4d35af83b625eff66d8a9f130
The compiled list only contains 160 entries from the standalone JAR. IDEA on the other hand, using Find in Path... still reports 224 occurrences. IDEA also scans .java files that are tests, migration helpers and other sources.
New compiled list is available at https://gist.github.com/sormuras/2f3df0f4d35af83b625eff66d8a9f130
Nice compilation. ๐
Updated the compilation. Now listing 201 entries -- minus two, as I removed the @API annotations from the two classes in platform-tests_test.
Notes from team meeting:
suite api -> maintained
jupiter test annotations (except TestFactory) -> stable (including currently maintained ones)
JUnitPlatform (runner) -> stable
Assertions/Assumptions -> stable
DynamicContainer/โฆ and TestFactory -> experimental
RepetitionInfo, TestInfo, TestReporter -> stable
org.junit.jupiter.api.extension -> stable
Constants -> stable
JupiterTestEngine, VintageTestEngine -> internal, final
params -> experimental
org.junit.platform.engine (except filter and hierarchical) -> stable
ClasspathScanningSupport -> internal
org.junit.platform.engine.support.hierarchical -> maintained
org.junit.platform.launcher & .core -> stable
org.junit.platform.launcher.listeners -> maintained
API -> internal
+ New section/warnings in User Guide
Updated deliverables section.
Results of @API report prior to #1035.
@API DeclarationsDiscovered 211 types with @API declarations.
@API(Internal)Discovered 67 @API(Internal) declarations.
PACKAGE NAME | CLASS NAME | TYPE | MODIFIERS
---------------------------------------------------- | ------------------------------------------ | ------------ | ---------------------------
org.junit.jupiter.engine.descriptor | ClassExtensionContext | class | public final
org.junit.jupiter.engine.descriptor | ClassTestDescriptor | class | public
org.junit.jupiter.engine.descriptor | JupiterEngineDescriptor | class | public
org.junit.jupiter.engine.descriptor | JupiterEngineExtensionContext | class | public final
org.junit.jupiter.engine.descriptor | JupiterTestDescriptor | class | public abstract
org.junit.jupiter.engine.descriptor | MethodExtensionContext | class | public final
org.junit.jupiter.engine.descriptor | NestedClassTestDescriptor | class | public
org.junit.jupiter.engine.descriptor | TestFactoryTestDescriptor | class | public
org.junit.jupiter.engine.descriptor | TestMethodTestDescriptor | class | public
org.junit.jupiter.engine.descriptor | TestTemplateInvocationTestDescriptor | class | public
org.junit.jupiter.engine.descriptor | TestTemplateTestDescriptor | class | public
org.junit.jupiter.engine.discovery | DiscoverySelectorResolver | class | public
org.junit.jupiter.engine.discovery.predicates | IsInnerClass | class | public
org.junit.jupiter.engine.discovery.predicates | IsNestedTestClass | class | public
org.junit.jupiter.engine.discovery.predicates | IsPotentialTestContainer | class | public
org.junit.jupiter.engine.discovery.predicates | IsScannableTestClass | class | public
org.junit.jupiter.engine.discovery.predicates | IsTestFactoryMethod | class | public
org.junit.jupiter.engine.discovery.predicates | IsTestMethod | class | public
org.junit.jupiter.engine.discovery.predicates | IsTestTemplateMethod | class | public
org.junit.jupiter.engine.execution | AfterEachMethodAdapter | interface | public abstract interface
org.junit.jupiter.engine.execution | BeforeEachMethodAdapter | interface | public abstract interface
org.junit.jupiter.engine.execution | ConditionEvaluator | class | public
org.junit.jupiter.engine.execution | ExecutableInvoker | class | public
org.junit.jupiter.engine.execution | ExtensionValuesStore | class | public
org.junit.jupiter.engine.execution | JupiterEngineExecutionContext | class | public
org.junit.jupiter.engine.execution | NamespaceAwareStore | class | public
org.junit.jupiter.engine.execution | TestInstanceProvider | interface | public abstract interface
org.junit.jupiter.engine.execution | ThrowableCollector | class | public
org.junit.jupiter.engine.extension | ExtensionRegistry | class | public
org.junit.jupiter.migrationsupport.rules.adapter | AbstractTestRuleAdapter | class | public abstract
org.junit.jupiter.migrationsupport.rules.adapter | ExpectedExceptionAdapter | class | public
org.junit.jupiter.migrationsupport.rules.adapter | ExternalResourceAdapter | class | public
org.junit.jupiter.migrationsupport.rules.adapter | GenericBeforeAndAfterAdvice | interface | public abstract interface
org.junit.jupiter.migrationsupport.rules.adapter | VerifierAdapter | class | public
org.junit.jupiter.migrationsupport.rules.member | TestRuleAnnotatedMember | interface | public abstract interface
org.junit.jupiter.migrationsupport.rules.member | TestRuleAnnotatedMemberFactory | class | public final
org.junit.jupiter.params.converter | DefaultArgumentConverter | class | public
org.junit.jupiter.params.support | AnnotationConsumerInitializer | class | public final
org.junit.platform.commons | JUnitException | class | public
org.junit.platform.commons.util | AnnotationUtils | class | public final
org.junit.platform.commons.util | BlacklistedExceptions | class | public final
org.junit.platform.commons.util | ClassLoaderUtils | class | public final
org.junit.platform.commons.util | ClassUtils | class | public final
org.junit.platform.commons.util | CollectionUtils | class | public final
org.junit.platform.commons.util | ExceptionUtils | class | public final
org.junit.platform.commons.util | FunctionUtils | class | public final
org.junit.platform.commons.util | PackageUtils | class | public final
org.junit.platform.commons.util | PreconditionViolationException | class | public
org.junit.platform.commons.util | Preconditions | class | public final
org.junit.platform.commons.util | ReflectionUtils | class | public final
org.junit.platform.commons.util | StringUtils | class | public final
org.junit.platform.commons.util | ToStringBuilder | class | public
org.junit.platform.console | ConsoleLauncherExecutionResult | class | public
org.junit.platform.console.options | CommandLineOptions | class | public
org.junit.platform.console.options | CommandLineOptionsParser | interface | public abstract interface
org.junit.platform.console.options | Details | enum | public final
org.junit.platform.console.options | JOptSimpleCommandLineOptionsParser | class | public
org.junit.platform.console.options | Theme | enum | public final
org.junit.platform.console.tasks | ConsoleTestExecutor | class | public
org.junit.platform.engine | Filter | interface | public abstract interface
org.junit.platform.engine.support.filter | ExclusionReasonConsumingFilter | class | public
org.junit.vintage.engine.descriptor | RunnerTestDescriptor | class | public
org.junit.vintage.engine.descriptor | VintageTestDescriptor | class | public
org.junit.vintage.engine.discovery | VintageDiscoverer | class | public
org.junit.vintage.engine.execution | RunnerExecutor | class | public
org.junit.vintage.engine.support | UniqueIdReader | class | public
org.junit.vintage.engine.support | UniqueIdStringifier | class | public
@API(Deprecated)Discovered 0 @API(Deprecated) declarations.
@API(Experimental)Discovered 114 @API(Experimental) declarations.
PACKAGE NAME | CLASS NAME | TYPE | MODIFIERS
---------------------------------------------------- | ------------------------------------------ | ------------ | ---------------------------
org.junit.jupiter.api | DisplayName | annotation | public abstract interface
org.junit.jupiter.api | DynamicContainer | class | public
org.junit.jupiter.api | DynamicNode | class | public abstract
org.junit.jupiter.api | DynamicTest | class | public
org.junit.jupiter.api | Nested | annotation | public abstract interface
org.junit.jupiter.api | RepeatedTest | annotation | public abstract interface
org.junit.jupiter.api | RepetitionInfo | interface | public abstract interface
org.junit.jupiter.api | TestFactory | annotation | public abstract interface
org.junit.jupiter.api | TestInfo | interface | public abstract interface
org.junit.jupiter.api | TestReporter | interface | public abstract interface
org.junit.jupiter.api | TestTemplate | annotation | public abstract interface
org.junit.jupiter.api.extension | AfterAllCallback | interface | public abstract interface
org.junit.jupiter.api.extension | AfterEachCallback | interface | public abstract interface
org.junit.jupiter.api.extension | AfterTestExecutionCallback | interface | public abstract interface
org.junit.jupiter.api.extension | BeforeAllCallback | interface | public abstract interface
org.junit.jupiter.api.extension | BeforeEachCallback | interface | public abstract interface
org.junit.jupiter.api.extension | BeforeTestExecutionCallback | interface | public abstract interface
org.junit.jupiter.api.extension | ConditionEvaluationResult | class | public
org.junit.jupiter.api.extension | ExecutionCondition | interface | public abstract interface
org.junit.jupiter.api.extension | ExtendWith | annotation | public abstract interface
org.junit.jupiter.api.extension | Extension | interface | public abstract interface
org.junit.jupiter.api.extension | ExtensionConfigurationException | class | public
org.junit.jupiter.api.extension | ExtensionContext | interface | public abstract interface
org.junit.jupiter.api.extension | ExtensionContextException | class | public
org.junit.jupiter.api.extension | Extensions | annotation | public abstract interface
org.junit.jupiter.api.extension | ParameterContext | interface | public abstract interface
org.junit.jupiter.api.extension | ParameterResolutionException | class | public
org.junit.jupiter.api.extension | ParameterResolver | interface | public abstract interface
org.junit.jupiter.api.extension | TestExecutionExceptionHandler | interface | public abstract interface
org.junit.jupiter.api.extension | TestInstancePostProcessor | interface | public abstract interface
org.junit.jupiter.api.extension | TestTemplateInvocationContext | interface | public abstract interface
org.junit.jupiter.api.extension | TestTemplateInvocationContextProvider | interface | public abstract interface
org.junit.jupiter.engine | Constants | class | public final
org.junit.jupiter.engine | JupiterTestEngine | class | public
org.junit.jupiter.migrationsupport.rules | EnableRuleMigrationSupport | annotation | public abstract interface
org.junit.jupiter.migrationsupport.rules | ExpectedExceptionSupport | class | public
org.junit.jupiter.migrationsupport.rules | ExternalResourceSupport | class | public
org.junit.jupiter.migrationsupport.rules | VerifierSupport | class | public
org.junit.jupiter.params | ParameterizedTest | annotation | public abstract interface
org.junit.jupiter.params.converter | ArgumentConversionException | class | public
org.junit.jupiter.params.converter | ArgumentConverter | interface | public abstract interface
org.junit.jupiter.params.converter | ConvertWith | annotation | public abstract interface
org.junit.jupiter.params.converter | JavaTimeConversionPattern | annotation | public abstract interface
org.junit.jupiter.params.converter | SimpleArgumentConverter | class | public abstract
org.junit.jupiter.params.provider | Arguments | interface | public abstract interface
org.junit.jupiter.params.provider | ArgumentsProvider | interface | public abstract interface
org.junit.jupiter.params.provider | ArgumentsSource | annotation | public abstract interface
org.junit.jupiter.params.provider | ArgumentsSources | annotation | public abstract interface
org.junit.jupiter.params.provider | CsvFileSource | annotation | public abstract interface
org.junit.jupiter.params.provider | CsvSource | annotation | public abstract interface
org.junit.jupiter.params.provider | EnumSource | annotation | public abstract interface
org.junit.jupiter.params.provider | MethodSource | annotation | public abstract interface
org.junit.jupiter.params.provider | ValueSource | annotation | public abstract interface
org.junit.jupiter.params.support | AnnotationConsumer | interface | public abstract interface
org.junit.platform.commons.meta | API | annotation | public abstract interface
org.junit.platform.engine | ConfigurationParameters | interface | public abstract interface
org.junit.platform.engine | DiscoveryFilter | interface | public abstract interface
org.junit.platform.engine | DiscoverySelector | interface | public abstract interface
org.junit.platform.engine | EngineDiscoveryRequest | interface | public abstract interface
org.junit.platform.engine | EngineExecutionListener | interface | public abstract interface
org.junit.platform.engine | ExecutionRequest | class | public
org.junit.platform.engine | FilterResult | class | public
org.junit.platform.engine | TestDescriptor | interface | public abstract interface
org.junit.platform.engine | TestEngine | interface | public abstract interface
org.junit.platform.engine | TestExecutionResult | class | public
org.junit.platform.engine | TestSource | interface | public abstract interface
org.junit.platform.engine | TestTag | class | public final
org.junit.platform.engine | UniqueId | class | public
org.junit.platform.engine | Segment | class | public static
org.junit.platform.engine.discovery | ClassNameFilter | interface | public abstract interface
org.junit.platform.engine.discovery | ClassSelector | class | public
org.junit.platform.engine.discovery | ClasspathResourceSelector | class | public
org.junit.platform.engine.discovery | ClasspathRootSelector | class | public
org.junit.platform.engine.discovery | DirectorySelector | class | public
org.junit.platform.engine.discovery | DiscoverySelectors | class | public final
org.junit.platform.engine.discovery | FileSelector | class | public
org.junit.platform.engine.discovery | MethodSelector | class | public
org.junit.platform.engine.discovery | PackageNameFilter | interface | public abstract interface
org.junit.platform.engine.discovery | PackageSelector | class | public
org.junit.platform.engine.discovery | UniqueIdSelector | class | public
org.junit.platform.engine.discovery | UriSelector | class | public
org.junit.platform.engine.reporting | ReportEntry | class | public final
org.junit.platform.engine.support.descriptor | AbstractTestDescriptor | class | public abstract
org.junit.platform.engine.support.descriptor | ClassSource | class | public
org.junit.platform.engine.support.descriptor | ClasspathResourceSource | class | public
org.junit.platform.engine.support.descriptor | CompositeTestSource | class | public
org.junit.platform.engine.support.descriptor | DirectorySource | class | public
org.junit.platform.engine.support.descriptor | EngineDescriptor | class | public
org.junit.platform.engine.support.descriptor | FilePosition | class | public
org.junit.platform.engine.support.descriptor | FileSource | class | public
org.junit.platform.engine.support.descriptor | FileSystemSource | interface | public abstract interface
org.junit.platform.engine.support.descriptor | MethodSource | class | public
org.junit.platform.engine.support.descriptor | PackageSource | class | public
org.junit.platform.engine.support.descriptor | UriSource | interface | public abstract interface
org.junit.platform.engine.support.filter | ClasspathScanningSupport | class | public final
org.junit.platform.engine.support.hierarchical | EngineExecutionContext | interface | public abstract interface
org.junit.platform.engine.support.hierarchical | HierarchicalTestEngine | class | public abstract
org.junit.platform.engine.support.hierarchical | Node | interface | public abstract interface
org.junit.platform.engine.support.hierarchical | SingleTestExecutor | class | public
org.junit.platform.launcher | EngineFilter | class | public
org.junit.platform.launcher | Launcher | interface | public abstract interface
org.junit.platform.launcher | LauncherDiscoveryRequest | interface | public abstract interface
org.junit.platform.launcher | PostDiscoveryFilter | interface | public abstract interface
org.junit.platform.launcher | TagFilter | class | public final
org.junit.platform.launcher | TestExecutionListener | interface | public abstract interface
org.junit.platform.launcher | TestIdentifier | class | public final
org.junit.platform.launcher | TestPlan | class | public final
org.junit.platform.launcher.core | LauncherDiscoveryRequestBuilder | class | public final
org.junit.platform.launcher.core | LauncherFactory | class | public
org.junit.platform.launcher.listeners | LoggingListener | class | public
org.junit.platform.launcher.listeners | SummaryGeneratingListener | class | public
org.junit.platform.launcher.listeners | TestExecutionSummary | interface | public abstract interface
org.junit.platform.surefire.provider | JUnitPlatformProvider | class | public
org.junit.vintage.engine | VintageTestEngine | class | public
@API(Maintained)Discovered 22 @API(Maintained) declarations.
PACKAGE NAME | CLASS NAME | TYPE | MODIFIERS
---------------------------------------------------- | ------------------------------------------ | ------------ | ---------------------------
org.junit.jupiter.api | AfterAll | annotation | public abstract interface
org.junit.jupiter.api | Assertions | class | public final
org.junit.jupiter.api | Assumptions | class | public final
org.junit.jupiter.api | BeforeAll | annotation | public abstract interface
org.junit.jupiter.api | Tag | annotation | public abstract interface
org.junit.jupiter.api | Tags | annotation | public abstract interface
org.junit.platform.commons.support | AnnotationSupport | class | public final
org.junit.platform.commons.support | HierarchyTraversalMode | enum | public final
org.junit.platform.commons.support | ReflectionSupport | class | public final
org.junit.platform.console | ConsoleLauncher | class | public
org.junit.platform.runner | JUnitPlatform | class | public
org.junit.platform.suite.api | ExcludeClassNamePatterns | annotation | public abstract interface
org.junit.platform.suite.api | ExcludeEngines | annotation | public abstract interface
org.junit.platform.suite.api | ExcludePackages | annotation | public abstract interface
org.junit.platform.suite.api | ExcludeTags | annotation | public abstract interface
org.junit.platform.suite.api | IncludeClassNamePatterns | annotation | public abstract interface
org.junit.platform.suite.api | IncludeEngines | annotation | public abstract interface
org.junit.platform.suite.api | IncludePackages | annotation | public abstract interface
org.junit.platform.suite.api | IncludeTags | annotation | public abstract interface
org.junit.platform.suite.api | SelectClasses | annotation | public abstract interface
org.junit.platform.suite.api | SelectPackages | annotation | public abstract interface
org.junit.platform.suite.api | UseTechnicalNames | annotation | public abstract interface
@API(Stable)Discovered 8 @API(Stable) declarations.
PACKAGE NAME | CLASS NAME | TYPE | MODIFIERS
---------------------------------------------------- | ------------------------------------------ | ------------ | ---------------------------
org.junit.jupiter.api | AfterEach | annotation | public abstract interface
org.junit.jupiter.api | BeforeEach | annotation | public abstract interface
org.junit.jupiter.api | Disabled | annotation | public abstract interface
org.junit.jupiter.api | Test | annotation | public abstract interface
org.junit.jupiter.api.function | Executable | interface | public abstract interface
org.junit.jupiter.api.function | ThrowingConsumer | interface | public abstract interface
org.junit.jupiter.api.function | ThrowingSupplier | interface | public abstract interface
org.junit.platform.commons.annotation | Testable | annotation | public abstract interface
Reopened to address documentation tasks.
Results of @API report after #1035.
@API DeclarationsDiscovered 211 types with @API declarations.
@API(Internal)Discovered 70 @API(Internal) declarations.
PACKAGE NAME | CLASS NAME | TYPE | MODIFIERS
---------------------------------------------------- | ------------------------------------------ | ------------ | ---------------------------
org.junit.jupiter.engine | JupiterTestEngine | class | public final
org.junit.jupiter.engine.descriptor | ClassExtensionContext | class | public final
org.junit.jupiter.engine.descriptor | ClassTestDescriptor | class | public
org.junit.jupiter.engine.descriptor | JupiterEngineDescriptor | class | public
org.junit.jupiter.engine.descriptor | JupiterEngineExtensionContext | class | public final
org.junit.jupiter.engine.descriptor | JupiterTestDescriptor | class | public abstract
org.junit.jupiter.engine.descriptor | MethodExtensionContext | class | public final
org.junit.jupiter.engine.descriptor | NestedClassTestDescriptor | class | public
org.junit.jupiter.engine.descriptor | TestFactoryTestDescriptor | class | public
org.junit.jupiter.engine.descriptor | TestMethodTestDescriptor | class | public
org.junit.jupiter.engine.descriptor | TestTemplateInvocationTestDescriptor | class | public
org.junit.jupiter.engine.descriptor | TestTemplateTestDescriptor | class | public
org.junit.jupiter.engine.discovery | DiscoverySelectorResolver | class | public
org.junit.jupiter.engine.discovery.predicates | IsInnerClass | class | public
org.junit.jupiter.engine.discovery.predicates | IsNestedTestClass | class | public
org.junit.jupiter.engine.discovery.predicates | IsPotentialTestContainer | class | public
org.junit.jupiter.engine.discovery.predicates | IsScannableTestClass | class | public
org.junit.jupiter.engine.discovery.predicates | IsTestFactoryMethod | class | public
org.junit.jupiter.engine.discovery.predicates | IsTestMethod | class | public
org.junit.jupiter.engine.discovery.predicates | IsTestTemplateMethod | class | public
org.junit.jupiter.engine.execution | AfterEachMethodAdapter | interface | public abstract interface
org.junit.jupiter.engine.execution | BeforeEachMethodAdapter | interface | public abstract interface
org.junit.jupiter.engine.execution | ConditionEvaluator | class | public
org.junit.jupiter.engine.execution | ExecutableInvoker | class | public
org.junit.jupiter.engine.execution | ExtensionValuesStore | class | public
org.junit.jupiter.engine.execution | JupiterEngineExecutionContext | class | public
org.junit.jupiter.engine.execution | NamespaceAwareStore | class | public
org.junit.jupiter.engine.execution | TestInstanceProvider | interface | public abstract interface
org.junit.jupiter.engine.execution | ThrowableCollector | class | public
org.junit.jupiter.engine.extension | ExtensionRegistry | class | public
org.junit.jupiter.migrationsupport.rules.adapter | AbstractTestRuleAdapter | class | public abstract
org.junit.jupiter.migrationsupport.rules.adapter | ExpectedExceptionAdapter | class | public
org.junit.jupiter.migrationsupport.rules.adapter | ExternalResourceAdapter | class | public
org.junit.jupiter.migrationsupport.rules.adapter | GenericBeforeAndAfterAdvice | interface | public abstract interface
org.junit.jupiter.migrationsupport.rules.adapter | VerifierAdapter | class | public
org.junit.jupiter.migrationsupport.rules.member | TestRuleAnnotatedMember | interface | public abstract interface
org.junit.jupiter.migrationsupport.rules.member | TestRuleAnnotatedMemberFactory | class | public final
org.junit.jupiter.params.converter | DefaultArgumentConverter | class | public
org.junit.jupiter.params.support | AnnotationConsumerInitializer | class | public final
org.junit.platform.commons | JUnitException | class | public
org.junit.platform.commons.meta | API | annotation | public abstract interface
org.junit.platform.commons.util | AnnotationUtils | class | public final
org.junit.platform.commons.util | BlacklistedExceptions | class | public final
org.junit.platform.commons.util | ClassLoaderUtils | class | public final
org.junit.platform.commons.util | ClassUtils | class | public final
org.junit.platform.commons.util | CollectionUtils | class | public final
org.junit.platform.commons.util | ExceptionUtils | class | public final
org.junit.platform.commons.util | FunctionUtils | class | public final
org.junit.platform.commons.util | PackageUtils | class | public final
org.junit.platform.commons.util | PreconditionViolationException | class | public
org.junit.platform.commons.util | Preconditions | class | public final
org.junit.platform.commons.util | ReflectionUtils | class | public final
org.junit.platform.commons.util | StringUtils | class | public final
org.junit.platform.commons.util | ToStringBuilder | class | public
org.junit.platform.console | ConsoleLauncherExecutionResult | class | public
org.junit.platform.console.options | CommandLineOptions | class | public
org.junit.platform.console.options | CommandLineOptionsParser | interface | public abstract interface
org.junit.platform.console.options | Details | enum | public final
org.junit.platform.console.options | JOptSimpleCommandLineOptionsParser | class | public
org.junit.platform.console.options | Theme | enum | public final
org.junit.platform.console.tasks | ConsoleTestExecutor | class | public
org.junit.platform.engine.support.filter | ClasspathScanningSupport | class | public final
org.junit.platform.engine.support.filter | ExclusionReasonConsumingFilter | class | public
org.junit.vintage.engine | VintageTestEngine | class | public final
org.junit.vintage.engine.descriptor | RunnerTestDescriptor | class | public
org.junit.vintage.engine.descriptor | VintageTestDescriptor | class | public
org.junit.vintage.engine.discovery | VintageDiscoverer | class | public
org.junit.vintage.engine.execution | RunnerExecutor | class | public
org.junit.vintage.engine.support | UniqueIdReader | class | public
org.junit.vintage.engine.support | UniqueIdStringifier | class | public
@API(Deprecated)Discovered 0 @API(Deprecated) declarations.
@API(Experimental)Discovered 25 @API(Experimental) declarations.
PACKAGE NAME | CLASS NAME | TYPE | MODIFIERS
---------------------------------------------------- | ------------------------------------------ | ------------ | ---------------------------
org.junit.jupiter.api | DynamicContainer | class | public
org.junit.jupiter.api | DynamicNode | class | public abstract
org.junit.jupiter.api | DynamicTest | class | public
org.junit.jupiter.api | TestFactory | annotation | public abstract interface
org.junit.jupiter.migrationsupport.rules | EnableRuleMigrationSupport | annotation | public abstract interface
org.junit.jupiter.migrationsupport.rules | ExpectedExceptionSupport | class | public
org.junit.jupiter.migrationsupport.rules | ExternalResourceSupport | class | public
org.junit.jupiter.migrationsupport.rules | VerifierSupport | class | public
org.junit.jupiter.params | ParameterizedTest | annotation | public abstract interface
org.junit.jupiter.params.converter | ArgumentConversionException | class | public
org.junit.jupiter.params.converter | ArgumentConverter | interface | public abstract interface
org.junit.jupiter.params.converter | ConvertWith | annotation | public abstract interface
org.junit.jupiter.params.converter | JavaTimeConversionPattern | annotation | public abstract interface
org.junit.jupiter.params.converter | SimpleArgumentConverter | class | public abstract
org.junit.jupiter.params.provider | Arguments | interface | public abstract interface
org.junit.jupiter.params.provider | ArgumentsProvider | interface | public abstract interface
org.junit.jupiter.params.provider | ArgumentsSource | annotation | public abstract interface
org.junit.jupiter.params.provider | ArgumentsSources | annotation | public abstract interface
org.junit.jupiter.params.provider | CsvFileSource | annotation | public abstract interface
org.junit.jupiter.params.provider | CsvSource | annotation | public abstract interface
org.junit.jupiter.params.provider | EnumSource | annotation | public abstract interface
org.junit.jupiter.params.provider | MethodSource | annotation | public abstract interface
org.junit.jupiter.params.provider | ValueSource | annotation | public abstract interface
org.junit.jupiter.params.support | AnnotationConsumer | interface | public abstract interface
org.junit.platform.surefire.provider | JUnitPlatformProvider | class | public
@API(Maintained)Discovered 22 @API(Maintained) declarations.
PACKAGE NAME | CLASS NAME | TYPE | MODIFIERS
---------------------------------------------------- | ------------------------------------------ | ------------ | ---------------------------
org.junit.platform.commons.support | AnnotationSupport | class | public final
org.junit.platform.commons.support | HierarchyTraversalMode | enum | public final
org.junit.platform.commons.support | ReflectionSupport | class | public final
org.junit.platform.console | ConsoleLauncher | class | public
org.junit.platform.engine.support.hierarchical | EngineExecutionContext | interface | public abstract interface
org.junit.platform.engine.support.hierarchical | HierarchicalTestEngine | class | public abstract
org.junit.platform.engine.support.hierarchical | Node | interface | public abstract interface
org.junit.platform.engine.support.hierarchical | SingleTestExecutor | class | public
org.junit.platform.launcher.listeners | LoggingListener | class | public
org.junit.platform.launcher.listeners | SummaryGeneratingListener | class | public
org.junit.platform.launcher.listeners | TestExecutionSummary | interface | public abstract interface
org.junit.platform.suite.api | ExcludeClassNamePatterns | annotation | public abstract interface
org.junit.platform.suite.api | ExcludeEngines | annotation | public abstract interface
org.junit.platform.suite.api | ExcludePackages | annotation | public abstract interface
org.junit.platform.suite.api | ExcludeTags | annotation | public abstract interface
org.junit.platform.suite.api | IncludeClassNamePatterns | annotation | public abstract interface
org.junit.platform.suite.api | IncludeEngines | annotation | public abstract interface
org.junit.platform.suite.api | IncludePackages | annotation | public abstract interface
org.junit.platform.suite.api | IncludeTags | annotation | public abstract interface
org.junit.platform.suite.api | SelectClasses | annotation | public abstract interface
org.junit.platform.suite.api | SelectPackages | annotation | public abstract interface
org.junit.platform.suite.api | UseTechnicalNames | annotation | public abstract interface
@API(Stable)Discovered 94 @API(Stable) declarations.
PACKAGE NAME | CLASS NAME | TYPE | MODIFIERS
---------------------------------------------------- | ------------------------------------------ | ------------ | ---------------------------
org.junit.jupiter.api | AfterAll | annotation | public abstract interface
org.junit.jupiter.api | AfterEach | annotation | public abstract interface
org.junit.jupiter.api | Assertions | class | public final
org.junit.jupiter.api | Assumptions | class | public final
org.junit.jupiter.api | BeforeAll | annotation | public abstract interface
org.junit.jupiter.api | BeforeEach | annotation | public abstract interface
org.junit.jupiter.api | Disabled | annotation | public abstract interface
org.junit.jupiter.api | DisplayName | annotation | public abstract interface
org.junit.jupiter.api | Nested | annotation | public abstract interface
org.junit.jupiter.api | RepeatedTest | annotation | public abstract interface
org.junit.jupiter.api | RepetitionInfo | interface | public abstract interface
org.junit.jupiter.api | Tag | annotation | public abstract interface
org.junit.jupiter.api | Tags | annotation | public abstract interface
org.junit.jupiter.api | Test | annotation | public abstract interface
org.junit.jupiter.api | TestInfo | interface | public abstract interface
org.junit.jupiter.api | TestReporter | interface | public abstract interface
org.junit.jupiter.api | TestTemplate | annotation | public abstract interface
org.junit.jupiter.api.extension | AfterAllCallback | interface | public abstract interface
org.junit.jupiter.api.extension | AfterEachCallback | interface | public abstract interface
org.junit.jupiter.api.extension | AfterTestExecutionCallback | interface | public abstract interface
org.junit.jupiter.api.extension | BeforeAllCallback | interface | public abstract interface
org.junit.jupiter.api.extension | BeforeEachCallback | interface | public abstract interface
org.junit.jupiter.api.extension | BeforeTestExecutionCallback | interface | public abstract interface
org.junit.jupiter.api.extension | ConditionEvaluationResult | class | public
org.junit.jupiter.api.extension | ExecutionCondition | interface | public abstract interface
org.junit.jupiter.api.extension | ExtendWith | annotation | public abstract interface
org.junit.jupiter.api.extension | Extension | interface | public abstract interface
org.junit.jupiter.api.extension | ExtensionConfigurationException | class | public
org.junit.jupiter.api.extension | ExtensionContext | interface | public abstract interface
org.junit.jupiter.api.extension | ExtensionContextException | class | public
org.junit.jupiter.api.extension | Extensions | annotation | public abstract interface
org.junit.jupiter.api.extension | ParameterContext | interface | public abstract interface
org.junit.jupiter.api.extension | ParameterResolutionException | class | public
org.junit.jupiter.api.extension | ParameterResolver | interface | public abstract interface
org.junit.jupiter.api.extension | TestExecutionExceptionHandler | interface | public abstract interface
org.junit.jupiter.api.extension | TestInstancePostProcessor | interface | public abstract interface
org.junit.jupiter.api.extension | TestTemplateInvocationContext | interface | public abstract interface
org.junit.jupiter.api.extension | TestTemplateInvocationContextProvider | interface | public abstract interface
org.junit.jupiter.api.function | Executable | interface | public abstract interface
org.junit.jupiter.api.function | ThrowingConsumer | interface | public abstract interface
org.junit.jupiter.api.function | ThrowingSupplier | interface | public abstract interface
org.junit.jupiter.engine | Constants | class | public final
org.junit.platform.commons.annotation | Testable | annotation | public abstract interface
org.junit.platform.engine | ConfigurationParameters | interface | public abstract interface
org.junit.platform.engine | DiscoveryFilter | interface | public abstract interface
org.junit.platform.engine | DiscoverySelector | interface | public abstract interface
org.junit.platform.engine | EngineDiscoveryRequest | interface | public abstract interface
org.junit.platform.engine | EngineExecutionListener | interface | public abstract interface
org.junit.platform.engine | ExecutionRequest | class | public
org.junit.platform.engine | Filter | interface | public abstract interface
org.junit.platform.engine | FilterResult | class | public
org.junit.platform.engine | TestDescriptor | interface | public abstract interface
org.junit.platform.engine | TestEngine | interface | public abstract interface
org.junit.platform.engine | TestExecutionResult | class | public
org.junit.platform.engine | TestSource | interface | public abstract interface
org.junit.platform.engine | TestTag | class | public final
org.junit.platform.engine | UniqueId | class | public
org.junit.platform.engine | Segment | class | public static
org.junit.platform.engine.discovery | ClassNameFilter | interface | public abstract interface
org.junit.platform.engine.discovery | ClassSelector | class | public
org.junit.platform.engine.discovery | ClasspathResourceSelector | class | public
org.junit.platform.engine.discovery | ClasspathRootSelector | class | public
org.junit.platform.engine.discovery | DirectorySelector | class | public
org.junit.platform.engine.discovery | DiscoverySelectors | class | public final
org.junit.platform.engine.discovery | FileSelector | class | public
org.junit.platform.engine.discovery | MethodSelector | class | public
org.junit.platform.engine.discovery | PackageNameFilter | interface | public abstract interface
org.junit.platform.engine.discovery | PackageSelector | class | public
org.junit.platform.engine.discovery | UniqueIdSelector | class | public
org.junit.platform.engine.discovery | UriSelector | class | public
org.junit.platform.engine.reporting | ReportEntry | class | public final
org.junit.platform.engine.support.descriptor | AbstractTestDescriptor | class | public abstract
org.junit.platform.engine.support.descriptor | ClassSource | class | public
org.junit.platform.engine.support.descriptor | ClasspathResourceSource | class | public
org.junit.platform.engine.support.descriptor | CompositeTestSource | class | public
org.junit.platform.engine.support.descriptor | DirectorySource | class | public
org.junit.platform.engine.support.descriptor | EngineDescriptor | class | public
org.junit.platform.engine.support.descriptor | FilePosition | class | public
org.junit.platform.engine.support.descriptor | FileSource | class | public
org.junit.platform.engine.support.descriptor | FileSystemSource | interface | public abstract interface
org.junit.platform.engine.support.descriptor | MethodSource | class | public
org.junit.platform.engine.support.descriptor | PackageSource | class | public
org.junit.platform.engine.support.descriptor | UriSource | interface | public abstract interface
org.junit.platform.launcher | EngineFilter | class | public
org.junit.platform.launcher | Launcher | interface | public abstract interface
org.junit.platform.launcher | LauncherDiscoveryRequest | interface | public abstract interface
org.junit.platform.launcher | PostDiscoveryFilter | interface | public abstract interface
org.junit.platform.launcher | TagFilter | class | public final
org.junit.platform.launcher | TestExecutionListener | interface | public abstract interface
org.junit.platform.launcher | TestIdentifier | class | public final
org.junit.platform.launcher | TestPlan | class | public final
org.junit.platform.launcher.core | LauncherDiscoveryRequestBuilder | class | public final
org.junit.platform.launcher.core | LauncherFactory | class | public
org.junit.platform.runner | JUnitPlatform | class | public
documentation is _in progress_
Documentation of _experimental APIs_ has been addressed in b74363f384b18ad5fe00495c7760d05688094f12.
Leaving this issue open until @API has been applied to Groovy source code in the JUnit Platform Gradle plugin.
/opinion Doesn't this seem like the perfect thing to be scraped from the source code and then have the table generated with a simple internal gradle plugin? The output could be a .adoc that would be added to the generated documentation automatically? Just a thought.
Ummmmm.... we do _scrape it from the source code_ and generate the table.
See the ApiReportGenerator.
It generates Markdown currently, so I did in fact have to slightly modify it to convert it to AsciiDoc. ๐
As for creating a Gradle plugin to automate that, that's certainly an interesting idea and could be an action item for #144. ๐
Leaving this issue open until @API has been applied to Groovy source code in the JUnit Platform Gradle plugin.
Hm, in the light of https://github.com/gradle/gradle/issues/1037 we could either _not_ add annotations or apply @API(Experimental). What's more appropriate?
Another question is what are the implications of the annotations. You document how the annotations are used. Is there a plan to follow semver? Is the idea that there will only ever be a Junit 6 if there is a total rewrite like this one? I ask this in a general way in #1011.
Really the API annotations seem counter to semver.
Hm, in the light of https://github.com/gradle/gradle/issues/1037 we could either _not_ add annotations or apply
@API(Experimental). What's more appropriate?
I personally think they should be marked _experimental_ just like the Maven Surefire provider that we currently _ship_ but don't plan to actually _support_ for the long haul.
@JLLeitschuh, we have _attempted_ to address versioning concerns in the following chapter of the User Guide: http://junit.org/junit5/docs/snapshot/user-guide/#api-evolution
Does that answer your questions sufficiently?
If not, we should probably open a separate issue to improve the documentation.
I just feel like if there is no plan to follow semantic versioning that should be stated explicitly somewhere.
Now we have 32 @API(Experimental) occurrences:
@API(Experimental)Discovered 32 @API(Experimental) declarations.
Package Name | Class Name | Type | Modifiers
---------------------------------------------------- | ------------------------------------------ | ------------ | ---------------------------
org.junit.jupiter.api | DynamicContainer | class | public
org.junit.jupiter.api | DynamicNode | class | public abstract
org.junit.jupiter.api | DynamicTest | class | public
org.junit.jupiter.api | TestFactory | annotation | public abstract interface
org.junit.jupiter.migrationsupport.rules | EnableRuleMigrationSupport | annotation | public abstract interface
org.junit.jupiter.migrationsupport.rules | ExpectedExceptionSupport | class | public
org.junit.jupiter.migrationsupport.rules | ExternalResourceSupport | class | public
org.junit.jupiter.migrationsupport.rules | VerifierSupport | class | public
org.junit.jupiter.params | ParameterizedTest | annotation | public abstract interface
org.junit.jupiter.params.converter | ArgumentConversionException | class | public
org.junit.jupiter.params.converter | ArgumentConverter | interface | public abstract interface
org.junit.jupiter.params.converter | ConvertWith | annotation | public abstract interface
org.junit.jupiter.params.converter | JavaTimeConversionPattern | annotation | public abstract interface
org.junit.jupiter.params.converter | SimpleArgumentConverter | class | public abstract
org.junit.jupiter.params.provider | Arguments | interface | public abstract interface
org.junit.jupiter.params.provider | ArgumentsProvider | interface | public abstract interface
org.junit.jupiter.params.provider | ArgumentsSource | annotation | public abstract interface
org.junit.jupiter.params.provider | ArgumentsSources | annotation | public abstract interface
org.junit.jupiter.params.provider | CsvFileSource | annotation | public abstract interface
org.junit.jupiter.params.provider | CsvSource | annotation | public abstract interface
org.junit.jupiter.params.provider | EnumSource | annotation | public abstract interface
org.junit.jupiter.params.provider | MethodSource | annotation | public abstract interface
org.junit.jupiter.params.provider | ValueSource | annotation | public abstract interface
org.junit.jupiter.params.support | AnnotationConsumer | interface | public abstract interface
org.junit.platform.gradle.plugin | EnginesExtension | class | public
org.junit.platform.gradle.plugin | FiltersExtension | class | public
org.junit.platform.gradle.plugin | JUnitPlatformExtension | class | public
org.junit.platform.gradle.plugin | JUnitPlatformPlugin | class | public
org.junit.platform.gradle.plugin | PackagesExtension | class | public
org.junit.platform.gradle.plugin | SelectorsExtension | class | public
org.junit.platform.gradle.plugin | TagsExtension | class | public
org.junit.platform.surefire.provider | JUnitPlatformProvider | class | public
I just feel like if there is no plan to follow semantic versioning that should be stated explicitly somewhere.
Basically, if a public API is annotated with @API(Stable) then we do in fact follow semantic versioning, but otherwise we only _kinda_ follow purist semantic versioning principles.
The goal here is to follow semantic versioning as much as possible while simultaneously allowing the team to introduce _experimental_ APIs that don't necessarily follow semantic versioning.
Of course, with that caveat, one can certainly argue that we do not actually follow semantic versioning. From the perspective of a purist, it's "all or nothing".
So, in summary, we kinda ride the fence on true semantic versioning.
@JLLeitschuh, do my comments above help to better explain the versioning story?
Would inclusion of statements similar to those in the User Guide address your concerns?
Now we have 32
@API(Experimental)occurrences
That addresses the last of the _Deliverables_. ๐
The goal here is to follow semantic versioning as much as possible while simultaneously allowing the team to introduce experimental APIs that don't necessarily follow semantic versioning.
Is this simply because of an aversion to incrementing the major version number?
Is the general idea that the major version number should only be incremented in the event of a major API rewrite?
Is this simply because of an aversion to incrementing the major version number?
I don't think so, but to be honest... I am not the mastermind behind the introduction of @API.
In any case, my understanding is that the primary goal is to be able introduce experimental features that people can try out without having to introduce additional artifacts for those features.
JUnit 4 had "experimental" packages but never enforced them, so this notion of experimental features is born from that, and @API is an attempt to address the problems experienced with JUnit 4.
In any case, my understanding is that the primary goal is to be able introduce experimental features that people can try out without having to introduce additional artifacts for those features.
This totally makes sense to me!
Google Guava does something similar with their @Beta annotation.
They have an Important Warnings section in their README.
IMPORTANT WARNINGS
APIs marked with the
@Betaannotation at the class or method level
are subject to change. They can be modified in any way, or even
removed, at any time. If your code is a library itself (i.e. it is
used on the CLASSPATH of users outside your own control), you should
not use beta APIs, unless you repackage them (e.g. using ProGuard).Deprecated non-beta APIs will be removed two years after the
release in which they are first deprecated. You must fix your
references before this time. If you don't, any manner of breakage
could result (you are not guaranteed a compilation error).Serialized forms of ALL objects are subject to change unless noted
otherwise. Do not persist these and assume they can be read by a
future version of the library.
You'll also notice that the Guava team revs the major version number quite often.
I'm not sure if they introduce changes in @Beta API's between minor version releases though.
If being the "Junit 5" project is part of the team's/culture identity then I don't think you, I, or anyone else should mess with that. But that means that there will be an aversion to reving the major version number and that sounds like something that should be documented somewhere.
If being the "Junit 5" project is part of the team's/culture identity then I don't think you, I, or anyone else should mess with that. But that means that there will be an aversion to reving the major version number and that sounds like something that should be documented somewhere.
We, the JUnit 5 Team, do not have an aversion to revving the major version number.
On the contrary, it is foreseen that it will eventually be necessary (e.g., to rely on Java 9 features at some point in the future). This can be seen from the fact that we had a long, arduous debate about renaming "JUnit 5" to the JUnit Platform, JUnit Jupiter, and JUnit Vintage.
In other words, there is no "JUnit 5" per se. Rather, it's just an umbrella project for all things "JUnit" that immediately follow JUnit 4. ๐
And just in case you're not aware of the discussions I'm alluding to, they took place in issue #286.
Cool. That makes a lot of sense. I'd never seen that issue before. Thank's for finding and linking that issue.
Also, I see that that API table does mention that certain things can change between minor and patch changes. I guess I'm satisfied with the amount of specificity and thought that has gone into this.
Will there be a rename of the project to Junit Lambda or something similar to reflect this non-commitment to the major version number?
Well, at some point we might start referring to it as "the new JUnit" and will drop the "5" from the logo etc. ๐
I agree with @marcphilipp: I think we'll just start calling it _JUnit_ again at some point. ๐
We definitely won't be calling it JUnit 5 if JUnit Jupiter 6.0 is released.
Of course, we'll have to rename the repository, but that shouldn't be that big a deal.
The bigger challenge will be the published API and User Guide since they currently reside under a junit5 path on the server.