Repository navigation
Releases: JohnVerheij/TimeAssertions.TUnit
Release list
v0.9.0
[0.9.0] - 2026-06-12: observe timer fires
Minor release. Adds fire observation to ObservableTimeProvider: a count of how many times timer callbacks ran, next to the existing leak and pending-due assertions. Purely additive. Also corrects stale guidance in the docs.
Added
Assert.That(time).HasTimerFiredCount(int expected),HasNoTimerFired(), andHasTimerFiredAtLeast(int count)assert how many times timer callbacks fired across every timer the provider created.ObservableTimeProvidernow wraps each timer callback to count its fires. The count is cumulative and is not reset on disposal. With aFakeTimeProvider, a fire is counted each time test code advances fake time past a due or period boundary, which keeps the count deterministic.ObservableTimeProvider.TimerFireCount(cumulative) andActiveTimerInfo.TimesFired(per timer) expose the same data on the framework-agnostic core.ObservableTimeProvider.CreateTimernow validates that the callback is non-null up front (ArgumentNullException), matching the rest of the surface, instead of deferring to the inner provider.
Fixed
- Once a periodic timer fires,
NextTimerDueTime(and theHasNextTimerDueApproximately/HasPendingTimerDueWithinassertions) now report the timer's period, since that is when the next callback is due. A fired one-shot timer is disabled and drops out of the pending-due calculation. Previously the due time stayed frozen at its creation value until an explicitChange. - Corrected stale documentation that claimed the package "deliberately does not ship its own polling assertion": it has shipped
HasNoActiveTimersEventuallyand its count-targeted siblings since0.7.0/0.8.0. The README and theActiveTimerAssertionsXML docs now point to those overloads for the asynchronous disposal race, reserving genericEventuallyfor arbitrary conditions.
Changed
- Bumped
PackageValidationBaselineVersionfrom0.7.0to0.8.1on both packages so ApiCompat strict-mode validates0.9.0against the most recently published baseline. The new members are recorded as additive differences inCompatibilitySuppressions.xml.
v0.8.1
[0.8.1] - 2026-06-06: release notes sourced from the CHANGELOG
Tooling release. No library API or behavior change. The release workflow now publishes the matching CHANGELOG.md section as the GitHub release body, so release notes carry the full Added / Changed / Breaking detail instead of GitHub's auto-generated commit summary.
Changed
- The release workflow extracts the
## [version]section fromCHANGELOG.mdand passes it as the GitHub release body (body_path), so the notes carry the full hand-written detail instead of an auto-generated commit summary. Earlier releases published only the auto-generated notes, which omitted the hand-written breaking-change and feature detail.
Note for anyone upgrading across 0.8.0
0.8.0 contained source-breaking changes that its published release notes did not surface (this release fixes the notes mechanism, not the changes themselves):
- The
CancellationTokenparameter onHasNoActiveTimersEventuallyandHasActiveTimerCountEventuallywas renamed fromcttocancellationToken. A call that passed the token by name (ct: token) must becomecancellationToken: token; positional calls are unaffected. EventuallyTimerAssertionExtensionsmoved from theTimeAssertions.TUnitnamespace toTUnit.Assertions.Extensions. Code referencing the type by its full name must update the namespace; use throughAssert.That(...)is unaffected.
See the 0.8.0 Breaking section below for the full detail.
v0.8.0
What's Changed
- ci(github-actions): update github/codeql-action action to v4.36.2 by @renovate[bot] in #64
- feat: bounded-count eventually timer assertions + CancellationToken naming convention by @JohnVerheij in #65
- feat: bounded-count timer assertions + cancellationToken convention; release 0.8.0 by @JohnVerheij in #66
Full Changelog: v0.7.0...v0.8.0
v0.7.0
What's Changed
- deps(nuget): update tunit to v1.49.0 by @renovate[bot] in #63
- feat: add eventually and positive-count active-timer assertions by @JohnVerheij in #62
Full Changelog: v0.6.0...v0.7.0
v0.6.0
What's Changed
- feat: pending-timer due-time assertions (HasNextTimerDueApproximately / HasPendingTimerDueWithin) by @JohnVerheij in #61
Full Changelog: v0.5.0...v0.6.0
v0.5.0
What's Changed
- docs: add CHANGELOG version link-reference definitions by @JohnVerheij in #9
- chore: TUnit 1.44.39 + CONVENTIONS.md v0.4 (family lockstep) by @JohnVerheij in #10
- chore(family): Release Notes pipeline, CONVENTIONS v0.5, codecov 90%, CoC v3.0 by @JohnVerheij in #11
- chore: split CoC and security reporting channels by @JohnVerheij in #12
- chore(family): CONVENTIONS v0.7 + six-package roster by @JohnVerheij in #13
- ci(deps): bump github/codeql-action from 4.35.4 to 4.35.5 by @dependabot[bot] in #14
- ci(deps): bump dependabot/fetch-metadata from 2.5.0 to 3.1.0 by @dependabot[bot] in #15
- feat(v0.5.0): rate-limit assertion + OCE propagation + TUnit 1.45.0 by @JohnVerheij in #16
Full Changelog: v0.4.0...v0.5.0
v0.4.0
What's Changed
- feat(v0.4.0): remove obsolete aliases + Eventually migration cookbook by @JohnVerheij in #7
- feat(v0.4.0): add TimelineRenderer + SnapshotAssertions pairing by @JohnVerheij in #8
Full Changelog: v0.3.0...v0.4.0
v0.3.0
What's Changed
- ci(deps): bump github/codeql-action from 4.35.3 to 4.35.4 by @dependabot[bot] in #5
- ci(deps): bump NuGet/login from ebc737b6fc418a6ca0073cf116ec8dc156d8b81e to 8d196754b4036150537f80ac539e15c2f1028841 by @dependabot[bot] in #3
- ci(deps): bump actions/attest-build-provenance from 2.4.0 to 4.1.0 by @dependabot[bot] in #4
- feat(v0.3.0): grep-friendly budget-overrun suffix + cold-start cookbook by @JohnVerheij in #6
New Contributors
- @dependabot[bot] made their first contribution in #5
Full Changelog: v0.2.0...v0.3.0
v0.2.0
What's Changed
- feat(v0.2.0): naming symmetry, elapsed capture, smoke-test + AOT-publish CI gate, supply-chain hardening by @JohnVerheij in #2
Full Changelog: v0.1.0...v0.2.0
v0.1.0
What's Changed
- release: 0.1.0 by @JohnVerheij in #1
New Contributors
- @JohnVerheij made their first contribution in #1
Full Changelog: https://github.com/JohnVerheij/TimeAssertions.TUnit/commits/v0.1.0