Aggiornato Composer
This commit is contained in:
248
vendor/phpunit/phpunit/ChangeLog-8.5.md
vendored
248
vendor/phpunit/phpunit/ChangeLog-8.5.md
vendored
@@ -1,248 +0,0 @@
|
||||
# Changes in PHPUnit 8.5
|
||||
|
||||
All notable changes of the PHPUnit 8.5 release series are documented in this file using the [Keep a CHANGELOG](https://keepachangelog.com/) principles.
|
||||
|
||||
## [8.5.26] - 2022-04-01
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4938](https://github.com/sebastianbergmann/phpunit/issues/4938): Test Double code generator does not handle `void` return type declaration on `__clone()` methods
|
||||
|
||||
## [8.5.25] - 2022-03-16
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4934](https://github.com/sebastianbergmann/phpunit/issues/4934): Code Coverage does not work with PHPUnit 8.5.24 PHAR on PHP 7
|
||||
|
||||
## [8.5.24] - 2022-03-05 - #StandWithUkraine
|
||||
|
||||
### Changed
|
||||
|
||||
* [#4874](https://github.com/sebastianbergmann/phpunit/pull/4874): `PHP_FLOAT_EPSILON` is now used instead of hardcoded `0.0000000001` in `PHPUnit\Framework\Constraint\IsIdentical`
|
||||
|
||||
### Fixed
|
||||
|
||||
* When the HTML code coverage report's configured low upper bound is larger than the high lower bound then the default values are used instead
|
||||
|
||||
## [8.5.23] - 2022-01-21
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4799](https://github.com/sebastianbergmann/phpunit/pull/4799): Memory leaks in `PHPUnit\Framework\TestSuite` class
|
||||
* [#4857](https://github.com/sebastianbergmann/phpunit/pull/4857): Result of `debug_backtrace()` is not used correctly
|
||||
|
||||
## [8.5.22] - 2021-12-25
|
||||
|
||||
### Changed
|
||||
|
||||
* [#4812](https://github.com/sebastianbergmann/phpunit/issues/4812): Do not enforce time limits when a debugging session through DBGp is active
|
||||
* [#4835](https://github.com/sebastianbergmann/phpunit/issues/4835): Support for `$GLOBALS['_composer_autoload_path']` introduced in Composer 2.2
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4840](https://github.com/sebastianbergmann/phpunit/pull/4840): TestDox prettifying for class names does not correctly handle diacritics
|
||||
* [#4846](https://github.com/sebastianbergmann/phpunit/pull/4846): Composer proxy script is not ignored
|
||||
|
||||
## [8.5.21] - 2021-09-25
|
||||
|
||||
### Changed
|
||||
|
||||
* PHPUnit no longer converts PHP deprecations to exceptions by default (configure `convertDeprecationsToExceptions="true"` to enable this)
|
||||
* The PHPUnit XML configuration file generator now configures `convertDeprecationsToExceptions="true"`
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4772](https://github.com/sebastianbergmann/phpunit/pull/4772): TestDox HTML report not displayed correctly when browser has custom colour settings
|
||||
|
||||
## [8.5.20] - 2021-08-31
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4751](https://github.com/sebastianbergmann/phpunit/issues/4751): Configuration validation fails when using brackets in glob pattern
|
||||
|
||||
## [8.5.19] - 2021-07-31
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4740](https://github.com/sebastianbergmann/phpunit/issues/4740): `phpunit.phar` does not work with PHP 8.1
|
||||
|
||||
## [8.5.18] - 2021-07-19
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4720](https://github.com/sebastianbergmann/phpunit/issues/4720): PHPUnit does not verify its own PHP extension requirements
|
||||
|
||||
## [8.5.17] - 2021-06-23
|
||||
|
||||
### Changed
|
||||
|
||||
* PHPUnit now errors out on startup when `PHP_VERSION` contains a value that is not compatible with `version_compare()`, for instance `X.Y.Z-(to be removed in future macOS)`
|
||||
|
||||
## [8.5.16] - 2021-06-05
|
||||
|
||||
### Changed
|
||||
|
||||
* The test result cache (the storage for which is implemented in `PHPUnit\Runner\DefaultTestResultCache`) no longer uses PHP's `serialize()` and `unserialize()` functions for persistence. It now uses a versioned JSON format instead that is independent of PHP implementation details (see [#3581](https://github.com/sebastianbergmann/phpunit/issues/3581) and [#4662](https://github.com/sebastianbergmann/phpunit/pull/4662) for examples why this is a problem). When PHPUnit tries to load the test result cache from a file that does not exist, or from a file that does not contain data in JSON format, or from a file that contains data in a JSON format version other than the one used by the currently running PHPUnit version, then this is considered to be a "cache miss". An empty `DefaultTestResultCache` object is created in this case. This should also prevent PHPUnit from crashing when trying to load a test result cache file created by a different version of PHPUnit (see [#4580](https://github.com/sebastianbergmann/phpunit/issues/4580) for example).
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4663](https://github.com/sebastianbergmann/phpunit/issues/4663): `TestCase::expectError()` works on PHP 7.3, but not on PHP >= 7.4
|
||||
* [#4678](https://github.com/sebastianbergmann/phpunit/pull/4678): Stubbed methods with `iterable` return types should return empty array by default
|
||||
* [#4692](https://github.com/sebastianbergmann/phpunit/issues/4692): Annotations in single-line doc-comments are not handled correctly
|
||||
* [#4694](https://github.com/sebastianbergmann/phpunit/issues/4694): `TestCase::getMockFromWsdl()` does not work with PHP 8.1-dev
|
||||
|
||||
## [8.5.15] - 2021-03-17
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4591](https://github.com/sebastianbergmann/phpunit/issues/4591): TeamCity logger logs warnings as test failures
|
||||
|
||||
## [8.5.14] - 2021-01-17
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4535](https://github.com/sebastianbergmann/phpunit/issues/4535): `getMockFromWsdl()` does not handle methods that do not have parameters correctly
|
||||
* [#4572](https://github.com/sebastianbergmann/phpunit/issues/4572): Schema validation does not work with `%xx` sequences in path to `phpunit.xsd`
|
||||
* [#4575](https://github.com/sebastianbergmann/phpunit/issues/4575): PHPUnit 8.5 incompatibility with PHP 8.1
|
||||
|
||||
## [8.5.13] - 2020-12-01
|
||||
|
||||
### Fixed
|
||||
|
||||
* Running tests in isolated processes did not work with PHP 8 on Windows
|
||||
|
||||
## [8.5.12] - 2020-11-30
|
||||
|
||||
### Changed
|
||||
|
||||
* Changed PHP version constraint in `composer.json` from `^7.2` to `>=7.2` to allow the installation of PHPUnit 8.5 on PHP 8. Please note that the code coverage functionality is not available for PHPUnit 8.5 on PHP 8.
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4529](https://github.com/sebastianbergmann/phpunit/issues/4529): Debug mode of Xdebug 2 is not disabled for PHPT tests
|
||||
|
||||
## [8.5.11] - 2020-11-27
|
||||
|
||||
### Changed
|
||||
|
||||
* Bumped required version of `phpunit/php-code-coverage`
|
||||
|
||||
## [8.5.10] - 2020-11-27
|
||||
|
||||
### Added
|
||||
|
||||
* Support for Xdebug 3
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4516](https://github.com/sebastianbergmann/phpunit/issues/4516): `phpunit/phpunit-selenium` does not work with PHPUnit 8.5.9
|
||||
|
||||
## [8.5.9] - 2020-11-10
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#3965](https://github.com/sebastianbergmann/phpunit/issues/3965): Process Isolation throws exceptions when PHPDBG is used
|
||||
* [#4470](https://github.com/sebastianbergmann/phpunit/pull/4470): Infinite recursion when `--static-backup --strict-global-state` is used
|
||||
|
||||
## [8.5.8] - 2020-06-22
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4312](https://github.com/sebastianbergmann/phpunit/issues/4312): Fix for [#4299](https://github.com/sebastianbergmann/phpunit/issues/4299) breaks backward compatibility
|
||||
|
||||
## [8.5.7] - 2020-06-21
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4299](https://github.com/sebastianbergmann/phpunit/issues/4299): "No tests executed" does not always result in exit code `1`
|
||||
* [#4306](https://github.com/sebastianbergmann/phpunit/issues/4306): Exceptions during code coverage driver initialization are not handled correctly
|
||||
|
||||
## [8.5.6] - 2020-06-15
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4211](https://github.com/sebastianbergmann/phpunit/issues/4211): `phpdbg_*()` functions are scoped to `PHPUnit\phpdbg_*()`
|
||||
|
||||
## [8.5.5] - 2020-05-22
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4033](https://github.com/sebastianbergmann/phpunit/issues/4033): Unexpected behaviour when `$GLOBALS` is deleted
|
||||
|
||||
## [8.5.4] - 2020-04-23
|
||||
|
||||
### Changed
|
||||
|
||||
* Changed how `PHPUnit\TextUI\Command` passes warnings to `PHPUnit\TextUI\TestRunner`
|
||||
|
||||
## [8.5.3] - 2020-03-31
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4017](https://github.com/sebastianbergmann/phpunit/issues/4017): Do not suggest refactoring to something that is also deprecated
|
||||
* [#4133](https://github.com/sebastianbergmann/phpunit/issues/4133): `expectExceptionMessageRegExp()` has been removed in PHPUnit 9 without a deprecation warning being given in PHPUnit 8
|
||||
* [#4139](https://github.com/sebastianbergmann/phpunit/issues/4139): Cannot double interfaces that declare a constructor with PHP 8
|
||||
* [#4144](https://github.com/sebastianbergmann/phpunit/issues/4144): Empty objects are converted to empty arrays in JSON comparison failure diff
|
||||
|
||||
## [8.5.2] - 2020-01-08
|
||||
|
||||
### Removed
|
||||
|
||||
* `eval-stdin.php` has been removed, it was not used anymore since PHPUnit 7.2.7
|
||||
|
||||
## [8.5.1] - 2019-12-25
|
||||
|
||||
### Changed
|
||||
|
||||
* `eval-stdin.php` can now only be executed with `cli` and `phpdbg`
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#3983](https://github.com/sebastianbergmann/phpunit/issues/3983): Deprecation warning given too eagerly
|
||||
|
||||
## [8.5.0] - 2019-12-06
|
||||
|
||||
### Added
|
||||
|
||||
* [#3911](https://github.com/sebastianbergmann/phpunit/issues/3911): Support combined use of `addMethods()` and `onlyMethods()`
|
||||
* [#3949](https://github.com/sebastianbergmann/phpunit/issues/3949): Introduce specialized assertions `assertFileEqualsCanonicalizing()`, `assertFileEqualsIgnoringCase()`, `assertStringEqualsFileCanonicalizing()`, `assertStringEqualsFileIgnoringCase()`, `assertFileNotEqualsCanonicalizing()`, `assertFileNotEqualsIgnoringCase()`, `assertStringNotEqualsFileCanonicalizing()`, and `assertStringNotEqualsFileIgnoringCase()` as alternative to using `assertFileEquals()` etc. with optional parameters
|
||||
|
||||
### Changed
|
||||
|
||||
* [#3860](https://github.com/sebastianbergmann/phpunit/pull/3860): Deprecate invoking PHPUnit commandline test runner with just a class name
|
||||
* [#3950](https://github.com/sebastianbergmann/phpunit/issues/3950): Deprecate optional parameters of `assertFileEquals()` etc.
|
||||
* [#3955](https://github.com/sebastianbergmann/phpunit/issues/3955): Deprecate support for doubling multiple interfaces
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#3953](https://github.com/sebastianbergmann/phpunit/issues/3953): Code Coverage for test executed in isolation does not work when the PHAR is used
|
||||
* [#3967](https://github.com/sebastianbergmann/phpunit/issues/3967): Cannot double interface that extends interface that extends `\Throwable`
|
||||
* [#3968](https://github.com/sebastianbergmann/phpunit/pull/3968): Test class run in a separate PHP process are passing when `exit` called inside
|
||||
|
||||
[8.5.26]: https://github.com/sebastianbergmann/phpunit/compare/8.5.25...8.5.26
|
||||
[8.5.25]: https://github.com/sebastianbergmann/phpunit/compare/8.5.24...8.5.25
|
||||
[8.5.24]: https://github.com/sebastianbergmann/phpunit/compare/8.5.23...8.5.24
|
||||
[8.5.23]: https://github.com/sebastianbergmann/phpunit/compare/8.5.22...8.5.23
|
||||
[8.5.22]: https://github.com/sebastianbergmann/phpunit/compare/8.5.21...8.5.22
|
||||
[8.5.21]: https://github.com/sebastianbergmann/phpunit/compare/8.5.20...8.5.21
|
||||
[8.5.20]: https://github.com/sebastianbergmann/phpunit/compare/8.5.19...8.5.20
|
||||
[8.5.19]: https://github.com/sebastianbergmann/phpunit/compare/8.5.18...8.5.19
|
||||
[8.5.18]: https://github.com/sebastianbergmann/phpunit/compare/8.5.17...8.5.18
|
||||
[8.5.17]: https://github.com/sebastianbergmann/phpunit/compare/8.5.16...8.5.17
|
||||
[8.5.16]: https://github.com/sebastianbergmann/phpunit/compare/8.5.15...8.5.16
|
||||
[8.5.15]: https://github.com/sebastianbergmann/phpunit/compare/8.5.14...8.5.15
|
||||
[8.5.14]: https://github.com/sebastianbergmann/phpunit/compare/8.5.13...8.5.14
|
||||
[8.5.13]: https://github.com/sebastianbergmann/phpunit/compare/8.5.12...8.5.13
|
||||
[8.5.12]: https://github.com/sebastianbergmann/phpunit/compare/8.5.11...8.5.12
|
||||
[8.5.11]: https://github.com/sebastianbergmann/phpunit/compare/8.5.10...8.5.11
|
||||
[8.5.10]: https://github.com/sebastianbergmann/phpunit/compare/8.5.9...8.5.10
|
||||
[8.5.9]: https://github.com/sebastianbergmann/phpunit/compare/8.5.8...8.5.9
|
||||
[8.5.8]: https://github.com/sebastianbergmann/phpunit/compare/8.5.7...8.5.8
|
||||
[8.5.7]: https://github.com/sebastianbergmann/phpunit/compare/8.5.6...8.5.7
|
||||
[8.5.6]: https://github.com/sebastianbergmann/phpunit/compare/8.5.5...8.5.6
|
||||
[8.5.5]: https://github.com/sebastianbergmann/phpunit/compare/8.5.4...8.5.5
|
||||
[8.5.4]: https://github.com/sebastianbergmann/phpunit/compare/8.5.3...8.5.4
|
||||
[8.5.3]: https://github.com/sebastianbergmann/phpunit/compare/8.5.2...8.5.3
|
||||
[8.5.2]: https://github.com/sebastianbergmann/phpunit/compare/8.5.1...8.5.2
|
||||
[8.5.1]: https://github.com/sebastianbergmann/phpunit/compare/8.5.0...8.5.1
|
||||
[8.5.0]: https://github.com/sebastianbergmann/phpunit/compare/8.4.3...8.5.0
|
||||
180
vendor/phpunit/phpunit/ChangeLog-9.5.md
vendored
180
vendor/phpunit/phpunit/ChangeLog-9.5.md
vendored
@@ -1,180 +0,0 @@
|
||||
# Changes in PHPUnit 9.5
|
||||
|
||||
All notable changes of the PHPUnit 9.5 release series are documented in this file using the [Keep a CHANGELOG](https://keepachangelog.com/) principles.
|
||||
|
||||
## [9.5.20] - 2022-04-01
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4938](https://github.com/sebastianbergmann/phpunit/issues/4938): Test Double code generator does not handle `void` return type declaration on `__clone()` methods
|
||||
* [#4947](https://github.com/sebastianbergmann/phpunit/issues/4947): Test annotated with `@coversNothing` may lead to files missing from code coverage report
|
||||
|
||||
## [9.5.19] - 2022-03-15
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4929](https://github.com/sebastianbergmann/phpunit/issues/4929): Test Double code generator does not handle new expressions inside parameter default values
|
||||
* [#4932](https://github.com/sebastianbergmann/phpunit/issues/4932): Backport support for intersection types from PHPUnit 10 to PHPUnit 9.5
|
||||
* [#4933](https://github.com/sebastianbergmann/phpunit/issues/4933): Backport support for `never` type from PHPUnit 10 to PHPUnit 9.5
|
||||
|
||||
## [9.5.18] - 2022-03-08
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4877](https://github.com/sebastianbergmann/phpunit/issues/4877): No stack trace shown when an error occurs during bootstrap
|
||||
|
||||
## [9.5.17] - 2022-03-05 - #StandWithUkraine
|
||||
|
||||
## [9.5.16] - 2022-02-23
|
||||
|
||||
### Changed
|
||||
|
||||
* Reverted sync with API change in (now yanked) phpunit/php-code-coverage 9.2.12
|
||||
|
||||
## [9.5.15] - 2022-02-23 [YANKED]
|
||||
|
||||
### Fixed
|
||||
|
||||
* When the HTML code coverage report's configured low upper bound is larger than the high lower bound then the default values are used instead
|
||||
|
||||
## [9.5.14] - 2022-02-18
|
||||
|
||||
### Changed
|
||||
|
||||
* [#4874](https://github.com/sebastianbergmann/phpunit/pull/4874): `PHP_FLOAT_EPSILON` is now used instead of hardcoded `0.0000000001` in `PHPUnit\Framework\Constraint\IsIdentical`
|
||||
|
||||
## [9.5.13] - 2022-01-24
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4871](https://github.com/sebastianbergmann/phpunit/issues/4871): Class `SebastianBergmann\CodeCoverage\Filter` is not found during PHPT tests when PHPUnit is used from PHAR
|
||||
|
||||
## [9.5.12] - 2022-01-21
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4799](https://github.com/sebastianbergmann/phpunit/pull/4799): Memory leaks in `PHPUnit\Framework\TestSuite` class
|
||||
* [#4857](https://github.com/sebastianbergmann/phpunit/pull/4857): Result of `debug_backtrace()` is not used correctly
|
||||
|
||||
## [9.5.11] - 2021-12-25
|
||||
|
||||
### Changed
|
||||
|
||||
* [#4812](https://github.com/sebastianbergmann/phpunit/issues/4812): Do not enforce time limits when a debugging session through DBGp is active
|
||||
* [#4835](https://github.com/sebastianbergmann/phpunit/issues/4835): Support for `$GLOBALS['_composer_autoload_path']` introduced in Composer 2.2
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4840](https://github.com/sebastianbergmann/phpunit/pull/4840): TestDox prettifying for class names does not correctly handle diacritics
|
||||
* [#4846](https://github.com/sebastianbergmann/phpunit/pull/4846): Composer proxy script is not ignored
|
||||
|
||||
## [9.5.10] - 2021-09-25
|
||||
|
||||
### Changed
|
||||
|
||||
* PHPUnit no longer converts PHP deprecations to exceptions by default (configure `convertDeprecationsToExceptions="true"` to enable this)
|
||||
* The PHPUnit XML configuration file generator now configures `convertDeprecationsToExceptions="true"`
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4772](https://github.com/sebastianbergmann/phpunit/pull/4772): TestDox HTML report not displayed correctly when browser has custom colour settings
|
||||
|
||||
## [9.5.9] - 2021-08-31
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4750](https://github.com/sebastianbergmann/phpunit/issues/4750): Automatic return value generation leads to invalid (and superfluous) test double code generation when a stubbed method returns `*|false`
|
||||
* [#4751](https://github.com/sebastianbergmann/phpunit/issues/4751): Configuration validation fails when using brackets in glob pattern
|
||||
|
||||
## [9.5.8] - 2021-07-31
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4740](https://github.com/sebastianbergmann/phpunit/issues/4740): `phpunit.phar` does not work with PHP 8.1
|
||||
|
||||
## [9.5.7] - 2021-07-19
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4720](https://github.com/sebastianbergmann/phpunit/issues/4720): PHPUnit does not verify its own PHP extension requirements
|
||||
* [#4735](https://github.com/sebastianbergmann/phpunit/issues/4735): Automated return value generation does not work for stubbed methods that return `*|false`
|
||||
|
||||
## [9.5.6] - 2021-06-23
|
||||
|
||||
### Changed
|
||||
|
||||
* PHPUnit now errors out on startup when `PHP_VERSION` contains a value that is not compatible with `version_compare()`, for instance `X.Y.Z-(to be removed in future macOS)`
|
||||
|
||||
## [9.5.5] - 2021-06-05
|
||||
|
||||
### Changed
|
||||
|
||||
* The test result cache (the storage for which is implemented in `PHPUnit\Runner\DefaultTestResultCache`) no longer uses PHP's `serialize()` and `unserialize()` functions for persistence. It now uses a versioned JSON format instead that is independent of PHP implementation details (see [#3581](https://github.com/sebastianbergmann/phpunit/issues/3581) and [#4662](https://github.com/sebastianbergmann/phpunit/pull/4662) for examples why this is a problem). When PHPUnit tries to load the test result cache from a file that does not exist, or from a file that does not contain data in JSON format, or from a file that contains data in a JSON format version other than the one used by the currently running PHPUnit version, then this is considered to be a "cache miss". An empty `DefaultTestResultCache` object is created in this case. This should also prevent PHPUnit from crashing when trying to load a test result cache file created by a different version of PHPUnit (see [#4580](https://github.com/sebastianbergmann/phpunit/issues/4580) for example).
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4632](https://github.com/sebastianbergmann/phpunit/issues/4632): TestDox result printer does not handle repeated test execution correctly
|
||||
* [#4678](https://github.com/sebastianbergmann/phpunit/pull/4678): Stubbed methods with `iterable` return types should return empty array by default
|
||||
* [#4692](https://github.com/sebastianbergmann/phpunit/issues/4692): Annotations in single-line doc-comments are not handled correctly
|
||||
* [#4694](https://github.com/sebastianbergmann/phpunit/issues/4694): `TestCase::getMockFromWsdl()` does not work with PHP 8.1-dev
|
||||
|
||||
## [9.5.4] - 2021-03-23
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4630](https://github.com/sebastianbergmann/phpunit/issues/4630): Empty test case class causes error in TestDox XML logger
|
||||
|
||||
## [9.5.3] - 2021-03-17
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4591](https://github.com/sebastianbergmann/phpunit/issues/4591): TeamCity logger logs warnings as test failures
|
||||
* [#4620](https://github.com/sebastianbergmann/phpunit/issues/4620): No useful output when an error occurs in the bootstrap script
|
||||
|
||||
## [9.5.2] - 2021-02-02
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4573](https://github.com/sebastianbergmann/phpunit/issues/4573): No stack trace printed when PHPUnit is used from PHAR
|
||||
* [#4590](https://github.com/sebastianbergmann/phpunit/issues/4590): `--coverage-text` CLI option is documented wrong
|
||||
|
||||
## [9.5.1] - 2021-01-17
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4572](https://github.com/sebastianbergmann/phpunit/issues/4572): Schema validation does not work with `%xx` sequences in path to `phpunit.xsd`
|
||||
|
||||
## [9.5.0] - 2020-12-04
|
||||
|
||||
### Changed
|
||||
|
||||
* [#4490](https://github.com/sebastianbergmann/phpunit/issues/4490): Emit Error instead of Warning when test case class cannot be instantiated
|
||||
* [#4491](https://github.com/sebastianbergmann/phpunit/issues/4491): Emit Error instead of Warning when data provider does not work correctly
|
||||
* [#4492](https://github.com/sebastianbergmann/phpunit/issues/4492): Emit Error instead of Warning when test double configuration is invalid
|
||||
* [#4493](https://github.com/sebastianbergmann/phpunit/issues/4493): Emit error when (configured) test directory does not exist
|
||||
|
||||
### Fixed
|
||||
|
||||
* [#4535](https://github.com/sebastianbergmann/phpunit/issues/4535): `getMockFromWsdl()` does not handle methods that do not have parameters correctly
|
||||
|
||||
[9.5.20]: https://github.com/sebastianbergmann/phpunit/compare/9.5.19...9.5.20
|
||||
[9.5.19]: https://github.com/sebastianbergmann/phpunit/compare/9.5.18...9.5.19
|
||||
[9.5.18]: https://github.com/sebastianbergmann/phpunit/compare/9.5.17...9.5.18
|
||||
[9.5.17]: https://github.com/sebastianbergmann/phpunit/compare/9.5.16...9.5.17
|
||||
[9.5.16]: https://github.com/sebastianbergmann/phpunit/compare/dc738383c519243b0a967f63943a848d3fd861aa...9.5.16
|
||||
[9.5.15]: https://github.com/sebastianbergmann/phpunit/compare/9.5.14...dc738383c519243b0a967f63943a848d3fd861aa
|
||||
[9.5.14]: https://github.com/sebastianbergmann/phpunit/compare/9.5.13...9.5.14
|
||||
[9.5.13]: https://github.com/sebastianbergmann/phpunit/compare/9.5.12...9.5.13
|
||||
[9.5.12]: https://github.com/sebastianbergmann/phpunit/compare/9.5.11...9.5.12
|
||||
[9.5.11]: https://github.com/sebastianbergmann/phpunit/compare/9.5.10...9.5.11
|
||||
[9.5.10]: https://github.com/sebastianbergmann/phpunit/compare/9.5.9...9.5.10
|
||||
[9.5.9]: https://github.com/sebastianbergmann/phpunit/compare/9.5.8...9.5.9
|
||||
[9.5.8]: https://github.com/sebastianbergmann/phpunit/compare/9.5.7...9.5.8
|
||||
[9.5.7]: https://github.com/sebastianbergmann/phpunit/compare/9.5.6...9.5.7
|
||||
[9.5.6]: https://github.com/sebastianbergmann/phpunit/compare/9.5.5...9.5.6
|
||||
[9.5.5]: https://github.com/sebastianbergmann/phpunit/compare/9.5.4...9.5.5
|
||||
[9.5.4]: https://github.com/sebastianbergmann/phpunit/compare/9.5.3...9.5.4
|
||||
[9.5.3]: https://github.com/sebastianbergmann/phpunit/compare/9.5.2...9.5.3
|
||||
[9.5.2]: https://github.com/sebastianbergmann/phpunit/compare/9.5.1...9.5.2
|
||||
[9.5.1]: https://github.com/sebastianbergmann/phpunit/compare/9.5.0...9.5.1
|
||||
[9.5.0]: https://github.com/sebastianbergmann/phpunit/compare/9.4.4...9.5.0
|
||||
46
vendor/phpunit/phpunit/LICENSE
vendored
46
vendor/phpunit/phpunit/LICENSE
vendored
@@ -1,33 +1,29 @@
|
||||
PHPUnit
|
||||
BSD 3-Clause License
|
||||
|
||||
Copyright (c) 2001-2022, Sebastian Bergmann <sebastian@phpunit.de>.
|
||||
Copyright (c) 2001-2024, Sebastian Bergmann
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name of Sebastian Bergmann nor the names of his
|
||||
contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
3. Neither the name of the copyright holder nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
23
vendor/phpunit/phpunit/README.md
vendored
23
vendor/phpunit/phpunit/README.md
vendored
@@ -1,11 +1,11 @@
|
||||
# PHPUnit
|
||||
|
||||
PHPUnit is a programmer-oriented testing framework for PHP. It is an instance of the xUnit architecture for unit testing frameworks.
|
||||
|
||||
[](https://packagist.org/packages/phpunit/phpunit)
|
||||
[](https://php.net/)
|
||||
[](https://phpunit.de/build-status.html)
|
||||
[](https://packagist.org/packages/phpunit/phpunit)
|
||||
[](https://github.com/sebastianbergmann/phpunit/actions)
|
||||
[](https://shepherd.dev/github/sebastianbergmann/phpunit)
|
||||
[](https://codecov.io/gh/sebastianbergmann/phpunit)
|
||||
|
||||
PHPUnit is a programmer-oriented testing framework for PHP. It is an instance of the xUnit architecture for unit testing frameworks.
|
||||
|
||||
## Installation
|
||||
|
||||
@@ -19,11 +19,11 @@ $ php phpunit-X.Y.phar --version
|
||||
|
||||
Please replace `X.Y` with the version of PHPUnit you are interested in.
|
||||
|
||||
Alternatively, you may use [Composer](https://getcomposer.org/) to download and install PHPUnit as well as its dependencies. Please refer to the "[Getting Started](https://phpunit.de/getting-started-with-phpunit.html)" guide for details on how to install PHPUnit.
|
||||
Alternatively, you may use [Composer](https://getcomposer.org/) to download and install PHPUnit as well as its dependencies. Please refer to the [documentation](https://phpunit.de/documentation.html) for details on how to install PHPUnit.
|
||||
|
||||
## Contribute
|
||||
|
||||
Please refer to [CONTRIBUTING.md](https://github.com/sebastianbergmann/phpunit/blob/master/.github/CONTRIBUTING.md) for information on how to contribute to PHPUnit and its related projects.
|
||||
Please refer to [CONTRIBUTING.md](https://github.com/sebastianbergmann/phpunit/blob/main/.github/CONTRIBUTING.md) for information on how to contribute to PHPUnit and its related projects.
|
||||
|
||||
## List of Contributors
|
||||
|
||||
@@ -32,12 +32,5 @@ Thanks to everyone who has contributed to PHPUnit! You can find a detailed list
|
||||
* [PHPUnit](https://github.com/sebastianbergmann/phpunit/graphs/contributors)
|
||||
* [php-code-coverage](https://github.com/sebastianbergmann/php-code-coverage/graphs/contributors)
|
||||
|
||||
A very special thanks to everyone who has contributed to the documentation and helps maintain the translations:
|
||||
|
||||
* [English](https://github.com/sebastianbergmann/phpunit-documentation-english/graphs/contributors)
|
||||
* [Spanish](https://github.com/sebastianbergmann/phpunit-documentation-spanish/graphs/contributors)
|
||||
* [French](https://github.com/sebastianbergmann/phpunit-documentation-french/graphs/contributors)
|
||||
* [Japanese](https://github.com/sebastianbergmann/phpunit-documentation-japanese/graphs/contributors)
|
||||
* [Brazilian Portuguese](https://github.com/sebastianbergmann/phpunit-documentation-brazilian-portuguese/graphs/contributors)
|
||||
* [Simplified Chinese](https://github.com/sebastianbergmann/phpunit-documentation-chinese/graphs/contributors)
|
||||
A very special thanks to everyone who has contributed to the [documentation](https://github.com/sebastianbergmann/phpunit-documentation-english/graphs/contributors).
|
||||
|
||||
|
||||
24
vendor/phpunit/phpunit/composer.json
vendored
24
vendor/phpunit/phpunit/composer.json
vendored
@@ -17,7 +17,8 @@
|
||||
}
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/phpunit/issues"
|
||||
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
||||
"security": "https://github.com/sebastianbergmann/phpunit/security/policy"
|
||||
},
|
||||
"prefer-stable": true,
|
||||
"require": {
|
||||
@@ -28,32 +29,27 @@
|
||||
"ext-mbstring": "*",
|
||||
"ext-xml": "*",
|
||||
"ext-xmlwriter": "*",
|
||||
"doctrine/instantiator": "^1.3.1",
|
||||
"doctrine/instantiator": "^1.3.1 || ^2",
|
||||
"myclabs/deep-copy": "^1.10.1",
|
||||
"phar-io/manifest": "^2.0.3",
|
||||
"phar-io/version": "^3.0.2",
|
||||
"phpspec/prophecy": "^1.12.1",
|
||||
"phpunit/php-code-coverage": "^9.2.13",
|
||||
"phpunit/php-code-coverage": "^9.2.28",
|
||||
"phpunit/php-file-iterator": "^3.0.5",
|
||||
"phpunit/php-invoker": "^3.1.1",
|
||||
"phpunit/php-text-template": "^2.0.3",
|
||||
"phpunit/php-timer": "^5.0.2",
|
||||
"sebastian/cli-parser": "^1.0.1",
|
||||
"sebastian/code-unit": "^1.0.6",
|
||||
"sebastian/comparator": "^4.0.5",
|
||||
"sebastian/comparator": "^4.0.8",
|
||||
"sebastian/diff": "^4.0.3",
|
||||
"sebastian/environment": "^5.1.3",
|
||||
"sebastian/exporter": "^4.0.3",
|
||||
"sebastian/exporter": "^4.0.5",
|
||||
"sebastian/global-state": "^5.0.1",
|
||||
"sebastian/object-enumerator": "^4.0.3",
|
||||
"sebastian/resource-operations": "^3.0.3",
|
||||
"sebastian/type": "^3.0",
|
||||
"sebastian/type": "^3.2",
|
||||
"sebastian/version": "^3.0.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"ext-PDO": "*",
|
||||
"phpspec/prophecy-phpunit": "^2.0.1"
|
||||
},
|
||||
"config": {
|
||||
"platform": {
|
||||
"php": "7.3.0"
|
||||
@@ -62,8 +58,8 @@
|
||||
"sort-packages": true
|
||||
},
|
||||
"suggest": {
|
||||
"ext-soap": "*",
|
||||
"ext-xdebug": "*"
|
||||
"ext-soap": "To be able to generate mocks based on WSDL files",
|
||||
"ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
|
||||
},
|
||||
"bin": [
|
||||
"phpunit"
|
||||
@@ -88,7 +84,7 @@
|
||||
},
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "9.5-dev"
|
||||
"dev-master": "9.6-dev"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
21
vendor/phpunit/phpunit/phpunit
vendored
Executable file → Normal file
21
vendor/phpunit/phpunit/phpunit
vendored
Executable file → Normal file
@@ -38,22 +38,31 @@ if (version_compare('7.3.0', PHP_VERSION, '>')) {
|
||||
die(1);
|
||||
}
|
||||
|
||||
foreach (['dom', 'json', 'libxml', 'mbstring', 'tokenizer', 'xml', 'xmlwriter'] as $extension) {
|
||||
if (extension_loaded($extension)) {
|
||||
continue;
|
||||
}
|
||||
$requiredExtensions = ['dom', 'json', 'libxml', 'mbstring', 'tokenizer', 'xml', 'xmlwriter'];
|
||||
|
||||
$unavailableExtensions = array_filter(
|
||||
$requiredExtensions,
|
||||
static function ($extension) {
|
||||
return !extension_loaded($extension);
|
||||
}
|
||||
);
|
||||
|
||||
if ([] !== $unavailableExtensions) {
|
||||
fwrite(
|
||||
STDERR,
|
||||
sprintf(
|
||||
'PHPUnit requires the "%s" extension.' . PHP_EOL,
|
||||
$extension
|
||||
'PHPUnit requires the "%s" extensions, but the "%s" %s not available.' . PHP_EOL,
|
||||
implode('", "', $requiredExtensions),
|
||||
implode('", "', $unavailableExtensions),
|
||||
count($unavailableExtensions) === 1 ? 'extension is' : 'extensions are'
|
||||
)
|
||||
);
|
||||
|
||||
die(1);
|
||||
}
|
||||
|
||||
unset($requiredExtensions, $unavailableExtensions);
|
||||
|
||||
if (!ini_get('date.timezone')) {
|
||||
ini_set('date.timezone', 'UTC');
|
||||
}
|
||||
|
||||
10
vendor/phpunit/phpunit/phpunit.xsd
vendored
10
vendor/phpunit/phpunit/phpunit.xsd
vendored
@@ -2,7 +2,7 @@
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
||||
<xs:annotation>
|
||||
<xs:documentation source="https://phpunit.de/documentation.html">
|
||||
This Schema file defines the rules by which the XML configuration file of PHPUnit 9.5 may be structured.
|
||||
This Schema file defines the rules by which the XML configuration file of PHPUnit 9.6 may be structured.
|
||||
</xs:documentation>
|
||||
<xs:appinfo source="https://phpunit.de/documentation.html"/>
|
||||
</xs:annotation>
|
||||
@@ -57,7 +57,7 @@
|
||||
</xs:complexType>
|
||||
<xs:complexType name="extensionsType">
|
||||
<xs:sequence>
|
||||
<xs:element name="extension" type="objectType" maxOccurs="unbounded"/>
|
||||
<xs:element name="extension" type="objectType" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
<xs:complexType name="listenersType">
|
||||
@@ -279,8 +279,10 @@
|
||||
</xs:complexType>
|
||||
<xs:complexType name="testSuiteType">
|
||||
<xs:sequence>
|
||||
<xs:group ref="pathGroup"/>
|
||||
<xs:element name="exclude" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:choice minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:group ref="pathGroup"/>
|
||||
<xs:element name="exclude" type="xs:string"/>
|
||||
</xs:choice>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
8
vendor/phpunit/phpunit/schema/8.5.xsd
vendored
8
vendor/phpunit/phpunit/schema/8.5.xsd
vendored
@@ -244,7 +244,7 @@
|
||||
<xs:attribute name="cacheTokens" type="xs:boolean" default="false"/>
|
||||
<xs:attribute name="colors" type="xs:boolean" default="false"/>
|
||||
<xs:attribute name="columns" type="columnsType" default="80"/>
|
||||
<xs:attribute name="convertDeprecationsToExceptions" type="xs:boolean" default="true"/>
|
||||
<xs:attribute name="convertDeprecationsToExceptions" type="xs:boolean" default="false"/>
|
||||
<xs:attribute name="convertErrorsToExceptions" type="xs:boolean" default="true"/>
|
||||
<xs:attribute name="convertNoticesToExceptions" type="xs:boolean" default="true"/>
|
||||
<xs:attribute name="convertWarningsToExceptions" type="xs:boolean" default="true"/>
|
||||
@@ -309,8 +309,10 @@
|
||||
</xs:complexType>
|
||||
<xs:complexType name="testSuiteType">
|
||||
<xs:sequence>
|
||||
<xs:group ref="pathGroup"/>
|
||||
<xs:element name="exclude" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:choice minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:group ref="pathGroup"/>
|
||||
<xs:element name="exclude" type="xs:string"/>
|
||||
</xs:choice>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
8
vendor/phpunit/phpunit/schema/9.2.xsd
vendored
8
vendor/phpunit/phpunit/schema/9.2.xsd
vendored
@@ -163,7 +163,7 @@
|
||||
</xs:group>
|
||||
<xs:complexType name="directoryFilterType">
|
||||
<xs:simpleContent>
|
||||
<xs:extension base="xs:string">
|
||||
<xs:extension base="xs:anyURI">
|
||||
<xs:attribute type="xs:string" name="prefix" default=""/>
|
||||
<xs:attribute type="xs:string" name="suffix" default="Test.php"/>
|
||||
<xs:attributeGroup ref="phpVersionGroup"/>
|
||||
@@ -248,7 +248,7 @@
|
||||
<xs:attribute name="convertWarningsToExceptions" type="xs:boolean" default="true"/>
|
||||
<xs:attribute name="disableCodeCoverageIgnore" type="xs:boolean" default="false"/>
|
||||
<xs:attribute name="forceCoversAnnotation" type="xs:boolean" default="false"/>
|
||||
<xs:attribute name="printerClass" type="xs:string" default="PHPUnit\TextUI\ResultPrinter"/>
|
||||
<xs:attribute name="printerClass" type="xs:string" default="PHPUnit\TextUI\DefaultResultPrinter"/>
|
||||
<xs:attribute name="printerFile" type="xs:anyURI"/>
|
||||
<xs:attribute name="processIsolation" type="xs:boolean" default="false"/>
|
||||
<xs:attribute name="stopOnDefect" type="xs:boolean" default="false"/>
|
||||
@@ -282,7 +282,7 @@
|
||||
<xs:attribute name="stderr" type="xs:boolean" default="false"/>
|
||||
<xs:attribute name="reverseDefectList" type="xs:boolean" default="false"/>
|
||||
<xs:attribute name="registerMockObjectsFromTestArgumentsRecursively" type="xs:boolean" default="false"/>
|
||||
<xs:attribute name="extensionsDirectory" type="xs:anyURI"/>
|
||||
<xs:attribute name="extensionsDirectory" type="xs:string"/>
|
||||
<xs:attribute name="executionOrder" type="executionOrderType" default="default"/>
|
||||
<xs:attribute name="resolveDependencies" type="xs:boolean" default="true"/>
|
||||
<xs:attribute name="noInteraction" type="xs:boolean" default="false"/>
|
||||
@@ -310,7 +310,7 @@
|
||||
<xs:complexType name="testSuiteType">
|
||||
<xs:sequence>
|
||||
<xs:group ref="pathGroup"/>
|
||||
<xs:element name="exclude" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element name="exclude" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="name" type="xs:string" use="required"/>
|
||||
</xs:complexType>
|
||||
|
||||
321
vendor/phpunit/phpunit/src/Framework/Assert.php
vendored
321
vendor/phpunit/phpunit/src/Framework/Assert.php
vendored
@@ -37,6 +37,7 @@ use Countable;
|
||||
use DOMAttr;
|
||||
use DOMDocument;
|
||||
use DOMElement;
|
||||
use Generator;
|
||||
use PHPUnit\Framework\Constraint\ArrayHasKey;
|
||||
use PHPUnit\Framework\Constraint\Callback;
|
||||
use PHPUnit\Framework\Constraint\ClassHasAttribute;
|
||||
@@ -72,6 +73,7 @@ use PHPUnit\Framework\Constraint\LogicalOr;
|
||||
use PHPUnit\Framework\Constraint\LogicalXor;
|
||||
use PHPUnit\Framework\Constraint\ObjectEquals;
|
||||
use PHPUnit\Framework\Constraint\ObjectHasAttribute;
|
||||
use PHPUnit\Framework\Constraint\ObjectHasProperty;
|
||||
use PHPUnit\Framework\Constraint\RegularExpression;
|
||||
use PHPUnit\Framework\Constraint\SameSize;
|
||||
use PHPUnit\Framework\Constraint\StringContains;
|
||||
@@ -110,14 +112,14 @@ abstract class Assert
|
||||
if (!(is_int($key) || is_string($key))) {
|
||||
throw InvalidArgumentException::create(
|
||||
1,
|
||||
'integer or string'
|
||||
'integer or string',
|
||||
);
|
||||
}
|
||||
|
||||
if (!(is_array($array) || $array instanceof ArrayAccess)) {
|
||||
throw InvalidArgumentException::create(
|
||||
2,
|
||||
'array or ArrayAccess'
|
||||
'array or ArrayAccess',
|
||||
);
|
||||
}
|
||||
|
||||
@@ -141,19 +143,19 @@ abstract class Assert
|
||||
if (!(is_int($key) || is_string($key))) {
|
||||
throw InvalidArgumentException::create(
|
||||
1,
|
||||
'integer or string'
|
||||
'integer or string',
|
||||
);
|
||||
}
|
||||
|
||||
if (!(is_array($array) || $array instanceof ArrayAccess)) {
|
||||
throw InvalidArgumentException::create(
|
||||
2,
|
||||
'array or ArrayAccess'
|
||||
'array or ArrayAccess',
|
||||
);
|
||||
}
|
||||
|
||||
$constraint = new LogicalNot(
|
||||
new ArrayHasKey($key)
|
||||
new ArrayHasKey($key),
|
||||
);
|
||||
|
||||
static::assertThat($array, $constraint, $message);
|
||||
@@ -190,7 +192,7 @@ abstract class Assert
|
||||
public static function assertNotContains($needle, iterable $haystack, string $message = ''): void
|
||||
{
|
||||
$constraint = new LogicalNot(
|
||||
new TraversableContainsIdentical($needle)
|
||||
new TraversableContainsIdentical($needle),
|
||||
);
|
||||
|
||||
static::assertThat($haystack, $constraint, $message);
|
||||
@@ -219,9 +221,9 @@ abstract class Assert
|
||||
$haystack,
|
||||
new TraversableContainsOnly(
|
||||
$type,
|
||||
$isNativeType
|
||||
$isNativeType,
|
||||
),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -237,9 +239,9 @@ abstract class Assert
|
||||
$haystack,
|
||||
new TraversableContainsOnly(
|
||||
$className,
|
||||
false
|
||||
false,
|
||||
),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -260,10 +262,10 @@ abstract class Assert
|
||||
new LogicalNot(
|
||||
new TraversableContainsOnly(
|
||||
$type,
|
||||
$isNativeType
|
||||
)
|
||||
$isNativeType,
|
||||
),
|
||||
),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -278,6 +280,10 @@ abstract class Assert
|
||||
*/
|
||||
public static function assertCount(int $expectedCount, $haystack, string $message = ''): void
|
||||
{
|
||||
if ($haystack instanceof Generator) {
|
||||
self::createWarning('Passing an argument of type Generator for the $haystack parameter is deprecated. Support for this will be removed in PHPUnit 10.');
|
||||
}
|
||||
|
||||
if (!$haystack instanceof Countable && !is_iterable($haystack)) {
|
||||
throw InvalidArgumentException::create(2, 'countable or iterable');
|
||||
}
|
||||
@@ -285,7 +291,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$haystack,
|
||||
new Count($expectedCount),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -300,12 +306,16 @@ abstract class Assert
|
||||
*/
|
||||
public static function assertNotCount(int $expectedCount, $haystack, string $message = ''): void
|
||||
{
|
||||
if ($haystack instanceof Generator) {
|
||||
self::createWarning('Passing an argument of type Generator for the $haystack parameter is deprecated. Support for this will be removed in PHPUnit 10.');
|
||||
}
|
||||
|
||||
if (!$haystack instanceof Countable && !is_iterable($haystack)) {
|
||||
throw InvalidArgumentException::create(2, 'countable or iterable');
|
||||
}
|
||||
|
||||
$constraint = new LogicalNot(
|
||||
new Count($expectedCount)
|
||||
new Count($expectedCount),
|
||||
);
|
||||
|
||||
static::assertThat($haystack, $constraint, $message);
|
||||
@@ -360,7 +370,7 @@ abstract class Assert
|
||||
{
|
||||
$constraint = new IsEqualWithDelta(
|
||||
$expected,
|
||||
$delta
|
||||
$delta,
|
||||
);
|
||||
|
||||
static::assertThat($actual, $constraint, $message);
|
||||
@@ -375,7 +385,7 @@ abstract class Assert
|
||||
public static function assertNotEquals($expected, $actual, string $message = ''): void
|
||||
{
|
||||
$constraint = new LogicalNot(
|
||||
new IsEqual($expected)
|
||||
new IsEqual($expected),
|
||||
);
|
||||
|
||||
static::assertThat($actual, $constraint, $message);
|
||||
@@ -390,7 +400,7 @@ abstract class Assert
|
||||
public static function assertNotEqualsCanonicalizing($expected, $actual, string $message = ''): void
|
||||
{
|
||||
$constraint = new LogicalNot(
|
||||
new IsEqualCanonicalizing($expected)
|
||||
new IsEqualCanonicalizing($expected),
|
||||
);
|
||||
|
||||
static::assertThat($actual, $constraint, $message);
|
||||
@@ -405,7 +415,7 @@ abstract class Assert
|
||||
public static function assertNotEqualsIgnoringCase($expected, $actual, string $message = ''): void
|
||||
{
|
||||
$constraint = new LogicalNot(
|
||||
new IsEqualIgnoringCase($expected)
|
||||
new IsEqualIgnoringCase($expected),
|
||||
);
|
||||
|
||||
static::assertThat($actual, $constraint, $message);
|
||||
@@ -422,8 +432,8 @@ abstract class Assert
|
||||
$constraint = new LogicalNot(
|
||||
new IsEqualWithDelta(
|
||||
$expected,
|
||||
$delta
|
||||
)
|
||||
$delta,
|
||||
),
|
||||
);
|
||||
|
||||
static::assertThat($actual, $constraint, $message);
|
||||
@@ -437,7 +447,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
static::objectEquals($expected, $method),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -451,6 +461,10 @@ abstract class Assert
|
||||
*/
|
||||
public static function assertEmpty($actual, string $message = ''): void
|
||||
{
|
||||
if ($actual instanceof Generator) {
|
||||
self::createWarning('Passing an argument of type Generator for the $actual parameter is deprecated. Support for this will be removed in PHPUnit 10.');
|
||||
}
|
||||
|
||||
static::assertThat($actual, static::isEmpty(), $message);
|
||||
}
|
||||
|
||||
@@ -464,6 +478,10 @@ abstract class Assert
|
||||
*/
|
||||
public static function assertNotEmpty($actual, string $message = ''): void
|
||||
{
|
||||
if ($actual instanceof Generator) {
|
||||
self::createWarning('Passing an argument of type Generator for the $actual parameter is deprecated. Support for this will be removed in PHPUnit 10.');
|
||||
}
|
||||
|
||||
static::assertThat($actual, static::logicalNot(static::isEmpty()), $message);
|
||||
}
|
||||
|
||||
@@ -489,7 +507,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
static::greaterThanOrEqual($expected),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -545,7 +563,7 @@ abstract class Assert
|
||||
static::assertFileExists($actual, $message);
|
||||
|
||||
$constraint = new IsEqualCanonicalizing(
|
||||
file_get_contents($expected)
|
||||
file_get_contents($expected),
|
||||
);
|
||||
|
||||
static::assertThat(file_get_contents($actual), $constraint, $message);
|
||||
@@ -581,7 +599,7 @@ abstract class Assert
|
||||
static::assertFileExists($actual, $message);
|
||||
|
||||
$constraint = new LogicalNot(
|
||||
new IsEqual(file_get_contents($expected))
|
||||
new IsEqual(file_get_contents($expected)),
|
||||
);
|
||||
|
||||
static::assertThat(file_get_contents($actual), $constraint, $message);
|
||||
@@ -600,7 +618,7 @@ abstract class Assert
|
||||
static::assertFileExists($actual, $message);
|
||||
|
||||
$constraint = new LogicalNot(
|
||||
new IsEqualCanonicalizing(file_get_contents($expected))
|
||||
new IsEqualCanonicalizing(file_get_contents($expected)),
|
||||
);
|
||||
|
||||
static::assertThat(file_get_contents($actual), $constraint, $message);
|
||||
@@ -619,7 +637,7 @@ abstract class Assert
|
||||
static::assertFileExists($actual, $message);
|
||||
|
||||
$constraint = new LogicalNot(
|
||||
new IsEqualIgnoringCase(file_get_contents($expected))
|
||||
new IsEqualIgnoringCase(file_get_contents($expected)),
|
||||
);
|
||||
|
||||
static::assertThat(file_get_contents($actual), $constraint, $message);
|
||||
@@ -685,7 +703,7 @@ abstract class Assert
|
||||
static::assertFileExists($expectedFile, $message);
|
||||
|
||||
$constraint = new LogicalNot(
|
||||
new IsEqual(file_get_contents($expectedFile))
|
||||
new IsEqual(file_get_contents($expectedFile)),
|
||||
);
|
||||
|
||||
static::assertThat($actualString, $constraint, $message);
|
||||
@@ -703,7 +721,7 @@ abstract class Assert
|
||||
static::assertFileExists($expectedFile, $message);
|
||||
|
||||
$constraint = new LogicalNot(
|
||||
new IsEqualCanonicalizing(file_get_contents($expectedFile))
|
||||
new IsEqualCanonicalizing(file_get_contents($expectedFile)),
|
||||
);
|
||||
|
||||
static::assertThat($actualString, $constraint, $message);
|
||||
@@ -721,7 +739,7 @@ abstract class Assert
|
||||
static::assertFileExists($expectedFile, $message);
|
||||
|
||||
$constraint = new LogicalNot(
|
||||
new IsEqualIgnoringCase(file_get_contents($expectedFile))
|
||||
new IsEqualIgnoringCase(file_get_contents($expectedFile)),
|
||||
);
|
||||
|
||||
static::assertThat($actualString, $constraint, $message);
|
||||
@@ -1168,9 +1186,13 @@ abstract class Assert
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws Exception
|
||||
* @throws ExpectationFailedException
|
||||
*
|
||||
* @deprecated https://github.com/sebastianbergmann/phpunit/issues/4601
|
||||
*/
|
||||
public static function assertClassHasAttribute(string $attributeName, string $className, string $message = ''): void
|
||||
{
|
||||
self::createWarning('assertClassHasAttribute() is deprecated and will be removed in PHPUnit 10.');
|
||||
|
||||
if (!self::isValidClassAttributeName($attributeName)) {
|
||||
throw InvalidArgumentException::create(1, 'valid attribute name');
|
||||
}
|
||||
@@ -1188,9 +1210,13 @@ abstract class Assert
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws Exception
|
||||
* @throws ExpectationFailedException
|
||||
*
|
||||
* @deprecated https://github.com/sebastianbergmann/phpunit/issues/4601
|
||||
*/
|
||||
public static function assertClassNotHasAttribute(string $attributeName, string $className, string $message = ''): void
|
||||
{
|
||||
self::createWarning('assertClassNotHasAttribute() is deprecated and will be removed in PHPUnit 10.');
|
||||
|
||||
if (!self::isValidClassAttributeName($attributeName)) {
|
||||
throw InvalidArgumentException::create(1, 'valid attribute name');
|
||||
}
|
||||
@@ -1202,9 +1228,9 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$className,
|
||||
new LogicalNot(
|
||||
new ClassHasAttribute($attributeName)
|
||||
new ClassHasAttribute($attributeName),
|
||||
),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1214,9 +1240,13 @@ abstract class Assert
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws Exception
|
||||
* @throws ExpectationFailedException
|
||||
*
|
||||
* @deprecated https://github.com/sebastianbergmann/phpunit/issues/4601
|
||||
*/
|
||||
public static function assertClassHasStaticAttribute(string $attributeName, string $className, string $message = ''): void
|
||||
{
|
||||
self::createWarning('assertClassHasStaticAttribute() is deprecated and will be removed in PHPUnit 10.');
|
||||
|
||||
if (!self::isValidClassAttributeName($attributeName)) {
|
||||
throw InvalidArgumentException::create(1, 'valid attribute name');
|
||||
}
|
||||
@@ -1228,7 +1258,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$className,
|
||||
new ClassHasStaticAttribute($attributeName),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1238,9 +1268,13 @@ abstract class Assert
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws Exception
|
||||
* @throws ExpectationFailedException
|
||||
*
|
||||
* @deprecated https://github.com/sebastianbergmann/phpunit/issues/4601
|
||||
*/
|
||||
public static function assertClassNotHasStaticAttribute(string $attributeName, string $className, string $message = ''): void
|
||||
{
|
||||
self::createWarning('assertClassNotHasStaticAttribute() is deprecated and will be removed in PHPUnit 10.');
|
||||
|
||||
if (!self::isValidClassAttributeName($attributeName)) {
|
||||
throw InvalidArgumentException::create(1, 'valid attribute name');
|
||||
}
|
||||
@@ -1252,9 +1286,9 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$className,
|
||||
new LogicalNot(
|
||||
new ClassHasStaticAttribute($attributeName)
|
||||
new ClassHasStaticAttribute($attributeName),
|
||||
),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1266,9 +1300,13 @@ abstract class Assert
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws Exception
|
||||
* @throws ExpectationFailedException
|
||||
*
|
||||
* @deprecated https://github.com/sebastianbergmann/phpunit/issues/4601
|
||||
*/
|
||||
public static function assertObjectHasAttribute(string $attributeName, $object, string $message = ''): void
|
||||
{
|
||||
self::createWarning('assertObjectHasAttribute() is deprecated and will be removed in PHPUnit 10. Refactor your test to use assertObjectHasProperty() instead.');
|
||||
|
||||
if (!self::isValidObjectAttributeName($attributeName)) {
|
||||
throw InvalidArgumentException::create(1, 'valid attribute name');
|
||||
}
|
||||
@@ -1280,7 +1318,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$object,
|
||||
new ObjectHasAttribute($attributeName),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1292,9 +1330,13 @@ abstract class Assert
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws Exception
|
||||
* @throws ExpectationFailedException
|
||||
*
|
||||
* @deprecated https://github.com/sebastianbergmann/phpunit/issues/4601
|
||||
*/
|
||||
public static function assertObjectNotHasAttribute(string $attributeName, $object, string $message = ''): void
|
||||
{
|
||||
self::createWarning('assertObjectNotHasAttribute() is deprecated and will be removed in PHPUnit 10. Refactor your test to use assertObjectNotHasProperty() instead.');
|
||||
|
||||
if (!self::isValidObjectAttributeName($attributeName)) {
|
||||
throw InvalidArgumentException::create(1, 'valid attribute name');
|
||||
}
|
||||
@@ -1306,9 +1348,39 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$object,
|
||||
new LogicalNot(
|
||||
new ObjectHasAttribute($attributeName)
|
||||
new ObjectHasAttribute($attributeName),
|
||||
),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that an object has a specified property.
|
||||
*
|
||||
* @throws ExpectationFailedException
|
||||
*/
|
||||
final public static function assertObjectHasProperty(string $propertyName, object $object, string $message = ''): void
|
||||
{
|
||||
static::assertThat(
|
||||
$object,
|
||||
new ObjectHasProperty($propertyName),
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that an object does not have a specified property.
|
||||
*
|
||||
* @throws ExpectationFailedException
|
||||
*/
|
||||
final public static function assertObjectNotHasProperty(string $propertyName, object $object, string $message = ''): void
|
||||
{
|
||||
static::assertThat(
|
||||
$object,
|
||||
new LogicalNot(
|
||||
new ObjectHasProperty($propertyName),
|
||||
),
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1321,7 +1393,9 @@ abstract class Assert
|
||||
* @throws ExpectationFailedException
|
||||
*
|
||||
* @psalm-template ExpectedType
|
||||
*
|
||||
* @psalm-param ExpectedType $expected
|
||||
*
|
||||
* @psalm-assert =ExpectedType $actual
|
||||
*/
|
||||
public static function assertSame($expected, $actual, string $message = ''): void
|
||||
@@ -1329,7 +1403,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new IsIdentical($expected),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1350,9 +1424,9 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new LogicalNot(
|
||||
new IsIdentical($expected)
|
||||
new IsIdentical($expected),
|
||||
),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1364,7 +1438,9 @@ abstract class Assert
|
||||
* @throws ExpectationFailedException
|
||||
*
|
||||
* @psalm-template ExpectedType of object
|
||||
*
|
||||
* @psalm-param class-string<ExpectedType> $expected
|
||||
*
|
||||
* @psalm-assert =ExpectedType $actual
|
||||
*/
|
||||
public static function assertInstanceOf(string $expected, $actual, string $message = ''): void
|
||||
@@ -1376,7 +1452,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new IsInstanceOf($expected),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1388,7 +1464,9 @@ abstract class Assert
|
||||
* @throws ExpectationFailedException
|
||||
*
|
||||
* @psalm-template ExpectedType of object
|
||||
*
|
||||
* @psalm-param class-string<ExpectedType> $expected
|
||||
*
|
||||
* @psalm-assert !ExpectedType $actual
|
||||
*/
|
||||
public static function assertNotInstanceOf(string $expected, $actual, string $message = ''): void
|
||||
@@ -1400,9 +1478,9 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new LogicalNot(
|
||||
new IsInstanceOf($expected)
|
||||
new IsInstanceOf($expected),
|
||||
),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1419,7 +1497,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new IsType(IsType::TYPE_ARRAY),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1436,7 +1514,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new IsType(IsType::TYPE_BOOL),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1453,7 +1531,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new IsType(IsType::TYPE_FLOAT),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1470,7 +1548,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new IsType(IsType::TYPE_INT),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1487,7 +1565,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new IsType(IsType::TYPE_NUMERIC),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1504,7 +1582,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new IsType(IsType::TYPE_OBJECT),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1521,7 +1599,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new IsType(IsType::TYPE_RESOURCE),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1538,7 +1616,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new IsType(IsType::TYPE_CLOSED_RESOURCE),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1555,7 +1633,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new IsType(IsType::TYPE_STRING),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1572,7 +1650,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new IsType(IsType::TYPE_SCALAR),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1589,7 +1667,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new IsType(IsType::TYPE_CALLABLE),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1606,7 +1684,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new IsType(IsType::TYPE_ITERABLE),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1623,7 +1701,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new LogicalNot(new IsType(IsType::TYPE_ARRAY)),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1640,7 +1718,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new LogicalNot(new IsType(IsType::TYPE_BOOL)),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1657,7 +1735,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new LogicalNot(new IsType(IsType::TYPE_FLOAT)),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1674,7 +1752,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new LogicalNot(new IsType(IsType::TYPE_INT)),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1691,7 +1769,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new LogicalNot(new IsType(IsType::TYPE_NUMERIC)),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1708,7 +1786,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new LogicalNot(new IsType(IsType::TYPE_OBJECT)),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1725,7 +1803,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new LogicalNot(new IsType(IsType::TYPE_RESOURCE)),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1742,7 +1820,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new LogicalNot(new IsType(IsType::TYPE_CLOSED_RESOURCE)),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1759,7 +1837,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new LogicalNot(new IsType(IsType::TYPE_STRING)),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1776,7 +1854,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new LogicalNot(new IsType(IsType::TYPE_SCALAR)),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1793,7 +1871,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new LogicalNot(new IsType(IsType::TYPE_CALLABLE)),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1810,7 +1888,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new LogicalNot(new IsType(IsType::TYPE_ITERABLE)),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1853,9 +1931,9 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$string,
|
||||
new LogicalNot(
|
||||
new RegularExpression($pattern)
|
||||
new RegularExpression($pattern),
|
||||
),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1876,9 +1954,9 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$string,
|
||||
new LogicalNot(
|
||||
new RegularExpression($pattern)
|
||||
new RegularExpression($pattern),
|
||||
),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1895,6 +1973,14 @@ abstract class Assert
|
||||
*/
|
||||
public static function assertSameSize($expected, $actual, string $message = ''): void
|
||||
{
|
||||
if ($expected instanceof Generator) {
|
||||
self::createWarning('Passing an argument of type Generator for the $expected parameter is deprecated. Support for this will be removed in PHPUnit 10.');
|
||||
}
|
||||
|
||||
if ($actual instanceof Generator) {
|
||||
self::createWarning('Passing an argument of type Generator for the $actual parameter is deprecated. Support for this will be removed in PHPUnit 10.');
|
||||
}
|
||||
|
||||
if (!$expected instanceof Countable && !is_iterable($expected)) {
|
||||
throw InvalidArgumentException::create(1, 'countable or iterable');
|
||||
}
|
||||
@@ -1906,7 +1992,7 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new SameSize($expected),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1923,6 +2009,14 @@ abstract class Assert
|
||||
*/
|
||||
public static function assertNotSameSize($expected, $actual, string $message = ''): void
|
||||
{
|
||||
if ($expected instanceof Generator) {
|
||||
self::createWarning('Passing an argument of type Generator for the $expected parameter is deprecated. Support for this will be removed in PHPUnit 10.');
|
||||
}
|
||||
|
||||
if ($actual instanceof Generator) {
|
||||
self::createWarning('Passing an argument of type Generator for the $actual parameter is deprecated. Support for this will be removed in PHPUnit 10.');
|
||||
}
|
||||
|
||||
if (!$expected instanceof Countable && !is_iterable($expected)) {
|
||||
throw InvalidArgumentException::create(1, 'countable or iterable');
|
||||
}
|
||||
@@ -1934,9 +2028,9 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actual,
|
||||
new LogicalNot(
|
||||
new SameSize($expected)
|
||||
new SameSize($expected),
|
||||
),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1962,9 +2056,9 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$string,
|
||||
new LogicalNot(
|
||||
new StringMatchesFormatDescription($format)
|
||||
new StringMatchesFormatDescription($format),
|
||||
),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1981,9 +2075,9 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$string,
|
||||
new StringMatchesFormatDescription(
|
||||
file_get_contents($formatFile)
|
||||
file_get_contents($formatFile),
|
||||
),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -2001,10 +2095,10 @@ abstract class Assert
|
||||
$string,
|
||||
new LogicalNot(
|
||||
new StringMatchesFormatDescription(
|
||||
file_get_contents($formatFile)
|
||||
)
|
||||
file_get_contents($formatFile),
|
||||
),
|
||||
),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -2033,9 +2127,9 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$string,
|
||||
new LogicalNot(
|
||||
new StringStartsWith($prefix)
|
||||
new StringStartsWith($prefix),
|
||||
),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -2105,9 +2199,9 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$string,
|
||||
new LogicalNot(
|
||||
new StringEndsWith($suffix)
|
||||
new StringEndsWith($suffix),
|
||||
),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -2146,9 +2240,9 @@ abstract class Assert
|
||||
*
|
||||
* @param DOMDocument|string $actualXml
|
||||
*
|
||||
* @throws \PHPUnit\Util\Xml\Exception
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws ExpectationFailedException
|
||||
* @throws Xml\Exception
|
||||
*/
|
||||
public static function assertXmlStringEqualsXmlFile(string $expectedFile, $actualXml, string $message = ''): void
|
||||
{
|
||||
@@ -2170,9 +2264,9 @@ abstract class Assert
|
||||
*
|
||||
* @param DOMDocument|string $actualXml
|
||||
*
|
||||
* @throws \PHPUnit\Util\Xml\Exception
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws ExpectationFailedException
|
||||
* @throws Xml\Exception
|
||||
*/
|
||||
public static function assertXmlStringNotEqualsXmlFile(string $expectedFile, $actualXml, string $message = ''): void
|
||||
{
|
||||
@@ -2195,9 +2289,9 @@ abstract class Assert
|
||||
* @param DOMDocument|string $expectedXml
|
||||
* @param DOMDocument|string $actualXml
|
||||
*
|
||||
* @throws \PHPUnit\Util\Xml\Exception
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws ExpectationFailedException
|
||||
* @throws Xml\Exception
|
||||
*/
|
||||
public static function assertXmlStringEqualsXmlString($expectedXml, $actualXml, string $message = ''): void
|
||||
{
|
||||
@@ -2226,9 +2320,9 @@ abstract class Assert
|
||||
* @param DOMDocument|string $expectedXml
|
||||
* @param DOMDocument|string $actualXml
|
||||
*
|
||||
* @throws \PHPUnit\Util\Xml\Exception
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws ExpectationFailedException
|
||||
* @throws Xml\Exception
|
||||
*/
|
||||
public static function assertXmlStringNotEqualsXmlString($expectedXml, $actualXml, string $message = ''): void
|
||||
{
|
||||
@@ -2272,7 +2366,7 @@ abstract class Assert
|
||||
static::assertSame(
|
||||
$expectedElement->tagName,
|
||||
$actualElement->tagName,
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
|
||||
if ($checkAttributes) {
|
||||
@@ -2283,8 +2377,8 @@ abstract class Assert
|
||||
'%s%sNumber of attributes on node "%s" does not match',
|
||||
$message,
|
||||
!empty($message) ? "\n" : '',
|
||||
$expectedElement->tagName
|
||||
)
|
||||
$expectedElement->tagName,
|
||||
),
|
||||
);
|
||||
|
||||
for ($i = 0; $i < $expectedElement->attributes->length; $i++) {
|
||||
@@ -2300,8 +2394,8 @@ abstract class Assert
|
||||
$message,
|
||||
!empty($message) ? "\n" : '',
|
||||
$expectedAttribute->name,
|
||||
$expectedElement->tagName
|
||||
)
|
||||
$expectedElement->tagName,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -2317,8 +2411,8 @@ abstract class Assert
|
||||
'%s%sNumber of child nodes of "%s" differs',
|
||||
$message,
|
||||
!empty($message) ? "\n" : '',
|
||||
$expectedElement->tagName
|
||||
)
|
||||
$expectedElement->tagName,
|
||||
),
|
||||
);
|
||||
|
||||
for ($i = 0; $i < $expectedElement->childNodes->length; $i++) {
|
||||
@@ -2326,7 +2420,7 @@ abstract class Assert
|
||||
$expectedElement->childNodes->item($i),
|
||||
$actualElement->childNodes->item($i),
|
||||
$checkAttributes,
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -2386,9 +2480,9 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actualJson,
|
||||
new LogicalNot(
|
||||
new JsonMatches($expectedJson)
|
||||
new JsonMatches($expectedJson),
|
||||
),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -2426,9 +2520,9 @@ abstract class Assert
|
||||
static::assertThat(
|
||||
$actualJson,
|
||||
new LogicalNot(
|
||||
new JsonMatches($expectedJson)
|
||||
new JsonMatches($expectedJson),
|
||||
),
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -2450,7 +2544,7 @@ abstract class Assert
|
||||
static::assertJson($actualJson, $message);
|
||||
|
||||
$constraintExpected = new JsonMatches(
|
||||
$expectedJson
|
||||
$expectedJson,
|
||||
);
|
||||
|
||||
$constraintActual = new JsonMatches($actualJson);
|
||||
@@ -2477,7 +2571,7 @@ abstract class Assert
|
||||
static::assertJson($actualJson, $message);
|
||||
|
||||
$constraintExpected = new JsonMatches(
|
||||
$expectedJson
|
||||
$expectedJson,
|
||||
);
|
||||
|
||||
$constraintActual = new JsonMatches($actualJson);
|
||||
@@ -2658,22 +2752,37 @@ abstract class Assert
|
||||
{
|
||||
return static::logicalOr(
|
||||
new IsEqual($value),
|
||||
new GreaterThan($value)
|
||||
new GreaterThan($value),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated https://github.com/sebastianbergmann/phpunit/issues/4601
|
||||
*/
|
||||
public static function classHasAttribute(string $attributeName): ClassHasAttribute
|
||||
{
|
||||
self::createWarning('classHasAttribute() is deprecated and will be removed in PHPUnit 10.');
|
||||
|
||||
return new ClassHasAttribute($attributeName);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated https://github.com/sebastianbergmann/phpunit/issues/4601
|
||||
*/
|
||||
public static function classHasStaticAttribute(string $attributeName): ClassHasStaticAttribute
|
||||
{
|
||||
self::createWarning('classHasStaticAttribute() is deprecated and will be removed in PHPUnit 10.');
|
||||
|
||||
return new ClassHasStaticAttribute($attributeName);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated https://github.com/sebastianbergmann/phpunit/issues/4601
|
||||
*/
|
||||
public static function objectHasAttribute($attributeName): ObjectHasAttribute
|
||||
{
|
||||
self::createWarning('objectHasAttribute() is deprecated and will be removed in PHPUnit 10.');
|
||||
|
||||
return new ObjectHasAttribute($attributeName);
|
||||
}
|
||||
|
||||
@@ -2701,7 +2810,7 @@ abstract class Assert
|
||||
{
|
||||
return static::logicalOr(
|
||||
new IsEqual($value),
|
||||
new LessThan($value)
|
||||
new LessThan($value),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -40,7 +40,7 @@ class Count extends Constraint
|
||||
{
|
||||
return sprintf(
|
||||
'count matches %d',
|
||||
$this->expectedCount
|
||||
$this->expectedCount,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -76,7 +76,7 @@ class Count extends Constraint
|
||||
throw new Exception(
|
||||
$e->getMessage(),
|
||||
$e->getCode(),
|
||||
$e
|
||||
$e,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -136,7 +136,7 @@ class Count extends Constraint
|
||||
return sprintf(
|
||||
'actual size %d matches expected size %d',
|
||||
(int) $this->getCountOf($other),
|
||||
$this->expectedCount
|
||||
$this->expectedCount,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
*/
|
||||
namespace PHPUnit\Framework\Constraint;
|
||||
|
||||
use SebastianBergmann\RecursionContext\InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||
*/
|
||||
@@ -30,7 +32,7 @@ final class GreaterThan extends Constraint
|
||||
/**
|
||||
* Returns a string representation of the constraint.
|
||||
*
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function toString(): string
|
||||
{
|
||||
|
||||
@@ -64,7 +64,7 @@ final class IsEmpty extends Constraint
|
||||
'%s %s %s',
|
||||
strpos($type, 'a') === 0 || strpos($type, 'o') === 0 ? 'an' : 'a',
|
||||
$type,
|
||||
$this->toString()
|
||||
$this->toString(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
*/
|
||||
namespace PHPUnit\Framework\Constraint;
|
||||
|
||||
use SebastianBergmann\RecursionContext\InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||
*/
|
||||
@@ -30,7 +32,7 @@ final class LessThan extends Constraint
|
||||
/**
|
||||
* Returns a string representation of the constraint.
|
||||
*
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function toString(): string
|
||||
{
|
||||
|
||||
@@ -15,6 +15,7 @@ use PHPUnit\Framework\ExpectationFailedException;
|
||||
use PHPUnit\Framework\SelfDescribing;
|
||||
use SebastianBergmann\Comparator\ComparisonFailure;
|
||||
use SebastianBergmann\Exporter\Exporter;
|
||||
use SebastianBergmann\RecursionContext\InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||
@@ -36,8 +37,8 @@ abstract class Constraint implements Countable, SelfDescribing
|
||||
* a boolean value instead: true in case of success, false in case of a
|
||||
* failure.
|
||||
*
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws ExpectationFailedException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function evaluate($other, string $description = '', bool $returnResult = false): ?bool
|
||||
{
|
||||
@@ -82,6 +83,7 @@ abstract class Constraint implements Countable, SelfDescribing
|
||||
* This method can be overridden to implement the evaluation algorithm.
|
||||
*
|
||||
* @param mixed $other value or object to evaluate
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
protected function matches($other): bool
|
||||
@@ -92,20 +94,19 @@ abstract class Constraint implements Countable, SelfDescribing
|
||||
/**
|
||||
* Throws an exception for the given compared value and test description.
|
||||
*
|
||||
* @param mixed $other evaluated value or object
|
||||
* @param string $description Additional information about the test
|
||||
* @param ComparisonFailure $comparisonFailure
|
||||
* @param mixed $other evaluated value or object
|
||||
* @param string $description Additional information about the test
|
||||
*
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws ExpectationFailedException
|
||||
* @throws InvalidArgumentException
|
||||
*
|
||||
* @psalm-return never-return
|
||||
*/
|
||||
protected function fail($other, $description, ComparisonFailure $comparisonFailure = null): void
|
||||
protected function fail($other, $description, ?ComparisonFailure $comparisonFailure = null): void
|
||||
{
|
||||
$failureDescription = sprintf(
|
||||
'Failed asserting that %s.',
|
||||
$this->failureDescription($other)
|
||||
$this->failureDescription($other),
|
||||
);
|
||||
|
||||
$additionalFailureDescription = $this->additionalFailureDescription($other);
|
||||
@@ -120,7 +121,7 @@ abstract class Constraint implements Countable, SelfDescribing
|
||||
|
||||
throw new ExpectationFailedException(
|
||||
$failureDescription,
|
||||
$comparisonFailure
|
||||
$comparisonFailure,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -148,7 +149,7 @@ abstract class Constraint implements Countable, SelfDescribing
|
||||
*
|
||||
* @param mixed $other evaluated value or object
|
||||
*
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
protected function failureDescription($other): string
|
||||
{
|
||||
|
||||
@@ -16,6 +16,7 @@ use function trim;
|
||||
use PHPUnit\Framework\ExpectationFailedException;
|
||||
use SebastianBergmann\Comparator\ComparisonFailure;
|
||||
use SebastianBergmann\Comparator\Factory as ComparatorFactory;
|
||||
use SebastianBergmann\RecursionContext\InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||
@@ -61,8 +62,6 @@ final class IsEqual extends Constraint
|
||||
* failure.
|
||||
*
|
||||
* @throws ExpectationFailedException
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function evaluate($other, string $description = '', bool $returnResult = false): ?bool
|
||||
{
|
||||
@@ -78,7 +77,7 @@ final class IsEqual extends Constraint
|
||||
try {
|
||||
$comparator = $comparatorFactory->getComparatorFor(
|
||||
$this->value,
|
||||
$other
|
||||
$other,
|
||||
);
|
||||
|
||||
$comparator->assertEquals(
|
||||
@@ -86,7 +85,7 @@ final class IsEqual extends Constraint
|
||||
$other,
|
||||
$this->delta,
|
||||
$this->canonicalize,
|
||||
$this->ignoreCase
|
||||
$this->ignoreCase,
|
||||
);
|
||||
} catch (ComparisonFailure $f) {
|
||||
if ($returnResult) {
|
||||
@@ -95,7 +94,7 @@ final class IsEqual extends Constraint
|
||||
|
||||
throw new ExpectationFailedException(
|
||||
trim($description . "\n" . $f->getMessage()),
|
||||
$f
|
||||
$f,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -105,7 +104,7 @@ final class IsEqual extends Constraint
|
||||
/**
|
||||
* Returns a string representation of the constraint.
|
||||
*
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function toString(): string
|
||||
{
|
||||
@@ -118,21 +117,21 @@ final class IsEqual extends Constraint
|
||||
|
||||
return sprintf(
|
||||
"is equal to '%s'",
|
||||
$this->value
|
||||
$this->value,
|
||||
);
|
||||
}
|
||||
|
||||
if ($this->delta != 0) {
|
||||
$delta = sprintf(
|
||||
' with delta <%F>',
|
||||
$this->delta
|
||||
$this->delta,
|
||||
);
|
||||
}
|
||||
|
||||
return sprintf(
|
||||
'is equal to %s%s',
|
||||
$this->exporter()->export($this->value),
|
||||
$delta
|
||||
$delta,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ use function trim;
|
||||
use PHPUnit\Framework\ExpectationFailedException;
|
||||
use SebastianBergmann\Comparator\ComparisonFailure;
|
||||
use SebastianBergmann\Comparator\Factory as ComparatorFactory;
|
||||
use SebastianBergmann\RecursionContext\InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||
@@ -58,7 +59,7 @@ final class IsEqualCanonicalizing extends Constraint
|
||||
try {
|
||||
$comparator = $comparatorFactory->getComparatorFor(
|
||||
$this->value,
|
||||
$other
|
||||
$other,
|
||||
);
|
||||
|
||||
$comparator->assertEquals(
|
||||
@@ -66,7 +67,7 @@ final class IsEqualCanonicalizing extends Constraint
|
||||
$other,
|
||||
0.0,
|
||||
true,
|
||||
false
|
||||
false,
|
||||
);
|
||||
} catch (ComparisonFailure $f) {
|
||||
if ($returnResult) {
|
||||
@@ -75,7 +76,7 @@ final class IsEqualCanonicalizing extends Constraint
|
||||
|
||||
throw new ExpectationFailedException(
|
||||
trim($description . "\n" . $f->getMessage()),
|
||||
$f
|
||||
$f,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -85,7 +86,7 @@ final class IsEqualCanonicalizing extends Constraint
|
||||
/**
|
||||
* Returns a string representation of the constraint.
|
||||
*
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function toString(): string
|
||||
{
|
||||
@@ -96,13 +97,13 @@ final class IsEqualCanonicalizing extends Constraint
|
||||
|
||||
return sprintf(
|
||||
"is equal to '%s'",
|
||||
$this->value
|
||||
$this->value,
|
||||
);
|
||||
}
|
||||
|
||||
return sprintf(
|
||||
'is equal to %s',
|
||||
$this->exporter()->export($this->value)
|
||||
$this->exporter()->export($this->value),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ use function trim;
|
||||
use PHPUnit\Framework\ExpectationFailedException;
|
||||
use SebastianBergmann\Comparator\ComparisonFailure;
|
||||
use SebastianBergmann\Comparator\Factory as ComparatorFactory;
|
||||
use SebastianBergmann\RecursionContext\InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||
@@ -58,7 +59,7 @@ final class IsEqualIgnoringCase extends Constraint
|
||||
try {
|
||||
$comparator = $comparatorFactory->getComparatorFor(
|
||||
$this->value,
|
||||
$other
|
||||
$other,
|
||||
);
|
||||
|
||||
$comparator->assertEquals(
|
||||
@@ -66,7 +67,7 @@ final class IsEqualIgnoringCase extends Constraint
|
||||
$other,
|
||||
0.0,
|
||||
false,
|
||||
true
|
||||
true,
|
||||
);
|
||||
} catch (ComparisonFailure $f) {
|
||||
if ($returnResult) {
|
||||
@@ -75,7 +76,7 @@ final class IsEqualIgnoringCase extends Constraint
|
||||
|
||||
throw new ExpectationFailedException(
|
||||
trim($description . "\n" . $f->getMessage()),
|
||||
$f
|
||||
$f,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -85,7 +86,7 @@ final class IsEqualIgnoringCase extends Constraint
|
||||
/**
|
||||
* Returns a string representation of the constraint.
|
||||
*
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function toString(): string
|
||||
{
|
||||
@@ -96,13 +97,13 @@ final class IsEqualIgnoringCase extends Constraint
|
||||
|
||||
return sprintf(
|
||||
"is equal to '%s'",
|
||||
$this->value
|
||||
$this->value,
|
||||
);
|
||||
}
|
||||
|
||||
return sprintf(
|
||||
'is equal to %s',
|
||||
$this->exporter()->export($this->value)
|
||||
$this->exporter()->export($this->value),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ use function trim;
|
||||
use PHPUnit\Framework\ExpectationFailedException;
|
||||
use SebastianBergmann\Comparator\ComparisonFailure;
|
||||
use SebastianBergmann\Comparator\Factory as ComparatorFactory;
|
||||
use SebastianBergmann\RecursionContext\InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||
@@ -62,13 +63,13 @@ final class IsEqualWithDelta extends Constraint
|
||||
try {
|
||||
$comparator = $comparatorFactory->getComparatorFor(
|
||||
$this->value,
|
||||
$other
|
||||
$other,
|
||||
);
|
||||
|
||||
$comparator->assertEquals(
|
||||
$this->value,
|
||||
$other,
|
||||
$this->delta
|
||||
$this->delta,
|
||||
);
|
||||
} catch (ComparisonFailure $f) {
|
||||
if ($returnResult) {
|
||||
@@ -77,7 +78,7 @@ final class IsEqualWithDelta extends Constraint
|
||||
|
||||
throw new ExpectationFailedException(
|
||||
trim($description . "\n" . $f->getMessage()),
|
||||
$f
|
||||
$f,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -87,14 +88,14 @@ final class IsEqualWithDelta extends Constraint
|
||||
/**
|
||||
* Returns a string representation of the constraint.
|
||||
*
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function toString(): string
|
||||
{
|
||||
return sprintf(
|
||||
'is equal to %s with delta <%F>>',
|
||||
'is equal to %s with delta <%F>',
|
||||
$this->exporter()->export($this->value),
|
||||
$this->delta
|
||||
$this->delta,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ final class Exception extends Constraint
|
||||
{
|
||||
return sprintf(
|
||||
'exception of type "%s"',
|
||||
$this->className
|
||||
$this->className,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -73,13 +73,13 @@ final class Exception extends Constraint
|
||||
'exception of type "%s" matches expected exception "%s"%s',
|
||||
get_class($other),
|
||||
$this->className,
|
||||
$message
|
||||
$message,
|
||||
);
|
||||
}
|
||||
|
||||
return sprintf(
|
||||
'exception of type "%s" is thrown',
|
||||
$this->className
|
||||
$this->className,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
namespace PHPUnit\Framework\Constraint;
|
||||
|
||||
use function sprintf;
|
||||
use SebastianBergmann\RecursionContext\InvalidArgumentException;
|
||||
use Throwable;
|
||||
|
||||
/**
|
||||
@@ -54,14 +55,14 @@ final class ExceptionCode extends Constraint
|
||||
*
|
||||
* @param mixed $other evaluated value or object
|
||||
*
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
protected function failureDescription($other): string
|
||||
{
|
||||
return sprintf(
|
||||
'%s is equal to expected exception code %s',
|
||||
$this->exporter()->export($other->getCode()),
|
||||
$this->exporter()->export($this->expectedCode)
|
||||
$this->exporter()->export($this->expectedCode),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -65,14 +65,14 @@ final class ExceptionMessage extends Constraint
|
||||
if ($this->expectedMessage === '') {
|
||||
return sprintf(
|
||||
"exception message is empty but is '%s'",
|
||||
$other->getMessage()
|
||||
$other->getMessage(),
|
||||
);
|
||||
}
|
||||
|
||||
return sprintf(
|
||||
"exception message '%s' contains '%s'",
|
||||
$other->getMessage(),
|
||||
$this->expectedMessage
|
||||
$this->expectedMessage,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ final class ExceptionMessageRegularExpression extends Constraint
|
||||
|
||||
if ($match === false) {
|
||||
throw new \PHPUnit\Framework\Exception(
|
||||
"Invalid expected exception message regex given: '{$this->expectedMessageRegExp}'"
|
||||
"Invalid expected exception message regex given: '{$this->expectedMessageRegExp}'",
|
||||
);
|
||||
}
|
||||
|
||||
@@ -68,7 +68,7 @@ final class ExceptionMessageRegularExpression extends Constraint
|
||||
return sprintf(
|
||||
"exception message '%s' matches '%s'",
|
||||
$other->getMessage(),
|
||||
$this->expectedMessageRegExp
|
||||
$this->expectedMessageRegExp,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ final class DirectoryExists extends Constraint
|
||||
{
|
||||
return sprintf(
|
||||
'directory "%s" exists',
|
||||
$other
|
||||
$other,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ final class FileExists extends Constraint
|
||||
{
|
||||
return sprintf(
|
||||
'file "%s" exists',
|
||||
$other
|
||||
$other,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ final class IsReadable extends Constraint
|
||||
{
|
||||
return sprintf(
|
||||
'"%s" is readable',
|
||||
$other
|
||||
$other,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ final class IsWritable extends Constraint
|
||||
{
|
||||
return sprintf(
|
||||
'"%s" is writable',
|
||||
$other
|
||||
$other,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,18 +9,14 @@
|
||||
*/
|
||||
namespace PHPUnit\Framework\Constraint;
|
||||
|
||||
use const PHP_FLOAT_EPSILON;
|
||||
use function abs;
|
||||
use function get_class;
|
||||
use function is_array;
|
||||
use function is_float;
|
||||
use function is_infinite;
|
||||
use function is_nan;
|
||||
use function is_object;
|
||||
use function is_string;
|
||||
use function sprintf;
|
||||
use PHPUnit\Framework\ExpectationFailedException;
|
||||
use SebastianBergmann\Comparator\ComparisonFailure;
|
||||
use SebastianBergmann\RecursionContext\InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||
@@ -47,18 +43,12 @@ final class IsIdentical extends Constraint
|
||||
* a boolean value instead: true in case of success, false in case of a
|
||||
* failure.
|
||||
*
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws ExpectationFailedException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function evaluate($other, string $description = '', bool $returnResult = false): ?bool
|
||||
{
|
||||
if (is_float($this->value) && is_float($other) &&
|
||||
!is_infinite($this->value) && !is_infinite($other) &&
|
||||
!is_nan($this->value) && !is_nan($other)) {
|
||||
$success = abs($this->value - $other) < PHP_FLOAT_EPSILON;
|
||||
} else {
|
||||
$success = $this->value === $other;
|
||||
}
|
||||
$success = $this->value === $other;
|
||||
|
||||
if ($returnResult) {
|
||||
return $success;
|
||||
@@ -73,7 +63,7 @@ final class IsIdentical extends Constraint
|
||||
$this->value,
|
||||
$other,
|
||||
sprintf("'%s'", $this->value),
|
||||
sprintf("'%s'", $other)
|
||||
sprintf("'%s'", $other),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -83,7 +73,7 @@ final class IsIdentical extends Constraint
|
||||
$this->value,
|
||||
$other,
|
||||
$this->exporter()->export($this->value),
|
||||
$this->exporter()->export($other)
|
||||
$this->exporter()->export($other),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -96,7 +86,7 @@ final class IsIdentical extends Constraint
|
||||
/**
|
||||
* Returns a string representation of the constraint.
|
||||
*
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function toString(): string
|
||||
{
|
||||
@@ -116,7 +106,7 @@ final class IsIdentical extends Constraint
|
||||
*
|
||||
* @param mixed $other evaluated value or object
|
||||
*
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
protected function failureDescription($other): string
|
||||
{
|
||||
|
||||
@@ -11,9 +11,11 @@ namespace PHPUnit\Framework\Constraint;
|
||||
|
||||
use function json_decode;
|
||||
use function sprintf;
|
||||
use PHPUnit\Framework\Exception;
|
||||
use PHPUnit\Framework\ExpectationFailedException;
|
||||
use PHPUnit\Util\Json;
|
||||
use SebastianBergmann\Comparator\ComparisonFailure;
|
||||
use SebastianBergmann\RecursionContext\InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||
@@ -37,7 +39,7 @@ final class JsonMatches extends Constraint
|
||||
{
|
||||
return sprintf(
|
||||
'matches JSON string "%s"',
|
||||
$this->value
|
||||
$this->value,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -69,17 +71,16 @@ final class JsonMatches extends Constraint
|
||||
/**
|
||||
* Throws an exception for the given compared value and test description.
|
||||
*
|
||||
* @param mixed $other evaluated value or object
|
||||
* @param string $description Additional information about the test
|
||||
* @param ComparisonFailure $comparisonFailure
|
||||
* @param mixed $other evaluated value or object
|
||||
* @param string $description Additional information about the test
|
||||
*
|
||||
* @throws \PHPUnit\Framework\Exception
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws Exception
|
||||
* @throws ExpectationFailedException
|
||||
* @throws InvalidArgumentException
|
||||
*
|
||||
* @psalm-return never-return
|
||||
*/
|
||||
protected function fail($other, $description, ComparisonFailure $comparisonFailure = null): void
|
||||
protected function fail($other, $description, ?ComparisonFailure $comparisonFailure = null): void
|
||||
{
|
||||
if ($comparisonFailure === null) {
|
||||
[$error, $recodedOther] = Json::canonicalize($other);
|
||||
@@ -100,7 +101,7 @@ final class JsonMatches extends Constraint
|
||||
Json::prettify($recodedValue),
|
||||
Json::prettify($recodedOther),
|
||||
false,
|
||||
'Failed asserting that two json values are equal.'
|
||||
'Failed asserting that two json values are equal.',
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -30,14 +30,19 @@ final class JsonMatchesErrorMessageProvider
|
||||
switch ($error) {
|
||||
case JSON_ERROR_NONE:
|
||||
return null;
|
||||
|
||||
case JSON_ERROR_DEPTH:
|
||||
return $prefix . 'Maximum stack depth exceeded';
|
||||
|
||||
case JSON_ERROR_STATE_MISMATCH:
|
||||
return $prefix . 'Underflow or the modes mismatch';
|
||||
|
||||
case JSON_ERROR_CTRL_CHAR:
|
||||
return $prefix . 'Unexpected control character found';
|
||||
|
||||
case JSON_ERROR_SYNTAX:
|
||||
return $prefix . 'Syntax error, malformed JSON';
|
||||
|
||||
case JSON_ERROR_UTF8:
|
||||
return $prefix . 'Malformed UTF-8 characters, possibly incorrectly encoded';
|
||||
|
||||
@@ -56,6 +61,7 @@ final class JsonMatchesErrorMessageProvider
|
||||
$prefix = 'Expected value JSON decode error - ';
|
||||
|
||||
break;
|
||||
|
||||
case 'actual':
|
||||
$prefix = 'Actual value JSON decode error - ';
|
||||
|
||||
|
||||
@@ -18,6 +18,8 @@ use ReflectionException;
|
||||
|
||||
/**
|
||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||
*
|
||||
* @deprecated https://github.com/sebastianbergmann/phpunit/issues/4601
|
||||
*/
|
||||
class ClassHasAttribute extends Constraint
|
||||
{
|
||||
@@ -38,7 +40,7 @@ class ClassHasAttribute extends Constraint
|
||||
{
|
||||
return sprintf(
|
||||
'has attribute "%s"',
|
||||
$this->attributeName
|
||||
$this->attributeName,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -56,8 +58,8 @@ class ClassHasAttribute extends Constraint
|
||||
} catch (ReflectionException $e) {
|
||||
throw new Exception(
|
||||
$e->getMessage(),
|
||||
(int) $e->getCode(),
|
||||
$e
|
||||
$e->getCode(),
|
||||
$e,
|
||||
);
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
@@ -77,7 +79,7 @@ class ClassHasAttribute extends Constraint
|
||||
'%sclass "%s" %s',
|
||||
is_object($other) ? 'object of ' : '',
|
||||
is_object($other) ? get_class($other) : $other,
|
||||
$this->toString()
|
||||
$this->toString(),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,8 @@ use ReflectionException;
|
||||
|
||||
/**
|
||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||
*
|
||||
* @deprecated https://github.com/sebastianbergmann/phpunit/issues/4601
|
||||
*/
|
||||
final class ClassHasStaticAttribute extends ClassHasAttribute
|
||||
{
|
||||
@@ -26,7 +28,7 @@ final class ClassHasStaticAttribute extends ClassHasAttribute
|
||||
{
|
||||
return sprintf(
|
||||
'has static attribute "%s"',
|
||||
$this->attributeName()
|
||||
$this->attributeName(),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -48,8 +50,8 @@ final class ClassHasStaticAttribute extends ClassHasAttribute
|
||||
} catch (ReflectionException $e) {
|
||||
throw new Exception(
|
||||
$e->getMessage(),
|
||||
(int) $e->getCode(),
|
||||
$e
|
||||
$e->getCode(),
|
||||
$e,
|
||||
);
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
|
||||
@@ -65,7 +65,7 @@ final class ObjectEquals extends Constraint
|
||||
if (!$object->hasMethod($this->method)) {
|
||||
throw new ComparisonMethodDoesNotExistException(
|
||||
get_class($other),
|
||||
$this->method
|
||||
$this->method,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ final class ObjectEquals extends Constraint
|
||||
if (!$method->hasReturnType()) {
|
||||
throw new ComparisonMethodDoesNotDeclareBoolReturnTypeException(
|
||||
get_class($other),
|
||||
$this->method
|
||||
$this->method,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -84,28 +84,28 @@ final class ObjectEquals extends Constraint
|
||||
if (!$returnType instanceof ReflectionNamedType) {
|
||||
throw new ComparisonMethodDoesNotDeclareBoolReturnTypeException(
|
||||
get_class($other),
|
||||
$this->method
|
||||
$this->method,
|
||||
);
|
||||
}
|
||||
|
||||
if ($returnType->allowsNull()) {
|
||||
throw new ComparisonMethodDoesNotDeclareBoolReturnTypeException(
|
||||
get_class($other),
|
||||
$this->method
|
||||
$this->method,
|
||||
);
|
||||
}
|
||||
|
||||
if ($returnType->getName() !== 'bool') {
|
||||
throw new ComparisonMethodDoesNotDeclareBoolReturnTypeException(
|
||||
get_class($other),
|
||||
$this->method
|
||||
$this->method,
|
||||
);
|
||||
}
|
||||
|
||||
if ($method->getNumberOfParameters() !== 1 || $method->getNumberOfRequiredParameters() !== 1) {
|
||||
throw new ComparisonMethodDoesNotDeclareExactlyOneParameterException(
|
||||
get_class($other),
|
||||
$this->method
|
||||
$this->method,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ final class ObjectEquals extends Constraint
|
||||
if (!$parameter->hasType()) {
|
||||
throw new ComparisonMethodDoesNotDeclareParameterTypeException(
|
||||
get_class($other),
|
||||
$this->method
|
||||
$this->method,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -123,7 +123,7 @@ final class ObjectEquals extends Constraint
|
||||
if (!$type instanceof ReflectionNamedType) {
|
||||
throw new ComparisonMethodDoesNotDeclareParameterTypeException(
|
||||
get_class($other),
|
||||
$this->method
|
||||
$this->method,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -137,7 +137,7 @@ final class ObjectEquals extends Constraint
|
||||
throw new ComparisonMethodDoesNotAcceptParameterTypeException(
|
||||
get_class($other),
|
||||
$this->method,
|
||||
get_class($this->expected)
|
||||
get_class($this->expected),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -13,6 +13,8 @@ use ReflectionObject;
|
||||
|
||||
/**
|
||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||
*
|
||||
* @deprecated https://github.com/sebastianbergmann/phpunit/issues/4601
|
||||
*/
|
||||
final class ObjectHasAttribute extends ClassHasAttribute
|
||||
{
|
||||
|
||||
@@ -50,10 +50,17 @@ final class LogicalNot extends UnaryOperator
|
||||
|
||||
preg_match('/(\'[\w\W]*\')([\w\W]*)("[\w\W]*")/i', $string, $matches);
|
||||
|
||||
$positives = array_map(static function (string $s)
|
||||
{
|
||||
return '/\\b' . preg_quote($s, '/') . '/';
|
||||
}, $positives);
|
||||
if (count($matches) === 0) {
|
||||
preg_match('/(\'[\w\W]*\')([\w\W]*)(\'[\w\W]*\')/i', $string, $matches);
|
||||
}
|
||||
|
||||
$positives = array_map(
|
||||
static function (string $s)
|
||||
{
|
||||
return '/\\b' . preg_quote($s, '/') . '/';
|
||||
},
|
||||
$positives,
|
||||
);
|
||||
|
||||
if (count($matches) > 0) {
|
||||
$nonInput = $matches[2];
|
||||
@@ -63,15 +70,15 @@ final class LogicalNot extends UnaryOperator
|
||||
preg_replace(
|
||||
$positives,
|
||||
$negatives,
|
||||
$nonInput
|
||||
$nonInput,
|
||||
),
|
||||
$string
|
||||
$string,
|
||||
);
|
||||
} else {
|
||||
$negatedString = preg_replace(
|
||||
$positives,
|
||||
$negatives,
|
||||
$string
|
||||
$string,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@ final class LogicalXor extends BinaryOperator
|
||||
{
|
||||
return $matches xor $constraint->evaluate($other, '', true);
|
||||
},
|
||||
$initial->evaluate($other, '', true)
|
||||
$initial->evaluate($other, '', true),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,8 @@ namespace PHPUnit\Framework\Constraint;
|
||||
|
||||
use function count;
|
||||
|
||||
use SebastianBergmann\RecursionContext\InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||
*/
|
||||
@@ -79,7 +81,7 @@ abstract class UnaryOperator extends Operator
|
||||
*
|
||||
* @param mixed $other evaluated value or object
|
||||
*
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
protected function failureDescription($other): string
|
||||
{
|
||||
|
||||
@@ -10,8 +10,10 @@
|
||||
namespace PHPUnit\Framework\Constraint;
|
||||
|
||||
use function json_decode;
|
||||
|
||||
use function json_last_error;
|
||||
use function sprintf;
|
||||
use SebastianBergmann\RecursionContext\InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||
@@ -55,7 +57,7 @@ final class IsJson extends Constraint
|
||||
*
|
||||
* @param mixed $other evaluated value or object
|
||||
*
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
protected function failureDescription($other): string
|
||||
{
|
||||
@@ -65,13 +67,13 @@ final class IsJson extends Constraint
|
||||
|
||||
json_decode($other);
|
||||
$error = (string) JsonMatchesErrorMessageProvider::determineJsonError(
|
||||
(string) json_last_error()
|
||||
(string) json_last_error(),
|
||||
);
|
||||
|
||||
return sprintf(
|
||||
'%s is valid JSON (%s)',
|
||||
$this->exporter()->shortenedExport($other),
|
||||
$error
|
||||
$error,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ class RegularExpression extends Constraint
|
||||
{
|
||||
return sprintf(
|
||||
'matches PCRE pattern "%s"',
|
||||
$this->pattern
|
||||
$this->pattern,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ final class StringContains extends Constraint
|
||||
|
||||
return sprintf(
|
||||
'contains "%s"',
|
||||
$string
|
||||
$string,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -33,8 +33,8 @@ final class StringMatchesFormatDescription extends RegularExpression
|
||||
{
|
||||
parent::__construct(
|
||||
$this->createPatternFromFormat(
|
||||
$this->convertNewlines($string)
|
||||
)
|
||||
$this->convertNewlines($string),
|
||||
),
|
||||
);
|
||||
|
||||
$this->string = $string;
|
||||
@@ -49,7 +49,7 @@ final class StringMatchesFormatDescription extends RegularExpression
|
||||
protected function matches($other): bool
|
||||
{
|
||||
return parent::matches(
|
||||
$this->convertNewlines($other)
|
||||
$this->convertNewlines($other),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -96,7 +96,7 @@ final class StringMatchesFormatDescription extends RegularExpression
|
||||
'%x' => '[0-9a-fA-F]+',
|
||||
'%f' => '[+-]?\.?\d+\.?\d*(?:[Ee][+-]?\d+)?',
|
||||
'%c' => '.',
|
||||
]
|
||||
],
|
||||
);
|
||||
|
||||
return '/^' . $string . '$/s';
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
*/
|
||||
namespace PHPUnit\Framework\Constraint;
|
||||
|
||||
use function strlen;
|
||||
use function strpos;
|
||||
use PHPUnit\Framework\InvalidArgumentException;
|
||||
|
||||
@@ -25,7 +24,7 @@ final class StringStartsWith extends Constraint
|
||||
|
||||
public function __construct(string $prefix)
|
||||
{
|
||||
if (strlen($prefix) === 0) {
|
||||
if ($prefix === '') {
|
||||
throw InvalidArgumentException::create(1, 'non-empty string');
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ namespace PHPUnit\Framework\Constraint;
|
||||
use function array_key_exists;
|
||||
use function is_array;
|
||||
use ArrayAccess;
|
||||
use SebastianBergmann\RecursionContext\InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||
@@ -34,7 +35,7 @@ final class ArrayHasKey extends Constraint
|
||||
/**
|
||||
* Returns a string representation of the constraint.
|
||||
*
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function toString(): string
|
||||
{
|
||||
@@ -68,7 +69,7 @@ final class ArrayHasKey extends Constraint
|
||||
*
|
||||
* @param mixed $other evaluated value or object
|
||||
*
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
protected function failureDescription($other): string
|
||||
{
|
||||
|
||||
@@ -10,7 +10,9 @@
|
||||
namespace PHPUnit\Framework\Constraint;
|
||||
|
||||
use function is_array;
|
||||
|
||||
use function sprintf;
|
||||
use SebastianBergmann\RecursionContext\InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||
@@ -30,7 +32,7 @@ abstract class TraversableContains extends Constraint
|
||||
/**
|
||||
* Returns a string representation of the constraint.
|
||||
*
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function toString(): string
|
||||
{
|
||||
@@ -45,14 +47,14 @@ abstract class TraversableContains extends Constraint
|
||||
*
|
||||
* @param mixed $other evaluated value or object
|
||||
*
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
protected function failureDescription($other): string
|
||||
{
|
||||
return sprintf(
|
||||
'%s %s',
|
||||
is_array($other) ? 'an array' : 'a traversable',
|
||||
$this->toString()
|
||||
$this->toString(),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,9 @@
|
||||
*/
|
||||
namespace PHPUnit\Framework\Constraint;
|
||||
|
||||
use PHPUnit\Framework\Exception;
|
||||
use PHPUnit\Framework\ExpectationFailedException;
|
||||
use SebastianBergmann\RecursionContext\InvalidArgumentException;
|
||||
use Traversable;
|
||||
|
||||
/**
|
||||
@@ -28,7 +30,7 @@ final class TraversableContainsOnly extends Constraint
|
||||
private $type;
|
||||
|
||||
/**
|
||||
* @throws \PHPUnit\Framework\Exception
|
||||
* @throws Exception
|
||||
*/
|
||||
public function __construct(string $type, bool $isNativeType = true)
|
||||
{
|
||||
@@ -36,7 +38,7 @@ final class TraversableContainsOnly extends Constraint
|
||||
$this->constraint = new IsType($type);
|
||||
} else {
|
||||
$this->constraint = new IsInstanceOf(
|
||||
$type
|
||||
$type,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -55,8 +57,8 @@ final class TraversableContainsOnly extends Constraint
|
||||
*
|
||||
* @param mixed|Traversable $other
|
||||
*
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws ExpectationFailedException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function evaluate($other, string $description = '', bool $returnResult = false): ?bool
|
||||
{
|
||||
|
||||
@@ -12,6 +12,7 @@ namespace PHPUnit\Framework\Constraint;
|
||||
use function sprintf;
|
||||
use ReflectionClass;
|
||||
use ReflectionException;
|
||||
use SebastianBergmann\RecursionContext\InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||
@@ -36,7 +37,7 @@ final class IsInstanceOf extends Constraint
|
||||
return sprintf(
|
||||
'is instance of %s "%s"',
|
||||
$this->getType(),
|
||||
$this->className
|
||||
$this->className,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -59,7 +60,7 @@ final class IsInstanceOf extends Constraint
|
||||
*
|
||||
* @param mixed $other evaluated value or object
|
||||
*
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
protected function failureDescription($other): string
|
||||
{
|
||||
@@ -67,7 +68,7 @@ final class IsInstanceOf extends Constraint
|
||||
'%s is an instance of %s "%s"',
|
||||
$this->exporter()->shortenedExport($other),
|
||||
$this->getType(),
|
||||
$this->className
|
||||
$this->className,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
namespace PHPUnit\Framework\Constraint;
|
||||
|
||||
use function gettype;
|
||||
|
||||
use function is_array;
|
||||
use function is_bool;
|
||||
use function is_callable;
|
||||
@@ -21,6 +22,7 @@ use function is_object;
|
||||
use function is_scalar;
|
||||
use function is_string;
|
||||
use function sprintf;
|
||||
use PHPUnit\Framework\Exception;
|
||||
|
||||
/**
|
||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||
@@ -121,17 +123,17 @@ final class IsType extends Constraint
|
||||
private $type;
|
||||
|
||||
/**
|
||||
* @throws \PHPUnit\Framework\Exception
|
||||
* @throws Exception
|
||||
*/
|
||||
public function __construct(string $type)
|
||||
{
|
||||
if (!isset(self::KNOWN_TYPES[$type])) {
|
||||
throw new \PHPUnit\Framework\Exception(
|
||||
throw new Exception(
|
||||
sprintf(
|
||||
'Type specified for PHPUnit\Framework\Constraint\IsType <%s> ' .
|
||||
'is not a valid type.',
|
||||
$type
|
||||
)
|
||||
$type,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -145,7 +147,7 @@ final class IsType extends Constraint
|
||||
{
|
||||
return sprintf(
|
||||
'is of type "%s"',
|
||||
$this->type
|
||||
$this->type,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ namespace PHPUnit\Framework;
|
||||
|
||||
use function explode;
|
||||
use PHPUnit\Util\Test as TestUtil;
|
||||
use SebastianBergmann\RecursionContext\InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* @internal This class is not covered by the backward compatibility promise for PHPUnit
|
||||
@@ -64,7 +65,7 @@ final class DataProviderTestSuite extends TestSuite
|
||||
/**
|
||||
* Returns the size of the each test created using the data provider(s).
|
||||
*
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function getSize(): int
|
||||
{
|
||||
|
||||
@@ -16,7 +16,7 @@ use PHPUnit\Framework\Exception;
|
||||
*/
|
||||
class Error extends Exception
|
||||
{
|
||||
public function __construct(string $message, int $code, string $file, int $line, \Exception $previous = null)
|
||||
public function __construct(string $message, int $code, string $file, int $line, ?\Exception $previous = null)
|
||||
{
|
||||
parent::__construct($message, $code, $previous);
|
||||
|
||||
|
||||
@@ -15,17 +15,17 @@ namespace PHPUnit\Framework;
|
||||
final class ErrorTestCase extends TestCase
|
||||
{
|
||||
/**
|
||||
* @var bool
|
||||
* @var ?bool
|
||||
*/
|
||||
protected $backupGlobals = false;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
* @var ?bool
|
||||
*/
|
||||
protected $backupStaticAttributes = false;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
* @var ?bool
|
||||
*/
|
||||
protected $runTestInSeparateProcess = false;
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ final class ActualValueIsNotAnObjectException extends Exception
|
||||
parent::__construct(
|
||||
'Actual value is not an object',
|
||||
0,
|
||||
null
|
||||
null,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -24,10 +24,10 @@ final class ComparisonMethodDoesNotAcceptParameterTypeException extends Exceptio
|
||||
'%s is not an accepted argument type for comparison method %s::%s().',
|
||||
$type,
|
||||
$className,
|
||||
$methodName
|
||||
$methodName,
|
||||
),
|
||||
0,
|
||||
null
|
||||
null,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -23,10 +23,10 @@ final class ComparisonMethodDoesNotDeclareBoolReturnTypeException extends Except
|
||||
sprintf(
|
||||
'Comparison method %s::%s() does not declare bool return type.',
|
||||
$className,
|
||||
$methodName
|
||||
$methodName,
|
||||
),
|
||||
0,
|
||||
null
|
||||
null,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -23,10 +23,10 @@ final class ComparisonMethodDoesNotDeclareExactlyOneParameterException extends E
|
||||
sprintf(
|
||||
'Comparison method %s::%s() does not declare exactly one parameter.',
|
||||
$className,
|
||||
$methodName
|
||||
$methodName,
|
||||
),
|
||||
0,
|
||||
null
|
||||
null,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -23,10 +23,10 @@ final class ComparisonMethodDoesNotDeclareParameterTypeException extends Excepti
|
||||
sprintf(
|
||||
'Parameter of comparison method %s::%s() does not have a declared type.',
|
||||
$className,
|
||||
$methodName
|
||||
$methodName,
|
||||
),
|
||||
0,
|
||||
null
|
||||
null,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -23,10 +23,10 @@ final class ComparisonMethodDoesNotExistException extends Exception
|
||||
sprintf(
|
||||
'Comparison method %s::%s() does not exist.',
|
||||
$className,
|
||||
$methodName
|
||||
$methodName,
|
||||
),
|
||||
0,
|
||||
null
|
||||
null,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ class Exception extends RuntimeException implements \PHPUnit\Exception
|
||||
*/
|
||||
protected $serializableTrace;
|
||||
|
||||
public function __construct($message = '', $code = 0, Throwable $previous = null)
|
||||
public function __construct($message = '', $code = 0, ?Throwable $previous = null)
|
||||
{
|
||||
parent::__construct($message, $code, $previous);
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ final class ExpectationFailedException extends AssertionFailedError
|
||||
*/
|
||||
protected $comparisonFailure;
|
||||
|
||||
public function __construct(string $message, ComparisonFailure $comparisonFailure = null, Exception $previous = null)
|
||||
public function __construct(string $message, ?ComparisonFailure $comparisonFailure = null, ?Exception $previous = null)
|
||||
{
|
||||
$this->comparisonFailure = $comparisonFailure;
|
||||
|
||||
|
||||
@@ -34,12 +34,12 @@ final class InvalidArgumentException extends Exception
|
||||
$argument,
|
||||
$function,
|
||||
in_array(lcfirst($type)[0], ['a', 'e', 'i', 'o', 'u'], true) ? 'an' : 'a',
|
||||
$type
|
||||
)
|
||||
$type,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
private function __construct(string $message = '', int $code = 0, \Exception $previous = null)
|
||||
private function __construct(string $message = '', int $code = 0, ?\Exception $previous = null)
|
||||
{
|
||||
parent::__construct($message, $code, $previous);
|
||||
}
|
||||
|
||||
@@ -9,11 +9,13 @@
|
||||
*/
|
||||
namespace PHPUnit\Framework;
|
||||
|
||||
use const PHP_VERSION_ID;
|
||||
use function array_keys;
|
||||
use function get_class;
|
||||
use function spl_object_hash;
|
||||
use PHPUnit\Util\Filter;
|
||||
use Throwable;
|
||||
use WeakReference;
|
||||
|
||||
/**
|
||||
* Wraps Exceptions thrown by code under test.
|
||||
@@ -38,6 +40,11 @@ final class ExceptionWrapper extends Exception
|
||||
*/
|
||||
protected $previous;
|
||||
|
||||
/**
|
||||
* @var null|WeakReference<Throwable>
|
||||
*/
|
||||
private $originalException;
|
||||
|
||||
public function __construct(Throwable $t)
|
||||
{
|
||||
// PDOException::getCode() is a string.
|
||||
@@ -107,16 +114,25 @@ final class ExceptionWrapper extends Exception
|
||||
*
|
||||
* Approach works both for var_dump() and var_export() and print_r().
|
||||
*/
|
||||
private function originalException(Throwable $exceptionToStore = null): ?Throwable
|
||||
private function originalException(?Throwable $exceptionToStore = null): ?Throwable
|
||||
{
|
||||
static $originalExceptions;
|
||||
// drop once PHP 7.3 support is removed
|
||||
if (PHP_VERSION_ID < 70400) {
|
||||
static $originalExceptions;
|
||||
|
||||
$instanceId = spl_object_hash($this);
|
||||
$instanceId = spl_object_hash($this);
|
||||
|
||||
if ($exceptionToStore) {
|
||||
$originalExceptions[$instanceId] = $exceptionToStore;
|
||||
if ($exceptionToStore) {
|
||||
$originalExceptions[$instanceId] = $exceptionToStore;
|
||||
}
|
||||
|
||||
return $originalExceptions[$instanceId] ?? null;
|
||||
}
|
||||
|
||||
return $originalExceptions[$instanceId] ?? null;
|
||||
if ($exceptionToStore) {
|
||||
$this->originalException = WeakReference::create($exceptionToStore);
|
||||
}
|
||||
|
||||
return $this->originalException !== null ? $this->originalException->get() : null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,8 +77,8 @@ final class ExecutionOrderDependency
|
||||
static function (self $d)
|
||||
{
|
||||
return $d->isValid();
|
||||
}
|
||||
)
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -95,7 +95,7 @@ final class ExecutionOrderDependency
|
||||
{
|
||||
return $dependency->getTarget();
|
||||
},
|
||||
$existing
|
||||
$existing,
|
||||
);
|
||||
|
||||
foreach ($additional as $dependency) {
|
||||
@@ -132,7 +132,7 @@ final class ExecutionOrderDependency
|
||||
{
|
||||
return $dependency->getTarget();
|
||||
},
|
||||
$right
|
||||
$right,
|
||||
);
|
||||
|
||||
foreach ($left as $dependency) {
|
||||
|
||||
@@ -9,23 +9,25 @@
|
||||
*/
|
||||
namespace PHPUnit\Framework;
|
||||
|
||||
use SebastianBergmann\RecursionContext\InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* @internal This class is not covered by the backward compatibility promise for PHPUnit
|
||||
*/
|
||||
final class IncompleteTestCase extends TestCase
|
||||
{
|
||||
/**
|
||||
* @var bool
|
||||
* @var ?bool
|
||||
*/
|
||||
protected $backupGlobals = false;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
* @var ?bool
|
||||
*/
|
||||
protected $backupStaticAttributes = false;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
* @var ?bool
|
||||
*/
|
||||
protected $runTestInSeparateProcess = false;
|
||||
|
||||
@@ -49,7 +51,7 @@ final class IncompleteTestCase extends TestCase
|
||||
/**
|
||||
* Returns a string representation of the test case.
|
||||
*
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function toString(): string
|
||||
{
|
||||
|
||||
@@ -42,7 +42,7 @@ trait Api
|
||||
{
|
||||
if (isset(static::$__phpunit_configurableMethods)) {
|
||||
throw new ConfigurableMethodsAlreadyInitializedException(
|
||||
'Configurable methods is already initialized and can not be reinitialized'
|
||||
'Configurable methods is already initialized and can not be reinitialized',
|
||||
);
|
||||
}
|
||||
|
||||
@@ -67,7 +67,7 @@ trait Api
|
||||
if ($this->__phpunit_invocationMocker === null) {
|
||||
$this->__phpunit_invocationMocker = new InvocationHandler(
|
||||
static::$__phpunit_configurableMethods,
|
||||
$this->__phpunit_returnValueGeneration
|
||||
$this->__phpunit_returnValueGeneration,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ trait Method
|
||||
|
||||
return call_user_func_array(
|
||||
[$expects, 'method'],
|
||||
func_get_args()
|
||||
func_get_args(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ use function in_array;
|
||||
use function is_string;
|
||||
use function strtolower;
|
||||
use PHPUnit\Framework\Constraint\Constraint;
|
||||
use PHPUnit\Framework\InvalidArgumentException;
|
||||
use PHPUnit\Framework\MockObject\ConfigurableMethod;
|
||||
use PHPUnit\Framework\MockObject\IncompatibleReturnValueException;
|
||||
use PHPUnit\Framework\MockObject\InvocationHandler;
|
||||
@@ -194,6 +195,8 @@ final class InvocationMocker implements InvocationStubber, MethodNameMatch
|
||||
* @throws MethodParametersAlreadyConfiguredException
|
||||
*
|
||||
* @return $this
|
||||
*
|
||||
* @deprecated
|
||||
*/
|
||||
public function withConsecutive(...$arguments): self
|
||||
{
|
||||
@@ -222,7 +225,7 @@ final class InvocationMocker implements InvocationStubber, MethodNameMatch
|
||||
/**
|
||||
* @param Constraint|string $constraint
|
||||
*
|
||||
* @throws \PHPUnit\Framework\InvalidArgumentException
|
||||
* @throws InvalidArgumentException
|
||||
* @throws MethodCannotBeConfiguredException
|
||||
* @throws MethodNameAlreadyConfiguredException
|
||||
*
|
||||
@@ -239,7 +242,7 @@ final class InvocationMocker implements InvocationStubber, MethodNameMatch
|
||||
{
|
||||
return strtolower($configurable->getName());
|
||||
},
|
||||
$this->configurableMethods
|
||||
$this->configurableMethods,
|
||||
);
|
||||
|
||||
if (is_string($constraint) && !in_array(strtolower($constraint), $configurableMethodNames, true)) {
|
||||
@@ -298,7 +301,7 @@ final class InvocationMocker implements InvocationStubber, MethodNameMatch
|
||||
if (!$configuredMethod->mayReturn($value)) {
|
||||
throw new IncompatibleReturnValueException(
|
||||
$configuredMethod,
|
||||
$value
|
||||
$value,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,46 +20,46 @@ interface InvocationStubber
|
||||
public function will(Stub $stub): Identity;
|
||||
|
||||
/** @return self */
|
||||
public function willReturn($value, ...$nextValues)/*: self */;
|
||||
public function willReturn($value, ...$nextValues)/* : self */;
|
||||
|
||||
/**
|
||||
* @param mixed $reference
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public function willReturnReference(&$reference)/*: self */;
|
||||
public function willReturnReference(&$reference)/* : self */;
|
||||
|
||||
/**
|
||||
* @param array<int, array<int, mixed>> $valueMap
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public function willReturnMap(array $valueMap)/*: self */;
|
||||
public function willReturnMap(array $valueMap)/* : self */;
|
||||
|
||||
/**
|
||||
* @param int $argumentIndex
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public function willReturnArgument($argumentIndex)/*: self */;
|
||||
public function willReturnArgument($argumentIndex)/* : self */;
|
||||
|
||||
/**
|
||||
* @param callable $callback
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public function willReturnCallback($callback)/*: self */;
|
||||
public function willReturnCallback($callback)/* : self */;
|
||||
|
||||
/** @return self */
|
||||
public function willReturnSelf()/*: self */;
|
||||
public function willReturnSelf()/* : self */;
|
||||
|
||||
/**
|
||||
* @param mixed $values
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public function willReturnOnConsecutiveCalls(...$values)/*: self */;
|
||||
public function willReturnOnConsecutiveCalls(...$values)/* : self */;
|
||||
|
||||
/** @return self */
|
||||
public function willThrowException(Throwable $exception)/*: self */;
|
||||
public function willThrowException(Throwable $exception)/* : self */;
|
||||
}
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
*/
|
||||
namespace PHPUnit\Framework\MockObject\Builder;
|
||||
|
||||
use PHPUnit\Framework\Constraint\Constraint;
|
||||
|
||||
/**
|
||||
* @internal This class is not covered by the backward compatibility promise for PHPUnit
|
||||
*/
|
||||
@@ -18,7 +20,7 @@ interface MethodNameMatch extends ParametersMatch
|
||||
* Adds a new method name match and returns the parameter match object for
|
||||
* further matching possibilities.
|
||||
*
|
||||
* @param \PHPUnit\Framework\Constraint\Constraint $constraint Constraint for matching method, if a string is passed it will use the PHPUnit_Framework_Constraint_IsEqual
|
||||
* @param Constraint $constraint Constraint for matching method, if a string is passed it will use the PHPUnit_Framework_Constraint_IsEqual
|
||||
*
|
||||
* @return ParametersMatch
|
||||
*/
|
||||
|
||||
@@ -22,8 +22,8 @@ final class CannotUseAddMethodsException extends \PHPUnit\Framework\Exception im
|
||||
sprintf(
|
||||
'Trying to configure method "%s" with addMethods(), but it exists in class "%s". Use onlyMethods() for methods that exist in the class',
|
||||
$methodName,
|
||||
$type
|
||||
)
|
||||
$type,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,8 +22,8 @@ final class CannotUseOnlyMethodsException extends \PHPUnit\Framework\Exception i
|
||||
sprintf(
|
||||
'Trying to configure method "%s" with onlyMethods(), but it does not exist in class "%s". Use addMethods() for methods that do not exist in the class',
|
||||
$methodName,
|
||||
$type
|
||||
)
|
||||
$type,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,8 +21,8 @@ final class ClassAlreadyExistsException extends \PHPUnit\Framework\Exception imp
|
||||
parent::__construct(
|
||||
sprintf(
|
||||
'Class "%s" already exists',
|
||||
$className
|
||||
)
|
||||
$className,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,8 +21,8 @@ final class ClassIsFinalException extends \PHPUnit\Framework\Exception implement
|
||||
parent::__construct(
|
||||
sprintf(
|
||||
'Class "%s" is declared "final" and cannot be doubled',
|
||||
$className
|
||||
)
|
||||
$className,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,9 @@
|
||||
*/
|
||||
namespace PHPUnit\Framework\MockObject;
|
||||
|
||||
use function array_diff_assoc;
|
||||
use function array_unique;
|
||||
use function implode;
|
||||
use function sprintf;
|
||||
|
||||
/**
|
||||
@@ -25,8 +28,8 @@ final class DuplicateMethodException extends \PHPUnit\Framework\Exception implem
|
||||
sprintf(
|
||||
'Cannot double using a method list that contains duplicates: "%s" (duplicate: "%s")',
|
||||
implode(', ', $methods),
|
||||
implode(', ', array_unique(array_diff_assoc($methods, array_unique($methods))))
|
||||
)
|
||||
implode(', ', array_unique(array_diff_assoc($methods, array_unique($methods)))),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,9 @@
|
||||
*/
|
||||
namespace PHPUnit\Framework\MockObject;
|
||||
|
||||
use function get_class;
|
||||
use function gettype;
|
||||
use function is_object;
|
||||
use function sprintf;
|
||||
|
||||
/**
|
||||
@@ -26,8 +29,8 @@ final class IncompatibleReturnValueException extends \PHPUnit\Framework\Exceptio
|
||||
'Method %s may not return value of type %s, its declared return type is "%s"',
|
||||
$method->getName(),
|
||||
is_object($value) ? get_class($value) : gettype($value),
|
||||
$method->getReturnTypeDeclaration()
|
||||
)
|
||||
$method->getReturnTypeDeclaration(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,8 +21,8 @@ final class InvalidMethodNameException extends \PHPUnit\Framework\Exception impl
|
||||
parent::__construct(
|
||||
sprintf(
|
||||
'Cannot double method with invalid name "%s"',
|
||||
$method
|
||||
)
|
||||
$method,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,8 +21,8 @@ final class MatchBuilderNotFoundException extends \PHPUnit\Framework\Exception i
|
||||
parent::__construct(
|
||||
sprintf(
|
||||
'No builder found for match builder identification <%s>',
|
||||
$id
|
||||
)
|
||||
$id,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,8 +21,8 @@ final class MatcherAlreadyRegisteredException extends \PHPUnit\Framework\Excepti
|
||||
parent::__construct(
|
||||
sprintf(
|
||||
'Matcher with id <%s> is already registered',
|
||||
$id
|
||||
)
|
||||
$id,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,8 +21,8 @@ final class MethodCannotBeConfiguredException extends \PHPUnit\Framework\Excepti
|
||||
parent::__construct(
|
||||
sprintf(
|
||||
'Trying to configure method "%s" which cannot be configured because it does not exist, has not been specified, is final, or is static',
|
||||
$method
|
||||
)
|
||||
$method,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
*/
|
||||
namespace PHPUnit\Framework\MockObject;
|
||||
|
||||
use function sprintf;
|
||||
|
||||
/**
|
||||
* @internal This class is not covered by the backward compatibility promise for PHPUnit
|
||||
*/
|
||||
@@ -20,8 +22,8 @@ final class ReturnValueNotConfiguredException extends \PHPUnit\Framework\Excepti
|
||||
sprintf(
|
||||
'Return value inference disabled and no expectation set up for %s::%s()',
|
||||
$invocation->getClassName(),
|
||||
$invocation->getMethodName()
|
||||
)
|
||||
$invocation->getMethodName(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ final class SoapExtensionNotAvailableException extends \PHPUnit\Framework\Except
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct(
|
||||
'The SOAP extension is required to generate a test double from WSDL'
|
||||
'The SOAP extension is required to generate a test double from WSDL',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,8 +21,8 @@ final class UnknownClassException extends \PHPUnit\Framework\Exception implement
|
||||
parent::__construct(
|
||||
sprintf(
|
||||
'Class "%s" does not exist',
|
||||
$className
|
||||
)
|
||||
$className,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,8 +21,8 @@ final class UnknownTraitException extends \PHPUnit\Framework\Exception implement
|
||||
parent::__construct(
|
||||
sprintf(
|
||||
'Trait "%s" does not exist',
|
||||
$traitName
|
||||
)
|
||||
$traitName,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,8 +21,8 @@ final class UnknownTypeException extends \PHPUnit\Framework\Exception implements
|
||||
parent::__construct(
|
||||
sprintf(
|
||||
'Class or interface "%s" does not exist',
|
||||
$type
|
||||
)
|
||||
$type,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ use function interface_exists;
|
||||
use function is_array;
|
||||
use function is_object;
|
||||
use function md5;
|
||||
use function method_exists;
|
||||
use function mt_rand;
|
||||
use function preg_match;
|
||||
use function preg_match_all;
|
||||
@@ -71,7 +72,6 @@ trait MockedCloneMethodWithVoidReturnType
|
||||
}
|
||||
}
|
||||
EOT;
|
||||
|
||||
private const MOCKED_CLONE_METHOD_WITHOUT_RETURN_TYPE_TRAIT = <<<'EOT'
|
||||
namespace PHPUnit\Framework\MockObject;
|
||||
|
||||
@@ -83,7 +83,6 @@ trait MockedCloneMethodWithoutReturnType
|
||||
}
|
||||
}
|
||||
EOT;
|
||||
|
||||
private const UNMOCKED_CLONE_METHOD_WITH_VOID_RETURN_TYPE_TRAIT = <<<'EOT'
|
||||
namespace PHPUnit\Framework\MockObject;
|
||||
|
||||
@@ -97,7 +96,6 @@ trait UnmockedCloneMethodWithVoidReturnType
|
||||
}
|
||||
}
|
||||
EOT;
|
||||
|
||||
private const UNMOCKED_CLONE_METHOD_WITHOUT_RETURN_TYPE_TRAIT = <<<'EOT'
|
||||
namespace PHPUnit\Framework\MockObject;
|
||||
|
||||
@@ -143,17 +141,18 @@ EOT;
|
||||
*
|
||||
* @param null|array $methods
|
||||
*
|
||||
* @throws \PHPUnit\Framework\InvalidArgumentException
|
||||
* @throws ClassAlreadyExistsException
|
||||
* @throws ClassIsFinalException
|
||||
* @throws ClassIsReadonlyException
|
||||
* @throws DuplicateMethodException
|
||||
* @throws InvalidArgumentException
|
||||
* @throws InvalidMethodNameException
|
||||
* @throws OriginalConstructorInvocationRequiredException
|
||||
* @throws ReflectionException
|
||||
* @throws RuntimeException
|
||||
* @throws UnknownTypeException
|
||||
*/
|
||||
public function getMock(string $type, $methods = [], array $arguments = [], string $mockClassName = '', bool $callOriginalConstructor = true, bool $callOriginalClone = true, bool $callAutoload = true, bool $cloneArguments = true, bool $callOriginalMethods = false, object $proxyTarget = null, bool $allowMockingUnknownTypes = true, bool $returnValueGeneration = true): MockObject
|
||||
public function getMock(string $type, $methods = [], array $arguments = [], string $mockClassName = '', bool $callOriginalConstructor = true, bool $callOriginalClone = true, bool $callAutoload = true, bool $cloneArguments = true, bool $callOriginalMethods = false, ?object $proxyTarget = null, bool $allowMockingUnknownTypes = true, bool $returnValueGeneration = true): MockObject
|
||||
{
|
||||
if (!is_array($methods) && null !== $methods) {
|
||||
throw InvalidArgumentException::create(2, 'array');
|
||||
@@ -186,8 +185,8 @@ EOT;
|
||||
} catch (\ReflectionException $e) {
|
||||
throw new ReflectionException(
|
||||
$e->getMessage(),
|
||||
(int) $e->getCode(),
|
||||
$e
|
||||
$e->getCode(),
|
||||
$e,
|
||||
);
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
@@ -208,7 +207,7 @@ EOT;
|
||||
$callOriginalClone,
|
||||
$callAutoload,
|
||||
$cloneArguments,
|
||||
$callOriginalMethods
|
||||
$callOriginalMethods,
|
||||
);
|
||||
|
||||
return $this->getObject(
|
||||
@@ -219,7 +218,7 @@ EOT;
|
||||
$arguments,
|
||||
$callOriginalMethods,
|
||||
$proxyTarget,
|
||||
$returnValueGeneration
|
||||
$returnValueGeneration,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -266,7 +265,7 @@ EOT;
|
||||
$intersectionName = sprintf(
|
||||
'Intersection_%s_%s',
|
||||
implode('_', $unqualifiedNames),
|
||||
substr(md5((string) mt_rand()), 0, 8)
|
||||
substr(md5((string) mt_rand()), 0, 8),
|
||||
);
|
||||
} while (interface_exists($intersectionName, false));
|
||||
|
||||
@@ -276,7 +275,7 @@ EOT;
|
||||
[
|
||||
'intersection' => $intersectionName,
|
||||
'interfaces' => implode(', ', $interfaces),
|
||||
]
|
||||
],
|
||||
);
|
||||
|
||||
eval($template->render());
|
||||
@@ -291,13 +290,16 @@ EOT;
|
||||
* Concrete methods to mock can be specified with the $mockedMethods parameter.
|
||||
*
|
||||
* @psalm-template RealInstanceType of object
|
||||
*
|
||||
* @psalm-param class-string<RealInstanceType> $originalClassName
|
||||
*
|
||||
* @psalm-return MockObject&RealInstanceType
|
||||
*
|
||||
* @throws \PHPUnit\Framework\InvalidArgumentException
|
||||
* @throws ClassAlreadyExistsException
|
||||
* @throws ClassIsFinalException
|
||||
* @throws ClassIsReadonlyException
|
||||
* @throws DuplicateMethodException
|
||||
* @throws InvalidArgumentException
|
||||
* @throws InvalidMethodNameException
|
||||
* @throws OriginalConstructorInvocationRequiredException
|
||||
* @throws ReflectionException
|
||||
@@ -305,7 +307,7 @@ EOT;
|
||||
* @throws UnknownClassException
|
||||
* @throws UnknownTypeException
|
||||
*/
|
||||
public function getMockForAbstractClass(string $originalClassName, array $arguments = [], string $mockClassName = '', bool $callOriginalConstructor = true, bool $callOriginalClone = true, bool $callAutoload = true, array $mockedMethods = null, bool $cloneArguments = true): MockObject
|
||||
public function getMockForAbstractClass(string $originalClassName, array $arguments = [], string $mockClassName = '', bool $callOriginalConstructor = true, bool $callOriginalClone = true, bool $callAutoload = true, ?array $mockedMethods = null, bool $cloneArguments = true): MockObject
|
||||
{
|
||||
if (class_exists($originalClassName, $callAutoload) ||
|
||||
interface_exists($originalClassName, $callAutoload)) {
|
||||
@@ -315,8 +317,8 @@ EOT;
|
||||
} catch (\ReflectionException $e) {
|
||||
throw new ReflectionException(
|
||||
$e->getMessage(),
|
||||
(int) $e->getCode(),
|
||||
$e
|
||||
$e->getCode(),
|
||||
$e,
|
||||
);
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
@@ -341,7 +343,7 @@ EOT;
|
||||
$callOriginalConstructor,
|
||||
$callOriginalClone,
|
||||
$callAutoload,
|
||||
$cloneArguments
|
||||
$cloneArguments,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -355,10 +357,11 @@ EOT;
|
||||
*
|
||||
* @psalm-param trait-string $traitName
|
||||
*
|
||||
* @throws \PHPUnit\Framework\InvalidArgumentException
|
||||
* @throws ClassAlreadyExistsException
|
||||
* @throws ClassIsFinalException
|
||||
* @throws ClassIsReadonlyException
|
||||
* @throws DuplicateMethodException
|
||||
* @throws InvalidArgumentException
|
||||
* @throws InvalidMethodNameException
|
||||
* @throws OriginalConstructorInvocationRequiredException
|
||||
* @throws ReflectionException
|
||||
@@ -367,7 +370,7 @@ EOT;
|
||||
* @throws UnknownTraitException
|
||||
* @throws UnknownTypeException
|
||||
*/
|
||||
public function getMockForTrait(string $traitName, array $arguments = [], string $mockClassName = '', bool $callOriginalConstructor = true, bool $callOriginalClone = true, bool $callAutoload = true, array $mockedMethods = null, bool $cloneArguments = true): MockObject
|
||||
public function getMockForTrait(string $traitName, array $arguments = [], string $mockClassName = '', bool $callOriginalConstructor = true, bool $callOriginalClone = true, bool $callAutoload = true, ?array $mockedMethods = null, bool $cloneArguments = true): MockObject
|
||||
{
|
||||
if (!trait_exists($traitName, $callAutoload)) {
|
||||
throw new UnknownTraitException($traitName);
|
||||
@@ -376,7 +379,7 @@ EOT;
|
||||
$className = $this->generateClassName(
|
||||
$traitName,
|
||||
'',
|
||||
'Trait_'
|
||||
'Trait_',
|
||||
);
|
||||
|
||||
$classTemplate = $this->getTemplate('trait_class.tpl');
|
||||
@@ -386,7 +389,7 @@ EOT;
|
||||
'prologue' => 'abstract ',
|
||||
'class_name' => $className['className'],
|
||||
'trait_name' => $traitName,
|
||||
]
|
||||
],
|
||||
);
|
||||
|
||||
$mockTrait = new MockTrait($classTemplate->render(), $className['className']);
|
||||
@@ -413,7 +416,7 @@ EOT;
|
||||
$className = $this->generateClassName(
|
||||
$traitName,
|
||||
$traitClassName,
|
||||
'Trait_'
|
||||
'Trait_',
|
||||
);
|
||||
|
||||
$classTemplate = $this->getTemplate('trait_class.tpl');
|
||||
@@ -423,27 +426,28 @@ EOT;
|
||||
'prologue' => '',
|
||||
'class_name' => $className['className'],
|
||||
'trait_name' => $traitName,
|
||||
]
|
||||
],
|
||||
);
|
||||
|
||||
return $this->getObject(
|
||||
new MockTrait(
|
||||
$classTemplate->render(),
|
||||
$className['className']
|
||||
$className['className'],
|
||||
),
|
||||
'',
|
||||
$callOriginalConstructor,
|
||||
$callAutoload,
|
||||
$arguments
|
||||
$arguments,
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws ClassIsFinalException
|
||||
* @throws ClassIsReadonlyException
|
||||
* @throws ReflectionException
|
||||
* @throws RuntimeException
|
||||
*/
|
||||
public function generate(string $type, array $methods = null, string $mockClassName = '', bool $callOriginalClone = true, bool $callAutoload = true, bool $cloneArguments = true, bool $callOriginalMethods = false): MockClass
|
||||
public function generate(string $type, ?array $methods = null, string $mockClassName = '', bool $callOriginalClone = true, bool $callAutoload = true, bool $cloneArguments = true, bool $callOriginalMethods = false): MockClass
|
||||
{
|
||||
if ($mockClassName !== '') {
|
||||
return $this->generateMock(
|
||||
@@ -453,7 +457,7 @@ EOT;
|
||||
$callOriginalClone,
|
||||
$callAutoload,
|
||||
$cloneArguments,
|
||||
$callOriginalMethods
|
||||
$callOriginalMethods,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -462,7 +466,7 @@ EOT;
|
||||
serialize($methods) .
|
||||
serialize($callOriginalClone) .
|
||||
serialize($cloneArguments) .
|
||||
serialize($callOriginalMethods)
|
||||
serialize($callOriginalMethods),
|
||||
);
|
||||
|
||||
if (!isset(self::$cache[$key])) {
|
||||
@@ -473,7 +477,7 @@ EOT;
|
||||
$callOriginalClone,
|
||||
$callAutoload,
|
||||
$cloneArguments,
|
||||
$callOriginalMethods
|
||||
$callOriginalMethods,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -499,8 +503,8 @@ EOT;
|
||||
} catch (SoapFault $e) {
|
||||
throw new RuntimeException(
|
||||
$e->getMessage(),
|
||||
(int) $e->getCode(),
|
||||
$e
|
||||
$e->getCode(),
|
||||
$e,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -519,7 +523,7 @@ EOT;
|
||||
if (empty($methods) || in_array($name, $methods, true)) {
|
||||
$args = explode(
|
||||
',',
|
||||
str_replace(')', '', substr($method, $nameEnd + 1))
|
||||
str_replace(')', '', substr($method, $nameEnd + 1)),
|
||||
);
|
||||
|
||||
foreach (range(0, count($args) - 1) as $i) {
|
||||
@@ -536,7 +540,7 @@ EOT;
|
||||
[
|
||||
'method_name' => $name,
|
||||
'arguments' => implode(', ', $args),
|
||||
]
|
||||
],
|
||||
);
|
||||
|
||||
$methodsBuffer .= $methodTemplate->render();
|
||||
@@ -567,7 +571,7 @@ EOT;
|
||||
'wsdl' => $wsdlFile,
|
||||
'options' => $optionsBuffer,
|
||||
'methods' => $methodsBuffer,
|
||||
]
|
||||
],
|
||||
);
|
||||
|
||||
return $classTemplate->render();
|
||||
@@ -586,8 +590,8 @@ EOT;
|
||||
} catch (\ReflectionException $e) {
|
||||
throw new ReflectionException(
|
||||
$e->getMessage(),
|
||||
(int) $e->getCode(),
|
||||
$e
|
||||
$e->getCode(),
|
||||
$e,
|
||||
);
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
@@ -616,8 +620,8 @@ EOT;
|
||||
} catch (\ReflectionException $e) {
|
||||
throw new ReflectionException(
|
||||
$e->getMessage(),
|
||||
(int) $e->getCode(),
|
||||
$e
|
||||
$e->getCode(),
|
||||
$e,
|
||||
);
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
@@ -646,8 +650,8 @@ EOT;
|
||||
} catch (\ReflectionException $e) {
|
||||
throw new ReflectionException(
|
||||
$e->getMessage(),
|
||||
(int) $e->getCode(),
|
||||
$e
|
||||
$e->getCode(),
|
||||
$e,
|
||||
);
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
@@ -676,8 +680,8 @@ EOT;
|
||||
} catch (\ReflectionException $e) {
|
||||
throw new ReflectionException(
|
||||
$e->getMessage(),
|
||||
(int) $e->getCode(),
|
||||
$e
|
||||
$e->getCode(),
|
||||
$e,
|
||||
);
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
@@ -699,7 +703,7 @@ EOT;
|
||||
* @throws ReflectionException
|
||||
* @throws RuntimeException
|
||||
*/
|
||||
private function getObject(MockType $mockClass, $type = '', bool $callOriginalConstructor = false, bool $callAutoload = false, array $arguments = [], bool $callOriginalMethods = false, object $proxyTarget = null, bool $returnValueGeneration = true)
|
||||
private function getObject(MockType $mockClass, $type = '', bool $callOriginalConstructor = false, bool $callAutoload = false, array $arguments = [], bool $callOriginalMethods = false, ?object $proxyTarget = null, bool $returnValueGeneration = true)
|
||||
{
|
||||
$className = $mockClass->generate();
|
||||
|
||||
@@ -713,8 +717,8 @@ EOT;
|
||||
} catch (\ReflectionException $e) {
|
||||
throw new ReflectionException(
|
||||
$e->getMessage(),
|
||||
(int) $e->getCode(),
|
||||
$e
|
||||
$e->getCode(),
|
||||
$e,
|
||||
);
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
@@ -740,8 +744,8 @@ EOT;
|
||||
} catch (\ReflectionException $e) {
|
||||
throw new ReflectionException(
|
||||
$e->getMessage(),
|
||||
(int) $e->getCode(),
|
||||
$e
|
||||
$e->getCode(),
|
||||
$e,
|
||||
);
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
@@ -762,6 +766,7 @@ EOT;
|
||||
|
||||
/**
|
||||
* @throws ClassIsFinalException
|
||||
* @throws ClassIsReadonlyException
|
||||
* @throws ReflectionException
|
||||
* @throws RuntimeException
|
||||
*/
|
||||
@@ -779,7 +784,7 @@ EOT;
|
||||
$_mockClassName = $this->generateClassName(
|
||||
$type,
|
||||
$mockClassName,
|
||||
'Mock_'
|
||||
'Mock_',
|
||||
);
|
||||
|
||||
if (class_exists($_mockClassName['fullClassName'], $callAutoload)) {
|
||||
@@ -807,8 +812,8 @@ EOT;
|
||||
} catch (\ReflectionException $e) {
|
||||
throw new ReflectionException(
|
||||
$e->getMessage(),
|
||||
(int) $e->getCode(),
|
||||
$e
|
||||
$e->getCode(),
|
||||
$e,
|
||||
);
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
@@ -817,6 +822,10 @@ EOT;
|
||||
throw new ClassIsFinalException($_mockClassName['fullClassName']);
|
||||
}
|
||||
|
||||
if (method_exists($class, 'isReadOnly') && $class->isReadOnly()) {
|
||||
throw new ClassIsReadonlyException($_mockClassName['fullClassName']);
|
||||
}
|
||||
|
||||
// @see https://github.com/sebastianbergmann/phpunit/issues/2995
|
||||
if ($isInterface && $class->implementsInterface(Throwable::class)) {
|
||||
$actualClassName = Exception::class;
|
||||
@@ -829,8 +838,8 @@ EOT;
|
||||
} catch (\ReflectionException $e) {
|
||||
throw new ReflectionException(
|
||||
$e->getMessage(),
|
||||
(int) $e->getCode(),
|
||||
$e
|
||||
$e->getCode(),
|
||||
$e,
|
||||
);
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
@@ -845,8 +854,8 @@ EOT;
|
||||
} catch (\ReflectionException $e) {
|
||||
throw new ReflectionException(
|
||||
$e->getMessage(),
|
||||
(int) $e->getCode(),
|
||||
$e
|
||||
$e->getCode(),
|
||||
$e,
|
||||
);
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
@@ -857,14 +866,14 @@ EOT;
|
||||
}
|
||||
|
||||
$mockMethods->addMethods(
|
||||
MockMethod::fromReflection($method, $callOriginalMethods, $cloneArguments)
|
||||
MockMethod::fromReflection($method, $callOriginalMethods, $cloneArguments),
|
||||
);
|
||||
}
|
||||
|
||||
$_mockClassName = $this->generateClassName(
|
||||
$actualClassName,
|
||||
$_mockClassName['className'],
|
||||
'Mock_'
|
||||
'Mock_',
|
||||
);
|
||||
}
|
||||
|
||||
@@ -875,7 +884,7 @@ EOT;
|
||||
$additionalInterfaces[] = Iterator::class;
|
||||
|
||||
$mockMethods->addMethods(
|
||||
...$this->mockClassMethods(Iterator::class, $callOriginalMethods, $cloneArguments)
|
||||
...$this->mockClassMethods(Iterator::class, $callOriginalMethods, $cloneArguments),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -886,8 +895,8 @@ EOT;
|
||||
} catch (\ReflectionException $e) {
|
||||
throw new ReflectionException(
|
||||
$e->getMessage(),
|
||||
(int) $e->getCode(),
|
||||
$e
|
||||
$e->getCode(),
|
||||
$e,
|
||||
);
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
@@ -906,13 +915,13 @@ EOT;
|
||||
|
||||
if ($isClass && $explicitMethods === []) {
|
||||
$mockMethods->addMethods(
|
||||
...$this->mockClassMethods($_mockClassName['fullClassName'], $callOriginalMethods, $cloneArguments)
|
||||
...$this->mockClassMethods($_mockClassName['fullClassName'], $callOriginalMethods, $cloneArguments),
|
||||
);
|
||||
}
|
||||
|
||||
if ($isInterface && ($explicitMethods === [] || $explicitMethods === null)) {
|
||||
$mockMethods->addMethods(
|
||||
...$this->mockInterfaceMethods($_mockClassName['fullClassName'], $cloneArguments)
|
||||
...$this->mockInterfaceMethods($_mockClassName['fullClassName'], $cloneArguments),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -925,15 +934,15 @@ EOT;
|
||||
} catch (\ReflectionException $e) {
|
||||
throw new ReflectionException(
|
||||
$e->getMessage(),
|
||||
(int) $e->getCode(),
|
||||
$e
|
||||
$e->getCode(),
|
||||
$e,
|
||||
);
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
|
||||
if ($this->canMockMethod($method)) {
|
||||
$mockMethods->addMethods(
|
||||
MockMethod::fromReflection($method, $callOriginalMethods, $cloneArguments)
|
||||
MockMethod::fromReflection($method, $callOriginalMethods, $cloneArguments),
|
||||
);
|
||||
}
|
||||
} else {
|
||||
@@ -941,8 +950,8 @@ EOT;
|
||||
MockMethod::fromName(
|
||||
$_mockClassName['fullClassName'],
|
||||
$methodName,
|
||||
$cloneArguments
|
||||
)
|
||||
$cloneArguments,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -979,19 +988,19 @@ EOT;
|
||||
'class_declaration' => $this->generateMockClassDeclaration(
|
||||
$_mockClassName,
|
||||
$isInterface,
|
||||
$additionalInterfaces
|
||||
$additionalInterfaces,
|
||||
),
|
||||
'clone' => $cloneTrait,
|
||||
'mock_class_name' => $_mockClassName['className'],
|
||||
'mocked_methods' => $mockedMethods,
|
||||
'method' => $method,
|
||||
]
|
||||
],
|
||||
);
|
||||
|
||||
return new MockClass(
|
||||
$classTemplate->render(),
|
||||
$_mockClassName['className'],
|
||||
$configurable
|
||||
$configurable,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1038,7 +1047,7 @@ EOT;
|
||||
$buffer .= sprintf(
|
||||
'%s implements %s',
|
||||
$mockClassName['className'],
|
||||
$interfaces
|
||||
$interfaces,
|
||||
);
|
||||
|
||||
if (!in_array($mockClassName['originalClassName'], $additionalInterfaces, true)) {
|
||||
@@ -1056,7 +1065,7 @@ EOT;
|
||||
$mockClassName['className'],
|
||||
!empty($mockClassName['namespaceName']) ? $mockClassName['namespaceName'] . '\\' : '',
|
||||
$mockClassName['originalClassName'],
|
||||
$interfaces
|
||||
$interfaces,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1086,8 +1095,8 @@ EOT;
|
||||
} catch (TemplateException $e) {
|
||||
throw new RuntimeException(
|
||||
$e->getMessage(),
|
||||
(int) $e->getCode(),
|
||||
$e
|
||||
$e->getCode(),
|
||||
$e,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,6 +13,8 @@ use function array_map;
|
||||
use function explode;
|
||||
use function get_class;
|
||||
use function implode;
|
||||
use function in_array;
|
||||
use function interface_exists;
|
||||
use function is_object;
|
||||
use function sprintf;
|
||||
use function strpos;
|
||||
@@ -20,7 +22,7 @@ use function strtolower;
|
||||
use function substr;
|
||||
use Doctrine\Instantiator\Instantiator;
|
||||
use PHPUnit\Framework\SelfDescribing;
|
||||
use PHPUnit\Util\Type;
|
||||
use PHPUnit\Util\Cloner;
|
||||
use SebastianBergmann\Exporter\Exporter;
|
||||
use stdClass;
|
||||
use Throwable;
|
||||
@@ -90,7 +92,7 @@ final class Invocation implements SelfDescribing
|
||||
|
||||
foreach ($this->parameters as $key => $value) {
|
||||
if (is_object($value)) {
|
||||
$this->parameters[$key] = $this->cloneObject($value);
|
||||
$this->parameters[$key] = Cloner::clone($value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -121,12 +123,17 @@ final class Invocation implements SelfDescribing
|
||||
return null;
|
||||
}
|
||||
|
||||
$intersection = false;
|
||||
$union = false;
|
||||
$intersection = false;
|
||||
$union = false;
|
||||
$unionContainsIntersections = false;
|
||||
|
||||
if (strpos($this->returnType, '|') !== false) {
|
||||
$types = explode('|', $this->returnType);
|
||||
$union = true;
|
||||
|
||||
if (strpos($this->returnType, '(') !== false) {
|
||||
$unionContainsIntersections = true;
|
||||
}
|
||||
} elseif (strpos($this->returnType, '&') !== false) {
|
||||
$types = explode('&', $this->returnType);
|
||||
$intersection = true;
|
||||
@@ -136,7 +143,7 @@ final class Invocation implements SelfDescribing
|
||||
|
||||
$types = array_map('strtolower', $types);
|
||||
|
||||
if (!$intersection) {
|
||||
if (!$intersection && !$unionContainsIntersections) {
|
||||
if (in_array('', $types, true) ||
|
||||
in_array('null', $types, true) ||
|
||||
in_array('mixed', $types, true) ||
|
||||
@@ -144,6 +151,10 @@ final class Invocation implements SelfDescribing
|
||||
return null;
|
||||
}
|
||||
|
||||
if (in_array('true', $types, true)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (in_array('false', $types, true) ||
|
||||
in_array('bool', $types, true)) {
|
||||
return false;
|
||||
@@ -172,7 +183,7 @@ final class Invocation implements SelfDescribing
|
||||
throw new RuntimeException(
|
||||
$t->getMessage(),
|
||||
(int) $t->getCode(),
|
||||
$t
|
||||
$t,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -210,44 +221,34 @@ final class Invocation implements SelfDescribing
|
||||
throw new RuntimeException(
|
||||
$t->getMessage(),
|
||||
(int) $t->getCode(),
|
||||
$t
|
||||
$t,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($intersection && $this->onlyInterfaces($types)) {
|
||||
try {
|
||||
return (new Generator)->getMockForInterfaces($types);
|
||||
} catch (Throwable $t) {
|
||||
throw new RuntimeException(
|
||||
sprintf(
|
||||
'Return value for %s::%s() cannot be generated: %s',
|
||||
$this->className,
|
||||
$this->methodName,
|
||||
$t->getMessage(),
|
||||
),
|
||||
(int) $t->getCode(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$reason = '';
|
||||
|
||||
if ($union) {
|
||||
$reason = ' because the declared return type is a union';
|
||||
} elseif ($intersection) {
|
||||
$reason = ' because the declared return type is an intersection';
|
||||
|
||||
$onlyInterfaces = true;
|
||||
|
||||
foreach ($types as $type) {
|
||||
if (!interface_exists($type)) {
|
||||
$onlyInterfaces = false;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ($onlyInterfaces) {
|
||||
try {
|
||||
return (new Generator)->getMockForInterfaces($types);
|
||||
} catch (Throwable $t) {
|
||||
throw new RuntimeException(
|
||||
sprintf(
|
||||
'Return value for %s::%s() cannot be generated: %s',
|
||||
$this->className,
|
||||
$this->methodName,
|
||||
$t->getMessage(),
|
||||
),
|
||||
(int) $t->getCode(),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw new RuntimeException(
|
||||
@@ -255,8 +256,8 @@ final class Invocation implements SelfDescribing
|
||||
'Return value for %s::%s() cannot be generated%s, please configure a return value for this method',
|
||||
$this->className,
|
||||
$this->methodName,
|
||||
$reason
|
||||
)
|
||||
$reason,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -272,10 +273,10 @@ final class Invocation implements SelfDescribing
|
||||
', ',
|
||||
array_map(
|
||||
[$exporter, 'shortenedExport'],
|
||||
$this->parameters
|
||||
)
|
||||
$this->parameters,
|
||||
),
|
||||
),
|
||||
$this->returnType ? sprintf(': %s', $this->returnType) : ''
|
||||
$this->returnType ? sprintf(': %s', $this->returnType) : '',
|
||||
);
|
||||
}
|
||||
|
||||
@@ -284,12 +285,17 @@ final class Invocation implements SelfDescribing
|
||||
return $this->object;
|
||||
}
|
||||
|
||||
private function cloneObject(object $original): object
|
||||
/**
|
||||
* @psalm-param non-empty-list<string> $types
|
||||
*/
|
||||
private function onlyInterfaces(array $types): bool
|
||||
{
|
||||
if (Type::isCloneable($original)) {
|
||||
return clone $original;
|
||||
foreach ($types as $type) {
|
||||
if (!interface_exists($type)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return $original;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -102,7 +102,7 @@ final class InvocationHandler
|
||||
return new InvocationMocker(
|
||||
$this,
|
||||
$matcher,
|
||||
...$this->configurableMethods
|
||||
...$this->configurableMethods,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -16,11 +16,13 @@ use PHPUnit\Framework\ExpectationFailedException;
|
||||
use PHPUnit\Framework\MockObject\Rule\AnyInvokedCount;
|
||||
use PHPUnit\Framework\MockObject\Rule\AnyParameters;
|
||||
use PHPUnit\Framework\MockObject\Rule\InvocationOrder;
|
||||
use PHPUnit\Framework\MockObject\Rule\InvokedAtMostCount;
|
||||
use PHPUnit\Framework\MockObject\Rule\InvokedCount;
|
||||
use PHPUnit\Framework\MockObject\Rule\MethodName;
|
||||
use PHPUnit\Framework\MockObject\Rule\ParametersRule;
|
||||
use PHPUnit\Framework\MockObject\Stub\Stub;
|
||||
use PHPUnit\Framework\TestFailure;
|
||||
use SebastianBergmann\RecursionContext\InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* @internal This class is not covered by the backward compatibility promise for PHPUnit
|
||||
@@ -116,8 +118,8 @@ final class Matcher
|
||||
|
||||
if ($this->afterMatchBuilderId !== null) {
|
||||
$matcher = $invocation->getObject()
|
||||
->__phpunit_getInvocationHandler()
|
||||
->lookupMatcher($this->afterMatchBuilderId);
|
||||
->__phpunit_getInvocationHandler()
|
||||
->lookupMatcher($this->afterMatchBuilderId);
|
||||
|
||||
if (!$matcher) {
|
||||
throw new MatchBuilderNotFoundException($this->afterMatchBuilderId);
|
||||
@@ -142,9 +144,9 @@ final class Matcher
|
||||
"Expectation failed for %s when %s\n%s",
|
||||
$this->methodNameRule->toString(),
|
||||
$this->invocationRule->toString(),
|
||||
$e->getMessage()
|
||||
$e->getMessage(),
|
||||
),
|
||||
$e->getComparisonFailure()
|
||||
$e->getComparisonFailure(),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -156,8 +158,8 @@ final class Matcher
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws ExpectationFailedException
|
||||
* @throws InvalidArgumentException
|
||||
* @throws MatchBuilderNotFoundException
|
||||
* @throws MethodNameNotConfiguredException
|
||||
* @throws RuntimeException
|
||||
@@ -166,8 +168,8 @@ final class Matcher
|
||||
{
|
||||
if ($this->afterMatchBuilderId !== null) {
|
||||
$matcher = $invocation->getObject()
|
||||
->__phpunit_getInvocationHandler()
|
||||
->lookupMatcher($this->afterMatchBuilderId);
|
||||
->__phpunit_getInvocationHandler()
|
||||
->lookupMatcher($this->afterMatchBuilderId);
|
||||
|
||||
if (!$matcher) {
|
||||
throw new MatchBuilderNotFoundException($this->afterMatchBuilderId);
|
||||
@@ -198,9 +200,9 @@ final class Matcher
|
||||
"Expectation failed for %s when %s\n%s",
|
||||
$this->methodNameRule->toString(),
|
||||
$this->invocationRule->toString(),
|
||||
$e->getMessage()
|
||||
$e->getMessage(),
|
||||
),
|
||||
$e->getComparisonFailure()
|
||||
$e->getComparisonFailure(),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -208,8 +210,8 @@ final class Matcher
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws ExpectationFailedException
|
||||
* @throws InvalidArgumentException
|
||||
* @throws MethodNameNotConfiguredException
|
||||
*/
|
||||
public function verify(): void
|
||||
@@ -225,10 +227,11 @@ final class Matcher
|
||||
$this->parametersRule = new AnyParameters;
|
||||
}
|
||||
|
||||
$invocationIsAny = $this->invocationRule instanceof AnyInvokedCount;
|
||||
$invocationIsNever = $this->invocationRule instanceof InvokedCount && $this->invocationRule->isNever();
|
||||
$invocationIsAny = $this->invocationRule instanceof AnyInvokedCount;
|
||||
$invocationIsNever = $this->invocationRule instanceof InvokedCount && $this->invocationRule->isNever();
|
||||
$invocationIsAtMost = $this->invocationRule instanceof InvokedAtMostCount;
|
||||
|
||||
if (!$invocationIsAny && !$invocationIsNever) {
|
||||
if (!$invocationIsAny && !$invocationIsNever && !$invocationIsAtMost) {
|
||||
$this->parametersRule->verify();
|
||||
}
|
||||
} catch (ExpectationFailedException $e) {
|
||||
@@ -237,8 +240,8 @@ final class Matcher
|
||||
"Expectation failed for %s when %s.\n%s",
|
||||
$this->methodNameRule->toString(),
|
||||
$this->invocationRule->toString(),
|
||||
TestFailure::exceptionToString($e)
|
||||
)
|
||||
TestFailure::exceptionToString($e),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,7 @@ final class MethodNameConstraint extends Constraint
|
||||
{
|
||||
return sprintf(
|
||||
'is "%s"',
|
||||
$this->methodName
|
||||
$this->methodName,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,8 @@ namespace PHPUnit\Framework\MockObject;
|
||||
|
||||
use function array_diff;
|
||||
use function array_merge;
|
||||
use PHPUnit\Framework\Exception;
|
||||
use PHPUnit\Framework\InvalidArgumentException;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use ReflectionClass;
|
||||
|
||||
@@ -111,10 +113,11 @@ final class MockBuilder
|
||||
/**
|
||||
* Creates a mock object using a fluent interface.
|
||||
*
|
||||
* @throws \PHPUnit\Framework\InvalidArgumentException
|
||||
* @throws ClassAlreadyExistsException
|
||||
* @throws ClassIsFinalException
|
||||
* @throws ClassIsReadonlyException
|
||||
* @throws DuplicateMethodException
|
||||
* @throws InvalidArgumentException
|
||||
* @throws InvalidMethodNameException
|
||||
* @throws OriginalConstructorInvocationRequiredException
|
||||
* @throws ReflectionException
|
||||
@@ -137,7 +140,7 @@ final class MockBuilder
|
||||
$this->callOriginalMethods,
|
||||
$this->proxyTarget,
|
||||
$this->allowMockingUnknownTypes,
|
||||
$this->returnValueGeneration
|
||||
$this->returnValueGeneration,
|
||||
);
|
||||
|
||||
$this->testCase->registerMockObject($object);
|
||||
@@ -150,7 +153,7 @@ final class MockBuilder
|
||||
*
|
||||
* @psalm-return MockObject&MockedType
|
||||
*
|
||||
* @throws \PHPUnit\Framework\Exception
|
||||
* @throws Exception
|
||||
* @throws ReflectionException
|
||||
* @throws RuntimeException
|
||||
*/
|
||||
@@ -164,7 +167,7 @@ final class MockBuilder
|
||||
$this->originalClone,
|
||||
$this->autoload,
|
||||
$this->methods,
|
||||
$this->cloneArguments
|
||||
$this->cloneArguments,
|
||||
);
|
||||
|
||||
$this->testCase->registerMockObject($object);
|
||||
@@ -177,7 +180,7 @@ final class MockBuilder
|
||||
*
|
||||
* @psalm-return MockObject&MockedType
|
||||
*
|
||||
* @throws \PHPUnit\Framework\Exception
|
||||
* @throws Exception
|
||||
* @throws ReflectionException
|
||||
* @throws RuntimeException
|
||||
*/
|
||||
@@ -191,7 +194,7 @@ final class MockBuilder
|
||||
$this->originalClone,
|
||||
$this->autoload,
|
||||
$this->methods,
|
||||
$this->cloneArguments
|
||||
$this->cloneArguments,
|
||||
);
|
||||
|
||||
$this->testCase->registerMockObject($object);
|
||||
@@ -241,8 +244,8 @@ final class MockBuilder
|
||||
} catch (\ReflectionException $e) {
|
||||
throw new ReflectionException(
|
||||
$e->getMessage(),
|
||||
(int) $e->getCode(),
|
||||
$e
|
||||
$e->getCode(),
|
||||
$e,
|
||||
);
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
@@ -283,8 +286,8 @@ final class MockBuilder
|
||||
} catch (\ReflectionException $e) {
|
||||
throw new ReflectionException(
|
||||
$e->getMessage(),
|
||||
(int) $e->getCode(),
|
||||
$e
|
||||
$e->getCode(),
|
||||
$e,
|
||||
);
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
@@ -312,8 +315,8 @@ final class MockBuilder
|
||||
return $this->setMethods(
|
||||
array_diff(
|
||||
$this->generator->getClassMethods($this->type),
|
||||
$methods
|
||||
)
|
||||
$methods,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ final class MockClass implements MockType
|
||||
$this->mockName,
|
||||
'__phpunit_initConfigurableMethods',
|
||||
],
|
||||
...$this->configurableMethods
|
||||
...$this->configurableMethods,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -23,11 +23,8 @@ use function substr;
|
||||
use function substr_count;
|
||||
use function trim;
|
||||
use function var_export;
|
||||
use ReflectionIntersectionType;
|
||||
use ReflectionMethod;
|
||||
use ReflectionNamedType;
|
||||
use ReflectionParameter;
|
||||
use ReflectionUnionType;
|
||||
use SebastianBergmann\Template\Exception as TemplateException;
|
||||
use SebastianBergmann\Template\Template;
|
||||
use SebastianBergmann\Type\ReflectionMapper;
|
||||
@@ -143,7 +140,7 @@ final class MockMethod
|
||||
$reference,
|
||||
$callOriginalMethod,
|
||||
$method->isStatic(),
|
||||
$deprecation
|
||||
$deprecation,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -160,7 +157,7 @@ final class MockMethod
|
||||
'',
|
||||
false,
|
||||
false,
|
||||
null
|
||||
null,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -194,12 +191,12 @@ final class MockMethod
|
||||
} elseif ($this->returnType->isNever() || $this->returnType->isVoid()) {
|
||||
$templateFile = sprintf(
|
||||
'%s_method_never_or_void.tpl',
|
||||
$this->callOriginalMethod ? 'proxied' : 'mocked'
|
||||
$this->callOriginalMethod ? 'proxied' : 'mocked',
|
||||
);
|
||||
} else {
|
||||
$templateFile = sprintf(
|
||||
'%s_method.tpl',
|
||||
$this->callOriginalMethod ? 'proxied' : 'mocked'
|
||||
$this->callOriginalMethod ? 'proxied' : 'mocked',
|
||||
);
|
||||
}
|
||||
|
||||
@@ -212,7 +209,7 @@ final class MockMethod
|
||||
$deprecationTemplate->setVar(
|
||||
[
|
||||
'deprecation' => var_export($deprecation, true),
|
||||
]
|
||||
],
|
||||
);
|
||||
|
||||
$deprecation = $deprecationTemplate->render();
|
||||
@@ -233,7 +230,7 @@ final class MockMethod
|
||||
'reference' => $this->reference,
|
||||
'clone_arguments' => $this->cloneArguments ? 'true' : 'false',
|
||||
'deprecation' => $deprecation,
|
||||
]
|
||||
],
|
||||
);
|
||||
|
||||
return $template->render();
|
||||
@@ -257,8 +254,8 @@ final class MockMethod
|
||||
} catch (TemplateException $e) {
|
||||
throw new RuntimeException(
|
||||
$e->getMessage(),
|
||||
(int) $e->getCode(),
|
||||
$e
|
||||
$e->getCode(),
|
||||
$e,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -274,6 +271,7 @@ final class MockMethod
|
||||
private static function getMethodParametersForDeclaration(ReflectionMethod $method): string
|
||||
{
|
||||
$parameters = [];
|
||||
$types = (new ReflectionMapper)->fromParameterTypes($method);
|
||||
|
||||
foreach ($method->getParameters() as $i => $parameter) {
|
||||
$name = '$' . $parameter->getName();
|
||||
@@ -285,19 +283,16 @@ final class MockMethod
|
||||
$name = '$arg' . $i;
|
||||
}
|
||||
|
||||
$nullable = '';
|
||||
$default = '';
|
||||
$reference = '';
|
||||
$typeDeclaration = '';
|
||||
$type = null;
|
||||
$typeName = null;
|
||||
|
||||
if ($parameter->hasType()) {
|
||||
$type = $parameter->getType();
|
||||
if (!$types[$i]->type()->isUnknown()) {
|
||||
$typeDeclaration = $types[$i]->type()->asString() . ' ';
|
||||
}
|
||||
|
||||
if ($type instanceof ReflectionNamedType) {
|
||||
$typeName = $type->getName();
|
||||
}
|
||||
if ($parameter->isPassedByReference()) {
|
||||
$reference = '&';
|
||||
}
|
||||
|
||||
if ($parameter->isVariadic()) {
|
||||
@@ -308,30 +303,7 @@ final class MockMethod
|
||||
$default = ' = null';
|
||||
}
|
||||
|
||||
if ($type !== null) {
|
||||
if ($typeName !== 'mixed' && $parameter->allowsNull() && !$type instanceof ReflectionIntersectionType && !$type instanceof ReflectionUnionType) {
|
||||
$nullable = '?';
|
||||
}
|
||||
|
||||
if ($typeName === 'self') {
|
||||
$typeDeclaration = $method->getDeclaringClass()->getName() . ' ';
|
||||
} elseif ($typeName !== null) {
|
||||
$typeDeclaration = $typeName . ' ';
|
||||
} elseif ($type instanceof ReflectionUnionType) {
|
||||
$typeDeclaration = self::unionTypeAsString(
|
||||
$type,
|
||||
$method->getDeclaringClass()->getName()
|
||||
);
|
||||
} elseif ($type instanceof ReflectionIntersectionType) {
|
||||
$typeDeclaration = self::intersectionTypeAsString($type);
|
||||
}
|
||||
}
|
||||
|
||||
if ($parameter->isPassedByReference()) {
|
||||
$reference = '&';
|
||||
}
|
||||
|
||||
$parameters[] = $nullable . $typeDeclaration . $reference . $name . $default;
|
||||
$parameters[] = $typeDeclaration . $reference . $name . $default;
|
||||
}
|
||||
|
||||
return implode(', ', $parameters);
|
||||
@@ -389,46 +361,20 @@ final class MockMethod
|
||||
substr(
|
||||
substr(
|
||||
$parameterAsString,
|
||||
strpos($parameterAsString, '<optional> ') + strlen('<optional> ')
|
||||
strpos($parameterAsString, '<optional> ') + strlen('<optional> '),
|
||||
),
|
||||
0,
|
||||
-2
|
||||
)
|
||||
-2,
|
||||
),
|
||||
)[1];
|
||||
// @codeCoverageIgnoreStart
|
||||
} catch (\ReflectionException $e) {
|
||||
throw new ReflectionException(
|
||||
$e->getMessage(),
|
||||
(int) $e->getCode(),
|
||||
$e
|
||||
$e->getCode(),
|
||||
$e,
|
||||
);
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
}
|
||||
|
||||
private static function unionTypeAsString(ReflectionUnionType $union, string $self): string
|
||||
{
|
||||
$types = [];
|
||||
|
||||
foreach ($union->getTypes() as $type) {
|
||||
if ((string) $type === 'self') {
|
||||
$types[] = $self;
|
||||
} else {
|
||||
$types[] = $type;
|
||||
}
|
||||
}
|
||||
|
||||
return implode('|', $types) . ' ';
|
||||
}
|
||||
|
||||
private static function intersectionTypeAsString(ReflectionIntersectionType $intersection): string
|
||||
{
|
||||
$types = [];
|
||||
|
||||
foreach ($intersection->getTypes() as $type) {
|
||||
$types[] = $type;
|
||||
}
|
||||
|
||||
return implode('&', $types) . ' ';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,12 +15,16 @@ use function is_iterable;
|
||||
use function sprintf;
|
||||
use PHPUnit\Framework\Constraint\Constraint;
|
||||
use PHPUnit\Framework\Constraint\IsEqual;
|
||||
use PHPUnit\Framework\Exception;
|
||||
use PHPUnit\Framework\ExpectationFailedException;
|
||||
use PHPUnit\Framework\InvalidParameterGroupException;
|
||||
use PHPUnit\Framework\MockObject\Invocation as BaseInvocation;
|
||||
use SebastianBergmann\RecursionContext\InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* @internal This class is not covered by the backward compatibility promise for PHPUnit
|
||||
*
|
||||
* @deprecated
|
||||
*/
|
||||
final class ConsecutiveParameters implements ParametersRule
|
||||
{
|
||||
@@ -35,7 +39,7 @@ final class ConsecutiveParameters implements ParametersRule
|
||||
private $invocations = [];
|
||||
|
||||
/**
|
||||
* @throws \PHPUnit\Framework\Exception
|
||||
* @throws Exception
|
||||
*/
|
||||
public function __construct(array $parameterGroups)
|
||||
{
|
||||
@@ -45,8 +49,8 @@ final class ConsecutiveParameters implements ParametersRule
|
||||
sprintf(
|
||||
'Parameter group #%d must be an array or Traversable, got %s',
|
||||
$index,
|
||||
gettype($parameters)
|
||||
)
|
||||
gettype($parameters),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -66,8 +70,8 @@ final class ConsecutiveParameters implements ParametersRule
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws ExpectationFailedException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function apply(BaseInvocation $invocation): void
|
||||
{
|
||||
@@ -78,8 +82,8 @@ final class ConsecutiveParameters implements ParametersRule
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \PHPUnit\Framework\ExpectationFailedException
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws ExpectationFailedException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function verify(): void
|
||||
{
|
||||
@@ -93,8 +97,8 @@ final class ConsecutiveParameters implements ParametersRule
|
||||
*
|
||||
* @param int $callIndex
|
||||
*
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws ExpectationFailedException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
private function verifyInvocation(BaseInvocation $invocation, $callIndex): void
|
||||
{
|
||||
@@ -109,8 +113,8 @@ final class ConsecutiveParameters implements ParametersRule
|
||||
throw new ExpectationFailedException(
|
||||
sprintf(
|
||||
'Parameter count for invocation %s is too low.',
|
||||
$invocation->toString()
|
||||
)
|
||||
$invocation->toString(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -122,8 +126,8 @@ final class ConsecutiveParameters implements ParametersRule
|
||||
'value.',
|
||||
$i,
|
||||
$callIndex,
|
||||
$invocation->toString()
|
||||
)
|
||||
$invocation->toString(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ use PHPUnit\Framework\MockObject\Invocation as BaseInvocation;
|
||||
* @internal This class is not covered by the backward compatibility promise for PHPUnit
|
||||
*
|
||||
* @deprecated https://github.com/sebastianbergmann/phpunit/issues/4297
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
final class InvokedAtIndex extends InvocationOrder
|
||||
@@ -63,8 +64,8 @@ final class InvokedAtIndex extends InvocationOrder
|
||||
throw new ExpectationFailedException(
|
||||
sprintf(
|
||||
'The expected invocation at index %s was never reached.',
|
||||
$this->sequenceIndex
|
||||
)
|
||||
$this->sequenceIndex,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ final class InvokedAtLeastCount extends InvocationOrder
|
||||
if ($count < $this->requiredInvocations) {
|
||||
throw new ExpectationFailedException(
|
||||
'Expected invocation at least ' . $this->requiredInvocations .
|
||||
' times but it occurred ' . $count . ' time(s).'
|
||||
' times but it occurred ' . $count . ' time(s).',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ final class InvokedAtLeastOnce extends InvocationOrder
|
||||
|
||||
if ($count < 1) {
|
||||
throw new ExpectationFailedException(
|
||||
'Expected invocation at least once but it never occurred.'
|
||||
'Expected invocation at least once but it never occurred.',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,7 @@ final class InvokedAtMostCount extends InvocationOrder
|
||||
if ($count > $this->allowedInvocations) {
|
||||
throw new ExpectationFailedException(
|
||||
'Expected invocation at most ' . $this->allowedInvocations .
|
||||
' times but it occurred ' . $count . ' time(s).'
|
||||
' times but it occurred ' . $count . ' time(s).',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -62,8 +62,8 @@ final class InvokedCount extends InvocationOrder
|
||||
'Method was expected to be called %d times, ' .
|
||||
'actually called %d times.',
|
||||
$this->expectedCount,
|
||||
$count
|
||||
)
|
||||
$count,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -92,7 +92,7 @@ final class InvokedCount extends InvocationOrder
|
||||
default:
|
||||
$message .= sprintf(
|
||||
'was not expected to be called more than %d times.',
|
||||
$this->expectedCount
|
||||
$this->expectedCount,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ namespace PHPUnit\Framework\MockObject\Rule;
|
||||
|
||||
use function is_string;
|
||||
use PHPUnit\Framework\Constraint\Constraint;
|
||||
use PHPUnit\Framework\ExpectationFailedException;
|
||||
use PHPUnit\Framework\InvalidArgumentException;
|
||||
use PHPUnit\Framework\MockObject\Invocation as BaseInvocation;
|
||||
use PHPUnit\Framework\MockObject\MethodNameConstraint;
|
||||
@@ -49,8 +50,8 @@ final class MethodName
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \PHPUnit\Framework\ExpectationFailedException
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws ExpectationFailedException
|
||||
*/
|
||||
public function matches(BaseInvocation $invocation): bool
|
||||
{
|
||||
@@ -58,8 +59,8 @@ final class MethodName
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \PHPUnit\Framework\ExpectationFailedException
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws ExpectationFailedException
|
||||
*/
|
||||
public function matchesName(string $methodName): bool
|
||||
{
|
||||
|
||||
@@ -18,6 +18,7 @@ use PHPUnit\Framework\Constraint\IsAnything;
|
||||
use PHPUnit\Framework\Constraint\IsEqual;
|
||||
use PHPUnit\Framework\ExpectationFailedException;
|
||||
use PHPUnit\Framework\MockObject\Invocation as BaseInvocation;
|
||||
use SebastianBergmann\RecursionContext\InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* @internal This class is not covered by the backward compatibility promise for PHPUnit
|
||||
@@ -47,7 +48,7 @@ final class Parameters implements ParametersRule
|
||||
foreach ($parameters as $parameter) {
|
||||
if (!($parameter instanceof Constraint)) {
|
||||
$parameter = new IsEqual(
|
||||
$parameter
|
||||
$parameter,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -92,8 +93,8 @@ final class Parameters implements ParametersRule
|
||||
* does the rule will get the invoked() method called which should check
|
||||
* if an expectation is met.
|
||||
*
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws ExpectationFailedException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
public function verify(): void
|
||||
{
|
||||
@@ -101,8 +102,8 @@ final class Parameters implements ParametersRule
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \SebastianBergmann\RecursionContext\InvalidArgumentException
|
||||
* @throws ExpectationFailedException
|
||||
* @throws InvalidArgumentException
|
||||
*/
|
||||
private function doVerify(): bool
|
||||
{
|
||||
@@ -127,7 +128,7 @@ final class Parameters implements ParametersRule
|
||||
}
|
||||
|
||||
throw new ExpectationFailedException(
|
||||
sprintf($message, $this->invocation->toString())
|
||||
sprintf($message, $this->invocation->toString()),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -138,8 +139,8 @@ final class Parameters implements ParametersRule
|
||||
'Parameter %s for invocation %s does not match expected ' .
|
||||
'value.',
|
||||
$i,
|
||||
$this->invocation->toString()
|
||||
)
|
||||
$this->invocation->toString(),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ final class ConsecutiveCalls implements Stub
|
||||
|
||||
return sprintf(
|
||||
'return user-specified value %s',
|
||||
$exporter->export($this->value)
|
||||
$exporter->export($this->value),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user