Skip to content

Releases: JohnVerheij/TimeAssertions.TUnit

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 12 Jun 19:41
v0.9.0
d22c39f

[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(), and HasTimerFiredAtLeast(int count) assert how many times timer callbacks fired across every timer the provider created. ObservableTimeProvider now wraps each timer callback to count its fires. The count is cumulative and is not reset on disposal. With a FakeTimeProvider, 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) and ActiveTimerInfo.TimesFired (per timer) expose the same data on the framework-agnostic core.
  • ObservableTimeProvider.CreateTimer now 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 the HasNextTimerDueApproximately / HasPendingTimerDueWithin assertions) 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 explicit Change.
  • Corrected stale documentation that claimed the package "deliberately does not ship its own polling assertion": it has shipped HasNoActiveTimersEventually and its count-targeted siblings since 0.7.0/0.8.0. The README and the ActiveTimerAssertions XML docs now point to those overloads for the asynchronous disposal race, reserving generic Eventually for arbitrary conditions.

Changed

  • Bumped PackageValidationBaselineVersion from 0.7.0 to 0.8.1 on both packages so ApiCompat strict-mode validates 0.9.0 against the most recently published baseline. The new members are recorded as additive differences in CompatibilitySuppressions.xml.

v0.8.1

Choose a tag to compare

@github-actions github-actions released this 06 Jun 14:21
v0.8.1
bbd3766

[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 from CHANGELOG.md and 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 CancellationToken parameter on HasNoActiveTimersEventually and HasActiveTimerCountEventually was renamed from ct to cancellationToken. A call that passed the token by name (ct: token) must become cancellationToken: token; positional calls are unaffected.
  • EventuallyTimerAssertionExtensions moved from the TimeAssertions.TUnit namespace to TUnit.Assertions.Extensions. Code referencing the type by its full name must update the namespace; use through Assert.That(...) is unaffected.

See the 0.8.0 Breaking section below for the full detail.

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 05 Jun 05:39
v0.8.0
a16d237

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

Choose a tag to compare

@github-actions github-actions released this 04 Jun 05:39
v0.7.0
0175ea1

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

Choose a tag to compare

@github-actions github-actions released this 03 Jun 04:10
v0.6.0
415da72

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

Choose a tag to compare

@github-actions github-actions released this 19 May 05:24

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

Choose a tag to compare

@github-actions github-actions released this 13 May 18:58

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

Choose a tag to compare

@github-actions github-actions released this 12 May 17:29

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

Full Changelog: v0.2.0...v0.3.0

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 07 May 20:32

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

Choose a tag to compare

@github-actions github-actions released this 06 May 22:11

What's Changed

New Contributors

Full Changelog: https://github.com/JohnVerheij/TimeAssertions.TUnit/commits/v0.1.0