Skip to content

v0.7.0

Choose a tag to compare

@lpotthast lpotthast released this 30 Aug 14:28
· 30 commits to main since this release

Added

  • BTreeSet, BTreeMap, and LinkedList subjects, including BTreeSet and BTreeMap assertions in no_std builds.
  • contains_all for every collection and into_iter_contains_all for streaming iterators.
  • Sets gained contains_matching, contains_satisfying, does_not_contain_matching, does_not_contain_satisfying,
    and the whole contains_exactly_in_any_order{,_matching,_satisfying} family.
  • Maps gained contains_entry_satisfying, contains_exactly_entries_matching, and
    contains_exactly_entries_satisfying.
  • Structured captured failures through the public AssertionFailure type.
  • assert_that_owned! for consuming assertions; assert_that! now borrows its subject.
  • Reusable borrowed conditions and the fluent be(condition) alias.
  • Fluent aliases for iterator, async function, program, command, and reqwest response assertions.
  • AssertThat::track_assertion and AssertThat::fail_with_details for custom assertions.
  • Complete public API documentation and dual-license files in both packages.
  • Floating-point is_normal() and is_subnormal() assertions.
  • TokioMutexAssertions::has_value_satisfying.
  • reqwest status-class, header, text-body, and JSON-body assertions and projections.
  • Separate serde-json and serde-toml features; serde still enables both.

Changed

  • Breaking: Generic container traits replace the per-type traits, and map assertions use native borrowed lookup.
    Prelude calls are mostly unchanged; sets use contains_exactly_in_any_order, while custom implementors may need the
    new Collection, Sequence, Set, Map, MapLookup, or MapKeyQuery traits.
  • Breaking: Capture mode is closure-scoped and returns Vec<AssertionFailure>. Mode is sealed, mid-chain mode
    conversions are gone, and unused chains use #[must_use] warnings instead of panicking destructors.
  • Breaking: Variant checks such as is_some, is_ok, and is_ready no longer extract. Use get_some, get_ok,
    get_err, get_ready, or get_ascii before asserting on the contained value.
  • Breaking: Borrowing is now the default for assert_that!, projections, and satisfying callbacks. Consuming
    assertions and owned mappers use assert_that_owned!, must_owned, verify_owned, satisfies_owned,
    satisfy_owned, or derive_owned.
  • Breaking: Condition was renamed to AssertrCondition; negated fluent aliases put not first; and need_drop
    now requires fluent (otherwise use needs_drop).
  • Breaking: Generic StrAssertions replaces StringAssertions and StrSliceAssertions. Prelude users are
    unaffected.
  • Breaking: The reqwest and rootcause integrations now use version 0.13. assertr also stops enabling
    reqwest defaults, tokio/full, and serde/derive for downstream builds.
  • Breaking: With default features disabled, std and libm no longer imply num; enable num explicitly when
    needed. The default feature set is unchanged.
  • Breaking: AssertionRenderer<T> was renamed to ValueRenderer<T>, and renderer bounds moved to individual
    assertion methods. Direct trait implementors and generic callers may need new renderer bounds or associated types.
  • Collection, string, and path assertions preserve subject names and require fewer renderer capabilities.
  • Negative and condition failures now provide clearer structured details, including failing element indexes.
  • Dependency selection is narrower: the default build drops from 24 dependencies to 2, and the all-features build from
    141 to 99. Async panic assertions no longer require UnwindSafe futures.
  • Documentation was reorganized around the rustdoc assertion index and API-owned guides.
  • assertr-derive: Bumped to 0.4.0.

Removed

  • Breaking: AssertThat::with_capture, AssertThat::capture_failures, AssertThat::take_failures,
    AssertThat::without_capture, and capture-mode unwrap_inner.
  • Breaking: The free functions assert_that(&value) and assert_that_owned(value), deprecated since 0.4.4, were
    removed. Use the assert_that! / assert_that_owned! macros or the fluent must() / must_owned() entry points.
  • Breaking: The empty public modules details, tracking, and util are private now.
  • Breaking: The hidden, unused EqContext::add_field_difference_rendered_with method was removed.

Fixed

  • References to arrays now implement HasLength.
  • Custom assertion descriptions no longer run into the closing failure banner.
  • is_in_range, is_not_in_range, Command::has_arg, reqwest::Response::has_status_code, the http::HeaderValue
    assertions, Tokio watch assertions, and async panic assertions now report the caller's location.
  • Fixed standalone jiff, program, reqwest, serde*, and tokio feature builds.
  • Corrected unnamed time-zone diagnostics and absent path-component checks.
  • Exact collection, iterator, and map comparisons now handle multiplicity, duplicate keys, and overlapping custom
    equality relations correctly.
  • Failure details no longer leak into later failures in the chain.
  • Corrected Result variant spelling, erased Box<dyn Any> type names, and fluent alias generation edge cases.
  • Async panic assertions now catch panics raised while invoking the function, before it returns a future.