Repository navigation
1.0 readiness: validate the forAll() map and the chain, one assertion per outcome, diagnostics on their own line - #51
Merged
Merged
Conversation
…very outcome check() rejects a forAll() value that is not an ArbitraryInterface and a key that is not a parameter of the closure — with or without auto() — naming the property, the key and the type, before the engine fails on a method call on a non-object or silently ignores the typo (#49). Numeric setters validate their lower bound at the call, and check() refuses a path without a seed, with the property's name in every message. The check's assertion is registered before the verdict, so a falsified property whose body asserted nothing is reported once, as a failure, rather than Failed and Risky; an all-runs-skipped property still registers none (#50). The distribution report, the discard warning and the unstable-id warnings start on a line of their own, so they no longer glue to PHPUnit's progress dots.
…environment words README (both languages), llms.txt and AGENTS.md describe the setter and forAll() validation messages, the assertion registered on every outcome, the leading newline on diagnostic lines as a PHPUnit-only asymmetry, and the off words PROPERTY_VERBOSE/PROPERTY_DERANDOMIZE read since core 0.10. llms.txt names GenerationExhaustedException and drops the stale "auto() requires core ^0.5". psalm.xml lists TestCase::dataName() next to TestCase::name(), with the finding that Psalm resolves neither from inside the trait.
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes the
property-testing-phpunitsection of the family's 1.0-readiness review (2026-09-18): P1–P6 plus the adapter-parity items.Fixes #49
Fixes #50
What changed
forAll()map validated atcheck()(forAll() crashes inside the engine on a non-ArbitraryInterface value and silently ignores a key that is not a parameter #49): a value that is not anArbitraryInterfacethrowsProperty "<name>": forAll() expects array<string, ArbitraryInterface>, got int for key "x"instead of failing inside the runner as a method call on a non-object; a key that is not a parameter of the closure is rejected with or withoutauto()(Property "<name>": forAll() covers "x", which is not a parameter of the property) — before, onlyauto()checked it. Message shapes follow the Testo adapter's.addToAssertionCount(1)moves before the verdict, so a falsified property whose body asserted nothing is reported once (Failed), not Failed + Risky. An all-runs-skipped property still registers none.runs≥ 1,maxShrinks/maxDiscards≥ 0,timeoutMs/budgetMs/shrinkBudgetMs≥ 1 (Property "<name>": runs must be greater than or equal to 1). Apath()/PROPERTY_PATHwithoutseed()/PROPERTY_SEEDis refused bycheck()the same way (the setters may come in either order). Upper bounds stay with the engine."\n" . $line . "\n"so they no longer glue to PHPUnit's progress dots. Line content is unchanged and byte-identical to Testo's; the leading newline is recorded inAGENTS.mdas a PHPUnit-only asymmetry.VerboseListeneruntouched.llms.txt,AGENTS.md):PROPERTY_VERBOSE/PROPERTY_DERANDOMIZEoff words (0/false/off/no),GenerationExhaustedException, no more "auto() requires core ^0.5".EnvironmentParityTestpins the off words and skips under core 0.9.psalm.xmllistsTestCase::dataName()next toTestCase::name(), with the finding that Psalm 6.17 resolves neither call from inside the trait (removing either entry reports nothing).Core constraint stays
^0.9 || ^0.10. No BC break per roave;CHANGELOG.mdgets an## Unreleasedsection.Validation