Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Black Box Laravel Package

innmind/black-box

BlackBox is a property-based testing framework and test runner for PHP. Define properties, feed them generated values, and verify your code behaves consistently across many scenarios. Runs 100 test cases per proof by default.

View on GitHub
Deep Wiki
Context7
7.0.1

Changed

  • Requires phpunit/php-code-coverage ~14.2 to avoid using deprecated code

Fixed

  • $assert->debug() was leaking the last successful shrunk values
7.0.0

Added

  • Innmind\BlackBox\Runner\Assert::debug()
  • Innmind\BlackBox\Set::disableShrinking()
  • Innmind\BlackBox\Set::toSet()
  • Innmind\BlackBox\Set::zip()
  • Innmind\BlackBox\Set::properties()
  • Innmind\BlackBox\Set::slice()
  • Innmind\BlackBox\Set\Seed::toSet()
  • Innmind\BlackBox\Set\Provider\Strings::mutuallyExclusive()
  • Innmind\BlackBox\Runner\Proof::tagged()
  • Innmind\BlackBox\Runner\Proof::disableShrinking()
  • Innmind\BlackBox\Application::mapProof()
  • Innmind\BlackBox\Application::mapPrinter()
  • Innmind\BlackBox\Application::displayVia()

Changed

  • Requires PHP 8.4
  • Properties now expect a Set<callable(): object> instead of a Set<object>
  • Innmind\BlackBox\Set::compose() now returns a Set
  • Innmind\BlackBox\Set::generator() now returns a Set
  • Sets are now unbounded (instead of limited to 100 elements by default)
  • Innmind\BlackBox\Runner\Proof is now a final class
  • Innmind\BlackBox\Runner\Proof constructors are now flagged as internal
  • Innmind\BlackBox\Runner\Proof::scenarii() is now flagged as internal
  • PHPUnit attributes Group and DataProvider are now longer read when running tests with BlackBox, use the Innmind\BlackBox\ prefixed ones instead
  • All proofs will fail if they throw an exception (instead of stopping the script)
  • Innmind\BlackBox\Runner\Printer is now a final class
  • Innmind\BlackBox\Set\MadeOf have been moved to Innmind\BlackBox\Set\Provider\Strings\MadeOf
  • Innmind\BlackBox\Set\Properties have been moved to Innmind\BlackBox\Set\Provider\Properties
  • Innmind\BlackBox\Set\Slice have been moved to Innmind\BlackBox\Set\Provider\Slice

Removed

  • Support for symfony/var-dumper ~6.0|~7.0
  • Support for phpunit/phpunit ~10.0|~11.0|~12.0
  • Support for phpunit/php-timer ~6.0|~7.0|~8.0
  • Support for phpunit/php-code-coverage ~10.0|~11.0|~12.0
  • Innmind\BlackBox\Application::disableGlobalFunctions()
  • Innmind\BlackBox\Application::usePrinter()
  • Innmind\BlackBox\Application::displayOutputVia()
  • Innmind\BlackBox\Application::displayErrorVia()
  • Innmind\BlackBox\Runner\proof()
  • Innmind\BlackBox\Runner\test()
  • Innmind\BlackBox\Runner\given()
  • Innmind\BlackBox\Runner\property()
  • Innmind\BlackBox\Runner\properties()
  • proof()
  • test()
  • given()
  • property()
  • properties()
  • Innmind\BlackBox\PHPUnit\Framework::expectException()
  • Innmind\BlackBox\PHPUnit\Framework::expectExceptionCode()
  • Innmind\BlackBox\PHPUnit\Framework::expectExceptionMessage()
  • Innmind\BlackBox\Set\Call
  • Innmind\BlackBox\Set\Chars
  • Innmind\BlackBox\Set\Compose::immutable()
  • Innmind\BlackBox\Set\Compose::mutable()
  • Innmind\BlackBox\Set\Decorate
  • Innmind\BlackBox\Set\Either::any()
  • Innmind\BlackBox\Set\Elements::of()
  • Innmind\BlackBox\Set\Email
  • Innmind\BlackBox\Set\FromGenerator::of()
  • Innmind\BlackBox\Set\FromGenerator::mutable()
  • Innmind\BlackBox\Set\Integers::any()
  • Innmind\BlackBox\Set\Integers::between()
  • Innmind\BlackBox\Set\Integers::above()
  • Innmind\BlackBox\Set\Integers::below()
  • Innmind\BlackBox\Set\IntegersExceptZero
  • Innmind\BlackBox\Set\NaturalNumbers
  • Innmind\BlackBox\Set\NaturalNumbersExceptZero
  • Innmind\BlackBox\Set\Nullable
  • Innmind\BlackBox\Set\Randomize::of()
  • Innmind\BlackBox\Set\RealNumbers::any()
  • Innmind\BlackBox\Set\RealNumbers::between()
  • Innmind\BlackBox\Set\RealNumbers::above()
  • Innmind\BlackBox\Set\RealNumbers::below()
  • Innmind\BlackBox\Set\Sequence::of()
  • Innmind\BlackBox\Set\Strings
  • Innmind\BlackBox\Set\Tuple
  • Innmind\BlackBox\Set\Type
  • Innmind\BlackBox\Set\Unicode
  • Innmind\BlackBox\Set\MutuallyExclusive
  • Innmind\BlackBox\Set\UnsafeStrings::any()
  • Innmind\BlackBox\Set\Uuid
  • Innmind\BlackBox\Set\Seed::map()
  • Innmind\BlackBox\Set\Seed::flatMap()
  • Innmind\BlackBox\Set\Seed::shrink()
  • Innmind\BlackBox\Set::decorate()
  • Innmind\BlackBox\Set::call()
  • Innmind\BlackBox\Set::generator()
  • Innmind\BlackBox\Set\Provider\Composite
  • Innmind\BlackBox\Set\Provider\Generator
  • Innmind\BlackBox\Runner\CodeCoverage::enableWhen()
6.12.0

Added

  • Innmind\BlackBox\Application::filterOnTags()
  • Innmind\BlackBox\PHPUnit\Framework\Attributes\DataProvider
  • Innmind\BlackBox\PHPUnit\Framework\Attributes\Group
  • Innmind\BlackBox\Set::via()
  • Innmind\BlackBox\Runner\Given::exclude()
  • Innmind\BlackBox\Prove
  • Support for phpunit/php-code-coverage:~14.0

Changed

  • The callable passed to Application::tryToProve() now has access to an instance of Prove

Depercated

  • Innmind\BlackBox\Application::disableGlobalFunctions()
  • Innmind\BlackBox\Runner\proof()
  • Innmind\BlackBox\Runner\test()
  • Innmind\BlackBox\Runner\given()
  • Innmind\BlackBox\Runner\property()
  • Innmind\BlackBox\Runner\properties()
  • proof()
  • test()
  • given()
  • property()
  • properties()
6.11.0

Added

  • Innmind\BlackBox\Application::useExhaustiveShrinking()

Changed

  • By default now the shrinking stops when the type of error changes
6.10.0

Added

  • Support for PHPUnit 13
6.9.0

Added

  • $assert->object()->instance() now check first if the class exist to allow to load aliases
6.8.0

Added

  • Support for Symfony 8
6.7.0

Removed

  • Dependency to innmind/json
6.6.0

Added

  • Innmind\BlackBox\PHPUnit\Load now uses all declared data providers on a method (instead of just the first one)
6.5.0

Added

  • Innmind\BlackBox\Set::exclude()

Changed

  • Innmind\BlackBox\Runner\Assert::fail() now returns never
6.4.1

Fixed

  • Scenario values weren't displayed on failure when coming from the PHPUnit bridge
6.4.0

Added

  • Innmind\BlackBox\Set::enumerate()

Fixed

  • Set::uuid() could only produce at most 100 values even when more asked
6.3.0

Changed

  • Set::composite() now longer produces an exhaustive matrix of all possibilities but random compositions

Fixed

  • Set::composite() no longer hangs when a very restrictive filter is applied on it
6.2.0

Added

  • Innmind\BlackBox\PHPUnit\Compatibility::prove()
6.1.0

Added

  • Innmind\BlackBox\Application::allowProofsToNotMakeAnyAssertions()
6.0.2

Fixed

  • The number of scenarii per proof wasn't respected for properties
6.0.1

Fixed

  • Performance regression in the previous release
  • Code in proofs generator were not covered by the code coverage report
6.0.0

Added

  • Innmind\BlackBox\Set\Provider to allow classes to be factories of Sets without having to implement the Set interface
  • Support for PHPUnit 12
  • Innmind\BlackBox\Set::flatMap() and Innmind\BlackBox\Set\Seed
  • Callables for Set::map(), Set\Composite, Set\Decorate, Set\FromGenerator and Set\Call can now also return Seeded values

Changed

  • BlackBox now also accepts instances of Set\Provider as input where it accepts Sets
  • Innmind\BlackBox\Set is now a final class
  • All classes that implemented the Set interface are now declared [@internal](https://github.com/internal)
  • The template param of Innmind\BlackBox\Set is now covariant for more flexibility
  • Innmind\BlackBox\Set\Value is now declared [@internal](https://github.com/internal)

Deprecated

  • Innmind\BlackBox\Set\Call::of(), use Innmind\BlackBox\Set::call() instead
  • Innmind\BlackBox\Set\Chars::any(), use Innmind\BlackBox\Set::strings()->chars() instead
  • Innmind\BlackBox\Set\Chars::lowercaseLetter(), use Innmind\BlackBox\Set::strings()->chars()->lowercaseLetter() instead
  • Innmind\BlackBox\Set\Chars::uppercaseLetter(), use Innmind\BlackBox\Set::strings()->chars()->uppercaseLetter() instead
  • Innmind\BlackBox\Set\Chars::number(), use Innmind\BlackBox\Set::strings()->chars()->number() instead
  • Innmind\BlackBox\Set\Chars::ascii(), use Innmind\BlackBox\Set::strings()->chars()->ascii() instead
  • Innmind\BlackBox\Set\Chars::alphanumerical(), use Innmind\BlackBox\Set::strings()->chars()->alphanumerical() instead
  • Innmind\BlackBox\Set\Composite::immutable(), use Innmind\BlackBox\Set::compose()->immutable() instead
  • Innmind\BlackBox\Set\Composite::mutable(), use Innmind\BlackBox\Set::compose()->mutable() instead
  • Innmind\BlackBox\Set\Decorate::immutable(), use Innmind\BlackBox\Set->map() instead
  • Innmind\BlackBox\Set\Decorate::mutable(), use Innmind\BlackBox\Set::decorate() instead
  • Innmind\BlackBox\Set\Either::any(), use Innmind\BlackBox\Set::either() instead
  • Innmind\BlackBox\Set\Elements::of(), use Innmind\BlackBox\Set::of() instead
  • Innmind\BlackBox\Set\Email::any(), use Innmind\BlackBox\Set::email() instead
  • Innmind\BlackBox\Set\FromGenerator::of(), use Innmind\BlackBox\Set::generator() instead
  • Innmind\BlackBox\Set\FromGenerator::mutable(), use Innmind\BlackBox\Set::generator()->mutable() instead
  • Innmind\BlackBox\Set\Integers::any(), use Innmind\BlackBox\Set::integers() instead
  • Innmind\BlackBox\Set\Integers::between(), use Innmind\BlackBox\Set::integers()->between() instead
  • Innmind\BlackBox\Set\Integers::above(), use Innmind\BlackBox\Set::integers()->above() instead
  • Innmind\BlackBox\Set\Integers::below(), use Innmind\BlackBox\Set::integers()->below() instead
  • Innmind\BlackBox\Set\IntegersExceptZero::any(), use Innmind\BlackBox\Set::integers()->exceptZero() instead
  • Innmind\BlackBox\Set\NaturalNumbers::any(), use Innmind\BlackBox\Set::integers()->naturalNumbers() instead
  • Innmind\BlackBox\Set\NaturalNumbersExceptZero::any(), use Innmind\BlackBox\Set::integers()->naturalNumbersExceptZero() instead
  • Innmind\BlackBox\Set\Nullable::of(), use Innmind\BlackBox\Set->nullable() instead
  • Innmind\BlackBox\Set\Randomize::of(), use Innmind\BlackBox\Set->randomize() instead
  • Innmind\BlackBox\Set\RealNumbers::any(), use Innmind\BlackBox\Set::realNumbers() instead
  • Innmind\BlackBox\Set\RealNumbers::between(), use Innmind\BlackBox\Set::realNumbers()->between() instead
  • Innmind\BlackBox\Set\RealNumbers::above(), use Innmind\BlackBox\Set::realNumbers()->above() instead
  • Innmind\BlackBox\Set\RealNumbers::below(), use Innmind\BlackBox\Set::realNumbers()->below() instead
  • Innmind\BlackBox\Set\Sequence::of(), use Innmind\BlackBox\Set::sequence() instead
  • Innmind\BlackBox\Set\Strings::any(), use Innmind\BlackBox\Set::strings() instead
  • Innmind\BlackBox\Set\Strings::between(), use Innmind\BlackBox\Set::strings()->between() instead
  • Innmind\BlackBox\Set\Strings::atMost(), use Innmind\BlackBox\Set::strings()->atMost() instead
  • Innmind\BlackBox\Set\Strings::atLeast(), use Innmind\BlackBox\Set::strings()->atLeast() instead
  • Innmind\BlackBox\Set\Strings::madeOf(), use Innmind\BlackBox\Set::strings()->madeOf() instead
  • Innmind\BlackBox\Set\Tuple::of(), use Innmind\BlackBox\Set::tuple() instead
  • Innmind\BlackBox\Set\Type::any(), use Innmind\BlackBox\Set::type() instead
  • Innmind\BlackBox\Set\Unicode::strings(), use Innmind\BlackBox\Set::strings()->unicode() instead
  • Innmind\BlackBox\Set\Unicode::any(), use Innmind\BlackBox\Set::strings()->unicode()->char() instead
  • Innmind\BlackBox\Set\UnsafeStrings::any(), use Innmind\BlackBox\Set::strings()->unsafe() instead
  • Innmind\BlackBox\Set\Uuid::any(), use Innmind\BlackBox\Set::uuid() instead
5.10.1

Fixed

  • Support for PHP 8.4
5.10.0

Added

  • Support for PHPUnit 11
5.9.0

Added

  • By default the printer groups the proofs output in a GitHub Action
  • Innmind\BlackBox\Runner\Printer\Standard::disableGitHubOutput()
5.8.0

Added

  • $assert->array()->contains()
  • $assert->array()->not()->contains()
5.7.0

Added

  • Innmind\BlackBox\PHPUnit\Framework\TestCase::assert()
  • Innmind\BlackBox\Set\Tuple

Fixed

  • $assert->same() message not being used
  • Innmind\BlackBox\Set\Sequence shrinking process now correctly shrinks all values that do not affect the test
  • Innmind\BlackBox\Set\Composite shrinking process now correctly shrinks all values that do not affect the test
5.6.3

Fixed

  • The global function property return type is now Innmind\BlackBox\Runner\Proof\Property allowing you to name the property
5.6.2

Fixed

  • Thrown exceptions in properties weren't failing proofs
5.6.1

Changed

  • When disabling memory limit it now longer tries to reset the memory limit to the previous value. (It seems PHP prevents setting the limit lower to the peak memory usage)
  • Innmind\BlackBox\Set\Call regenarate the value each time a scenario is run

Fixed

  • Clear the memory before printing a failing scenarion to make sure no values bleed between scenarii.
5.6.0

Added

  • Support for symfony/var-dumper:~7.0

Fixed

  • Stats are correctly displayed in GitHub Actions even in case of a failure
5.5.4

Fixed

  • Assertion failures in properties were displayed as unexpected exceptions
5.5.3

Fixed

  • Uncaught exceptions in properties no longer crash the process

Deprecated

  • Innmind\BlackBox\PHPUnit\Framework\TestCase::expectException()
  • Innmind\BlackBox\PHPUnit\Framework\TestCase::expectExceptionCode()
  • Innmind\BlackBox\PHPUnit\Framework\TestCase::expectExceptionMessage()
5.5.2

Fixed

  • Innmind\BlackBox\Set\MutuallyExclusive wasn't excluding strings in a different case
5.5.1

Fixed

  • Custom tags loaded from PHPUnit groups were discarded
5.5.0

Added

  • Innmind\BlackBox\PHPUnit\Load::parseTagWith()
  • Innmind\BlackBox\Application::stopOnFailure()
  • Innmind\BlackBox\Application::map()
  • Innmind\BlackBox\Application::when()
5.4.0

Added

  • For iTerm users a mark is now placed on failures allowing you to directly jump between errors
5.3.0

Added

  • Innmind\BlackBox\PHPUnit\Framework\TestCase
  • Innmind\BlackBox\PHPUnit\Load
  • Innmind\BlackBox\Application::disableMemoryLimit()
  • Innmind\BlackBox\Runner\Assert::matches()
  • Innmind\BlackBox\Runner\Assert::time()
  • Innmind\BlackBox\Runner\Assert::memory()
  • Innmind\BlackBox\Set\Slice
  • Innmind\BlackBox\Set\MutuallyExclusive
  • Innmind\BlackBox\Tag::ci
  • Innmind\BlackBox\Tag::local

Fixed

  • The message Failing scenarii: was always printed in PHPUnit output even when there was no failures
5.2.0

Added

  • Innmind\BlackBox\PHPUnit\Compatibility::asDataProvider()
  • Innmind\BlackBox\Application::disableGlobalFunctions()
  • Innmind\BlackBox\Runner\proof function
  • Innmind\BlackBox\Runner\test function
  • Innmind\BlackBox\Runner\given function
  • Innmind\BlackBox\Runner\property function
  • Innmind\BlackBox\Runner\properties function
  • PHPUnit extension now prints the generated data that resulted in an error

Changed

  • Innmind\BlackBox\PHPUnit\BlackBox::forAll() is now a static method
5.1.2

Fixed

  • Increased the randomness between scenarii to avoid collisions when validating a model with state.
5.1.1

Changed

  • Innmind\BlackBox\Set\Call now regenerate the value when shrinking
5.1.0

Added

  • Innmind\BlackBox\Set\Call
5.0.0

Added

  • Innmind\BlackBox\Set\Nullable
  • Innmind\BlackBox\Set::map()
  • Innmind\BlackBox\PHPUnit\Extension
  • Innmind\BlackBox\Application
  • Innmind\BlackBox\Tag
  • Innmind\BlackBox\Runner\Load
  • Innmind\BlackBox\Runner\CodeCoverage
  • Innmind\BlackBox\Runner\Assert
  • Innmind\BlackBox\Runner\Printer
  • Innmind\BlackBox\Runner\IO
  • Innmind\BlackBox\Property::any()

Changed

  • All Sets constructor are now private
  • PHP 8.2 is now required
  • Innmind\BlackBox\Set\AnyType has been renamed to Innmind\BlackBox\Set\Type
  • Innmind\BlackBox\Random is now an enum
  • Requires PHPUnit 10
  • Innmind\BlackBox\Properties constructor is now private, use ::of() named constructor instead
  • Innmind\BlackBox\Properties::ensureHeldBy now expects Innmind\BlackBox\Runner\Assert as a first argument
  • Innmind\BlackBox\Properties is now longer compatible with third party test runners
  • Innmind\BlackBox\Property::ensureHeldBy now expects Innmind\BlackBox\Runner\Assert as a first argument
  • Innmind\BlackBox\Property is now longer compatible with third party test runners
  • Innmind\BlackBox\Set::take() and ::filter() now explicitly state that they are mutation free
  • Innmind\BlackBox\Set::take() now requires a positive-int as argument
  • Innmind\BlackBox\Set\Chars now longer implements the Set interface, use Chars::any() instead
  • Innmind\BlackBox\Set\IntegersExceptZero now longer implements the Set interface, use IntegersExceptZero::any() instead
  • Innmind\BlackBox\Set\NaturalNumbers now longer implements the Set interface, use NaturalNumbers::any() instead
  • Innmind\BlackBox\Set\NaturalNumbersExceptZero now longer implements the Set interface, use NaturalNumbersExceptZero::any() instead
  • Innmind\BlackBox\Set\Sequence::of() now longer accept the range of values as 2nd argument, use Sequence::of()->atLeast(), Sequence::of()->atMost() and Sequence::of()->between() instead
  • Innmind\BlackBox\Set\Strings now longer implements the Set interface, use Strings::any() instead
  • Innmind\BlackBox\Set\Strings::any() now longer accept the maximum length, use Strings::atMost() instead

Fixed

  • Avoid trying to generate from a Set in Set\Either that can't generate data

Removed

  • seeder method provided by Innmind\BlackBox\PHPUnit\Blackbox trait
  • Support for PHPUnit 8 and 9 (custom printers are now longer available)
  • Support for Symfony 4 and 5
  • Innmind\BlackBox\Set\Regex
  • Innmind\BlackBox\Set\Strings::matching()
  • Innmind\BlackBox\Random\RandomInt
  • Innmind\BlackBox\Random\MtRand
  • Innmind\BlackBox\Property::name()
  • Innmind\BlackBox\PHPUnit\BlackBox::seeder()
  • Innmind\BlackBox\PHPUnit\Seeder
  • Innmind\BlackBox\Set\Properties::chooseFrom(), use Properties::any()->between() or Properties::any()->atMost() instead
  • Innmind\BlackBox\Set\Property
  • Innmind\BlackBox\Set\Unicode::lengthBetween(), use Unicode::any()->between() instead
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console