Mutable enumset, dependency upgrades
### EnumSet - Added `equals` and `hashCode` to `EnumSet32` (#164, !228) - Added the experimental `MutableEnumSet32` (#164, !228) - Added fast paths for comparisons (#164, !228) ### Deployment - Intel-based Apple targets have been removed (!236) ### Dependencies - Kotlin 2.4.10 - Arrow 2.2.3 - KotlinX.Coroutines 1.11.0 - KotlinJS 2026.7.7
Remove the KotlinX.Coroutines debug agent, Kotest and TestBalloon IntelliJ plugin support
### Suite - Stop registering the KotlinX.Coroutines debug agent automatically, see the MR for more details (!247) - Mention foreground and background scopes in the documentation of prepared values (3025d11e) ### Kotest runner Complete rewrite of the Kotest integration following [the new guidelines](https://kotest.io/docs/framework/custom-styles.html). Prepared is now compatible and recognized by the [Kotest IntelliJ plugin](https://kotest.io/docs/intellij/intellij-plugin.html). ### TestBalloon runner Improvements to the interaction between Prepared and the [TestBalloon IntelliJ plugin](https://plugins.jetbrains.com/plugin/27749-testballoon). ### Dependencies - Kotlin 2.4.10 - TestBalloon 1.0.1 - Kotest 6.2.2 - Ktor 3.5.1
Improved failure assertions output, removed false negative warning, dependency upgrades
### Suite - Failed exception assertions are now displayed on two lines (a2c31ce9, !226) - Do not warn when a prepared value is called but unused (!233) ### Kotest runner - Kotest 6.1.11 support (#96, !228) ### TestBalloon runner - TestBalloon 0.8.4 support (!231) ### Arrow compatibility - Failed Raise assertions are now displayed on two lines (ea498f5a, !226) ### Deployment - Apple Intel-based targets are no longer published, because they are deprecated (7ddf7e10)
Dependency upgrades & documentation improvements
### Documentation - Links now point to the new Reference tab (!225) - Fixed formatting in the Arrow Resource page (!223) - Removed to the code samples with KotlinX.Datetime (since everything has been migrated to the Kotlin stdlib, #94, !225) ### Dependencies - Kotest 6.1.7 - Gradle 9.4.1
Arrow Resource compatibility
### Arrow compatibility - Added utilities for Arrow Resources: `preparedResource {}`, `Resource.asPrepared()`, etc (#91, !220) ### Documentation - Improved the title of most pages (!221)
Stable time control, Kotlin 2.3.10 support
### Suite - Removed the `@ExperimentalTime` annotation (a32c56a7) - Added color highlighting in IntelliJ for the 'matches' RegEx assertion (8a661b7d) - Clarified the documentation on `Ignored.If` and its relationship with TestBalloon (!212) ### Dependencies - Kotlin 2.3.10 - Kotest 6.1.4 - TestBalloon 0.8.3 - Gradle 9.3.1 - Arrow 2.2.1.1 - Parameterize 0.4.1
Conditionally ignore tests and better stack traces for fixtures
### Suite - Exceptions in fixtures are wrapped by an `AssertionError` to facilitate understanding the failure path (!205) - Added `Ignored.If` and `OnlyIf` to conditionally ignore tests (!206) ### Gradle compatibility - Fixed a bug in `gradle.properties()` (!209) ### KotlinX.Datetime compatibility The `:compat-kotlinx-datetime` module has been deleted. All its functionality has already been moved to `:suite` using the `kotlin.time` package multiple releases ago. The module is still available on MavenCentral but will not be updated in the future.
Kotlin 2.3.0, Gradle properties and longer default timeout
### Suite - Increased the default test timeout from 10s to 60s (!192) ### Gradle compatibility - Added a helper to write `gradle.properties` in tests (!197) ### TestBalloon runner Added support for TestBalloon 0.8.2. Note that TestBalloon 0.8.0 had a breaking change, so this version of Prepared is not compatible with older TestBalloon versions. Your codebase should not be affected. ### Kotest runner Added support for Kotest 6.1.3. Note that Kotest 6.0.2 had a breaking change that was later rolled back, so this version of Prepared is not compatible with Kotest 6.0.2. Your codebase should not be affected. ### Dependencies - Kotlin 2.3.0
32-bit enum sets and weak map improvements
### EnumSet - Added `BitSet32.of()` which accepts an iterable (!205) - Added `.toSet()` and `.toMutableSet()` (!205) - Added `enumSetOf()` and `.toEnumSet()` (#170, !206) - Optimized `enumSetOf(Foo.entries)` (!206) - Optimized 32-bit `EnumSet` (#170, !206) ### Weak - Added `WeakRef.isEmpty()` and `WeakRef.isNotEmpty()` (!207) - Added `WeakValueHashMap` (#178, !225) - Added `toString()`, `equals()` and `hashCode()` on `FakeWeakRef` (!225) - Documented the thread safety of `WeakRef` and `WeakMap` (#180, !225) - Added a wrapper for the JVM `WeakHashMap` (#179, !226) - Added a wrapper for the JS `WeakMap` (#179, !226) ### Dependencies - Kotlin 2.2.21
Derived prepared values, more platforms for Ktor
### Suite - Added `prepared {}.flatMap {}` (!186) ### Compat: Gradle - Added `.dir` and `.buildDir` extensions on prepared values to facilitate accessing fields of a Gradle project (!186) ### Compat: Ktor - Support all Kotlin Native tier 1 and 2 targets (!188) - Support WasmJS (!188)
Improved test logging, Kotest 6 and TestBalloon 0.7.1
### Suite - Prepared and shared values now log how long they took to initialize (!177) - Finalizers run even when the test is cancelled (e.g. because of a timeout, !177) - Added the 'log' function to display information about an intermediate value (16df295b, !180) ### Kotest runner - Kotest 6.0.4 support. Note that the Kotest configuration has changed, it now requires configuring KSP (ac719a00) - Added support for WASI - Removed workaround for Kotest#4077 (#59, !185) ### TestBallooon runner - TestBalloon 0.7.1 support - Force the dependency on the Kotlin-test library. This may help when TestBalloon doesn't release new versions for new versions of Kotlin (6fbce77c) ### Dependencies - Kotlin 2.2.20
DebugProbes, TestBalloon IntelliJ plugin and JDK 11+ for all runners
### Suite - On the JVM, coroutine DebugProbes are enabled automatically to log ongoing coroutines at the end of a test (#45, #87, !172) - Added the `@TestEntrypoint` annotation (72ea802d) ### TestBalloon runner - The default timeout is now 10s instead of 1m, like the other runners (e17b8ad2) - Now compatible with JDK 11+ (previously 17+, 614e9963) ### Documentation - Added more features to the highlight section of the home page (e4bb5f82) - Simplified the Atrium description (bbe1c05d) - Added an [explanation](https://prepared.opensavvy.dev/api-docs/runners/runner-testballoon/index.html) to configure the IntelliJ TestBalloon plugin (5c8b653b)
Fixed documentation website deployment
### Documentation - Fixed deployment to the new documentation website (!202)
WasmJS weak references and the new documentation website
### Weak - Added support for `wasmJs()` (#155, !200) ### Documentation - Moved the documentation website to https://pedestal.opensavvy.dev (!199) ### Dependencies - Kotlin 2.2.0 - KotlinJS 2025.7.6
New documentation website
### Documentation - Moved the website to https://prepared.opensavvy.dev (!164, !167) - Removed the mention to the Best Practices page, which doesn't exist yet (#85, !166)
checkThrows and stable resource management
### Suite - Warn users that exceptions are printed after finalizers (#81, !150) - Added `String.matches(String)` for easier regex matching (a9cb1224, !160) - Added `checkThrows` (5e1653e1, !160) ### Compat: Parameterize - Support Wasm (!145) - Support Parameterize 0.4.0 (Beware: possible binary incompatibilities, !152) ### Compat: Arrow - Support WasmJS (!159) - Renamed `assertRaises` and `assertRaisesWith` to `checkRaises` (d06de70f, !160) ### Compat: KotlinX.Datetime - Deprecated the module (!148) ### Compat: Filesystem - Stabilized the resource management APIs (#66, !157) ### Documentation - Added copyright headers (!146) ### Dependencies - Kotlin 2.2.0 - Kotest 6.0.0.M4 - TestBalloon 0.4.0
Migration to TestBalloon, WASI support
### Suite - Added support for Wasm WASI when running with TestBalloon (!143) ### Runner: TestBalloon - Support all OpenSavvy-supported platforms (!143) - All modules are now tested with this runner instead of the Kotest runner (!143) ### Compat: Arrow - Removed the `@ExperimentalTraceApi` on `assertRaisesWith` methods (!142) ### Dependencies - Kotlin 2.1.21 - KotlinX.Coroutines 1.10.2 - KotlinX.Datetime 0.6.2 - Arrow 2.1.2 - Gradle TestKit 8.11.1 - Ktor 3.1.3 - TestBalloon 0.3.3
Support for more platforms
### Breaking changes - Removed Spine (was deprecated, moved to other coordinates, !163) - Stripped down Logger (was deprecated, !179) - Removed State Arrow (all functionality has been moved into State, !163) - Removed deprecated methods (!163) ### Weak Weak is a new module containing weak references and related algorithms. ### EnumSet EnumSet is a new experimental module with memory-efficient bitfields and enum sets.
Documentation improvements around test runners
### Documentation - Added TestBalloon to the list of available runners (807fd198, !138) - Added a usage example of each test runner in the documentation (0a34377b, !138)
Experimental support for kotlin.time
### Suite - Added '`time.now`' to get the current `kotlin.time.Instant` (#78, !135) - Added '`time.clock`' to get the current `kotlin.time.Clock` (#78, !135) - Added '`time.set`' and '`time.delayUntil`' to easily control the passage of time (#78, !135)
Experimental TestBalloon support
### TestBalloon Runner TestBalloon is a new test framework for Kotlin that empowers much more lightweight DSLs and promises easier updates. In this release, we add experimental support (!134) for the very first TestBalloon release. Once the TestBalloon IntelliJ plugin is released, TestBalloon will likely become the primary target for Prepared.
Stable weak references, stripped down logger
### Progress - Support for more Kotlin platforms (469dcb51, !179) ### State - Support for more Kotlin platforms (20046cb0, !179) ### Cache - Support for more Kotlin platforms (5b0ee6ff, !179) ### Backbone - Support for more Kotlin platforms (0fde1531, !179) ### Weak - Stabilized `WeakRef()` and `SoftRef()` (1820e495, !185) - Removed `EmptyWeakRef()` (7fc0774c, !185) ### Logger The `logger` library has been stripped down to a minimal println-based implementation (08ac9d92, !179). It was deprecated for a while and was blocking us from supporting more platforms. In the future, [Sentier](https://gitlab.com/opensavvy/groundwork/sentier) will take its place. ### Dependencies - KotlinJS 2025.5.8 - KotlinX.Datetime 0.6.2 - KotlinX.Coroutines 1.10.2 - Lincheck 2.39 - Arrow 2.1.2 - Slf4J 2.0.17
Mention the Atrium library in the documentation
### Documentation - Mention the Atrium assertion library in the assertion comparison (!127, by Robert Stoll) ### Dependencies - Kotlin 2.1.20
Arrow 2, Ktor 3, Java 11, random and context cleanup
## Breaking changes ### The CoroutineContext becomes part of the test configuration Replace: ```kotlin test("Foo", yourCoroutineContext) { // your test } ``` by: ```kotlin test("Foo", Context(yourCoroutineContext)) { // your test } ``` ### Random generation All random generation methods have been moved from package `opensavvy.prepared.suite` to `opensavvy.prepared.suite.random`. Users will need to update all imports to these functions, but they are otherwise unchanged (#48, !113). ## Other changes ### Runners - First prototype of the Kotlin Test Initiative runner (!114) ### Compatibility modules - Supports Ktor 3 (!109) ### Documentation - Fixed documentation of the Truthish library (!111) - The documentation website now contains the API reference (!119) - The documentation website now contains the News section ### Dependencies - Downgraded minimal JDK requirement from 21 to 11 (!123, thanks Dave A.!) - Kotlin 2.1.10 - KotlinX.Coroutines 1.10.1 - Ktor 3.0.3 - Arrow 2.0.0
First release candidate for Prepared 2.0
### Deployment - Support Java 11 in all modules (previously Java 21—thanks Dave A.!) (!123) ### Documentation - Added the project changelog to the documentation website (73ad1089) ### Dependencies - Kotlin 2.1.10 (143f6dd3) - KotlinX.Coroutines 1.10.1 (79f5e763, !122) - Ktor 3.0.3 (c1f2cd02, !122) - Arrow 2.0.0 (c1b3ebb6, !122)
BitSet32, documentation improvement and more Kotlin Native platforms
### EnumSet `:enumset` is a new module which will implement performant Set implementations for small integer sets and for enums. It is not yet complete as of this release. - Implement `BitSet32` (#168, !174) - Implement `MutableBitSet32` (#169, !176) ### Weak - Support more Kotlin Native platforms (#163, ad11a243, !177) ### Documentation - Mention the Weak module in the main README (!170) - Fix links in the main README (#160, !170) - Add copyright headers in all files (!173) ### Dependencies - Kotlin 2.1.10 (143f6dd3) - KotlinX.Coroutines 1.10.1 (9e53816c) - KotlinJS Wrappers 2025.1.4 (5e855377) - Prepared 2.0.0-alpha.2 (ae0a1c8d) - Slf4J 2.0.16 (81c6f352)
Test context configuration, documentation improvements
### Breaking changes Replace: ```kotlin test("Foo", yourCoroutineContext) { // your test } ``` by ```kotlin test("Foo", Context(yourCoroutineContext)) { // your test } ``` ### Suite - Removed the 'context' parameter to 'test' and added the Context configuration (#75, !115) ### Documentation - Removed the empty 'Best practices' section (!118) - The documentation website now contains the reference (!119) ### Dependencies - Kotlin 2.1.0
Ktor 3, random in its own package
### Breaking - All random management methods have been moved to another package. Other than that, they are unchanged (#48, !113) - Ktor 3 support ### Kotlin Test Initiative - First prototype of the KTI runner (!114) ### Documentation - Fixed documentation of the Truthish library (!111) ### Dependencies - Ktor 3.0.1 (!109) - KotlinX.Coroutines 1.9.0 (!109)
Removal of deprecated code and testing improvements
### Breaking changes - Removed the deprecated Spine modules (#158, 17c3ec57, !163) - Removed the unused tester module (!163) - Removed the unused state-arrow module (!163) - Removed deprecated cache and state methods (!163) ### Testing - Better cache tests using Lincheck (#80, !133) - Rewrite all tests to use Prepared instead of kotlin-test (#136, #137, !120, !139, !163) ### Documentation - Link to versioned documentation in module headers (!160) ### Dependencies - Kotlin 2.0.20 - KotlinX.Datetime 0.6.1 - KotlinX.Coroutines 1.9.0
Dependency upgrades
### Dependencies - Kotlin 2.0.20 - KotlinX.Datetime 0.6.1 - Parameterize 0.3.3 - Gradle TestKit 8.10.1
Minor documentation improvements
### Documentation website - Fix typos (!103) - Add missing links (!103)
Support for Native tier 1 and 2 platforms, enhanced documentation
All tier 1 and 2 Kotlin/Native platforms are now supported for most modules, as well as mingwX64 (tier 3) - (!101). ### Compat Arrow - Added a documentation page to the website (7bdf92e5, #47, !102) - Simplify the tracing error message on KJS (a398b5fe, !102) ### Compat filesystem - Added a documentation page to the website (b6f2beb9, #70, !102) ### Compat Ktor - Added a documentation page to the website (7e65ba09, #47, !102) - Fixed incoherent sentences in module header (e2dc95d7, !102) ### Compat Gradle - Added a documentation page to the website (8cd8283d, #47, !102)
Support for Native tier 1 and 2 platforms, enhanced documentation
All tier 1 and 2 Kotlin/Native platforms are now supported for most modules, as well as mingwX64 (tier 3) - (!101). ### Compat Arrow - Added a documentation page to the website (7bdf92e5, #47, !102) - Simplify the tracing error message on KJS (a398b5fe, !102) ### Compat filesystem - Added a documentation page to the website (b6f2beb9, #70, !102) ### Compat Ktor - Added a documentation page to the website (7e65ba09, #47, !102) - Fixed incoherent sentences in module header (e2dc95d7, !102) ### Compat Gradle - Added a documentation page to the website (8cd8283d, #47, !102)
Parameterized tests documentation
### Parameterize compat - Parameterize 0.3.2 (!99) - Add a website page on parameterized testing (!99) ### Documentation - Reorganize the features page (857cde84, !99)
Customize the way prepared and shared values are logged
### Suite - Allow providing a custom display to prepared and shared values (#67, !96) ### Documentation - Clarify that time control also works for dates (#71, !95)
Experimental resource loading helpers, temporary files documentation
### Suite - Simplify the documentation on why SharedProvider is not recommended (!87) ### Filesystems utilities - Experimental resource loading helpers (#66, #68, !64) - Added a website page on temporary files (#47, !98) ### Documentation - Fix broken sentence in the Shared Values page (#65, !97) - Fix broken link in the getting started page (4c62b66d, !98) - Fix broken link in the features overview page (5f5fccf7, !98) - Rewrote the features overview page (ddf30247, !98)
Documentation improvements related to time management, future-proofing of delay-skipping
### Suite - Notify that advanceTimeBy, runCurrent and advanceTimeUntilIdle may be removed in the future (#51, 7d123ad6, !91) - Improve the documentation of time.nowMillis (3844abc0, !91) - Improve the documentation of time.scheduler (684fdc1c, !91) ### Java.time compatibility - time.set now has the same behavior as time.delayUntil (#51, f12a05c7, !91) ### KotlinX.Datetime compatibility - time.set now has the same behavior as time.delayUntil (#51, e5c399d3, !91) ### Documentation - Add a documentation page on time control (49df6931, !91) - Add a documentation page on the Suite DSL (60511f68, !91) - GDPR-related improvements for the documentation website (#29, !32) - Clarifications related to Truthish (!90) - Rename the Features Overview page (b5aad64c, !91) - Readability improvements for async operations (13740aa3, !91)
Kotest fixes and assertion library documentation improvements
### Kotest runner - Support Focus and Bang (#62, !88) - Stop crashing on KJS (#59, !89) - Document which Kotest features are configured by Prepared (d87da612, !88) ### Documentation - Remove the warning about Strikt being inactive (#68, f5bf7532, !86) - Mention the Truthish assertion library (#61, 8df3e8f2, !86) - Mention Power Asser (41961dff, !86) - Link the documentation website in the main README (!87) ### Dependency upgrades - Kotest 5.9.1
WASM/JS support
### Suite - Added WASM/JS support (!79) ### Kotest runner - Added WASM/JS support (!79) - Document the requirement to use the Kotest plugin (#49, !80) ### Kotlinx-datetime - Added WASM/JS support (!79)
Randomness control documentation improvements
### Suite - Improve the informational message about randomness control and setting the seed (a68792c1, !77) ### Documentation - Wrote a page about randomness control (cd3f41a2, !77) - Mention Power Assert on the main page of the website (f1a0a46f, !77) - Fix the link to the Runners website page (6a623774, !77)
Foreground and background tasks usability and documentation improvements
### Suite - Foreground and background tasks now have a custom CoroutineName to ease debugging (0bcd76e2, !76) ### Kotest runner - Prepared doesn't set the deprecated testCoroutineDispatcher parameter anymore (a8777179, !76) ### Documentation - Improved documentation of foreground and background tasks - Added a website page on foreground and background tasks
Bug fixes, Kotlin 2.0.0
### Build and deployment - Fixed JVM tests not running (ec557993, !129) - Enable code coverage for all modules (#142, !129) - Migrate Progress tests to Prepared (778387b1, !129) - Stop publishing the `tester` module (89f4d925, !119) ### Dependencies - Kotlin 2.0.0 (55a01666, !70) - Slf4J 2.0.13 (00733016, !132) - Arrow 1.2.4 (3884e8a6, !132) - Logback Classic 1.5.6 (983d8f98, !132) - KotlinX.Datetime 0.5.0 (03dbf236, !132) - KotlinX.Coroutines 1.8.0 (03dbf236, !132)
Randomness fixes, documentation website, Kotlin 2.0.0
### Suite - Fixed `randomBoolean()` which returned an `Int` (1a324a04, !74) - Fixed all `randomXXX()` functions, which ignored the configured seed (bd9348d0, !74) - Fixed the random seed being displayed as 'null' in the standard output even when set (c1bc163d, !74) - Fixed low-risk race condition in which prepared values where instantiated more than once (21004559, !74) ### Kotest runner - Add a dependency on kotest-assertions (!70) ### Documentation - Create the Prepared website (#47, !72) ### Dependencies - Kotlin 2.0.0 (55a01666, !70) - Kotest 5.9.0 (cf54b569, !73) - Arrow 1.2.4 (d7ef0952, !73) - KotlinX.Coroutines 1.8.1 (3eeec971, !73) - Ktor 2.3.11 (de087573, !73)
Improved testing, Kotlin 2.0.0-RC1
### Testing - Fixed JVM tests not running (ec557993, !129) - Set a minimal code coverage for all active modules (#142, !129) ### Spine (deprecated) - Unify the string representation of floating-point numbers on all platforms (99f5d234) ### Dependencies - Kotlin 2.0.0-RC1 (66672126)
Arrow tracing improvements, documentation fixes
### Arrow compatibility - Hide the scary warning about catching raise.Traced (!61) ### Documentation - Update all links after the move to OpenSavvy Playground (e58175af, !62)
Stabilization
### Suite - More concise Shared.toString() and Prepared.toString() (a524c5ac, !47) ### Parameterize compatibility - Parameterize 0.3.0 (#30, !47) - Easily declared Prepared instances from parameterize variables (#30, !47) ### Arrow compatibility - Arrow 1.2.3 (d06b80ac, !18) - Enable the experimental Arrow tracing for failOnRaise (b7bcccde, #16, !18) ### Gradle compatibility - Stop injecting Kotlin and Groovy in inline build scripts (4b1be0fa, !59) - Automatically create project directories when build scripts are created (70a6c855, !43) ### Kotest runner - Kotest 5.8.1 (72a9b8fe, !37) - Reuse Kotest's coroutine scope to avoid JS tests never finishing (#12, !37) Warning: at this point, it is unclear whether JS tests run or not. Please visit #44 for more information.
Dependency upgrades
### Suite - KotlinX.Coroutines 1.8.0 - KotlinX.Datetime 0.5.0 ### Kotest runner - Kotest 5.8.0 ### Ktor compatibility - Ktor 2.3.8 ### Gradle compatibility - Gradle 8.6
Ktor, Parameterized and iOS support, test tagging and stable kotlin-test on JS
### Suite - Document that advanceUntilIdle ignores background tasks (#37, !44) - Fixed an incorrect example for the class Ignored (ff6de16a, !45) - Allow test tagging (757882ff, !45) - iOS support (#35, !42) Breaking: - TestConfig instances can now allow being specified multiple times (ad5cbade, #28, !45) - Finalizers can now decide whether they are executed depending on test outcome (79d664b3, #41, !49) ### Compat: Arrow - iOS support (#35, !42) ### Compat: Filesystem - Temporary files and directories are not deleted anymore when tests fail (76fe7a70, #41, !49) ### Compat: Parameterized - Create this module to expose the Parameterized library to Prepared tests (#30, !43) ### Compat: Ktor - Create this module to interoperate with the Ktor Test Host (#42, !51) ### Runner: Kotest - Prepared test tags are now visibly by the Kotest runner (757882ff, !45) - Introduce PreparedSpec (!50) - iOS support (#35, !42) ### Runner: Kotlin-test - Complete rewrite for the JS platforms, which now use officially-supported means of declaring tests dynamically (#38, !54) - iOS support (#35, !42) ### Build and deployment - The project is now based on the Gradle Playground, like all our other projects (!38) - Removed the unused 'framework' module (#36, !41) ### Dependencies - Kotlin 1.9.22 (128dfe13) - The iOS targets are now built with MacOS 13 and XCode 14 (7f548d9e) - Dokkatoo 2.1.0 (f4a3146f)
Shared values, user guides and examples
### Suite - Helper to share values between all tests (#32, !34) ### KotlinX.Datetime compatibility - Added time.delayUntil(ISO String) (8510f11e, !33) - Added examples to most functions (422dbb08, !33) ### java.time compatibility - Split into its own module (was previously in Suite's jvmMain) (#34, !35) ### Arrow compatibility - Allow using failOnRaise outside the Test DSL (!33) - Added assertRaises and variants (!33) - Added examples to most functions (e2b8f421, !33) ### Filesystem access - Shorter names for children files (#29, !32) ### Kotlin-test runner - When nested suites are unnested on JS, embed the relationship in the name so it isn't lost (0f3b4578, !33) - Added a guide to explain how to configure, and listed downsides (#26, !33) ### Kotest runner - Added a guide to explain how to configure, and listed downsides (#26, !33) ### Documentation - Module-level documentation for all modules (#20, #26, !33)
Arrow compatibility and configurable tests
### Suite - General purpose TestConfig (f5508b85, !31) - Allow marking tests as ignored (a9536914, !31) - Allow configuring the Coroutine test timeout (#27, 018a39bb, !31) ### Arrow compatibility - Added failOnRaise to fail a test using the Raise DSL (#16, !27)
Nullable prepared values and Gradle TestKit
### Suite - Allow nullable prepared values (#23, !25) ### Gradle TestKit - Added a module with helpers to test Gradle plugins (#22, !29) ### Documentation - Added an example in the README (#25, !30)
Randomness control, filesystem control and better logging
### Test API - Prepared values log their actual values to the test output (#17, !19) - Improved logging for finalizers (!19) - Document the usefulness of PreparedProvider (#19, !20) - Generate random values, and reproduce previous test executions by generating the same random values (#24, !26) - Made the name of prepared values public (63f52eb1, !23) ### Runners - The Kotest runner now exposes the Kotest engine (#15, !17) ### Compatibility modules - Utilities to create temporary directories and files with java.io and java.nio (#21, !23) ### Build and deployment - Switch from Dokka to Dokkatoo
Initial alpha
### Suite - Declare nested test suites - Lazy fixtures with 'prepared' - Test finalizers - Time control ### Kotlin-test runner - Kotlin/JVM support - Kotlin/JS support ### Kotest runner - Kotlin/JVM support - Kotlin/JS support - Kotlin/Native support
Initial alpha
### Suite - Declare nested test suites - Lazy fixtures with 'prepared' - Test finalizers - Time control ### Kotlin-test runner - Kotlin/JVM support - Kotlin/JS support ### Kotest runner - Kotlin/JVM support - Kotlin/JS support - Kotlin/Native support
Fix MavenCentral publishing
Fix MavenCentral publication
Log bug and better documentation
### Documentation - Avoid single-letter type parameters (#112, !88) - Mention the LinuxX64 support in the README (#118, !90) ### Build and deployment - The project is now based on the OpenSavvy Playground, which should make build configuration easier (#114, !87) - Fixed the CI not running on the GitLab Shared Runners for MacOS (!82, !92) ### Cache - Fixed the lock bug on Kotlin/JS (#101, !91) ### Dependencies - Kotlin 1.9.0 - Arrow 1.2.0 - Dokka 1.9.0 - Logback 1.4.8 - Slf4j 2.0.7 - Ktor 2.3.2 - KotlinX.Coroutines 1.7.2 - KotlinX.Serialization 1.5.1 ### Contributions Thanks @darbyfrey (from the GitLab team) for helping us figure out how to use the MacOS Shared Runners.
LinuxX64 support
### Build and deployment - Support for the LinuxX64 platform (#115, !86) ### Cache - Explicitly specify which clock to use when using ExpirationCache (#111, !85)
Fix MavenCentral publication
Blocking cache and MavenCentral publication
### Migration steps The group for Gradle configuration has been renamed from 'opensavvy.pedestal' to 'dev.opensavvy.pedestal'. ### Cache - Better documentation (9bf6b475, !81) - All implementations are internal, only their factory methods are public (#86, !81) - Create blocking wrappers to use the library without coroutines (#109, !83) ### Build and deployment - Gitpod support to contribute to the project in a cloud environment (#107, !79) - Migrate after changes to the GitLab shared MacOS runners (#102, !78) - Pedestal is now published on MavenCentral (#105, !77)
Documentation and Spine fixes
### State - Improved documentation (#98, !74) ### Spine - Do not crash when deserializing a malformed SpineFailure
Type-safe Spine errors
### Pedestal - Completely rewrite of the documentation (#97, !72) ### Spine Spine is deprecated and will be removed in the future. - Type-safe errors (#103, !73)
Easier Outcome-based error management
### Progress - ProgressReporter.NoOp has been moved to a private class, accessed by the factory 'emptyProgressReporter' (#90, !69) ### State - Added Outcome.mapFailure and ProgressiveOutcome.mapFailure (#92, !70) ### Build and deployment - Fixed the links in Dokka to the Arrow documentation (#63, !71)
Failure removal
### State - Removed the Failure interface (#87, !67) - Conversion functions from Either to Outcome (!67) - Accessors for Outcome<Nothing, T> and similar (#88, !68)
Contextual caches
### Cache - Created contextual cache algorithms (#85, !66) ### Backbone - Removed Backbone.request (#84, !64) ### Build and deployment - Cleaned up the README (#82, !62) - Added the OpenSavvy coding style (#83, !63)
iOS support & Gradle convention plugins
### Platform support Thanks to @LandryNorris for contributing the support for iOS platforms and helping me set up the CI for them. - Added iOS support for State and Logger (!47) - Added iOS support for Cache and Backbone (!50) - Configured the CI to run on MacOS virtual machines to test and publish the libraries (#64, !50) ### State - Added ProgressiveOutcome.map, Flow<ProgressiveOutcome>.mapSuccess (#56, !45) ### Build and deployment - Complete rewrite of the Gradle build using convention plugins (#61, #67, !46, !49) - Kotlin 1.8.10 and other dependency updates (#66, !48)
Release candidate 2 to check iOS library publishing
Release candidate 1 to check iOS library building
Failure debugging, ID serialization
### State - Better stacktraces for FailureException (#52, !43) ### Spine (experimental) - IDs are serialized as strings instead of objects (#55, !44)
Outcome and documentation
### General - Added the description of each projection in its documentation (#45, !37) - Added information on how to use the project (#45, !37) ### State - Removed the 'reporter' progress of the slice builder, avoiding the context creation on each call (3bad6da0, !36) - Renamed Slice to Outcome (#49, !38) - Created ProgressiveOutcome, which combines an Outcome with a Progression (#47, #49, !36, !38) ### Cache - Less logging for ExpirationCache (#43, !39) ### Backbone - Added function Ref.now() as a convenience for Ref.request().firstValue() (b7e824bb, !36) ### Spine - Clearer failure logging for the Ktor backend (#51, !40)
Endpoint advertisement
The library is getting closer to the 1.0 release! The next steps are to add more documentation. ### Spine for Ktor - Other endpoints of the same resource are advertised using the `Link` header (#22, !35) ### Build - Faster CI (!34)
Easier caching and failure management cohesion
### State - Cleaned up the 'valueOrThrow', 'valueOrNull', 'requestValueOrThrow()', 'firstValueOrNull()' methods (#40, !31) - Callback implementation of `ProgressionReporter` (#39, !32) - Removed the Identifier interface (#41, !33) ### Spine - The endpoint 'create' returns an `Identified` type instead of a `Pair` (#30, !26) ### Deployment - Fixed a Dokka memory exaustion bug which made the documentation fail to generate (!30) - GitLab Pages now displays the documentation for the latest tag, and not for the 'main' branch (#14, !29) - Optimize GitLab CI pipeline usage (!30)
Sub-route deletion, URL character list expansion
### Spine - It is now possible to create deletion operation on sub-routes (#32, !25) - Endpoints are now allowed to be composed of almost all characters, the API implementation is responsible for URL-encoding etc (#37, !24)
Various bug fixes
This version only contains bug fixes. - f28c88da Cache.expire only expired the first layer - 5b34b2db ExpirationCache did not expire its contents - 5cdf5940 MemoryCache did not transfer new updates to previously-expired elements - 6efd6b8d MemoryCache starts a new request if subscribers are waiting, even if they don't explicitely request one - 00325e2d MemoryCache resubscribes to the previous layer if it failed More release information: https://gitlab.com/opensavvy/pedestal/-/releases/0.1.3