Releases: rasuvaeff/understudy-testo
Releases · rasuvaeff/understudy-testo
Release list
v0.3.5
- Changed. Accepts
rasuvaeff/understudy^0.12alongside^0.9 || ^0.10 || ^0.11: the engine's 0.12.0 runs a specification closure exactly once (the nested-call probe that re-ran it is gone) and refuses two calls side by side as it does a nested pair; this package reads neither, so the bridge is widened, not moved.
v0.3.4
- Changed. Accepts
rasuvaeff/understudy^0.11alongside^0.9 || ^0.10: the engine's 0.11.0 adds a refusal where there was a fatal, a nested-call check and areturns()type check, none of which this package reads; the bridge is widened, not moved. Thereturns()check found one in this package's own Fiber fixture —returns(true)on a: voidgate — which is now the plainexpect()it meant.
v0.3.3
- Requires
rasuvaeff/understudy^0.9 || ^0.10. The engine's 0.10 closes six
defects of the 1.0 review, the widest of them being that an optional
parameter no longer has to be spelled in a specification:when(fn () => $repository->find(1))now matches a contract whose remaining parameters
carry defaults, and an unspelled position is rendered as…in reports so
it is never mistaken for a writtenany(). Nothing this adapter does changes
— the arity suppression it carries is aboutArg::rest(), which still
covers the contract's required parameters and only those. - Drops the
^0.8term, as 0.3.2 said it would in the release that
follows the engine's.
v0.3.2
- Completes the public method summaries for
UnderstudyInterceptorand
UnderstudyPluginand keeps the generated family reference current.
v0.3.1
- Allows
rasuvaeff/understudy^0.8 || ^0.9. A bridge, not a widening for
its own sake: the engine's 0.9 is the 1.0 candidate — every contract decision
of the 1.0 review lands there, and 1.0 follows once it has been driven by real
packages — and a project taking it must be able to keep this adapter without
a window in whichcomposer requiresilently installs the 0.8 engine beside
it. The^0.8term is dropped in the release that follows the engine's. This
package itself stays on 0.x until Testo reaches 1.0, because
UnderstudyPluginimplements a Testo interface whose signature names an
Internal\class. infection/infectionmoves to^0.35, the monorepo's single-major form.- Both READMEs and
llms.txtstop dating engine behaviour («understudy 0.4+»
besidelean(), «the engine from 0.3.0 refuses»): with a floor of^0.8
every engine this adapter installs beside behaves that way.
v0.3.0
- Requires
rasuvaeff/understudy^0.8, and requires it as a single term. The
accumulating union it carried (^0.4 || ^0.5 || …) had to be widened by hand
on every core release, and a package that misses one becomes uninstallable
beside its own engine. - The runner's "this test made no assertion" check is no longer disabled for
the whole suite. Verification recorded a success for every completed test
and added an assertion to it, after which the narrow rule that takes back a
Riskyverdict — "our record is the only one in the history" — held for
tests that had never touched understudy. Installing this adapter for one
clear place of verification silently cost the project a runner check across
every test, including ones written before the adapter. A test that created no
double is now left alone entirely. - Both READMEs and
llms.txtstop pointing atUnderstudy::strict($double)as
the per-double form of strict stubs. It is strict dispatch — "fail on any
call no expectation matched" — and says nothing about a stub that was
configured and never called; the per-double equivalent is
when(…)->times(n). - Both READMEs and
llms.txtsay that verification runs after your teardown
here and before it underunderstudy-phpunit, so a test whose expectation
is fulfilled by teardown itself passes in one runner and fails in the other. llms.txtmentions thatUnderstudyInterceptortakes the samestrictStubs
argument asUnderstudyPlugin.
v0.2.3
- Documentation review fixes. Both READMEs gained the missing Security
section and now listtesto/assertin Requirements. AGENTS.md no longer
links to the retired_plans/UNDERSTUDY-PLAN.md. llms.txt header matches
the family form.
v0.2.2
- Allow
rasuvaeff/understudy^0.7. Widened rather than raised. - The claim that a benchmark is reset but never verified is a test now.
AGENTS.mdstated it and nothing checked it — and it is the half that has
broken before: the scope used to be anInterceptorOptions(testType:)
filter, which skipped the reset too, so a#[TestInline]double survived
into the next plain test. The test drivesrunTest()with each
TestTypethat is not a plain test, which is where the decision is read;
a real#[Bench]fixture would be measuring Testo's benchmark runner
instead of this adapter. examples/lifecycle.phpis part ofcomposer build, and its checks throw
instead of usingassert()— which is compiled out under
zend.assertions=-1, so the example silently stopped checking anything.
The siblingunderstudy-phpunitalready worked this way.- The
Seamsfixture's data provider follows the<method>Provider
convention, and every fixture carries@internal— some did, some did not.
v0.2.1
- Allow
rasuvaeff/understudy^0.6. Widened rather than raised: the adapter
works against both 0.5 and 0.6, and consumers on 0.5 should not be cut off
from it.
v0.2.0
A minor rather than a patch: the floor on rasuvaeff/understudy moves to
^0.5, which Composer's caret already treats as breaking on 0.x.
- Requires
rasuvaeff/understudy^0.5. The wide range this package
carried was worth keeping while it needed nothing newer; it now does. The
fixture below states a claim that is only true of core 0.5.0, and against an
older engine it would either assert the opposite or have to be skipped —
which is a claim verified nowhere near the floor. Nobody is stranded:
0.1.4 works against every core from 0.1 to 0.5 and carries the same adapter. - An integration fixture pins scope isolation from this side of the boundary:
an enclosing expectation left open, a complete nestedUnderstudy::scope(),
and the enclosing call after it. The interceptor asks the global
Understudy::verifyAll()from a teardown position, which is the shape the
defect fixed in core 0.5.0 took in practice, and nothing here could see it
until core 0.5.0 was installable. (#14)