All important changes of this project must be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- Deprecated targets
- Gradle 7.5.1 -> 8.6.0
- Android Gradle Plugin 7.3.1 -> 8.2.2
- Kotlin 1.8.0 -> 1.9.22
- KSP 1.8.0-1.0.8 -> 1.9.22-1.0.17
- AtomicFu 0.19.0 -> 0.23.2
- Stately 1.2.3 -> 2.0.6
- Android Target SDK 32 -> 34
- CompilerTest 1.4.9 -> 0.4.0 (ZacSweers)
- min Java 11 -> 17
- Kotlin 1.7.22 -> 1.8.0
- AtomicFU 0.18.5 -> 0.19.0
- KSP 1.7.22-1.0.8 -> 1.8.0-1.0.8
- Kotlin 1.7.21 -> 1.7.22
- KSP 1.7.21-1.0.6 -> 1.7.22-1.0.8
- Kotlin 1.7.20 -> 1.7.21
- KSP 1.7.20-1.0.6 -> 1.7.21-1.0.8
- support for Kotlin Apple Targets and mingwX64
- Kotlin 1.7.10 -> 1.7.20
- AtomicFu 0.18.3 -> 0.18.5
- KSP 1.7.10-1.0.6 -> 1.7.20-1.0.6
- Android Gradle Plugin 7.3.0 -> 7.3.1
- Gradle 7.5 -> 7.5.1
- Kotlin 1.7.0 -> 1.7.10
- AtomicFu 0.18.2 -> 0.18.3
- Android Target SDK 32 -> 33
- KSP 1.7.0-1.0.6 -> 1.7.10-1.0.6
- Android Gradle Plugin 7.2.1 -> 7.3.0
- pseudo build-in methods are now resolved independently
- Aliases as type arguments are not correctly resolved, if the Aliases have type arguments on their own
- Generics cause AccessMethods to collide in their definition
- Stackoverflow when determine TypeVariance
- Unrelated MetaSources caused NPE
- Gradle 7.4.2 -> 7.5
- Kotlin 1.6.21 -> 1.7.0
- KotlinPoet 1.11.0 -> 1.12.0
- AtomicFu 0.17.3 -> 0.18.2
- Stately 1.2.1 -> 1.2.3
- Android Target SDK 31 -> 32
- CompilerTest 1.4.8 -> 1.4.9
- sources for
releaseanddebugfor non KMP are now added via the Android extension while custom build-variant need manual setup
- Build Cache enabled, Mocks are not created
- Relaxer not picked correctly up on multiple test runs
- Multi Interface Cleanup causes compilation to fail
- Android Target SDK 31 -> 32
preventResolvingOfAliasesas workaround for AccessMethods with expect/actual Aliases which cause incremental builds to fail
- Kotlin 1.6.10 -> 1.6.21
- AtomicFu 0.17.1 -> 0.17.3
- KSP 1.6.10-1.0.4 -> 1.6.21-1.0.6
run/runsdoes not trigger SideEffect invocation
- Plugin triggered the usage of the legacy JS compiler for KotlinJs
andArgumentConstraintgetValuewhich preserves the old behaviour of get (PropertyProxy)getValuesto replace getMany (PropertyProxy)errorto replace throws (FunProxy)errorsto replace throwsMany (FunProxy)returnswhich acts as setter forgetValue/returnValuefor ProxiesreturnsManywhich acts as setter forgetValues/returnValuesfor Proxiesthrows(infix method) which acts as setter forerrorfor FunProxiesthrowsMany(infix method) which acts as setter forerrorsfor FunProxiesrunOnGetwhich acts as setter forgetSideEffectfor PropertyProxiesrunOnSetwhich acts as setter forsetSideEffectfor PropertyProxieshasNoFurtherInvocationsto easeassertProxy
- The plugin can now applied directly while configuration must be done after the
kotlinsetup - AccessMethods need always a hint if the Template has type parameters
- ProxyNameResolver is capable of utilizing the actual types of generic parameters when overloaded
run/runsare now infix methods- Proxies have now an operator for get which means they can be accessed like Arrays
- BREAKING
getis now responsible for the SideEffect of PropertyProxies
getMany(PropertyProxy)throws(FunProxy)throwsMany(FunProxy)
- BREAKING
getSideEffect(PropertyProxy)
varargeats specialised Array Types (e.g. IntArray) and covariant types when inherited- Factories for Multi-Interface-Mocks
- Multi-Boundary Parameter are not right resolved when mixed multi with regular parameter in nested types
- Collisions of type aliases with regular method signatures
orArgumentConstraintnotArgumentConstraintspiesOnlyin the Gradle extension, in order to tell the processor to only createkspy. AlsospyOnis not needed in this configurationspyAllin the Gradle extension, in order to tell the processor to create for al given interfaces also a spy entryPointvarargis now supported by MocksfreezeOnDefaultin the Gradle extension, which sets a default freeze value forkspyandkmockuseTypePrefixForfor overloaded names in order to ease them and avoid collisionscustomMethodNamesin order to allow complete custom names for methodsallowInterfaces, which combinesallowInterfacesOnKmockandallowInterfacesOnKspydisableFactoriesin order to disable the generation ofkmockandkspyif neededcustomAnnotationsForMetato provide a hook for the usage of customized annotation for meta/shared sourcesassertOrderin order to make the names more consistent and preserves the old behaviour ofverifyStrictOrderassertProxyas alternative toverify- iosSimulatorArm64 support
- Support for instrumented Android tests (aka androidAndroidTest) on KMP
- Multi-Interface Mocks support
- Interface receiver members are full supported
runfor FunProxies to mitigate the strict assignment policy in terms of a single SideEffectrunsfor FunProxies to mitigate the strict assignment policy in terms of SideEffectsthrowsManyfor FunProxies to align the the FunProxy APIenableFineGrainedNamesin order to allow fine grained typing (experimental/not this will feature helps you only in a non JVM context)KMockexperimental annotation, which is agnostic in terms of source setsKMockMultiexperimental annotation, which is agnostic in terms of source sets
- Generated mocks don't contain runtime logic any longer
- Mutable properties of Proxies now separate froze/unfrozen state is cleaner to improve Runtime
kmockandkspyare using now a shared function to improve compile time- Non intrusive behaviour (spy & relaxation) is now resolved by proxy invocation rather then by proxy initialisation in order to cover edge cases
- Assertion-/VerificationChain is not coupled any longer directly to proxies and provide improved error messages
- Expectation Methods do not bleed into the global context any longer
verifyStrictOrderis now used for total order of certain Proxies but allows partial order between different Proxies- Android MinSDK 23 -> 21
spyOnis now capable of picking up KMock defined Aliaseskspyin terms of generics not longer exposed if not declared viaspyOnorspiesOnly- Relaxation method gets now the return type boundaries delegated, if generic in order to resolve type conflicts
- Generic methods names get prefixed by the generic type name, if it is overloaded to avoid name collisions
- Generic methods names get prefixed by an indicator, if it is overloaded and nullable to avoid name collisions
- Meta/Shared Source Annotation are now supporting platform references (e.g. instead of metaTest you can write meta)
- Custom Source Annotation are now supporting platform references (e.g. instead of sharedTest you can write shared)
- Proxy-Access-Methods and their corresponding verification/assertion counter parts
veriferargument is now calledcollectorinkmockandkspy
allowedRecursiveTypes, since it is no longer needed due to the new spy invocationallowInterfacesOnKmock, use allowInterfaces insteadallowInterfacesOnKspy, use allowInterfaces instead- Old experimental ProxyAssertion family, use
assertProxyorverifyinstead uselessPrefixesin the Gradle Extension
- FunProxy names with nullable or multi-bounded types defined as generic parameter
- Annotation was not picked up when more then one Annotation was used
- Factories for Common were not created when no Template was specified
- Parallel declared shared source were eaten up by each other
- Nested Generic Types were not resolved for Proxies
- Multi-Bounded Generics caused invalid Proxy name if overloaded and a leading boundary was nullable
- KotlinPoet 1.10.2 -> 1.11.0
- Gradle 7.4.1 -> 7.4.2
- Android Gradle Plugin 7.1.2 -> 7.2.1
- Warnings for unused expression and unused parameter in MockFactory
- Gradle 7.2 -> 7.4.1
Initial release.