Move into nested docroot

This commit is contained in:
Rob Davies 2017-02-13 15:31:17 +00:00
parent 83a0d3a149
commit c8b70abde9
13405 changed files with 0 additions and 0 deletions

View file

@ -0,0 +1,4 @@
/build export-ignore
*.php diff=php
composer.json merge=ours
src/Runner/Version.php merge=ours

16
web/vendor/phpunit/phpunit/.gitignore vendored Normal file
View file

@ -0,0 +1,16 @@
/.ant_targets
/.idea
/build/documentation
/build/logfiles
/build/phar
/build/phpdox
/build/*.phar
/build/*.phar.asc
/tests/TextUI/*.diff
/tests/TextUI/*.exp
/tests/TextUI/*.log
/tests/TextUI/*.out
/tests/TextUI/*.php
/cache.properties
/composer.lock
/vendor

69
web/vendor/phpunit/phpunit/.php_cs vendored Normal file
View file

@ -0,0 +1,69 @@
<?php
$finder = Symfony\CS\Finder\DefaultFinder::create()
->files()
->in('build')
->in('src')
->in('tests')
->name('*.php')
->name('*.phpt');
return Symfony\CS\Config\Config::create()
->level(\Symfony\CS\FixerInterface::NONE_LEVEL)
->fixers(
array(
'align_double_arrow',
'align_equals',
'braces',
'concat_with_spaces',
'duplicate_semicolon',
'elseif',
'empty_return',
'encoding',
'eof_ending',
'extra_empty_lines',
'function_call_space',
'function_declaration',
'indentation',
'join_function',
'line_after_namespace',
'linefeed',
'list_commas',
'long_array_syntax',
'lowercase_constants',
'lowercase_keywords',
'method_argument_space',
'multiple_use',
'namespace_no_leading_whitespace',
'no_blank_lines_after_class_opening',
'no_empty_lines_after_phpdocs',
'parenthesis',
'php_closing_tag',
'phpdoc_indent',
'phpdoc_no_access',
'phpdoc_no_empty_return',
'phpdoc_no_package',
'phpdoc_params',
'phpdoc_scalar',
'phpdoc_separation',
'phpdoc_to_comment',
'phpdoc_trim',
'phpdoc_types',
'phpdoc_var_without_name',
'remove_lines_between_uses',
'return',
'self_accessor',
'short_tag',
'single_line_after_imports',
'single_quote',
'spaces_before_semicolon',
'spaces_cast',
'ternary_spaces',
'trailing_spaces',
'trim_array_spaces',
'unused_use',
'visibility',
'whitespacy_lines'
)
)
->finder($finder);

43
web/vendor/phpunit/phpunit/.travis.yml vendored Normal file
View file

@ -0,0 +1,43 @@
language: php
php:
- 5.3.3
- 5.3
- 5.4
- 5.5
- 5.6
- 7.0
- nightly
- hhvm
matrix:
allow_failures:
- php: 7.0
- php: nightly
- php: hhvm
sudo: false
before_install:
- composer self-update
install:
- travis_retry composer install --no-interaction --prefer-source
script:
- ./phpunit
- ./phpunit --configuration ./build/travis-ci-fail.xml > /dev/null; if [ $? -eq 0 ]; then echo "SHOULD FAIL"; false; else echo "fail checked"; fi;
- xmllint --noout --schema phpunit.xsd phpunit.xml
- xmllint --noout --schema phpunit.xsd tests/_files/configuration.xml
- xmllint --noout --schema phpunit.xsd tests/_files/configuration_empty.xml
- xmllint --noout --schema phpunit.xsd tests/_files/configuration_xinclude.xml -xinclude
notifications:
email: false
webhooks:
urls:
- https://webhooks.gitter.im/e/6668f52f3dd4e3f81960
on_success: always
on_failure: always
on_start: false

View file

@ -0,0 +1,28 @@
# Contributor Code of Conduct
As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality.
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery
* Personal attacks
* Trolling or insulting/derogatory comments
* Public or private harassment
* Publishing other's private information, such as physical or electronic
addresses, without explicit permission
* Other unethical or unprofessional conduct
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
By adopting this Code of Conduct, project maintainers commit themselves to fairly and consistently applying these principles to every aspect of managing this project. Project maintainers who do not follow or enforce the Code of Conduct may be permanently removed from the project team.
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community.
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project maintainer at sebastian@phpunit.de. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. Maintainers are obligated to maintain confidentiality with regard to the reporter of an incident.
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.3.0, available at [http://contributor-covenant.org/version/1/3/0/][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/3/0/

View file

@ -0,0 +1,67 @@
# Contributing to PHPUnit
## Contributor Code of Conduct
Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms.
## Workflow
* Fork the project.
* Make your bug fix or feature addition.
* Add tests for it. This is important so we don't break it in a future version unintentionally.
* Send a pull request. Bonus points for topic branches.
Please make sure that you have [set up your user name and email address](http://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup) for use with Git. Strings such as `silly nick name <root@localhost>` look really stupid in the commit history of a project.
Pull requests for bug fixes must be based on the current stable branch whereas pull requests for new features must be based on the `master` branch.
We are trying to keep backwards compatibility breaks in PHPUnit to an absolute minimum. Please take this into account when proposing changes.
Due to time constraints, we are not always able to respond as quickly as we would like. Please do not take delays personal and feel free to remind us if you feel that we forgot to respond.
## Coding Guidelines
This project comes with a configuration file for [php-cs-fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer) (`.php_cs`) that you can use to (re)format your sourcecode for compliance with this project's coding guidelines:
```bash
$ wget http://get.sensiolabs.org/php-cs-fixer.phar
$ php php-cs-fixer.phar fix
```
## Using PHPUnit from a Git checkout
The following commands can be used to perform the initial checkout of PHPUnit:
```bash
$ git clone git://github.com/sebastianbergmann/phpunit.git
$ cd phpunit
```
Retrieve PHPUnit's dependencies using [Composer](http://getcomposer.org/):
```bash
$ wget http://getcomposer.org/composer.phar
$ php composer.phar install
```
The `phpunit` script can be used to invoke the PHPUnit test runner:
```bash
$ ./phpunit --version
```
## Reporting issues
Please use the most specific issue tracker to search for existing tickets and to open new tickets:
* [General problems](https://github.com/sebastianbergmann/phpunit/issues)
* [Code Coverage](https://github.com/sebastianbergmann/php-code-coverage/issues)
* [Stub and Mock Objects](https://github.com/sebastianbergmann/phpunit-mock-objects/issues)
* [DbUnit](https://github.com/sebastianbergmann/dbunit/issues)
* [PHPUnit_Selenium](https://github.com/sebastianbergmann/phpunit-selenium/issues)
* [Documentation](https://github.com/sebastianbergmann/phpunit-documentation/issues)
* [Website](https://github.com/sebastianbergmann/phpunit-website/issues)

View file

@ -0,0 +1,176 @@
# Changes in PHPUnit 4.0
All notable changes of the PHPUnit 4.0 release series are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles.
## [4.0.20] - 2014-05-02
### Fixed
* Fixed [#1242](https://github.com/sebastianbergmann/phpunit/issues/1242): `--self-update` uses OpenSSL API that is deprecated in PHP 5.6
## [4.0.19] - 2014-04-30
### Fixed
* Fixed [#1193](https://github.com/sebastianbergmann/phpunit/issues/1193): Process isolation does not work correctly when PHPUnit is used from PHAR
* Fixed a BC break related to comparing `DOMNode` objects that was introduced in PHPUnit 4.0.18
## [4.0.18] - 2014-04-29
### Fixed
* Fixed [#1218](https://github.com/sebastianbergmann/phpunit/issues/1218): `--self-update` destroys symlink
## [4.0.17] - 2014-04-21
### Changed
* [Display a message that the PEAR installation method is no longer supported when PHPUnit was installed using the PEAR Installer](https://github.com/sebastianbergmann/phpunit/commit/70b02c6be0176ab8ad3d3c9ec97480556c5dd63b)
## [4.0.16] - 2014-04-20
### Fixed
* [Fixed handling of the `--report-useless-tests`, `--strict-coverage`, `--disallow-test-output`, and `--enforce-time-limit` options](https://github.com/sebastianbergmann/phpunit/commit/38baa9670711adedfe44ef24a33b568f61f3f045)
## [4.0.15] - 2014-04-16
New release of PHPUnit as PHAR and PEAR package with updated dependencies
## [4.0.14] - 2014-03-28
New release of PHPUnit as PHAR and PEAR package with updated dependencies
## [4.0.13] - 2014-03-26
New release of PHPUnit as PHAR and PEAR package with updated dependencies
## [4.0.12] - 2014-03-20
### Changed
* [Use blacklist from PHP_CodeCoverage](https://github.com/sebastianbergmann/phpunit/commit/16152ba4b8d0104ce34f60cb71b2b982ba84c898)
## [4.0.11] - 2014-03-18
### Fixed
* [Fixed unintended autoloader invokation triggered by the `@beforeClass` and `@afterClass` annotations](https://github.com/sebastianbergmann/phpunit/commit/f12e10fddc3ccbddb652a04d9036aeb5a6d54bff)
## [4.0.10] - 2014-03-18
New release of PHPUnit as PHAR and PEAR package with updated dependencies (most notably a [fix](https://github.com/sebastianbergmann/phpunit-mock-objects/commit/c5e6274b8f2bf983cf883bb375cf44f99aff200e) in the mock object generator that caused a [performance regression](https://github.com/sebastianbergmann/phpunit/issues/1187))
## [4.0.9] - 2014-03-17
### Changed
* Optimized the search for the `@before`, `@after`, `@beforeClass` and `@afterClass` annotations
* Optimized the usage of `SebastianBergmann\Environment\Runtime::canCollectCodeCoverage()`
### Fixed
* The "No code coverage will be generated." message was displayed even when code coverage reporting was not requested
## [4.0.8] - 2014-03-17
### Fixed
* Fixed [#1186](https://github.com/sebastianbergmann/phpunit/issues/1186): `@before` and `@after` methods are not called in `@dataProvider` methods
## [4.0.7] - 2014-03-12
### Fixed
* Removed dependency on `phpunit/dbunit` in `composer.json` that was unintentionally added in PHPUnit 4.0.6
## [4.0.6] - 2014-03-11
New release of PHPUnit as PHAR and PEAR package with updated dependencies
## [4.0.5] - 2014-03-10
New release of PHPUnit as PHAR and PEAR package with updated dependencies
## [4.0.4] - 2014-03-08
### Fixed
* Fixed stacktrace filtering when PHPUnit is used from a PHAR
## [4.0.3] - 2014-03-07
New release of PHPUnit as PHAR and PEAR package with updated dependencies
## [4.0.2] - 2014-03-07
### Fixed
* Fixed an issue related to displaying PHPUnit's version number
## [4.0.1] - 2014-03-07
### Fixed
* Fixed collection of code coverage data for tests that use a data provider
## [4.0.0] - 2014-03-07
### Added
* Implemented #382: Added the `$options` parameter to `PHPUnit_Framework_TestCase::getMockFromWsdl()` for configuring the `SoapClient`
* Implemented #628: Added `PHPUnit_Framework_Assert::countOf(), a shortcut to get a `PHPUnit_Framework_Constraint_Count` instance
* Implemented #711: `coverage-text` now has an XML `showOnlySummary` option
* Implemented #719: The `--stderr` switch now respects `--colors` and `--debug`
* Implemented #746: Allow identity checking for non-object types in all asserts that depend on `TraversableContains`
* Implemented #758: Show a proper stack trace when @expectedException fails due to a unexpected exception being thrown
* Implemented #773: Recursive and repeated arrays are more gracefully when comparison differences are exported
* Implemented #813: Added `@before`, `@after`, `@beforeClass` and `@afterClass` annotations
* Implemented #834: Added the `@requires OS` annotation
* Implemented #835: Printers that extend `PHPUnit_TextUI_ResultPrinter` should have similar construction
* Implemented #838: Added a base test listener
* Implemented #859: Added PHP label validation to attribute assertions
* Implemented #869: Added support for the adjacent sibling selector (+) to `PHPUnit_Util_XML::findNodes()`
* Implemented #871: Add Comparator for DateTime objects
* Implemented #877: Added new HTML5 tags to `PHPUnit_Util_XML::findNodes()`
* Added `--coverage-crap4j` switch to generate code coverage report in Crap4J XML format
* `assertCount()`, `assertNotCount()`, `assertSameSize()`, and `assertNotSameSize()` now support all objects that implement the `Traversable` interface
### Changed
* A test will now fail in strict mode when it uses the `@covers` annotation and code that is not expected to be covered is executed
* All relative paths in a configuration file are now resolved relative to that configuration file
### Fixed
* Fixed #240: XML strings are escaped by removing invalid characters
* Fixed #261: `setUp()` and `setUpBeforeClass()` are run before filters are applied
* Fixed #541: Excluded groups are counted towards total number of tests being executed
* Fixed #789: PHP INI settings would not be passed to child processes
* Fixed #806: Array references are now properly displayed in error output
* Fixed #808: Resources are now reported as `resource(13) of type (stream)` instead of `NULL`
* Fixed #873: PHPUnit suppresses exceptions thrown outside of test case function
* Fixed: `phpt` test cases now use the correct php binary when executed through wrapper scripts
[4.0.20]: https://github.com/sebastianbergmann/phpunit/compare/4.0.19...4.0.20
[4.0.19]: https://github.com/sebastianbergmann/phpunit/compare/4.0.18...4.0.19
[4.0.18]: https://github.com/sebastianbergmann/phpunit/compare/4.0.17...4.0.18
[4.0.17]: https://github.com/sebastianbergmann/phpunit/compare/4.0.16...4.0.17
[4.0.16]: https://github.com/sebastianbergmann/phpunit/compare/4.0.15...4.0.16
[4.0.15]: https://github.com/sebastianbergmann/phpunit/compare/4.0.14...4.0.15
[4.0.14]: https://github.com/sebastianbergmann/phpunit/compare/4.0.13...4.0.14
[4.0.13]: https://github.com/sebastianbergmann/phpunit/compare/4.0.12...4.0.13
[4.0.12]: https://github.com/sebastianbergmann/phpunit/compare/4.0.11...4.0.12
[4.0.11]: https://github.com/sebastianbergmann/phpunit/compare/4.0.10...4.0.11
[4.0.10]: https://github.com/sebastianbergmann/phpunit/compare/4.0.9...4.0.10
[4.0.9]: https://github.com/sebastianbergmann/phpunit/compare/4.0.8...4.0.9
[4.0.8]: https://github.com/sebastianbergmann/phpunit/compare/4.0.7...4.0.8
[4.0.7]: https://github.com/sebastianbergmann/phpunit/compare/4.0.6...4.0.7
[4.0.6]: https://github.com/sebastianbergmann/phpunit/compare/4.0.5...4.0.6
[4.0.5]: https://github.com/sebastianbergmann/phpunit/compare/4.0.4...4.0.5
[4.0.4]: https://github.com/sebastianbergmann/phpunit/compare/4.0.3...4.0.4
[4.0.3]: https://github.com/sebastianbergmann/phpunit/compare/4.0.2...4.0.3
[4.0.2]: https://github.com/sebastianbergmann/phpunit/compare/4.0.1...4.0.2
[4.0.1]: https://github.com/sebastianbergmann/phpunit/compare/4.0.0...4.0.1
[4.0.0]: https://github.com/sebastianbergmann/phpunit/compare/3.7...4.0.0

View file

@ -0,0 +1,73 @@
# Changes in PHPUnit 4.1
All notable changes of the PHPUnit 4.1 release series are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles.
## [4.1.6] - 2014-08-17
### Fixed
* Fixed [#1380](https://github.com/sebastianbergmann/phpunit/issues/1380): `assertMatch()` returns `Unexpected end tag : hr`
* Fixed [#1390](https://github.com/sebastianbergmann/phpunit/issues/1390): Licensing issue with third-party components bundled in PHAR distribution
## [4.1.5] - 2014-08-07
### Changed
* Implemented [#1330](https://github.com/sebastianbergmann/phpunit/issues/1330): Allow non-ambiguous shortened long options
### Fixed
* Fixed [#529](https://github.com/sebastianbergmann/phpunit/issues/529): Tests missed in execution when another test extends from it
* Fixed [#1149](https://github.com/sebastianbergmann/phpunit/issues/1149): Test swallows output buffer when run in a separate process
* Fixed [#1336](https://github.com/sebastianbergmann/phpunit/issues/1336): Problem in process isolation with global variables that contain an object which contains a string which contains multiple backslashes
* Fixed [#1337](https://github.com/sebastianbergmann/phpunit/issues/1337): Data Provider with `\` at the end of the name breaks with process isolation
* Fixed [#1345](https://github.com/sebastianbergmann/phpunit/issues/1345): Process isolation blocks infinitely upon fatal error in child process
* Fixed [#1354](https://github.com/sebastianbergmann/phpunit/issues/1354): PHPUnit test suite fails on Windows
* Fixed [#1369](https://github.com/sebastianbergmann/phpunit/issues/1369): Performance of `TestSuite::addTestFile()` and missing documentation
* Fixed [#1374](https://github.com/sebastianbergmann/phpunit/issues/1374): `tearDown()` is called despite unmet requirements
## [4.1.4] - 2014-07-18
### Fixed
* Fixed [#1265](https://github.com/sebastianbergmann/phpunit/issues/1265): `PHPUnit_Runner_StandardTestSuiteLoader` could not be configured as loader
* Fixed [#1311](https://github.com/sebastianbergmann/phpunit/issues/1311): Incomplete XML Schema for PHPUnit XML configuration file
* Fixed [#1314](https://github.com/sebastianbergmann/phpunit/issues/1314): Bug in configuration parser
## [4.1.3] - 2014-06-11
New release of PHPUnit as PHP Archive (PHAR) with updated dependencies
## [4.1.2] - 2014-06-07
New release of PHPUnit as PHP Archive (PHAR) with updated dependencies
## [4.1.1] - 2014-05-24
### Added
* Added `--selfupdate` alias for `--self-update`
### Changed
* Improved the fix for [#1133](https://github.com/sebastianbergmann/phpunit/issues/1133)
### Fixed
* Fixed the constructor argument for `SebastianBergmann\Version`
## [4.1.0] - 2014-05-02
### Changed
* The code to compare PHP values for equality (in `assertEquals()`, for instance) has been factored out into a [separate component](https://github.com/sebastianbergmann/comparator)
* [The mock object generator is now created lazily](https://github.com/sebastianbergmann/phpunit/pull/1165)
[4.1.6]: https://github.com/sebastianbergmann/phpunit/compare/4.1.5...4.1.6
[4.1.5]: https://github.com/sebastianbergmann/phpunit/compare/4.1.4...4.1.5
[4.1.4]: https://github.com/sebastianbergmann/phpunit/compare/4.1.3...4.1.4
[4.1.3]: https://github.com/sebastianbergmann/phpunit/compare/4.1.2...4.1.3
[4.1.2]: https://github.com/sebastianbergmann/phpunit/compare/4.1.1...4.1.2
[4.1.1]: https://github.com/sebastianbergmann/phpunit/compare/4.1.0...4.1.1
[4.1.0]: https://github.com/sebastianbergmann/phpunit/compare/4.0...4.1.0

View file

@ -0,0 +1,56 @@
# Changes in PHPUnit 4.2
All notable changes of the PHPUnit 4.2 release series are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles.
## [4.2.5] - 2014-09-06
New release of PHPUnit as PHP Archive (PHAR) with updated dependencies
## [4.2.4] - 2014-08-31
### Fixed
* Fixed [#1413](https://github.com/sebastianbergmann/phpunit/issues/1413): `assertCount()` hangs in infinite loop on HHVM
## [4.2.3] - 2014-08-28
### Fixed
* Fixed [#1403](https://github.com/sebastianbergmann/phpunit/issues/1403): `phpunit --self-update` does not work
## [4.2.2] - 2014-08-18
### Fixed
* Fixed [#1399](https://github.com/sebastianbergmann/phpunit/issues/1399): `enforceTimeLimit` configuration option is not handled
## [4.2.1] - 2014-08-17
### Fixed
* Fixed [#1380](https://github.com/sebastianbergmann/phpunit/issues/1380): `assertMatch()` returns `Unexpected end tag : hr`
* Fixed [#1390](https://github.com/sebastianbergmann/phpunit/issues/1390): Licensing issue with third-party components bundled in PHAR distribution
## [4.2.0] - 2014-08-08
### Added
* Tests annotated with `@todo` will now be reported as risky when the `--disallow-todo-tests` option is used or `beStrictAboutTodoAnnotatedTests=true` is set in the configuration file
* The `atLeast()` and `atMost()` invocation count matchers were added
### Changed
* `trigger_error(__METHOD__ . ' is deprecated', E_USER_DEPRECATED);` is used now to indicate that a PHPUnit API method is deprecated; the old "system" for deprecating methods has been removed
* The PHP Archive (PHAR) distribution of PHPUnit can now be used as a library; `include()`ing or `require()`ing it will not execute the CLI test runner
### Deprecated
* The `assertTag()` and `assertSelect*()` assertion methods have been deprecated in favor of the [phpunit-dom-assertions](https://github.com/phpunit/phpunit-dom-assertions) extension; these methods will be removed in PHPUnit 5.0
[4.2.5]: https://github.com/sebastianbergmann/phpunit/compare/4.2.4...4.2.5
[4.2.4]: https://github.com/sebastianbergmann/phpunit/compare/4.2.3...4.2.4
[4.2.3]: https://github.com/sebastianbergmann/phpunit/compare/4.2.2...4.2.3
[4.2.2]: https://github.com/sebastianbergmann/phpunit/compare/4.2.1...4.2.2
[4.2.1]: https://github.com/sebastianbergmann/phpunit/compare/4.2.0...4.2.1
[4.2.0]: https://github.com/sebastianbergmann/phpunit/compare/4.1...4.2.0

View file

@ -0,0 +1,54 @@
# Changes in PHPUnit 4.3
All notable changes of the PHPUnit 4.3 release series are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles.
## [4.3.5] - 2014-11-11
### Changed
* Merged [#1484](https://github.com/sebastianbergmann/phpunit/issues/1484): Removed `lazymap` from blacklist as it is not longer used
* Merged [#1489](https://github.com/sebastianbergmann/phpunit/issues/1489): Do not send output from tests in process isolation when testing output
## [4.3.4] - 2014-10-22
### Fixed
* Fixed [#1428](https://github.com/sebastianbergmann/phpunit/issues/1428): Issue with Composer dependencies
* Fixed [#1447](https://github.com/sebastianbergmann/phpunit/issues/1447): PHPT tests treat line endings inconsistently
## [4.3.3] - 2014-10-16
### Fixed
* Fixed [#1471](https://github.com/sebastianbergmann/phpunit/issues/1471): Output made while test is running is printed although `expectOutputString()` is used when an assertion fails
## [4.3.2] - 2014-10-16
### Fixed
* Fixed [#1468](https://github.com/sebastianbergmann/phpunit/issues/1468): Incomplete and `@todo` annotated tests are counted twice
## [4.3.1] - 2014-10-06
New release of PHPUnit as PHP Archive (PHAR) with updated dependencies
## [4.3.0] - 2014-10-03
### Added
* Merged [#1358](https://github.com/sebastianbergmann/phpunit/issues/1358): Implement `@expectedExceptionMessageRegExp` annotation
* Merged [#1360](https://github.com/sebastianbergmann/phpunit/issues/1360): Allow a test to identify whether it runs in isolation
### Fixed
* Fixed [#1216](https://github.com/sebastianbergmann/phpunit/issues/1216): Bootstrap does not have global variables set when `--bootstrap` is specified on commandline
* Fixed [#1351](https://github.com/sebastianbergmann/phpunit/issues/1351): `TestResult` object contains serialized test class upon test failure/exception in process isolation
* Fixed [#1437](https://github.com/sebastianbergmann/phpunit/issues/1437): Risky test messages mask failures
[4.3.5]: https://github.com/sebastianbergmann/phpunit/compare/4.3.4...4.3.5
[4.3.4]: https://github.com/sebastianbergmann/phpunit/compare/4.3.3...4.3.4
[4.3.3]: https://github.com/sebastianbergmann/phpunit/compare/4.3.2...4.3.3
[4.3.2]: https://github.com/sebastianbergmann/phpunit/compare/4.3.1...4.3.2
[4.3.1]: https://github.com/sebastianbergmann/phpunit/compare/4.3.0...4.3.1
[4.3.0]: https://github.com/sebastianbergmann/phpunit/compare/4.2...4.3.0

View file

@ -0,0 +1,57 @@
# Changes in PHPUnit 4.4
All notable changes of the PHPUnit 4.4 release series are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles.
## [4.4.5] - 2015-01-27
### Fixed
* Fixed [#1592](https://github.com/sebastianbergmann/phpunit/issues/1592): Incorrect dependency information
## [4.4.4] - 2015-01-24
### Fixed
* Fixed [#1587](https://github.com/sebastianbergmann/phpunit/issues/1587): Class `SebastianBergmann\Exporter\Context` not found
## [4.4.3] - 2015-01-24
New PHAR release due to updated dependencies
## [4.4.2] - 2015-01-17
### Changed
* Merged [#1573](https://github.com/sebastianbergmann/phpunit/issues/1573): Updates for the XSD for PHPUnit XML configuration
### Fixed
* Merged [#1567](https://github.com/sebastianbergmann/phpunit/issues/1567): `coverage-crap4j` missing in XSD for PHPUnit XML configuration
* Fixed [#1570](https://github.com/sebastianbergmann/phpunit/issues/1570): Test that prints output is marked as failure and not as risky when `--disallow-test-output` is used
* Fixed `--stderr` with `--tap` or `--testdox` options
## [4.4.1] - 2014-12-28
### Changed
* Merged [#1528](https://github.com/sebastianbergmann/phpunit/issues/1528): Add `expectedCount()` to `toString()` return value
## [4.4.0] - 2014-12-05
### Added
* Merged [#1371](https://github.com/sebastianbergmann/phpunit/issues/1371): Implement `assertArraySubset()` assertion
* Merged [#1439](https://github.com/sebastianbergmann/phpunit/issues/1439): Add support for `double` to `assertInternalType()`
### Changed
* Merged [#1427](https://github.com/sebastianbergmann/phpunit/issues/1427): Improve failure output for tests when provided data is binary
* Merged [#1458](https://github.com/sebastianbergmann/phpunit/issues/1458): Only enable colors when PHPUnit is run on a console (and output is not sent to a file)
[4.4.5]: https://github.com/sebastianbergmann/phpunit/compare/4.4.4...4.4.5
[4.4.4]: https://github.com/sebastianbergmann/phpunit/compare/4.4.3...4.4.4
[4.4.3]: https://github.com/sebastianbergmann/phpunit/compare/4.4.2...4.4.3
[4.4.2]: https://github.com/sebastianbergmann/phpunit/compare/4.4.1...4.4.2
[4.4.1]: https://github.com/sebastianbergmann/phpunit/compare/4.4.0...4.4.1
[4.4.0]: https://github.com/sebastianbergmann/phpunit/compare/4.3...4.4.0

View file

@ -0,0 +1,28 @@
# Changes in PHPUnit 4.5
All notable changes of the PHPUnit 4.5 release series are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles.
## [4.5.1] - 2015-03-29
## [4.5.0] - 2015-02-05
### Added
* Added out-of-the-box support for [Prophecy](https://github.com/phpspec/prophecy)
* Implemented [#137](https://github.com/sebastianbergmann/phpunit/issues/137): Add support for variable number of tests shown per line in default result printer
### Changed
* Merged [#1478](https://github.com/sebastianbergmann/phpunit/issues/1478): Improve the performance of `PHPUnit_Framework_Constraint_IsEqual` (which is used by `assertEquals()`, for instance) for the most common case
### Deprecated
* [Deprecated](https://github.com/sebastianbergmann/phpunit/commit/7abe7796f77b13fdf3cfc506fb987d6c2ab477f5) the `--strict` commandline option and the XML configuration's `strict` attribute
### Fixed
* Fixed [#1474](https://github.com/sebastianbergmann/phpunit/issues/1474): Allow the registration of custom comparators for `assertEquals()` et al. (again)
[4.5.1]: https://github.com/sebastianbergmann/phpunit/compare/4.5.0...4.5.1
[4.5.0]: https://github.com/sebastianbergmann/phpunit/compare/4.4...4.5.0

View file

@ -0,0 +1,95 @@
# Changes in PHPUnit 4.6
All notable changes of the PHPUnit 4.6 release series are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles.
## [4.6.10] - 2015-06-03
### Changed
* Merged [#1693](https://github.com/sebastianbergmann/phpunit/pull/1693): Improved API documentation
* Merged [#1706](https://github.com/sebastianbergmann/phpunit/pull/1706): Avoid hard-coded URI to `phpunit.xsd`
* Merged [#1725](https://github.com/sebastianbergmann/phpunit/pull/1725): Update phpDox XSD URI
* Merged [#1735](https://github.com/sebastianbergmann/phpunit/pull/1735): Mute `chdir()` failures in XInclude handling of XML configuration file
* Merged [#1736](https://github.com/sebastianbergmann/phpunit/pull/1736): Verify that phar file can be overwritten before attempting self update
### Fixed
* Fixed [#1737](https://github.com/sebastianbergmann/phpunit/issues/1737): Confusing output from `--testdox` for empty test class
## [4.6.9] - 2015-05-29
### Fixed
* Fixed [#1731](https://github.com/sebastianbergmann/phpunit/issues/1731): `.` after failure count has no background color when `--colors` is used
## [4.6.8] - 2015-05-28
New PHAR release due to updated dependencies
## [4.6.7] - 2015-05-25
New PHAR release due to updated dependencies
## [4.6.6] - 2015-04-29
### Fixed
* Fixed [#1684](https://github.com/sebastianbergmann/phpunit/issues/1684): PHAR does not work on HHVM
## [4.6.5] - 2015-04-29
* Fixed [#1677](https://github.com/sebastianbergmann/phpunit/issues/1677): Number of risky tests not printed when there are failing tests
* Fixed [#1688](https://github.com/sebastianbergmann/phpunit/issues/1688): Self-Update operation does not work due to outdated SSL certificate
## [4.6.4] - 2015-04-11
### Changed
* The default list of blacklisted classes is now always passed to PHP_CodeCoverage
## [4.6.3] - 2015-04-11
### Changed
* Updated the default list of blacklisted classes
## [4.6.2] - 2015-04-07
### Fixed
* Fixed [#1667](https://github.com/sebastianbergmann/phpunit/issues/1667): Loading `src/Framework/Assert/Functions.php` by default causes collisions
## [4.6.1] - 2015-04-03
### Fixed
* Fixed [#1665](https://github.com/sebastianbergmann/phpunit/issues/1665): PHPUnit 4.6.0 PHAR does not work when renamed to `phpunit`
## [4.6.0] - 2015-04-03
### Added
* Added the `--strict-global-state` command-line option and the `beStrictAboutChangesToGlobalState` configuration setting for enabling a check that global variabes, super-global variables, and static attributes in user-defined classes are not modified during a test
* Merged [#1527](https://github.com/sebastianbergmann/phpunit/issues/1527) and [#1529](https://github.com/sebastianbergmann/phpunit/issues/1529): Allow to define options for displaying colors
### Changed
* Merged [#1528](https://github.com/sebastianbergmann/phpunit/issues/1528): Improve message when `PHPUnit_Framework_Constraint_Count` is used with logical operators
### Fixed
* Merged [#1537](https://github.com/sebastianbergmann/phpunit/issues/1537): Fix problem of `--stderr` with `--tap` and `--testdox`
* Fixed [#1599](https://github.com/sebastianbergmann/phpunit/issues/1599): The PHAR build of PHPUnit no longer uses an autoloader to load PHPUnit's own classes and instead statically loads all classes on startup
[4.6.10]: https://github.com/sebastianbergmann/phpunit/compare/4.6.9...4.6.10
[4.6.9]: https://github.com/sebastianbergmann/phpunit/compare/4.6.8...4.6.9
[4.6.8]: https://github.com/sebastianbergmann/phpunit/compare/4.6.7...4.6.8
[4.6.7]: https://github.com/sebastianbergmann/phpunit/compare/4.6.6...4.6.7
[4.6.6]: https://github.com/sebastianbergmann/phpunit/compare/4.6.5...4.6.6
[4.6.5]: https://github.com/sebastianbergmann/phpunit/compare/4.6.4...4.6.5
[4.6.4]: https://github.com/sebastianbergmann/phpunit/compare/4.6.3...4.6.4
[4.6.3]: https://github.com/sebastianbergmann/phpunit/compare/4.6.2...4.6.3
[4.6.2]: https://github.com/sebastianbergmann/phpunit/compare/4.6.1...4.6.2
[4.6.1]: https://github.com/sebastianbergmann/phpunit/compare/4.6.0...4.6.1
[4.6.0]: https://github.com/sebastianbergmann/phpunit/compare/4.5...4.6.0

View file

@ -0,0 +1,71 @@
# Changes in PHPUnit 4.7
All notable changes of the PHPUnit 4.7 release series are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles.
## [4.7.7] - 2015-07-13
New PHAR release due to updated dependencies
## [4.7.6] - 2015-06-30
### Fixed
* Fixed [#1681](https://github.com/sebastianbergmann/phpunit/issues/1681): Code Coverage filter configuration is not passed to child processes
* Fixed [#1692](https://github.com/sebastianbergmann/phpunit/issues/1692): Clean up `PHPUnit_Extensions_RepeatedTest` after refactoring
* Fixed [#1763](https://github.com/sebastianbergmann/phpunit/issues/1763): `@before` and `@after` annotations do not work when inherited
## [4.7.5] - 2015-06-21
### Fixed
* Fixed [#490](https://github.com/sebastianbergmann/phpunit/issues/490): Ensure that a test can only be one of `@small`, `@medium`, or `@large`.
* Fixed [#1704](https://github.com/sebastianbergmann/phpunit/issues/1704): Output printed during test missing when using TAP
## [4.7.4] - 2015-06-18
### Changed
* The `PHPUnit_Framework_Constraint_IsType` constraint now knows about the `real` type (which is an alias for `float`)
* Various work on compatibility with PHP 7
### Fixed
* Fixed [#1749](https://github.com/sebastianbergmann/phpunit/issues/1749): `stopOnError` configuration setting does not work
## [4.7.3] - 2015-06-11
### Fixed
* Fixed [#1317](https://github.com/sebastianbergmann/phpunit/issues/1317): JUnit XML logfiles does not contain warnings
* Fixed an [issue](https://github.com/sebastianbergmann/php-code-coverage/issues/347) where the warning that no whitelist is used is displayed when it should not
## [4.7.2] - 2015-06-06
New PHAR release due to updated dependencies
## [4.7.1] - 2015-06-05
New PHAR release due to updated dependencies
## [4.7.0] - 2015-06-05
### Added
* Merged [#1718](https://github.com/sebastianbergmann/phpunit/issues/1718): Support for `--INI--` section in PHPT tests
### Changed
* Tests not annotated with `@small`, `@medium`, or `@large` are no longer treated as being annotated with `@small`
* In verbose mode, the test runner now prints information about the PHP runtime
* To be consistent with the printing of PHP runtime information, the configuration file used is only printed in verbose mode
* A warning is now printed when code coverage data is collected but no whitelist is configured
[4.7.7]: https://github.com/sebastianbergmann/phpunit/compare/4.7.6...4.7.7
[4.7.6]: https://github.com/sebastianbergmann/phpunit/compare/4.7.5...4.7.6
[4.7.5]: https://github.com/sebastianbergmann/phpunit/compare/4.7.4...4.7.5
[4.7.4]: https://github.com/sebastianbergmann/phpunit/compare/4.7.3...4.7.4
[4.7.3]: https://github.com/sebastianbergmann/phpunit/compare/4.7.2...4.7.3
[4.7.2]: https://github.com/sebastianbergmann/phpunit/compare/4.7.1...4.7.2
[4.7.1]: https://github.com/sebastianbergmann/phpunit/compare/4.7.0...4.7.1
[4.7.0]: https://github.com/sebastianbergmann/phpunit/compare/4.6...4.7.0

View file

@ -0,0 +1,227 @@
# Changes in PHPUnit 4.8
All notable changes of the PHPUnit 4.8 release series are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles.
## [4.8.27] - 2016-07-21
### Fixed
* Fixed [#1968](https://github.com/sebastianbergmann/phpunit/issues/1968): Invalid data sets are not handled correctly for `@testWith` annotation
## [4.8.26] - 2016-05-17
### Fixed
* Fixed [phpunit-mock-objects/#301](https://github.com/sebastianbergmann/phpunit-mock-objects/issues/301): `PHPUnit_Framework_MockObject_MockBuilder::getMock()` calls `PHPUnit_Framework_TestCase::getMock()` with more arguments than accepted
## [4.8.25] - 2016-05-10
### Fixed
* Fixed [#2112](https://github.com/sebastianbergmann/phpunit/issues/2112): Output is html entity encoded when ran through `phpdbg`
* Fixed [#2158](https://github.com/sebastianbergmann/phpunit/issues/2158): Failure to run tests in separate processes if a file included into main process contains constant definition
## [4.8.24] - 2016-03-14
### Fixed
* Fixed [#1959](https://github.com/sebastianbergmann/phpunit/issues/1959): Prophecy errors are not handled correctly
* Fixed [#2039](https://github.com/sebastianbergmann/phpunit/issues/2039): TestDox does not handle snake_case test methods properly
* Fixed [#2109](https://github.com/sebastianbergmann/phpunit/issues/2109): Process isolation leaks global variable
## [4.8.23] - 2016-02-11
### Fixed
* Fixed [#2072](https://github.com/sebastianbergmann/phpunit/issues/2072): Paths in XML configuration file were not handled correctly when they have whitespace around them
## [4.8.22] - 2016-02-02
### Fixed
* Fixed [#2050](https://github.com/sebastianbergmann/phpunit/issues/2050): `PHPUnit_Util_XML::load()` raises exception with empty message when XML string is empty
* Fixed a bug in `PHPUnit_Runner_Version::series()`
## [4.8.21] - 2015-12-12
### Changed
* Reverted the changes introduced in PHPUnit 4.8.20 as the only thing the new version constraint in `composer.json` achieved was locking PHP 7 users to PHPUnit 4.8.19
## [4.8.20] - 2015-12-10
### Changed
* Changed PHP version constraint in `composer.json` to prevent installing PHPUnit 4.8 on PHP 7
* `phpunit.phar` will now refuse to work on PHP 7
## [4.8.19] - 2015-11-30
### Fixed
* Fixed [#1955](https://github.com/sebastianbergmann/phpunit/issues/1955): Process isolation fails when running tests with `phpdbg -qrr`
## [4.8.18] - 2015-11-11
### Changed
* DbUnit 1.4 is bundled again in the PHAR distribution
## [4.8.17] - 2015-11-10
### Fixed
* Fixed [#1935](https://github.com/sebastianbergmann/phpunit/issues/1935): `PHP_CodeCoverage_Exception` not handled properly
* Fixed [#1948](https://github.com/sebastianbergmann/phpunit/issues/1948): Unable to use PHAR due to unsupported signature error
### Changed
* DbUnit >= 2.0.2 is now bundled in the PHAR distribution
## [4.8.16] - 2015-10-23
### Added
* Implemented [#1925](https://github.com/sebastianbergmann/phpunit/issues/1925): Provide a library-only PHAR
## [4.8.15] - 2015-10-22
### Fixed
* The backup of global state is now properly restored when changes to global state are disallowed
* The `__PHPUNIT_PHAR__` constant is now properly set when the PHPUnit PHAR is used as a library
## [4.8.14] - 2015-10-17
### Fixed
* Fixed [#1892](https://github.com/sebastianbergmann/phpunit/issues/1892): `--coverage-text` does not honor color settings
## [4.8.13] - 2015-10-14
### Added
* Added the `--self-upgrade` commandline switch for upgrading a PHPUnit PHAR to the latest version
### Changed
* The `--self-update` commandline switch now updates a PHPUnit PHAR to the latest version within the same release series
## [4.8.12] - 2015-10-12
### Changed
* Merged [#1893](https://github.com/sebastianbergmann/phpunit/issues/1893): Removed workaround for phpab bug
## [4.8.11] - 2015-10-07
### Fixed
* Merged [#1885](https://github.com/sebastianbergmann/phpunit/issues/1885): Fixed handling of PHP configuration settings for process isolation
* Fixed [#1857](https://github.com/sebastianbergmann/phpunit/issues/1857): `@covers` and `@uses` should only take a single word
* Fixed [#1879](https://github.com/sebastianbergmann/phpunit/issues/1879): `assertEqualXMLStructure()` cannot compare nodes with an ID
* Fixed [#1898](https://github.com/sebastianbergmann/phpunit/issues/1898): `@covers` and `@uses` cannot be used for namespaced functions
* Fixed [#1901](https://github.com/sebastianbergmann/phpunit/issues/1901): `--self-update` updates to PHPUnit 5, even on PHP < 5.6
## [4.8.10] - 2015-10-01
### Fixed
* Merged [#1884](https://github.com/sebastianbergmann/phpunit/issues/1884): Avoid passing `Error` to `onNotSuccessfulTest()` on PHP 7
## [4.8.9] - 2015-09-20
### Fixed
* Fixed regression introduced in PHPUnit 4.8.8
## [4.8.8] - 2015-09-19
### Fixed
* Fixed [#1860](https://github.com/sebastianbergmann/phpunit/issues/1860): Not well-formed XML strings are always considered equal by `PHPUnit_Framework_Assert::assertXmlStringEqualsXmlString()`
## [4.8.7] - 2015-09-14
New PHAR release due to updated dependencies
## [4.8.6] - 2015-08-24
### Fixed
* Fixed [#1835](https://github.com/sebastianbergmann/phpunit/issues/1835): Skipped test reported as errored since PHPUnit 4.7.4
## [4.8.5] - 2015-08-19
### Fixed
* Fixed [#1831](https://github.com/sebastianbergmann/phpunit/issues/1831): PHAR manifest is missing
## [4.8.4] - 2015-08-15
### Fixed
* Fixed [#1823](https://github.com/sebastianbergmann/phpunit/issues/1823): Columns attribute in XML configuration file is ignored
## [4.8.3] - 2015-08-10
### Changed
* PHPUnit now exits early during bootstrap when an unsupported version of PHP is used
## [4.8.2] - 2015-08-07
### Fixed
* Fixed [#1816](https://github.com/sebastianbergmann/phpunit/issues/1816): PHPUnit 4.8.1 shows "4.8.0" as version number
## [4.8.1] - 2015-08-07
### Fixed
* Fixed [#1815](https://github.com/sebastianbergmann/phpunit/issues/1815): `phpunit --self-update` does not work in PHPUnit 4.8.0
## [4.8.0] - 2015-08-07
### Added
* Added `--check-version` commandline switch to check whether the current version of PHPUnit is used (PHAR only)
* Added `--no-coverage` commandline switch to ignore code coverage configuration from the configuration file
* Implemented [#1663](https://github.com/sebastianbergmann/phpunit/issues/1663): The Crap4J report's threshold is now configurable
* Merged [#1728](https://github.com/sebastianbergmann/phpunit/issues/1728): Implemented the `@testWith` annotation as "syntactic sugar" for data providers
* Merged [#1739](https://github.com/sebastianbergmann/phpunit/issues/1739): Added support to the commandline test runner for using options after arguments
### Changed
* Made the argument check of `assertContains()` and `assertNotContains()` more strict to prevent undefined behavior such as [#1808](https://github.com/sebastianbergmann/phpunit/issues/1808)
* Changed the name of the default group from `__nogroup__` to `default`
[4.8.27]: https://github.com/sebastianbergmann/phpunit/compare/4.8.26...4.8.27
[4.8.26]: https://github.com/sebastianbergmann/phpunit/compare/4.8.25...4.8.26
[4.8.25]: https://github.com/sebastianbergmann/phpunit/compare/4.8.24...4.8.25
[4.8.24]: https://github.com/sebastianbergmann/phpunit/compare/4.8.23...4.8.24
[4.8.23]: https://github.com/sebastianbergmann/phpunit/compare/4.8.22...4.8.23
[4.8.22]: https://github.com/sebastianbergmann/phpunit/compare/4.8.21...4.8.22
[4.8.21]: https://github.com/sebastianbergmann/phpunit/compare/4.8.20...4.8.21
[4.8.20]: https://github.com/sebastianbergmann/phpunit/compare/4.8.19...4.8.20
[4.8.19]: https://github.com/sebastianbergmann/phpunit/compare/4.8.18...4.8.19
[4.8.18]: https://github.com/sebastianbergmann/phpunit/compare/4.8.17...4.8.18
[4.8.17]: https://github.com/sebastianbergmann/phpunit/compare/4.8.16...4.8.17
[4.8.16]: https://github.com/sebastianbergmann/phpunit/compare/4.8.15...4.8.16
[4.8.15]: https://github.com/sebastianbergmann/phpunit/compare/4.8.14...4.8.15
[4.8.14]: https://github.com/sebastianbergmann/phpunit/compare/4.8.13...4.8.14
[4.8.13]: https://github.com/sebastianbergmann/phpunit/compare/4.8.12...4.8.13
[4.8.12]: https://github.com/sebastianbergmann/phpunit/compare/4.8.11...4.8.12
[4.8.11]: https://github.com/sebastianbergmann/phpunit/compare/4.8.10...4.8.11
[4.8.10]: https://github.com/sebastianbergmann/phpunit/compare/4.8.9...4.8.10
[4.8.9]: https://github.com/sebastianbergmann/phpunit/compare/4.8.8...4.8.9
[4.8.8]: https://github.com/sebastianbergmann/phpunit/compare/4.8.7...4.8.8
[4.8.7]: https://github.com/sebastianbergmann/phpunit/compare/4.8.6...4.8.7
[4.8.6]: https://github.com/sebastianbergmann/phpunit/compare/4.8.5...4.8.6
[4.8.5]: https://github.com/sebastianbergmann/phpunit/compare/4.8.4...4.8.5
[4.8.4]: https://github.com/sebastianbergmann/phpunit/compare/4.8.3...4.8.4
[4.8.3]: https://github.com/sebastianbergmann/phpunit/compare/4.8.2...4.8.3
[4.8.2]: https://github.com/sebastianbergmann/phpunit/compare/4.8.1...4.8.2
[4.8.1]: https://github.com/sebastianbergmann/phpunit/compare/4.8.0...4.8.1
[4.8.0]: https://github.com/sebastianbergmann/phpunit/compare/4.7...4.8.0

33
web/vendor/phpunit/phpunit/LICENSE vendored Normal file
View file

@ -0,0 +1,33 @@
PHPUnit
Copyright (c) 2001-2016, Sebastian Bergmann <sebastian@phpunit.de>.
All rights reserved.
Redistribution and use in source and binary forms, with or without
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.
* 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.
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.

46
web/vendor/phpunit/phpunit/README.md vendored Normal file
View file

@ -0,0 +1,46 @@
# PHPUnit
PHPUnit is a programmer-oriented testing framework for PHP. It is an instance of the xUnit architecture for unit testing frameworks.
[![Latest Stable Version](https://img.shields.io/packagist/v/phpunit/phpunit.svg?style=flat-square)](https://packagist.org/packages/phpunit/phpunit)
[![Minimum PHP Version](https://img.shields.io/badge/php-%3E%3D%205.3.3-8892BF.svg?style=flat-square)](https://php.net/)
[![Build Status](https://img.shields.io/travis/sebastianbergmann/phpunit/4.8.svg?style=flat-square)](https://travis-ci.org/sebastianbergmann/phpunit)
## Installation
We distribute a [PHP Archive (PHAR)](https://php.net/phar) that has all required (as well as some optional) dependencies of PHPUnit bundled in a single file:
```bash
$ wget https://phar.phpunit.de/phpunit.phar
$ chmod +x phpunit.phar
$ mv phpunit.phar /usr/local/bin/phpunit
```
You can also immediately use the PHAR after you have downloaded it, of course:
```bash
$ wget https://phar.phpunit.de/phpunit.phar
$ php phpunit.phar
```
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 do this.
## Contribute
Please refer to [CONTRIBUTING.md](https://github.com/sebastianbergmann/phpunit/blob/master/CONTRIBUTING.md) for information on how to contribute to PHPUnit and its related projects.
## List of Contributors
Thanks to everyone who has contributed to PHPUnit! You can find a detailed list of contributors on every PHPUnit related package on GitHub. This list shows only the major components:
* [PHPUnit](https://github.com/sebastianbergmann/phpunit/graphs/contributors)
* [PHP_CodeCoverage](https://github.com/sebastianbergmann/php-code-coverage/graphs/contributors)
* [PHPUnit_MockObject](https://github.com/sebastianbergmann/phpunit-mock-objects/graphs/contributors)
A very special thanks to everyone who has contributed to the documentation and helps maintain the translations:
* [PHPUnit Documentation](https://github.com/sebastianbergmann/phpunit-documentation/graphs/contributors)

372
web/vendor/phpunit/phpunit/build.xml vendored Normal file
View file

@ -0,0 +1,372 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="phpunit" default="setup">
<target name="setup" depends="clean,install-dependencies"/>
<target name="validate" depends="php-syntax-check,validate-composer-json,validate-phpunit-xsd"/>
<target name="clean" unless="clean.done" description="Cleanup build artifacts">
<delete dir="${basedir}/bin"/>
<delete dir="${basedir}/vendor"/>
<delete file="${basedir}/composer.lock"/>
<delete dir="${basedir}/build/documentation"/>
<delete dir="${basedir}/build/logfiles"/>
<delete dir="${basedir}/build/phar"/>
<delete>
<fileset dir="${basedir}/build">
<include name="**/phpunit*.phar"/>
<include name="**/phpunit*.phar.asc"/>
</fileset>
</delete>
<property name="clean.done" value="true"/>
</target>
<target name="prepare" unless="prepare.done" depends="clean" description="Prepare for build">
<mkdir dir="${basedir}/build/documentation"/>
<mkdir dir="${basedir}/build/logfiles"/>
<property name="prepare.done" value="true"/>
</target>
<target name="validate-composer-json" unless="validate-composer-json.done" description="Validate composer.json">
<exec executable="${basedir}/build/tools/composer" failonerror="true" taskname="composer">
<env key="COMPOSER_DISABLE_XDEBUG_WARN" value="1"/>
<arg value="validate"/>
<arg value="--no-check-lock"/>
<arg value="--strict"/>
<arg value="${basedir}/composer.json"/>
</exec>
<property name="validate-composer-json.done" value="true"/>
</target>
<target name="-dependencies-installed">
<available file="${basedir}/composer.lock" property="dependencies-installed"/>
</target>
<target name="install-dependencies" unless="dependencies-installed" depends="-dependencies-installed,validate-composer-json" description="Install dependencies with Composer">
<exec executable="${basedir}/build/tools/composer" taskname="composer">
<env key="COMPOSER_DISABLE_XDEBUG_WARN" value="1"/>
<arg value="install"/>
</exec>
</target>
<target name="php-syntax-check" unless="php-syntax-check.done" description="Perform syntax check on PHP files">
<apply executable="php" failonerror="true" taskname="lint">
<arg value="-l"/>
<fileset dir="${basedir}/src">
<include name="**/*.php"/>
<modified/>
</fileset>
<fileset dir="${basedir}/tests">
<include name="**/*.php"/>
<modified/>
</fileset>
</apply>
<property name="php-syntax-check.done" value="true"/>
</target>
<target name="validate-phpunit-xsd" unless="validate-phpunit-xsd.done" description="Validate phpunit.xsd">
<exec executable="xmllint" failonerror="true" taskname="xmllint">
<arg value="--noout"/>
<arg path="${basedir}/phpunit.xsd"/>
</exec>
<property name="validate-phpunit-xsd.done" value="true"/>
</target>
<target name="test" depends="validate,install-dependencies" description="Run tests">
<exec executable="${basedir}/phpunit" taskname="phpunit"/>
</target>
<target name="signed-phar" depends="phar" description="Create signed PHAR archive of PHPUnit and all its dependencies">
<exec executable="gpg" failonerror="true">
<arg value="--armor"/>
<arg value="--detach-sign"/>
<arg path="${basedir}/build/phpunit-library-${version}.phar"/>
</exec>
<exec executable="gpg" failonerror="true">
<arg value="--armor"/>
<arg value="--detach-sign"/>
<arg path="${basedir}/build/phpunit-${version}.phar"/>
</exec>
</target>
<target name="phar" depends="-phar-determine-version,-phar-prepare" description="Create PHAR archive of PHPUnit and all its dependencies">
<antcall target="-phar-build">
<param name="type" value="release"/>
</antcall>
</target>
<target name="phar-nightly" depends="-phar-prepare" description="Create PHAR archive of PHPUnit and all its dependencies (nightly)">
<antcall target="-phar-build">
<param name="type" value="nightly"/>
</antcall>
</target>
<target name="-phar-prepare" depends="clean,install-dependencies">
<mkdir dir="${basedir}/build/phar"/>
<copy file="${basedir}/composer.json" tofile="${basedir}/composer.json.bak"/>
<exec executable="${basedir}/build/tools/composer">
<arg value="require"/>
<arg value="phpunit/dbunit:~1.4"/>
<arg value="phpunit/phpunit-selenium:~1.4"/>
<arg value="phpunit/php-invoker:~1.1"/>
</exec>
<move file="${basedir}/composer.json.bak" tofile="${basedir}/composer.json"/>
<exec executable="${basedir}/build/phar-manifest.php" output="${basedir}/build/phar/manifest.txt"/>
<copy todir="${basedir}/build/phar" file="${basedir}/build/ca.pem"/>
<copy file="${basedir}/vendor/phpunit/php-code-coverage/LICENSE"
tofile="${basedir}/build/phar/php-code-coverage/LICENSE"/>
<copy todir="${basedir}/build/phar/php-code-coverage">
<fileset dir="${basedir}/vendor/phpunit/php-code-coverage/src">
<include name="**/*"/>
</fileset>
</copy>
<copy file="${basedir}/vendor/phpunit/php-file-iterator/LICENSE"
tofile="${basedir}/build/phar/php-file-iterator/LICENSE"/>
<copy todir="${basedir}/build/phar/php-file-iterator">
<fileset dir="${basedir}/vendor/phpunit/php-file-iterator/src">
<include name="**/*.php"/>
</fileset>
</copy>
<copy file="${basedir}/vendor/phpunit/php-text-template/LICENSE"
tofile="${basedir}/build/phar/php-text-template/LICENSE"/>
<copy todir="${basedir}/build/phar/php-text-template">
<fileset dir="${basedir}/vendor/phpunit/php-text-template/src">
<include name="**/*.php"/>
</fileset>
</copy>
<copy file="${basedir}/vendor/phpunit/php-timer/LICENSE" tofile="${basedir}/build/phar/php-timer/LICENSE"/>
<copy todir="${basedir}/build/phar/php-timer">
<fileset dir="${basedir}/vendor/phpunit/php-timer/src">
<include name="**/*.php"/>
</fileset>
</copy>
<copy file="${basedir}/vendor/phpunit/php-token-stream/LICENSE"
tofile="${basedir}/build/phar/php-token-stream/LICENSE"/>
<copy todir="${basedir}/build/phar/php-token-stream">
<fileset dir="${basedir}/vendor/phpunit/php-token-stream/src">
<include name="**/*.php"/>
</fileset>
</copy>
<copy file="${basedir}/vendor/phpunit/phpunit-mock-objects/LICENSE"
tofile="${basedir}/build/phar/phpunit-mock-objects/LICENSE"/>
<copy todir="${basedir}/build/phar/phpunit-mock-objects">
<fileset dir="${basedir}/vendor/phpunit/phpunit-mock-objects/src">
<include name="**/*"/>
</fileset>
</copy>
<copy file="${basedir}/vendor/sebastian/comparator/LICENSE"
tofile="${basedir}/build/phar/sebastian-comparator/LICENSE"/>
<copy todir="${basedir}/build/phar/sebastian-comparator">
<fileset dir="${basedir}/vendor/sebastian/comparator/src">
<include name="**/*.php"/>
</fileset>
</copy>
<copy file="${basedir}/vendor/sebastian/diff/LICENSE" tofile="${basedir}/build/phar/sebastian-diff/LICENSE"/>
<copy todir="${basedir}/build/phar/sebastian-diff">
<fileset dir="${basedir}/vendor/sebastian/diff/src">
<include name="**/*.php"/>
</fileset>
</copy>
<copy file="${basedir}/vendor/sebastian/environment/LICENSE"
tofile="${basedir}/build/phar/sebastian-environment/LICENSE"/>
<copy todir="${basedir}/build/phar/sebastian-environment">
<fileset dir="${basedir}/vendor/sebastian/environment/src">
<include name="**/*.php"/>
</fileset>
</copy>
<copy file="${basedir}/vendor/sebastian/exporter/LICENSE"
tofile="${basedir}/build/phar/sebastian-exporter/LICENSE"/>
<copy todir="${basedir}/build/phar/sebastian-exporter">
<fileset dir="${basedir}/vendor/sebastian/exporter/src">
<include name="**/*.php"/>
</fileset>
</copy>
<copy file="${basedir}/vendor/sebastian/recursion-context/LICENSE"
tofile="${basedir}/build/phar/sebastian-recursion-context/LICENSE"/>
<copy todir="${basedir}/build/phar/sebastian-recursion-context">
<fileset dir="${basedir}/vendor/sebastian/recursion-context/src">
<include name="**/*.php"/>
</fileset>
</copy>
<copy file="${basedir}/vendor/sebastian/global-state/LICENSE"
tofile="${basedir}/build/phar/sebastian-global-state/LICENSE"/>
<copy todir="${basedir}/build/phar/sebastian-global-state">
<fileset dir="${basedir}/vendor/sebastian/global-state/src">
<include name="**/*.php"/>
</fileset>
</copy>
<copy file="${basedir}/vendor/sebastian/version/LICENSE"
tofile="${basedir}/build/phar/sebastian-version/LICENSE"/>
<copy todir="${basedir}/build/phar/sebastian-version">
<fileset dir="${basedir}/vendor/sebastian/version/src">
<include name="**/*.php"/>
</fileset>
</copy>
<copy file="${basedir}/vendor/doctrine/instantiator/LICENSE"
tofile="${basedir}/build/phar/doctrine-instantiator/LICENSE"/>
<copy todir="${basedir}/build/phar/doctrine-instantiator">
<fileset dir="${basedir}/vendor/doctrine/instantiator/src">
<include name="**/*.php"/>
</fileset>
</copy>
<copy file="${basedir}/vendor/symfony/yaml/Symfony/Component/Yaml/LICENSE"
tofile="${basedir}/build/phar/symfony/LICENSE"/>
<copy todir="${basedir}/build/phar/symfony">
<fileset dir="${basedir}/vendor/symfony">
<include name="**/*.php"/>
<exclude name="**/Tests/**"/>
</fileset>
</copy>
<copy todir="${basedir}/build/phar/dbunit">
<fileset dir="${basedir}/vendor/phpunit/dbunit/PHPUnit">
<include name="**/*.php"/>
<exclude name="**/Autoload.*"/>
</fileset>
</copy>
<copy todir="${basedir}/build/phar/php-invoker">
<fileset dir="${basedir}/vendor/phpunit/php-invoker/src">
<include name="**/*.php"/>
</fileset>
</copy>
<copy todir="${basedir}/build/phar/phpunit-selenium">
<fileset dir="${basedir}/vendor/phpunit/phpunit-selenium/PHPUnit">
<include name="**/*.php"/>
<exclude name="**/Autoload.*"/>
</fileset>
</copy>
<copy file="${basedir}/vendor/phpdocumentor/reflection-docblock/LICENSE"
tofile="${basedir}/build/phar/phpdocumentor-reflection-docblock/LICENSE"/>
<copy todir="${basedir}/build/phar/phpdocumentor-reflection-docblock">
<fileset dir="${basedir}/vendor/phpdocumentor/reflection-docblock/src">
<include name="**/*.php"/>
</fileset>
</copy>
<copy file="${basedir}/vendor/phpspec/prophecy/LICENSE"
tofile="${basedir}/build/phar/phpspec-prophecy/LICENSE"/>
<copy todir="${basedir}/build/phar/phpspec-prophecy">
<fileset dir="${basedir}/vendor/phpspec/prophecy/src">
<include name="**/*.php"/>
</fileset>
</copy>
</target>
<target name="-phar-build" depends="-phar-determine-version">
<copy todir="${basedir}/build/phar/phpunit">
<fileset dir="${basedir}/src">
<include name="**/*.php"/>
<include name="**/*.tpl*"/>
</fileset>
</copy>
<exec executable="${basedir}/build/phar-version.php" outputproperty="_version">
<arg value="${version}"/>
<arg value="${type}"/>
</exec>
<exec executable="${basedir}/build/tools/phpab" taskname="phpab">
<arg value="--all"/>
<arg value="--static"/>
<arg value="--once"/>
<arg value="--phar"/>
<arg value="--hash"/>
<arg value="SHA-1"/>
<arg value="--output"/>
<arg path="${basedir}/build/phpunit-library-${_version}.phar"/>
<arg value="--template"/>
<arg path="${basedir}/build/library-phar-autoload.php.in"/>
<arg path="${basedir}/build/phar"/>
</exec>
<exec executable="${basedir}/build/tools/phpab" taskname="phpab">
<arg value="--all"/>
<arg value="--static"/>
<arg value="--phar"/>
<arg value="--hash"/>
<arg value="SHA-1"/>
<arg value="--output"/>
<arg path="${basedir}/build/phpunit-${_version}.phar"/>
<arg value="--template"/>
<arg path="${basedir}/build/binary-phar-autoload.php.in"/>
<arg path="${basedir}/build/phar"/>
</exec>
<chmod file="${basedir}/build/phpunit-${_version}.phar" perm="ugo+rx"/>
</target>
<target name="-phar-determine-version">
<exec executable="bash" outputproperty="version">
<arg value="-c"/>
<arg value="${basedir}/phpunit --version | awk 'BEGIN { ORS = &quot;&quot;; } {print $2}'"/>
</exec>
</target>
<target name="generate-project-documentation" depends="-phploc,-phpcs,-phpmd,-phpunit">
<exec executable="${basedir}/build/tools/phpdox" dir="${basedir}/build" taskname="phpdox"/>
</target>
<target name="-phploc" depends="prepare">
<exec executable="${basedir}/build/tools/phploc" output="/dev/null" taskname="phploc">
<arg value="--count-tests"/>
<arg value="--log-xml"/>
<arg path="${basedir}/build/logfiles/phploc.xml"/>
<arg path="${basedir}/src"/>
<arg path="${basedir}/tests"/>
</exec>
</target>
<target name="-phpcs" depends="prepare">
<exec executable="${basedir}/build/tools/phpcs" output="/dev/null" taskname="phpcs">
<arg value="--report=checkstyle"/>
<arg value="--report-file=${basedir}/build/logfiles/checkstyle.xml"/>
<arg value="--standard=PSR2"/>
<arg value="--extensions=php"/>
<arg path="${basedir}/src"/>
</exec>
</target>
<target name="-phpmd" depends="prepare">
<exec executable="${basedir}/build/tools/phpmd" taskname="phpmd">
<arg path="${basedir}/src"/>
<arg value="xml"/>
<arg path="${basedir}/build/phpmd.xml"/>
<arg value="--reportfile"/>
<arg path="${basedir}/build/logfiles/pmd.xml"/>
</exec>
</target>
<target name="-phpunit" depends="setup">
<exec executable="${basedir}/phpunit" taskname="phpunit">
<arg value="--configuration"/>
<arg path="${basedir}/build/phpunit.xml"/>
</exec>
</target>
</project>

View file

@ -0,0 +1,73 @@
{
"name": "phpunit/phpunit",
"description": "The PHP Unit Testing framework.",
"type": "library",
"keywords": [
"phpunit",
"xunit",
"testing"
],
"homepage": "https://phpunit.de/",
"license": "BSD-3-Clause",
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues"
},
"require": {
"php": ">=5.3.3",
"phpunit/php-file-iterator": "~1.4",
"phpunit/php-text-template": "~1.2",
"phpunit/php-code-coverage": "~2.1",
"phpunit/php-timer": "^1.0.6",
"phpunit/phpunit-mock-objects": "~2.3",
"phpspec/prophecy": "^1.3.1",
"symfony/yaml": "~2.1|~3.0",
"sebastian/comparator": "~1.1",
"sebastian/diff": "~1.2",
"sebastian/environment": "~1.3",
"sebastian/exporter": "~1.2",
"sebastian/global-state": "~1.0",
"sebastian/version": "~1.0",
"ext-dom": "*",
"ext-json": "*",
"ext-pcre": "*",
"ext-reflection": "*",
"ext-spl": "*"
},
"config": {
"platform": {
"php": "5.3.3"
}
},
"suggest": {
"phpunit/php-invoker": "~1.1"
},
"bin": [
"phpunit"
],
"autoload": {
"classmap": [
"src/"
]
},
"autoload-dev": {
"classmap": [
"tests/"
],
"files": [
"src/Framework/Assert/Functions.php",
"tests/_files/CoveredFunction.php"
]
},
"extra": {
"branch-alias": {
"dev-master": "4.8.x-dev"
}
}
}

47
web/vendor/phpunit/phpunit/phpunit vendored Executable file
View file

@ -0,0 +1,47 @@
#!/usr/bin/env php
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
if (version_compare('5.3.3', PHP_VERSION, '>')) {
fwrite(
STDERR,
'This version of PHPUnit requires PHP 5.3.3; using the latest version of PHP is highly recommended.' . PHP_EOL
);
die(1);
}
if (!ini_get('date.timezone')) {
ini_set('date.timezone', 'UTC');
}
foreach (array(__DIR__ . '/../../autoload.php', __DIR__ . '/../vendor/autoload.php', __DIR__ . '/vendor/autoload.php') as $file) {
if (file_exists($file)) {
define('PHPUNIT_COMPOSER_INSTALL', $file);
break;
}
}
unset($file);
if (!defined('PHPUNIT_COMPOSER_INSTALL')) {
fwrite(STDERR,
'You need to set up the project dependencies using the following commands:' . PHP_EOL .
'wget http://getcomposer.org/composer.phar' . PHP_EOL .
'php composer.phar install' . PHP_EOL
);
die(1);
}
require PHPUNIT_COMPOSER_INSTALL;
PHPUnit_TextUI_Command::main();

34
web/vendor/phpunit/phpunit/phpunit.xml vendored Normal file
View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="phpunit.xsd"
bootstrap="tests/bootstrap.php"
backupGlobals="false"
verbose="true">
<testsuites>
<testsuite name="small">
<directory suffix="Test.php">tests/Framework</directory>
<directory suffix="Test.php">tests/Extensions</directory>
<directory suffix="Test.php">tests/Runner</directory>
<directory suffix="Test.php">tests/Util</directory>
</testsuite>
<testsuite name="large">
<directory suffix=".phpt">tests/TextUI</directory>
<directory suffix=".phpt">tests/Regression</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">src</directory>
<exclude>
<file>src/Framework/Assert/Functions.php</file>
</exclude>
</whitelist>
</filter>
<php>
<const name="PHPUNIT_TESTSUITE" value="true"/>
</php>
</phpunit>

264
web/vendor/phpunit/phpunit/phpunit.xsd vendored Normal file
View file

@ -0,0 +1,264 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:annotation>
<xs:documentation source="https://phpunit.de/manual/4.8/en/appendixes.configuration.html">
This Schema file defines the rules by which the XML configuration file of PHPUnit 4.8 may be structured.
</xs:documentation>
<xs:appinfo source="http://www.phpunit.de/manual/current/en/appendixes.configuration.html"/>
</xs:annotation>
<xs:element name="phpunit" type="phpUnitType">
<xs:annotation>
<xs:documentation>Root Element</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="filtersType">
<xs:choice>
<xs:sequence>
<xs:element name="blacklist" type="filterType"/>
<xs:element name="whitelist" type="whiteListType" minOccurs="0"/>
</xs:sequence>
<xs:sequence>
<xs:element name="whitelist" type="whiteListType"/>
</xs:sequence>
</xs:choice>
</xs:complexType>
<xs:complexType name="filterType">
<xs:sequence>
<xs:group ref="pathGroup"/>
<xs:element name="exclude" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:group ref="pathGroup"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="whiteListType">
<xs:complexContent>
<xs:extension base="filterType">
<xs:attribute name="addUncoveredFilesFromWhitelist" default="false" type="xs:boolean"/>
<xs:attribute name="processUncoveredFilesFromWhitelist" default="true" type="xs:boolean"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="groupsType">
<xs:choice>
<xs:sequence>
<xs:element name="include" type="groupType"/>
<xs:element name="exclude" type="groupType" minOccurs="0"/>
</xs:sequence>
<xs:sequence>
<xs:element name="exclude" type="groupType"/>
</xs:sequence>
</xs:choice>
</xs:complexType>
<xs:complexType name="groupType">
<xs:sequence>
<xs:element name="group" type="xs:string" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="listenersType">
<xs:sequence>
<xs:element name="listener" type="objectType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="objectType">
<xs:sequence>
<xs:element name="arguments" minOccurs="0">
<xs:complexType>
<xs:group ref="argumentsGroup"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="class" type="xs:string" use="required"/>
<xs:attribute name="file" type="xs:anyURI"/>
</xs:complexType>
<xs:complexType name="arrayType">
<xs:sequence>
<xs:element name="element" type="argumentType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="argumentType">
<xs:group ref="argumentChoice"/>
<xs:attribute name="key" use="required"/>
</xs:complexType>
<xs:group name="argumentsGroup">
<xs:sequence>
<xs:element name="array" type="arrayType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="integer" type="xs:integer" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="string" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="double" type="xs:double" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="null" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="object" type="objectType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="file" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="directory" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:group name="argumentChoice">
<xs:choice>
<xs:element name="array" type="arrayType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="integer" type="xs:integer" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="string" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="double" type="xs:double" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="null" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="object" type="objectType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="file" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="directory" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded"/>
</xs:choice>
</xs:group>
<xs:complexType name="loggersType">
<xs:sequence>
<xs:element name="log" type="loggerType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="loggerType">
<xs:attribute name="type">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="coverage-html"/>
<xs:enumeration value="coverage-text"/>
<xs:enumeration value="coverage-clover"/>
<xs:enumeration value="coverage-crap4j"/>
<xs:enumeration value="coverage-xml"/>
<xs:enumeration value="json"/>
<xs:enumeration value="plain"/>
<xs:enumeration value="tap"/>
<xs:enumeration value="junit"/>
<xs:enumeration value="testdox-html"/>
<xs:enumeration value="testdox-text"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="target" type="xs:anyURI"/>
<xs:attribute name="lowUpperBound" type="xs:nonNegativeInteger" default="35"/>
<xs:attribute name="highLowerBound" type="xs:nonNegativeInteger" default="70"/>
<xs:attribute name="logIncompleteSkipped" type="xs:boolean" default="false"/>
<xs:attribute name="showUncoveredFiles" type="xs:boolean" default="false"/>
<xs:attribute name="threshold" type="xs:nonNegativeInteger" default="30"/>
</xs:complexType>
<xs:group name="pathGroup">
<xs:sequence>
<xs:element name="directory" type="directoryFilterType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="file" type="fileFilterType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:complexType name="directoryFilterType">
<xs:simpleContent>
<xs:extension base="xs:anyURI">
<xs:attribute type="xs:string" name="suffix" default="Test.php"/>
<xs:attributeGroup ref="phpVersionGroup"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:complexType name="fileFilterType">
<xs:simpleContent>
<xs:extension base="xs:anyURI">
<xs:attributeGroup ref="phpVersionGroup"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:attributeGroup name="phpVersionGroup">
<xs:attribute name="phpVersion" type="xs:string" default="5.3.0"/>
<xs:attribute name="phpVersionOperator" type="xs:string" default="&gt;="/>
</xs:attributeGroup>
<xs:complexType name="phpType">
<xs:sequence>
<xs:choice maxOccurs="unbounded">
<xs:element name="includePath" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="ini" type="namedValueType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="const" type="namedValueType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="var" type="namedValueType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="env" type="namedValueType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="post" type="namedValueType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="get" type="namedValueType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="cookie" type="namedValueType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="server" type="namedValueType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="files" type="namedValueType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="request" type="namedValueType" minOccurs="0" maxOccurs="unbounded"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
<xs:complexType name="namedValueType">
<xs:attribute name="name" use="required" type="xs:string"/>
<xs:attribute name="value" use="required" type="xs:anySimpleType"/>
</xs:complexType>
<xs:complexType name="phpUnitType">
<xs:annotation>
<xs:documentation>The main type specifying the document structure</xs:documentation>
</xs:annotation>
<xs:group ref="configGroup"/>
<xs:attributeGroup ref="configAttributeGroup"/>
</xs:complexType>
<xs:attributeGroup name="configAttributeGroup">
<xs:attribute name="backupGlobals" type="xs:boolean" default="true"/>
<xs:attribute name="backupStaticAttributes" type="xs:boolean" default="false"/>
<xs:attribute name="bootstrap" type="xs:anyURI"/>
<xs:attribute name="cacheTokens" type="xs:boolean"/>
<xs:attribute name="colors" type="xs:boolean" default="false"/>
<xs:attribute name="columns" type="xs:integer" default="80"/>
<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"/>
<xs:attribute name="forceCoversAnnotation" type="xs:boolean" default="false"/>
<xs:attribute name="mapTestClassNameToCoveredClassName" type="xs:boolean" default="false"/>
<xs:attribute name="printerClass" type="xs:string" default="PHPUnit_TextUI_ResultPrinter"/>
<xs:attribute name="printerFile" type="xs:anyURI"/>
<xs:attribute name="processIsolation" type="xs:boolean" default="false"/>
<xs:attribute name="stopOnError" type="xs:boolean" default="false"/>
<xs:attribute name="stopOnFailure" type="xs:boolean" default="false"/>
<xs:attribute name="stopOnIncomplete" type="xs:boolean" default="false"/>
<xs:attribute name="stopOnRisky" type="xs:boolean" default="false"/>
<xs:attribute name="stopOnSkipped" type="xs:boolean" default="false"/>
<xs:attribute name="beStrictAboutTestsThatDoNotTestAnything" type="xs:boolean" default="false"/>
<xs:attribute name="beStrictAboutOutputDuringTests" type="xs:boolean" default="false"/>
<xs:attribute name="beStrictAboutTestSize" type="xs:boolean" default="false"/>
<xs:attribute name="beStrictAboutTodoAnnotatedTests" type="xs:boolean" default="false"/>
<xs:attribute name="beStrictAboutChangesToGlobalState" type="xs:boolean" default="false"/>
<xs:attribute name="checkForUnintentionallyCoveredCode" type="xs:boolean" default="false"/>
<xs:attribute name="strict" type="xs:boolean" default="false"/>
<xs:attribute name="testSuiteLoaderClass" type="xs:string" default="PHPUnit_Runner_StandardTestSuiteLoader"/>
<xs:attribute name="testSuiteLoaderFile" type="xs:anyURI"/>
<xs:attribute name="timeoutForSmallTests" type="xs:integer" default="1"/>
<xs:attribute name="timeoutForMediumTests" type="xs:integer" default="10"/>
<xs:attribute name="timeoutForLargeTests" type="xs:integer" default="60"/>
<xs:attribute name="verbose" type="xs:boolean" default="false"/>
<xs:attribute name="stderr" type="xs:boolean" default="false"/>
</xs:attributeGroup>
<xs:group name="configGroup">
<xs:all>
<xs:element ref="testSuiteFacet" minOccurs="0"/>
<xs:element name="groups" type="groupsType" minOccurs="0"/>
<xs:element name="filter" type="filtersType" minOccurs="0"/>
<xs:element name="logging" type="loggersType" minOccurs="0"/>
<xs:element name="listeners" type="listenersType" minOccurs="0"/>
<xs:element name="php" type="phpType" minOccurs="0"/>
<xs:element name="selenium" type="seleniumType" minOccurs="0"/>
</xs:all>
</xs:group>
<xs:complexType name="seleniumType">
<xs:sequence>
<xs:element name="browser" type="browserType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="browserType">
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="browser" type="xs:string"/>
<xs:attribute name="host" type="xs:anyURI"/>
<xs:attribute name="port" type="xs:nonNegativeInteger"/>
<xs:attribute name="timeout" type="xs:nonNegativeInteger"/>
</xs:complexType>
<xs:element name="testSuiteFacet" abstract="true"/>
<xs:element name="testsuite" type="testSuiteType" substitutionGroup="testSuiteFacet"/>
<xs:element name="testsuites" type="testSuitesType" substitutionGroup="testSuiteFacet"/>
<xs:complexType name="testSuitesType">
<xs:sequence>
<xs:element name="testsuite" type="testSuiteType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="testSuiteType">
<xs:sequence>
<xs:group ref="pathGroup"/>
<xs:element name="exclude" type="xs:anyURI" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
</xs:schema>

View file

@ -0,0 +1,18 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Marker interface for PHPUnit exceptions.
*
* @since Interface available since Release 4.0.0
*/
interface PHPUnit_Exception
{
}

View file

@ -0,0 +1,60 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* We have a TestSuite object A.
* In TestSuite object A we have Tests tagged with @group.
* We want a TestSuite object B that contains TestSuite objects C, D, ...
* for the Tests tagged with @group C, @group D, ...
* Running the Tests from TestSuite object B results in Tests tagged with both
*
* @group C and @group D in TestSuite object A to be run twice .
*
* <code>
* $suite = new PHPUnit_Extensions_GroupTestSuite($A, array('C', 'D'));
* </code>
*
* @since Class available since Release 3.3.0
*/
class PHPUnit_Extensions_GroupTestSuite extends PHPUnit_Framework_TestSuite
{
public function __construct(PHPUnit_Framework_TestSuite $suite, array $groups)
{
$groupSuites = array();
$name = $suite->getName();
foreach ($groups as $group) {
$groupSuites[$group] = new PHPUnit_Framework_TestSuite($name . ' - ' . $group);
$this->addTest($groupSuites[$group]);
}
$tests = new RecursiveIteratorIterator(
new PHPUnit_Util_TestSuiteIterator($suite),
RecursiveIteratorIterator::LEAVES_ONLY
);
foreach ($tests as $test) {
if ($test instanceof PHPUnit_Framework_TestCase) {
$testGroups = PHPUnit_Util_Test::getGroups(
get_class($test),
$test->getName(false)
);
foreach ($groups as $group) {
foreach ($testGroups as $testGroup) {
if ($group == $testGroup) {
$groupSuites[$group]->addTest($test);
}
}
}
}
}
}
}

View file

@ -0,0 +1,241 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Runner for PHPT test cases.
*
* @since Class available since Release 3.1.4
*/
class PHPUnit_Extensions_PhptTestCase implements PHPUnit_Framework_Test, PHPUnit_Framework_SelfDescribing
{
/**
* @var string
*/
private $filename;
/**
* @var array
*/
private $settings = array(
'allow_url_fopen=1',
'auto_append_file=',
'auto_prepend_file=',
'disable_functions=',
'display_errors=1',
'docref_root=',
'docref_ext=.html',
'error_append_string=',
'error_prepend_string=',
'error_reporting=-1',
'html_errors=0',
'log_errors=0',
'magic_quotes_runtime=0',
'output_handler=',
'open_basedir=',
'output_buffering=Off',
'report_memleaks=0',
'report_zend_debug=0',
'safe_mode=0',
'track_errors=1',
'xdebug.default_enable=0'
);
/**
* Constructs a test case with the given filename.
*
* @param string $filename
*
* @throws PHPUnit_Framework_Exception
*/
public function __construct($filename)
{
if (!is_string($filename)) {
throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'string');
}
if (!is_file($filename)) {
throw new PHPUnit_Framework_Exception(
sprintf(
'File "%s" does not exist.',
$filename
)
);
}
$this->filename = $filename;
}
/**
* Counts the number of test cases executed by run(TestResult result).
*
* @return int
*/
public function count()
{
return 1;
}
/**
* Runs a test and collects its result in a TestResult instance.
*
* @param PHPUnit_Framework_TestResult $result
*
* @return PHPUnit_Framework_TestResult
*/
public function run(PHPUnit_Framework_TestResult $result = null)
{
$sections = $this->parse();
$code = $this->render($sections['FILE']);
if ($result === null) {
$result = new PHPUnit_Framework_TestResult;
}
$php = PHPUnit_Util_PHP::factory();
$skip = false;
$time = 0;
$settings = $this->settings;
$result->startTest($this);
if (isset($sections['INI'])) {
$settings = array_merge($settings, $this->parseIniSection($sections['INI']));
}
if (isset($sections['SKIPIF'])) {
$jobResult = $php->runJob($sections['SKIPIF'], $settings);
if (!strncasecmp('skip', ltrim($jobResult['stdout']), 4)) {
if (preg_match('/^\s*skip\s*(.+)\s*/i', $jobResult['stdout'], $message)) {
$message = substr($message[1], 2);
} else {
$message = '';
}
$result->addFailure($this, new PHPUnit_Framework_SkippedTestError($message), 0);
$skip = true;
}
}
if (!$skip) {
PHP_Timer::start();
$jobResult = $php->runJob($code, $settings);
$time = PHP_Timer::stop();
if (isset($sections['EXPECT'])) {
$assertion = 'assertEquals';
$expected = $sections['EXPECT'];
} else {
$assertion = 'assertStringMatchesFormat';
$expected = $sections['EXPECTF'];
}
$output = preg_replace('/\r\n/', "\n", trim($jobResult['stdout']));
$expected = preg_replace('/\r\n/', "\n", trim($expected));
try {
PHPUnit_Framework_Assert::$assertion($expected, $output);
} catch (PHPUnit_Framework_AssertionFailedError $e) {
$result->addFailure($this, $e, $time);
} catch (Throwable $t) {
$result->addError($this, $t, $time);
} catch (Exception $e) {
$result->addError($this, $e, $time);
}
}
$result->endTest($this, $time);
return $result;
}
/**
* Returns the name of the test case.
*
* @return string
*/
public function getName()
{
return $this->toString();
}
/**
* Returns a string representation of the test case.
*
* @return string
*/
public function toString()
{
return $this->filename;
}
/**
* @return array
*
* @throws PHPUnit_Framework_Exception
*/
private function parse()
{
$sections = array();
$section = '';
foreach (file($this->filename) as $line) {
if (preg_match('/^--([_A-Z]+)--/', $line, $result)) {
$section = $result[1];
$sections[$section] = '';
continue;
} elseif (empty($section)) {
throw new PHPUnit_Framework_Exception('Invalid PHPT file');
}
$sections[$section] .= $line;
}
if (!isset($sections['FILE']) ||
(!isset($sections['EXPECT']) && !isset($sections['EXPECTF']))) {
throw new PHPUnit_Framework_Exception('Invalid PHPT file');
}
return $sections;
}
/**
* @param string $code
*
* @return string
*/
private function render($code)
{
return str_replace(
array(
'__DIR__',
'__FILE__'
),
array(
"'" . dirname($this->filename) . "'",
"'" . $this->filename . "'"
),
$code
);
}
/**
* Parse --INI-- section key value pairs and return as array.
*
* @param string
*
* @return array
*/
protected function parseIniSection($content)
{
return preg_split('/\n|\r/', $content, -1, PREG_SPLIT_NO_EMPTY);
}
}

View file

@ -0,0 +1,40 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Suite for .phpt test cases.
*
* @since Class available since Release 3.1.4
*/
class PHPUnit_Extensions_PhptTestSuite extends PHPUnit_Framework_TestSuite
{
/**
* Constructs a new TestSuite for .phpt test cases.
*
* @param string $directory
*
* @throws PHPUnit_Framework_Exception
*/
public function __construct($directory)
{
if (is_string($directory) && is_dir($directory)) {
$this->setName($directory);
$facade = new File_Iterator_Facade;
$files = $facade->getFilesAsArray($directory, '.phpt');
foreach ($files as $file) {
$this->addTestFile($file);
}
} else {
throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'directory name');
}
}
}

View file

@ -0,0 +1,90 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* A Decorator that runs a test repeatedly.
*
* @since Class available since Release 2.0.0
*/
class PHPUnit_Extensions_RepeatedTest extends PHPUnit_Extensions_TestDecorator
{
/**
* @var bool
*/
protected $processIsolation = false;
/**
* @var int
*/
protected $timesRepeat = 1;
/**
* @param PHPUnit_Framework_Test $test
* @param int $timesRepeat
* @param bool $processIsolation
*
* @throws PHPUnit_Framework_Exception
*/
public function __construct(PHPUnit_Framework_Test $test, $timesRepeat = 1, $processIsolation = false)
{
parent::__construct($test);
if (is_integer($timesRepeat) &&
$timesRepeat >= 0) {
$this->timesRepeat = $timesRepeat;
} else {
throw PHPUnit_Util_InvalidArgumentHelper::factory(
2,
'positive integer'
);
}
$this->processIsolation = $processIsolation;
}
/**
* Counts the number of test cases that
* will be run by this test.
*
* @return int
*/
public function count()
{
return $this->timesRepeat * count($this->test);
}
/**
* Runs the decorated test and collects the
* result in a TestResult.
*
* @param PHPUnit_Framework_TestResult $result
*
* @return PHPUnit_Framework_TestResult
*
* @throws PHPUnit_Framework_Exception
*/
public function run(PHPUnit_Framework_TestResult $result = null)
{
if ($result === null) {
$result = $this->createResult();
}
//@codingStandardsIgnoreStart
for ($i = 0; $i < $this->timesRepeat && !$result->shouldStop(); $i++) {
//@codingStandardsIgnoreEnd
if ($this->test instanceof PHPUnit_Framework_TestSuite) {
$this->test->setRunTestInSeparateProcess($this->processIsolation);
}
$this->test->run($result);
}
return $result;
}
}

View file

@ -0,0 +1,109 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* A Decorator for Tests.
*
* Use TestDecorator as the base class for defining new
* test decorators. Test decorator subclasses can be introduced
* to add behaviour before or after a test is run.
*
* @since Class available since Release 2.0.0
*/
class PHPUnit_Extensions_TestDecorator extends PHPUnit_Framework_Assert implements PHPUnit_Framework_Test, PHPUnit_Framework_SelfDescribing
{
/**
* The Test to be decorated.
*
* @var object
*/
protected $test = null;
/**
* Constructor.
*
* @param PHPUnit_Framework_Test $test
*/
public function __construct(PHPUnit_Framework_Test $test)
{
$this->test = $test;
}
/**
* Returns a string representation of the test.
*
* @return string
*/
public function toString()
{
return $this->test->toString();
}
/**
* Runs the test and collects the
* result in a TestResult.
*
* @param PHPUnit_Framework_TestResult $result
*/
public function basicRun(PHPUnit_Framework_TestResult $result)
{
$this->test->run($result);
}
/**
* Counts the number of test cases that
* will be run by this test.
*
* @return int
*/
public function count()
{
return count($this->test);
}
/**
* Creates a default TestResult object.
*
* @return PHPUnit_Framework_TestResult
*/
protected function createResult()
{
return new PHPUnit_Framework_TestResult;
}
/**
* Returns the test to be run.
*
* @return PHPUnit_Framework_Test
*/
public function getTest()
{
return $this->test;
}
/**
* Runs the decorated test and collects the
* result in a TestResult.
*
* @param PHPUnit_Framework_TestResult $result
*
* @return PHPUnit_Framework_TestResult
*/
public function run(PHPUnit_Framework_TestResult $result = null)
{
if ($result === null) {
$result = $this->createResult();
}
$this->basicRun($result);
return $result;
}
}

View file

@ -0,0 +1,204 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Base class for test listeners that interact with an issue tracker.
*
* @since Class available since Release 3.4.0
*/
abstract class PHPUnit_Extensions_TicketListener implements PHPUnit_Framework_TestListener
{
/**
* @var array
*/
protected $ticketCounts = array();
/**
* @var bool
*/
protected $ran = false;
/**
* An error occurred.
*
* @param PHPUnit_Framework_Test $test
* @param Exception $e
* @param float $time
*/
public function addError(PHPUnit_Framework_Test $test, Exception $e, $time)
{
}
/**
* A failure occurred.
*
* @param PHPUnit_Framework_Test $test
* @param PHPUnit_Framework_AssertionFailedError $e
* @param float $time
*/
public function addFailure(PHPUnit_Framework_Test $test, PHPUnit_Framework_AssertionFailedError $e, $time)
{
}
/**
* Incomplete test.
*
* @param PHPUnit_Framework_Test $test
* @param Exception $e
* @param float $time
*/
public function addIncompleteTest(PHPUnit_Framework_Test $test, Exception $e, $time)
{
}
/**
* Risky test.
*
* @param PHPUnit_Framework_Test $test
* @param Exception $e
* @param float $time
*
* @since Method available since Release 4.0.0
*/
public function addRiskyTest(PHPUnit_Framework_Test $test, Exception $e, $time)
{
}
/**
* Skipped test.
*
* @param PHPUnit_Framework_Test $test
* @param Exception $e
* @param float $time
*
* @since Method available since Release 3.0.0
*/
public function addSkippedTest(PHPUnit_Framework_Test $test, Exception $e, $time)
{
}
/**
* A test suite started.
*
* @param PHPUnit_Framework_TestSuite $suite
*
* @since Method available since Release 2.2.0
*/
public function startTestSuite(PHPUnit_Framework_TestSuite $suite)
{
}
/**
* A test suite ended.
*
* @param PHPUnit_Framework_TestSuite $suite
*
* @since Method available since Release 2.2.0
*/
public function endTestSuite(PHPUnit_Framework_TestSuite $suite)
{
}
/**
* A test started.
*
* @param PHPUnit_Framework_Test $test
*/
public function startTest(PHPUnit_Framework_Test $test)
{
if (!$test instanceof PHPUnit_Framework_Warning) {
if ($this->ran) {
return;
}
$name = $test->getName(false);
$tickets = PHPUnit_Util_Test::getTickets(get_class($test), $name);
foreach ($tickets as $ticket) {
$this->ticketCounts[$ticket][$name] = 1;
}
$this->ran = true;
}
}
/**
* A test ended.
*
* @param PHPUnit_Framework_Test $test
* @param float $time
*/
public function endTest(PHPUnit_Framework_Test $test, $time)
{
if (!$test instanceof PHPUnit_Framework_Warning) {
if ($test->getStatus() == PHPUnit_Runner_BaseTestRunner::STATUS_PASSED) {
$ifStatus = array('assigned', 'new', 'reopened');
$newStatus = 'closed';
$message = 'Automatically closed by PHPUnit (test passed).';
$resolution = 'fixed';
$cumulative = true;
} elseif ($test->getStatus() == PHPUnit_Runner_BaseTestRunner::STATUS_FAILURE) {
$ifStatus = array('closed');
$newStatus = 'reopened';
$message = 'Automatically reopened by PHPUnit (test failed).';
$resolution = '';
$cumulative = false;
} else {
return;
}
$name = $test->getName(false);
$tickets = PHPUnit_Util_Test::getTickets(get_class($test), $name);
foreach ($tickets as $ticket) {
// Remove this test from the totals (if it passed).
if ($test->getStatus() == PHPUnit_Runner_BaseTestRunner::STATUS_PASSED) {
unset($this->ticketCounts[$ticket][$name]);
}
// Only close tickets if ALL referenced cases pass
// but reopen tickets if a single test fails.
if ($cumulative) {
// Determine number of to-pass tests:
if (count($this->ticketCounts[$ticket]) > 0) {
// There exist remaining test cases with this reference.
$adjustTicket = false;
} else {
// No remaining tickets, go ahead and adjust.
$adjustTicket = true;
}
} else {
$adjustTicket = true;
}
$ticketInfo = $this->getTicketInfo($ticket);
if ($adjustTicket && in_array($ticketInfo['status'], $ifStatus)) {
$this->updateTicket($ticket, $newStatus, $message, $resolution);
}
}
}
}
/**
* @param mixed $ticketId
*
* @return mixed
*/
abstract protected function getTicketInfo($ticketId = null);
/**
* @param string $ticketId
* @param string $newStatus
* @param string $message
* @param string $resolution
*/
abstract protected function updateTicket($ticketId, $newStatus, $message, $resolution);
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,27 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Thrown when an assertion failed.
*
* @since Class available since Release 2.0.0
*/
class PHPUnit_Framework_AssertionFailedError extends PHPUnit_Framework_Exception implements PHPUnit_Framework_SelfDescribing
{
/**
* Wrapper for getMessage() which is declared as final.
*
* @return string
*/
public function toString()
{
return $this->getMessage();
}
}

View file

@ -0,0 +1,55 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* An empty Listener that can be extended to implement TestListener
* with just a few lines of code.
*
* @see PHPUnit_Framework_TestListener for documentation on the API methods.
* @since Class available since Release 4.0.0
*/
abstract class PHPUnit_Framework_BaseTestListener implements PHPUnit_Framework_TestListener
{
public function addError(PHPUnit_Framework_Test $test, Exception $e, $time)
{
}
public function addFailure(PHPUnit_Framework_Test $test, PHPUnit_Framework_AssertionFailedError $e, $time)
{
}
public function addIncompleteTest(PHPUnit_Framework_Test $test, Exception $e, $time)
{
}
public function addRiskyTest(PHPUnit_Framework_Test $test, Exception $e, $time)
{
}
public function addSkippedTest(PHPUnit_Framework_Test $test, Exception $e, $time)
{
}
public function startTestSuite(PHPUnit_Framework_TestSuite $suite)
{
}
public function endTestSuite(PHPUnit_Framework_TestSuite $suite)
{
}
public function startTest(PHPUnit_Framework_Test $test)
{
}
public function endTest(PHPUnit_Framework_Test $test, $time)
{
}
}

View file

@ -0,0 +1,16 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* @since Class available since Release 4.0.0
*/
class PHPUnit_Framework_CodeCoverageException extends PHPUnit_Framework_Exception
{
}

View file

@ -0,0 +1,153 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
use SebastianBergmann\Exporter\Exporter;
/**
* Abstract base class for constraints. which are placed upon any value.
*
* @since Interface available since Release 3.0.0
*/
abstract class PHPUnit_Framework_Constraint implements Countable, PHPUnit_Framework_SelfDescribing
{
protected $exporter;
public function __construct()
{
$this->exporter = new Exporter;
}
/**
* Evaluates the constraint for parameter $other
*
* If $returnResult is set to false (the default), an exception is thrown
* in case of a failure. null is returned otherwise.
*
* If $returnResult is true, the result of the evaluation is returned as
* a boolean value instead: true in case of success, false in case of a
* failure.
*
* @param mixed $other Value or object to evaluate.
* @param string $description Additional information about the test
* @param bool $returnResult Whether to return a result or throw an exception
*
* @return mixed
*
* @throws PHPUnit_Framework_ExpectationFailedException
*/
public function evaluate($other, $description = '', $returnResult = false)
{
$success = false;
if ($this->matches($other)) {
$success = true;
}
if ($returnResult) {
return $success;
}
if (!$success) {
$this->fail($other, $description);
}
}
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* This method can be overridden to implement the evaluation algorithm.
*
* @param mixed $other Value or object to evaluate.
*
* @return bool
*/
protected function matches($other)
{
return false;
}
/**
* Counts the number of constraint elements.
*
* @return int
*
* @since Method available since Release 3.4.0
*/
public function count()
{
return 1;
}
/**
* 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 SebastianBergmann\Comparator\ComparisonFailure $comparisonFailure
*
* @throws PHPUnit_Framework_ExpectationFailedException
*/
protected function fail($other, $description, SebastianBergmann\Comparator\ComparisonFailure $comparisonFailure = null)
{
$failureDescription = sprintf(
'Failed asserting that %s.',
$this->failureDescription($other)
);
$additionalFailureDescription = $this->additionalFailureDescription($other);
if ($additionalFailureDescription) {
$failureDescription .= "\n" . $additionalFailureDescription;
}
if (!empty($description)) {
$failureDescription = $description . "\n" . $failureDescription;
}
throw new PHPUnit_Framework_ExpectationFailedException(
$failureDescription,
$comparisonFailure
);
}
/**
* Return additional failure description where needed
*
* The function can be overridden to provide additional failure
* information like a diff
*
* @param mixed $other Evaluated value or object.
*
* @return string
*/
protected function additionalFailureDescription($other)
{
return '';
}
/**
* Returns the description of the failure
*
* The beginning of failure messages is "Failed asserting that" in most
* cases. This method should return the second part of that sentence.
*
* To provide additional failure information additionalFailureDescription
* can be used.
*
* @param mixed $other Evaluated value or object.
*
* @return string
*/
protected function failureDescription($other)
{
return $this->exporter->export($other) . ' ' . $this->toString();
}
}

View file

@ -0,0 +1,125 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Logical AND.
*
* @since Class available since Release 3.0.0
*/
class PHPUnit_Framework_Constraint_And extends PHPUnit_Framework_Constraint
{
/**
* @var PHPUnit_Framework_Constraint[]
*/
protected $constraints = array();
/**
* @var PHPUnit_Framework_Constraint
*/
protected $lastConstraint = null;
/**
* @param PHPUnit_Framework_Constraint[] $constraints
*
* @throws PHPUnit_Framework_Exception
*/
public function setConstraints(array $constraints)
{
$this->constraints = array();
foreach ($constraints as $constraint) {
if (!($constraint instanceof PHPUnit_Framework_Constraint)) {
throw new PHPUnit_Framework_Exception(
'All parameters to ' . __CLASS__ .
' must be a constraint object.'
);
}
$this->constraints[] = $constraint;
}
}
/**
* Evaluates the constraint for parameter $other
*
* If $returnResult is set to false (the default), an exception is thrown
* in case of a failure. null is returned otherwise.
*
* If $returnResult is true, the result of the evaluation is returned as
* a boolean value instead: true in case of success, false in case of a
* failure.
*
* @param mixed $other Value or object to evaluate.
* @param string $description Additional information about the test
* @param bool $returnResult Whether to return a result or throw an exception
*
* @return mixed
*
* @throws PHPUnit_Framework_ExpectationFailedException
*/
public function evaluate($other, $description = '', $returnResult = false)
{
$success = true;
$constraint = null;
foreach ($this->constraints as $constraint) {
if (!$constraint->evaluate($other, $description, true)) {
$success = false;
break;
}
}
if ($returnResult) {
return $success;
}
if (!$success) {
$this->fail($other, $description);
}
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
$text = '';
foreach ($this->constraints as $key => $constraint) {
if ($key > 0) {
$text .= ' and ';
}
$text .= $constraint->toString();
}
return $text;
}
/**
* Counts the number of constraint elements.
*
* @return int
*
* @since Method available since Release 3.4.0
*/
public function count()
{
$count = 0;
foreach ($this->constraints as $constraint) {
$count += count($constraint);
}
return $count;
}
}

View file

@ -0,0 +1,82 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Constraint that asserts that the array it is evaluated for has a given key.
*
* Uses array_key_exists() to check if the key is found in the input array, if
* not found the evaluation fails.
*
* The array key is passed in the constructor.
*
* @since Class available since Release 3.0.0
*/
class PHPUnit_Framework_Constraint_ArrayHasKey extends PHPUnit_Framework_Constraint
{
/**
* @var int|string
*/
protected $key;
/**
* @param int|string $key
*/
public function __construct($key)
{
parent::__construct();
$this->key = $key;
}
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* @param mixed $other Value or object to evaluate.
*
* @return bool
*/
protected function matches($other)
{
if (is_array($other)) {
return array_key_exists($this->key, $other);
}
if ($other instanceof ArrayAccess) {
return $other->offsetExists($this->key);
}
return false;
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
return 'has the key ' . $this->exporter->export($this->key);
}
/**
* Returns the description of the failure
*
* The beginning of failure messages is "Failed asserting that" in most
* cases. This method should return the second part of that sentence.
*
* @param mixed $other Evaluated value or object.
*
* @return string
*/
protected function failureDescription($other)
{
return 'an array ' . $this->toString();
}
}

View file

@ -0,0 +1,85 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Constraint that asserts that the array it is evaluated for has a specified subset.
*
* Uses array_replace_recursive() to check if a key value subset is part of the
* subject array.
*
* @since Class available since Release 4.4.0
*/
class PHPUnit_Framework_Constraint_ArraySubset extends PHPUnit_Framework_Constraint
{
/**
* @var array|ArrayAccess
*/
protected $subset;
/**
* @var bool
*/
protected $strict;
/**
* @param array|ArrayAccess $subset
* @param bool $strict Check for object identity
*/
public function __construct($subset, $strict = false)
{
parent::__construct();
$this->strict = $strict;
$this->subset = $subset;
}
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* @param array|ArrayAccess $other Array or ArrayAccess object to evaluate.
*
* @return bool
*/
protected function matches($other)
{
$patched = array_replace_recursive($other, $this->subset);
if ($this->strict) {
return $other === $patched;
} else {
return $other == $patched;
}
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
return 'has the subset ' . $this->exporter->export($this->subset);
}
/**
* Returns the description of the failure
*
* The beginning of failure messages is "Failed asserting that" in most
* cases. This method should return the second part of that sentence.
*
* @param mixed $other Evaluated value or object.
*
* @return string
*/
protected function failureDescription($other)
{
return 'an array ' . $this->toString();
}
}

View file

@ -0,0 +1,87 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* @since Class available since Release 3.1.0
*/
class PHPUnit_Framework_Constraint_Attribute extends PHPUnit_Framework_Constraint_Composite
{
/**
* @var string
*/
protected $attributeName;
/**
* @param PHPUnit_Framework_Constraint $constraint
* @param string $attributeName
*/
public function __construct(PHPUnit_Framework_Constraint $constraint, $attributeName)
{
parent::__construct($constraint);
$this->attributeName = $attributeName;
}
/**
* Evaluates the constraint for parameter $other
*
* If $returnResult is set to false (the default), an exception is thrown
* in case of a failure. null is returned otherwise.
*
* If $returnResult is true, the result of the evaluation is returned as
* a boolean value instead: true in case of success, false in case of a
* failure.
*
* @param mixed $other Value or object to evaluate.
* @param string $description Additional information about the test
* @param bool $returnResult Whether to return a result or throw an exception
*
* @return mixed
*
* @throws PHPUnit_Framework_ExpectationFailedException
*/
public function evaluate($other, $description = '', $returnResult = false)
{
return parent::evaluate(
PHPUnit_Framework_Assert::readAttribute(
$other,
$this->attributeName
),
$description,
$returnResult
);
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
return 'attribute "' . $this->attributeName . '" ' .
$this->innerConstraint->toString();
}
/**
* Returns the description of the failure
*
* The beginning of failure messages is "Failed asserting that" in most
* cases. This method should return the second part of that sentence.
*
* @param mixed $other Evaluated value or object.
*
* @return string
*/
protected function failureDescription($other)
{
return $this->toString();
}
}

View file

@ -0,0 +1,59 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Constraint that evaluates against a specified closure.
*/
class PHPUnit_Framework_Constraint_Callback extends PHPUnit_Framework_Constraint
{
private $callback;
/**
* @param callable $callback
*
* @throws PHPUnit_Framework_Exception
*/
public function __construct($callback)
{
if (!is_callable($callback)) {
throw PHPUnit_Util_InvalidArgumentHelper::factory(
1,
'callable'
);
}
parent::__construct();
$this->callback = $callback;
}
/**
* Evaluates the constraint for parameter $value. Returns true if the
* constraint is met, false otherwise.
*
* @param mixed $other Value or object to evaluate.
*
* @return bool
*/
protected function matches($other)
{
return call_user_func($this->callback, $other);
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
return 'is accepted by specified callback';
}
}

View file

@ -0,0 +1,82 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Constraint that asserts that the class it is evaluated for has a given
* attribute.
*
* The attribute name is passed in the constructor.
*
* @since Class available since Release 3.1.0
*/
class PHPUnit_Framework_Constraint_ClassHasAttribute extends PHPUnit_Framework_Constraint
{
/**
* @var string
*/
protected $attributeName;
/**
* @param string $attributeName
*/
public function __construct($attributeName)
{
parent::__construct();
$this->attributeName = $attributeName;
}
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* @param mixed $other Value or object to evaluate.
*
* @return bool
*/
protected function matches($other)
{
$class = new ReflectionClass($other);
return $class->hasProperty($this->attributeName);
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
return sprintf(
'has attribute "%s"',
$this->attributeName
);
}
/**
* Returns the description of the failure
*
* The beginning of failure messages is "Failed asserting that" in most
* cases. This method should return the second part of that sentence.
*
* @param mixed $other Evaluated value or object.
*
* @return string
*/
protected function failureDescription($other)
{
return sprintf(
'%sclass "%s" %s',
is_object($other) ? 'object of ' : '',
is_object($other) ? get_class($other) : $other,
$this->toString()
);
}
}

View file

@ -0,0 +1,56 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Constraint that asserts that the class it is evaluated for has a given
* static attribute.
*
* The attribute name is passed in the constructor.
*
* @since Class available since Release 3.1.0
*/
class PHPUnit_Framework_Constraint_ClassHasStaticAttribute extends PHPUnit_Framework_Constraint_ClassHasAttribute
{
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* @param mixed $other Value or object to evaluate.
*
* @return bool
*/
protected function matches($other)
{
$class = new ReflectionClass($other);
if ($class->hasProperty($this->attributeName)) {
$attribute = $class->getProperty($this->attributeName);
return $attribute->isStatic();
} else {
return false;
}
}
/**
* Returns a string representation of the constraint.
*
* @return string
*
* @since Method available since Release 3.3.0
*/
public function toString()
{
return sprintf(
'has static attribute "%s"',
$this->attributeName
);
}
}

View file

@ -0,0 +1,70 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* @since Class available since Release 3.1.0
*/
abstract class PHPUnit_Framework_Constraint_Composite extends PHPUnit_Framework_Constraint
{
/**
* @var PHPUnit_Framework_Constraint
*/
protected $innerConstraint;
/**
* @param PHPUnit_Framework_Constraint $innerConstraint
*/
public function __construct(PHPUnit_Framework_Constraint $innerConstraint)
{
parent::__construct();
$this->innerConstraint = $innerConstraint;
}
/**
* Evaluates the constraint for parameter $other
*
* If $returnResult is set to false (the default), an exception is thrown
* in case of a failure. null is returned otherwise.
*
* If $returnResult is true, the result of the evaluation is returned as
* a boolean value instead: true in case of success, false in case of a
* failure.
*
* @param mixed $other Value or object to evaluate.
* @param string $description Additional information about the test
* @param bool $returnResult Whether to return a result or throw an exception
*
* @return mixed
*
* @throws PHPUnit_Framework_ExpectationFailedException
*/
public function evaluate($other, $description = '', $returnResult = false)
{
try {
return $this->innerConstraint->evaluate(
$other,
$description,
$returnResult
);
} catch (PHPUnit_Framework_ExpectationFailedException $e) {
$this->fail($other, $description);
}
}
/**
* Counts the number of constraint elements.
*
* @return int
*/
public function count()
{
return count($this->innerConstraint);
}
}

View file

@ -0,0 +1,104 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* @since Class available since Release 3.6.0
*/
class PHPUnit_Framework_Constraint_Count extends PHPUnit_Framework_Constraint
{
/**
* @var int
*/
protected $expectedCount = 0;
/**
* @param int $expected
*/
public function __construct($expected)
{
parent::__construct();
$this->expectedCount = $expected;
}
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* @param mixed $other
*
* @return bool
*/
protected function matches($other)
{
return $this->expectedCount === $this->getCountOf($other);
}
/**
* @param mixed $other
*
* @return bool
*/
protected function getCountOf($other)
{
if ($other instanceof Countable || is_array($other)) {
return count($other);
} elseif ($other instanceof Traversable) {
if ($other instanceof IteratorAggregate) {
$iterator = $other->getIterator();
} else {
$iterator = $other;
}
$key = $iterator->key();
$count = iterator_count($iterator);
// manually rewind $iterator to previous key, since iterator_count
// moves pointer
if ($key !== null) {
$iterator->rewind();
while ($iterator->valid() && $key !== $iterator->key()) {
$iterator->next();
}
}
return $count;
}
}
/**
* Returns the description of the failure
*
* The beginning of failure messages is "Failed asserting that" in most
* cases. This method should return the second part of that sentence.
*
* @param mixed $other Evaluated value or object.
*
* @return string
*/
protected function failureDescription($other)
{
return sprintf(
'actual size %d matches expected size %d',
$this->getCountOf($other),
$this->expectedCount
);
}
/**
* @return string
*/
public function toString()
{
return sprintf(
'count matches %d',
$this->expectedCount
);
}
}

View file

@ -0,0 +1,88 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* @since Class available since Release 3.6.6
*/
class PHPUnit_Framework_Constraint_Exception extends PHPUnit_Framework_Constraint
{
/**
* @var string
*/
protected $className;
/**
* @param string $className
*/
public function __construct($className)
{
parent::__construct();
$this->className = $className;
}
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* @param mixed $other Value or object to evaluate.
*
* @return bool
*/
protected function matches($other)
{
return $other instanceof $this->className;
}
/**
* Returns the description of the failure
*
* The beginning of failure messages is "Failed asserting that" in most
* cases. This method should return the second part of that sentence.
*
* @param mixed $other Evaluated value or object.
*
* @return string
*/
protected function failureDescription($other)
{
if ($other !== null) {
$message = '';
if ($other instanceof Exception) {
$message = '. Message was: "' . $other->getMessage() . '" at'
. "\n" . $other->getTraceAsString();
}
return sprintf(
'exception of type "%s" matches expected exception "%s"%s',
get_class($other),
$this->className,
$message
);
}
return sprintf(
'exception of type "%s" is thrown',
$this->className
);
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
return sprintf(
'exception of type "%s"',
$this->className
);
}
}

View file

@ -0,0 +1,69 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* @since Class available since Release 3.6.6
*/
class PHPUnit_Framework_Constraint_ExceptionCode extends PHPUnit_Framework_Constraint
{
/**
* @var int
*/
protected $expectedCode;
/**
* @param int $expected
*/
public function __construct($expected)
{
parent::__construct();
$this->expectedCode = $expected;
}
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* @param Exception $other
*
* @return bool
*/
protected function matches($other)
{
return (string) $other->getCode() == (string) $this->expectedCode;
}
/**
* Returns the description of the failure
*
* The beginning of failure messages is "Failed asserting that" in most
* cases. This method should return the second part of that sentence.
*
* @param mixed $other Evaluated value or object.
*
* @return string
*/
protected function failureDescription($other)
{
return sprintf(
'%s is equal to expected exception code %s',
$this->exporter->export($other->getCode()),
$this->exporter->export($this->expectedCode)
);
}
/**
* @return string
*/
public function toString()
{
return 'exception code is ';
}
}

View file

@ -0,0 +1,69 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* @since Class available since Release 3.6.6
*/
class PHPUnit_Framework_Constraint_ExceptionMessage extends PHPUnit_Framework_Constraint
{
/**
* @var int
*/
protected $expectedMessage;
/**
* @param string $expected
*/
public function __construct($expected)
{
parent::__construct();
$this->expectedMessage = $expected;
}
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* @param Exception $other
*
* @return bool
*/
protected function matches($other)
{
return strpos($other->getMessage(), $this->expectedMessage) !== false;
}
/**
* Returns the description of the failure
*
* The beginning of failure messages is "Failed asserting that" in most
* cases. This method should return the second part of that sentence.
*
* @param mixed $other Evaluated value or object.
*
* @return string
*/
protected function failureDescription($other)
{
return sprintf(
"exception message '%s' contains '%s'",
$other->getMessage(),
$this->expectedMessage
);
}
/**
* @return string
*/
public function toString()
{
return 'exception message contains ';
}
}

View file

@ -0,0 +1,77 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* @since Class available since Release 4.3.0
*/
class PHPUnit_Framework_Constraint_ExceptionMessageRegExp extends PHPUnit_Framework_Constraint
{
/**
* @var int
*/
protected $expectedMessageRegExp;
/**
* @param string $expected
*/
public function __construct($expected)
{
parent::__construct();
$this->expectedMessageRegExp = $expected;
}
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* @param Exception $other
*
* @return bool
*/
protected function matches($other)
{
$match = PHPUnit_Util_Regex::pregMatchSafe($this->expectedMessageRegExp, $other->getMessage());
if (false === $match) {
throw new PHPUnit_Framework_Exception(
"Invalid expected exception message regex given: '{$this->expectedMessageRegExp}'"
);
}
return 1 === $match;
}
/**
* Returns the description of the failure
*
* The beginning of failure messages is "Failed asserting that" in most
* cases. This method should return the second part of that sentence.
*
* @param mixed $other Evaluated value or object.
*
* @return string
*/
protected function failureDescription($other)
{
return sprintf(
"exception message '%s' matches '%s'",
$other->getMessage(),
$this->expectedMessageRegExp
);
}
/**
* @return string
*/
public function toString()
{
return 'exception message matches ';
}
}

View file

@ -0,0 +1,60 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Constraint that checks if the file(name) that it is evaluated for exists.
*
* The file path to check is passed as $other in evaluate().
*
* @since Class available since Release 3.0.0
*/
class PHPUnit_Framework_Constraint_FileExists extends PHPUnit_Framework_Constraint
{
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* @param mixed $other Value or object to evaluate.
*
* @return bool
*/
protected function matches($other)
{
return file_exists($other);
}
/**
* Returns the description of the failure
*
* The beginning of failure messages is "Failed asserting that" in most
* cases. This method should return the second part of that sentence.
*
* @param mixed $other Evaluated value or object.
*
* @return string
*/
protected function failureDescription($other)
{
return sprintf(
'file "%s" exists',
$other
);
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
return 'file exists';
}
}

View file

@ -0,0 +1,55 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Constraint that asserts that the value it is evaluated for is greater
* than a given value.
*
* @since Class available since Release 3.0.0
*/
class PHPUnit_Framework_Constraint_GreaterThan extends PHPUnit_Framework_Constraint
{
/**
* @var numeric
*/
protected $value;
/**
* @param numeric $value
*/
public function __construct($value)
{
parent::__construct();
$this->value = $value;
}
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* @param mixed $other Value or object to evaluate.
*
* @return bool
*/
protected function matches($other)
{
return $this->value < $other;
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
return 'is greater than ' . $this->exporter->export($this->value);
}
}

View file

@ -0,0 +1,62 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Constraint that accepts any input value.
*
* @since Class available since Release 3.0.0
*/
class PHPUnit_Framework_Constraint_IsAnything extends PHPUnit_Framework_Constraint
{
/**
* Evaluates the constraint for parameter $other
*
* If $returnResult is set to false (the default), an exception is thrown
* in case of a failure. null is returned otherwise.
*
* If $returnResult is true, the result of the evaluation is returned as
* a boolean value instead: true in case of success, false in case of a
* failure.
*
* @param mixed $other Value or object to evaluate.
* @param string $description Additional information about the test
* @param bool $returnResult Whether to return a result or throw an exception
*
* @return mixed
*
* @throws PHPUnit_Framework_ExpectationFailedException
*/
public function evaluate($other, $description = '', $returnResult = false)
{
return $returnResult ? true : null;
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
return 'is anything';
}
/**
* Counts the number of constraint elements.
*
* @return int
*
* @since Method available since Release 3.5.0
*/
public function count()
{
return 0;
}
}

View file

@ -0,0 +1,66 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Constraint that checks whether a variable is empty().
*
* @since Class available since Release 3.5.0
*/
class PHPUnit_Framework_Constraint_IsEmpty extends PHPUnit_Framework_Constraint
{
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* @param mixed $other Value or object to evaluate.
*
* @return bool
*/
protected function matches($other)
{
if ($other instanceof Countable) {
return count($other) === 0;
}
return empty($other);
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
return 'is empty';
}
/**
* Returns the description of the failure
*
* The beginning of failure messages is "Failed asserting that" in most
* cases. This method should return the second part of that sentence.
*
* @param mixed $other Evaluated value or object.
*
* @return string
*/
protected function failureDescription($other)
{
$type = gettype($other);
return sprintf(
'%s %s %s',
$type[0] == 'a' || $type[0] == 'o' ? 'an' : 'a',
$type,
$this->toString()
);
}
}

View file

@ -0,0 +1,179 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Constraint that checks if one value is equal to another.
*
* Equality is checked with PHP's == operator, the operator is explained in
* detail at {@url http://www.php.net/manual/en/types.comparisons.php}.
* Two values are equal if they have the same value disregarding type.
*
* The expected value is passed in the constructor.
*
* @since Class available since Release 3.0.0
*/
class PHPUnit_Framework_Constraint_IsEqual extends PHPUnit_Framework_Constraint
{
/**
* @var mixed
*/
protected $value;
/**
* @var float
*/
protected $delta = 0.0;
/**
* @var int
*/
protected $maxDepth = 10;
/**
* @var bool
*/
protected $canonicalize = false;
/**
* @var bool
*/
protected $ignoreCase = false;
/**
* @var SebastianBergmann\Comparator\ComparisonFailure
*/
protected $lastFailure;
/**
* @param mixed $value
* @param float $delta
* @param int $maxDepth
* @param bool $canonicalize
* @param bool $ignoreCase
*
* @throws PHPUnit_Framework_Exception
*/
public function __construct($value, $delta = 0.0, $maxDepth = 10, $canonicalize = false, $ignoreCase = false)
{
parent::__construct();
if (!is_numeric($delta)) {
throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'numeric');
}
if (!is_int($maxDepth)) {
throw PHPUnit_Util_InvalidArgumentHelper::factory(3, 'integer');
}
if (!is_bool($canonicalize)) {
throw PHPUnit_Util_InvalidArgumentHelper::factory(4, 'boolean');
}
if (!is_bool($ignoreCase)) {
throw PHPUnit_Util_InvalidArgumentHelper::factory(5, 'boolean');
}
$this->value = $value;
$this->delta = $delta;
$this->maxDepth = $maxDepth;
$this->canonicalize = $canonicalize;
$this->ignoreCase = $ignoreCase;
}
/**
* Evaluates the constraint for parameter $other
*
* If $returnResult is set to false (the default), an exception is thrown
* in case of a failure. null is returned otherwise.
*
* If $returnResult is true, the result of the evaluation is returned as
* a boolean value instead: true in case of success, false in case of a
* failure.
*
* @param mixed $other Value or object to evaluate.
* @param string $description Additional information about the test
* @param bool $returnResult Whether to return a result or throw an exception
*
* @return mixed
*
* @throws PHPUnit_Framework_ExpectationFailedException
*/
public function evaluate($other, $description = '', $returnResult = false)
{
// If $this->value and $other are identical, they are also equal.
// This is the most common path and will allow us to skip
// initialization of all the comparators.
if ($this->value === $other) {
return true;
}
$comparatorFactory = SebastianBergmann\Comparator\Factory::getInstance();
try {
$comparator = $comparatorFactory->getComparatorFor(
$this->value,
$other
);
$comparator->assertEquals(
$this->value,
$other,
$this->delta,
$this->canonicalize,
$this->ignoreCase
);
} catch (SebastianBergmann\Comparator\ComparisonFailure $f) {
if ($returnResult) {
return false;
}
throw new PHPUnit_Framework_ExpectationFailedException(
trim($description . "\n" . $f->getMessage()),
$f
);
}
return true;
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
$delta = '';
if (is_string($this->value)) {
if (strpos($this->value, "\n") !== false) {
return 'is equal to <text>';
} else {
return sprintf(
'is equal to <string:%s>',
$this->value
);
}
} else {
if ($this->delta != 0) {
$delta = sprintf(
' with delta <%F>',
$this->delta
);
}
return sprintf(
'is equal to %s%s',
$this->exporter->export($this->value),
$delta
);
}
}
}

View file

@ -0,0 +1,40 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Constraint that accepts false.
*
* @since Class available since Release 3.3.0
*/
class PHPUnit_Framework_Constraint_IsFalse extends PHPUnit_Framework_Constraint
{
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* @param mixed $other Value or object to evaluate.
*
* @return bool
*/
protected function matches($other)
{
return $other === false;
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
return 'is false';
}
}

View file

@ -0,0 +1,132 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Constraint that asserts that one value is identical to another.
*
* Identical check is performed with PHP's === operator, the operator is
* explained in detail at
* {@url http://www.php.net/manual/en/types.comparisons.php}.
* Two values are identical if they have the same value and are of the same
* type.
*
* The expected value is passed in the constructor.
*
* @since Class available since Release 3.0.0
*/
class PHPUnit_Framework_Constraint_IsIdentical extends PHPUnit_Framework_Constraint
{
/**
* @var float
*/
const EPSILON = 0.0000000001;
/**
* @var mixed
*/
protected $value;
/**
* @param mixed $value
*/
public function __construct($value)
{
parent::__construct();
$this->value = $value;
}
/**
* Evaluates the constraint for parameter $other
*
* If $returnResult is set to false (the default), an exception is thrown
* in case of a failure. null is returned otherwise.
*
* If $returnResult is true, the result of the evaluation is returned as
* a boolean value instead: true in case of success, false in case of a
* failure.
*
* @param mixed $other Value or object to evaluate.
* @param string $description Additional information about the test
* @param bool $returnResult Whether to return a result or throw an exception
*
* @return mixed
*
* @throws PHPUnit_Framework_ExpectationFailedException
*/
public function evaluate($other, $description = '', $returnResult = false)
{
if (is_double($this->value) && is_double($other) &&
!is_infinite($this->value) && !is_infinite($other) &&
!is_nan($this->value) && !is_nan($other)) {
$success = abs($this->value - $other) < self::EPSILON;
} else {
$success = $this->value === $other;
}
if ($returnResult) {
return $success;
}
if (!$success) {
$f = null;
// if both values are strings, make sure a diff is generated
if (is_string($this->value) && is_string($other)) {
$f = new SebastianBergmann\Comparator\ComparisonFailure(
$this->value,
$other,
$this->value,
$other
);
}
$this->fail($other, $description, $f);
}
}
/**
* Returns the description of the failure
*
* The beginning of failure messages is "Failed asserting that" in most
* cases. This method should return the second part of that sentence.
*
* @param mixed $other Evaluated value or object.
*
* @return string
*/
protected function failureDescription($other)
{
if (is_object($this->value) && is_object($other)) {
return 'two variables reference the same object';
}
if (is_string($this->value) && is_string($other)) {
return 'two strings are identical';
}
return parent::failureDescription($other);
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
if (is_object($this->value)) {
return 'is identical to an object of class "' .
get_class($this->value) . '"';
} else {
return 'is identical to ' .
$this->exporter->export($this->value);
}
}
}

View file

@ -0,0 +1,94 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Constraint that asserts that the object it is evaluated for is an instance
* of a given class.
*
* The expected class name is passed in the constructor.
*
* @since Class available since Release 3.0.0
*/
class PHPUnit_Framework_Constraint_IsInstanceOf extends PHPUnit_Framework_Constraint
{
/**
* @var string
*/
protected $className;
/**
* @param string $className
*/
public function __construct($className)
{
parent::__construct();
$this->className = $className;
}
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* @param mixed $other Value or object to evaluate.
*
* @return bool
*/
protected function matches($other)
{
return ($other instanceof $this->className);
}
/**
* Returns the description of the failure
*
* The beginning of failure messages is "Failed asserting that" in most
* cases. This method should return the second part of that sentence.
*
* @param mixed $other Evaluated value or object.
*
* @return string
*/
protected function failureDescription($other)
{
return sprintf(
'%s is an instance of %s "%s"',
$this->exporter->shortenedExport($other),
$this->getType(),
$this->className
);
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
return sprintf(
'is instance of %s "%s"',
$this->getType(),
$this->className
);
}
private function getType()
{
try {
$reflection = new ReflectionClass($this->className);
if ($reflection->isInterface()) {
return 'interface';
}
} catch (ReflectionException $e) {
}
return 'class';
}
}

View file

@ -0,0 +1,69 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Constraint that asserts that a string is valid JSON.
*
* @since Class available since Release 3.7.20
*/
class PHPUnit_Framework_Constraint_IsJson extends PHPUnit_Framework_Constraint
{
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* @param mixed $other Value or object to evaluate.
*
* @return bool
*/
protected function matches($other)
{
json_decode($other);
if (json_last_error()) {
return false;
}
return true;
}
/**
* Returns the description of the failure
*
* The beginning of failure messages is "Failed asserting that" in most
* cases. This method should return the second part of that sentence.
*
* @param mixed $other Evaluated value or object.
*
* @return string
*/
protected function failureDescription($other)
{
json_decode($other);
$error = PHPUnit_Framework_Constraint_JsonMatches_ErrorMessageProvider::determineJsonError(
json_last_error()
);
return sprintf(
'%s is valid JSON (%s)',
$this->exporter->shortenedExport($other),
$error
);
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
return 'is valid JSON';
}
}

View file

@ -0,0 +1,40 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Constraint that accepts null.
*
* @since Class available since Release 3.3.0
*/
class PHPUnit_Framework_Constraint_IsNull extends PHPUnit_Framework_Constraint
{
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* @param mixed $other Value or object to evaluate.
*
* @return bool
*/
protected function matches($other)
{
return $other === null;
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
return 'is null';
}
}

View file

@ -0,0 +1,40 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Constraint that accepts true.
*
* @since Class available since Release 3.3.0
*/
class PHPUnit_Framework_Constraint_IsTrue extends PHPUnit_Framework_Constraint
{
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* @param mixed $other Value or object to evaluate.
*
* @return bool
*/
protected function matches($other)
{
return $other === true;
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
return 'is true';
}
}

View file

@ -0,0 +1,143 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Constraint that asserts that the value it is evaluated for is of a
* specified type.
*
* The expected value is passed in the constructor.
*
* @since Class available since Release 3.0.0
*/
class PHPUnit_Framework_Constraint_IsType extends PHPUnit_Framework_Constraint
{
const TYPE_ARRAY = 'array';
const TYPE_BOOL = 'bool';
const TYPE_FLOAT = 'float';
const TYPE_INT = 'int';
const TYPE_NULL = 'null';
const TYPE_NUMERIC = 'numeric';
const TYPE_OBJECT = 'object';
const TYPE_RESOURCE = 'resource';
const TYPE_STRING = 'string';
const TYPE_SCALAR = 'scalar';
const TYPE_CALLABLE = 'callable';
/**
* @var array
*/
protected $types = array(
'array' => true,
'boolean' => true,
'bool' => true,
'double' => true,
'float' => true,
'integer' => true,
'int' => true,
'null' => true,
'numeric' => true,
'object' => true,
'real' => true,
'resource' => true,
'string' => true,
'scalar' => true,
'callable' => true
);
/**
* @var string
*/
protected $type;
/**
* @param string $type
*
* @throws PHPUnit_Framework_Exception
*/
public function __construct($type)
{
parent::__construct();
if (!isset($this->types[$type])) {
throw new PHPUnit_Framework_Exception(
sprintf(
'Type specified for PHPUnit_Framework_Constraint_IsType <%s> ' .
'is not a valid type.',
$type
)
);
}
$this->type = $type;
}
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* @param mixed $other Value or object to evaluate.
*
* @return bool
*/
protected function matches($other)
{
switch ($this->type) {
case 'numeric':
return is_numeric($other);
case 'integer':
case 'int':
return is_integer($other);
case 'double':
case 'float':
case 'real':
return is_float($other);
case 'string':
return is_string($other);
case 'boolean':
case 'bool':
return is_bool($other);
case 'null':
return is_null($other);
case 'array':
return is_array($other);
case 'object':
return is_object($other);
case 'resource':
return is_resource($other) || is_string(@get_resource_type($other));
case 'scalar':
return is_scalar($other);
case 'callable':
return is_callable($other);
}
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
return sprintf(
'is of type "%s"',
$this->type
);
}
}

View file

@ -0,0 +1,71 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Asserts whether or not two JSON objects are equal.
*
* @since Class available since Release 3.7.0
*/
class PHPUnit_Framework_Constraint_JsonMatches extends PHPUnit_Framework_Constraint
{
/**
* @var string
*/
protected $value;
/**
* Creates a new constraint.
*
* @param string $value
*/
public function __construct($value)
{
parent::__construct();
$this->value = $value;
}
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* This method can be overridden to implement the evaluation algorithm.
*
* @param mixed $other Value or object to evaluate.
*
* @return bool
*/
protected function matches($other)
{
$decodedOther = json_decode($other);
if (json_last_error()) {
return false;
}
$decodedValue = json_decode($this->value);
if (json_last_error()) {
return false;
}
return $decodedOther == $decodedValue;
}
/**
* Returns a string representation of the object.
*
* @return string
*/
public function toString()
{
return sprintf(
'matches JSON string "%s"',
$this->value
);
}
}

View file

@ -0,0 +1,69 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Provides human readable messages for each JSON error.
*
* @since Class available since Release 3.7.0
*/
class PHPUnit_Framework_Constraint_JsonMatches_ErrorMessageProvider
{
/**
* Translates JSON error to a human readable string.
*
* @param string $error
* @param string $prefix
*
* @return string
*/
public static function determineJsonError($error, $prefix = '')
{
switch ($error) {
case JSON_ERROR_NONE:
return;
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';
default:
return $prefix . 'Unknown error';
}
}
/**
* Translates a given type to a human readable message prefix.
*
* @param string $type
*
* @return string
*/
public static function translateTypeToPrefix($type)
{
switch (strtolower($type)) {
case 'expected':
$prefix = 'Expected value JSON decode error - ';
break;
case 'actual':
$prefix = 'Actual value JSON decode error - ';
break;
default:
$prefix = '';
break;
}
return $prefix;
}
}

View file

@ -0,0 +1,55 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Constraint that asserts that the value it is evaluated for is less than
* a given value.
*
* @since Class available since Release 3.0.0
*/
class PHPUnit_Framework_Constraint_LessThan extends PHPUnit_Framework_Constraint
{
/**
* @var numeric
*/
protected $value;
/**
* @param numeric $value
*/
public function __construct($value)
{
parent::__construct();
$this->value = $value;
}
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* @param mixed $other Value or object to evaluate.
*
* @return bool
*/
protected function matches($other)
{
return $this->value > $other;
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
return 'is less than ' . $this->exporter->export($this->value);
}
}

View file

@ -0,0 +1,160 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Logical NOT.
*
* @since Class available since Release 3.0.0
*/
class PHPUnit_Framework_Constraint_Not extends PHPUnit_Framework_Constraint
{
/**
* @var PHPUnit_Framework_Constraint
*/
protected $constraint;
/**
* @param PHPUnit_Framework_Constraint $constraint
*/
public function __construct($constraint)
{
parent::__construct();
if (!($constraint instanceof PHPUnit_Framework_Constraint)) {
$constraint = new PHPUnit_Framework_Constraint_IsEqual($constraint);
}
$this->constraint = $constraint;
}
/**
* @param string $string
*
* @return string
*/
public static function negate($string)
{
return str_replace(
array(
'contains ',
'exists',
'has ',
'is ',
'are ',
'matches ',
'starts with ',
'ends with ',
'reference ',
'not not '
),
array(
'does not contain ',
'does not exist',
'does not have ',
'is not ',
'are not ',
'does not match ',
'starts not with ',
'ends not with ',
'don\'t reference ',
'not '
),
$string
);
}
/**
* Evaluates the constraint for parameter $other
*
* If $returnResult is set to false (the default), an exception is thrown
* in case of a failure. null is returned otherwise.
*
* If $returnResult is true, the result of the evaluation is returned as
* a boolean value instead: true in case of success, false in case of a
* failure.
*
* @param mixed $other Value or object to evaluate.
* @param string $description Additional information about the test
* @param bool $returnResult Whether to return a result or throw an exception
*
* @return mixed
*
* @throws PHPUnit_Framework_ExpectationFailedException
*/
public function evaluate($other, $description = '', $returnResult = false)
{
$success = !$this->constraint->evaluate($other, $description, true);
if ($returnResult) {
return $success;
}
if (!$success) {
$this->fail($other, $description);
}
}
/**
* Returns the description of the failure
*
* The beginning of failure messages is "Failed asserting that" in most
* cases. This method should return the second part of that sentence.
*
* @param mixed $other Evaluated value or object.
*
* @return string
*/
protected function failureDescription($other)
{
switch (get_class($this->constraint)) {
case 'PHPUnit_Framework_Constraint_And':
case 'PHPUnit_Framework_Constraint_Not':
case 'PHPUnit_Framework_Constraint_Or':
return 'not( ' . $this->constraint->failureDescription($other) . ' )';
default:
return self::negate(
$this->constraint->failureDescription($other)
);
}
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
switch (get_class($this->constraint)) {
case 'PHPUnit_Framework_Constraint_And':
case 'PHPUnit_Framework_Constraint_Not':
case 'PHPUnit_Framework_Constraint_Or':
return 'not( ' . $this->constraint->toString() . ' )';
default:
return self::negate(
$this->constraint->toString()
);
}
}
/**
* Counts the number of constraint elements.
*
* @return int
*
* @since Method available since Release 3.4.0
*/
public function count()
{
return count($this->constraint);
}
}

View file

@ -0,0 +1,35 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Constraint that asserts that the object it is evaluated for has a given
* attribute.
*
* The attribute name is passed in the constructor.
*
* @since Class available since Release 3.0.0
*/
class PHPUnit_Framework_Constraint_ObjectHasAttribute extends PHPUnit_Framework_Constraint_ClassHasAttribute
{
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* @param mixed $other Value or object to evaluate.
*
* @return bool
*/
protected function matches($other)
{
$object = new ReflectionObject($other);
return $object->hasProperty($this->attributeName);
}
}

View file

@ -0,0 +1,117 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Logical OR.
*
* @since Class available since Release 3.0.0
*/
class PHPUnit_Framework_Constraint_Or extends PHPUnit_Framework_Constraint
{
/**
* @var PHPUnit_Framework_Constraint[]
*/
protected $constraints = array();
/**
* @param PHPUnit_Framework_Constraint[] $constraints
*/
public function setConstraints(array $constraints)
{
$this->constraints = array();
foreach ($constraints as $constraint) {
if (!($constraint instanceof PHPUnit_Framework_Constraint)) {
$constraint = new PHPUnit_Framework_Constraint_IsEqual(
$constraint
);
}
$this->constraints[] = $constraint;
}
}
/**
* Evaluates the constraint for parameter $other
*
* If $returnResult is set to false (the default), an exception is thrown
* in case of a failure. null is returned otherwise.
*
* If $returnResult is true, the result of the evaluation is returned as
* a boolean value instead: true in case of success, false in case of a
* failure.
*
* @param mixed $other Value or object to evaluate.
* @param string $description Additional information about the test
* @param bool $returnResult Whether to return a result or throw an exception
*
* @return mixed
*
* @throws PHPUnit_Framework_ExpectationFailedException
*/
public function evaluate($other, $description = '', $returnResult = false)
{
$success = false;
$constraint = null;
foreach ($this->constraints as $constraint) {
if ($constraint->evaluate($other, $description, true)) {
$success = true;
break;
}
}
if ($returnResult) {
return $success;
}
if (!$success) {
$this->fail($other, $description);
}
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
$text = '';
foreach ($this->constraints as $key => $constraint) {
if ($key > 0) {
$text .= ' or ';
}
$text .= $constraint->toString();
}
return $text;
}
/**
* Counts the number of constraint elements.
*
* @return int
*
* @since Method available since Release 3.4.0
*/
public function count()
{
$count = 0;
foreach ($this->constraints as $constraint) {
$count += count($constraint);
}
return $count;
}
}

View file

@ -0,0 +1,63 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Constraint that asserts that the string it is evaluated for matches
* a regular expression.
*
* Checks a given value using the Perl Compatible Regular Expression extension
* in PHP. The pattern is matched by executing preg_match().
*
* The pattern string passed in the constructor.
*
* @since Class available since Release 3.0.0
*/
class PHPUnit_Framework_Constraint_PCREMatch extends PHPUnit_Framework_Constraint
{
/**
* @var string
*/
protected $pattern;
/**
* @param string $pattern
*/
public function __construct($pattern)
{
parent::__construct();
$this->pattern = $pattern;
}
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* @param mixed $other Value or object to evaluate.
*
* @return bool
*/
protected function matches($other)
{
return preg_match($this->pattern, $other) > 0;
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
return sprintf(
'matches PCRE pattern "%s"',
$this->pattern
);
}
}

View file

@ -0,0 +1,28 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* @since Class available since Release 3.6.0
*/
class PHPUnit_Framework_Constraint_SameSize extends PHPUnit_Framework_Constraint_Count
{
/**
* @var int
*/
protected $expectedCount;
/**
* @param int $expected
*/
public function __construct($expected)
{
parent::__construct($this->getCountOf($expected));
}
}

View file

@ -0,0 +1,81 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Constraint that asserts that the string it is evaluated for contains
* a given string.
*
* Uses strpos() to find the position of the string in the input, if not found
* the evaluation fails.
*
* The sub-string is passed in the constructor.
*
* @since Class available since Release 3.0.0
*/
class PHPUnit_Framework_Constraint_StringContains extends PHPUnit_Framework_Constraint
{
/**
* @var string
*/
protected $string;
/**
* @var bool
*/
protected $ignoreCase;
/**
* @param string $string
* @param bool $ignoreCase
*/
public function __construct($string, $ignoreCase = false)
{
parent::__construct();
$this->string = $string;
$this->ignoreCase = $ignoreCase;
}
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* @param mixed $other Value or object to evaluate.
*
* @return bool
*/
protected function matches($other)
{
if ($this->ignoreCase) {
return stripos($other, $this->string) !== false;
} else {
return strpos($other, $this->string) !== false;
}
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
if ($this->ignoreCase) {
$string = strtolower($this->string);
} else {
$string = $this->string;
}
return sprintf(
'contains "%s"',
$string
);
}
}

View file

@ -0,0 +1,55 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Constraint that asserts that the string it is evaluated for ends with a given
* suffix.
*
* @since Class available since Release 3.4.0
*/
class PHPUnit_Framework_Constraint_StringEndsWith extends PHPUnit_Framework_Constraint
{
/**
* @var string
*/
protected $suffix;
/**
* @param string $suffix
*/
public function __construct($suffix)
{
parent::__construct();
$this->suffix = $suffix;
}
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* @param mixed $other Value or object to evaluate.
*
* @return bool
*/
protected function matches($other)
{
return substr($other, 0 - strlen($this->suffix)) == $this->suffix;
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
return 'ends with "' . $this->suffix . '"';
}
}

View file

@ -0,0 +1,101 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
use SebastianBergmann\Diff\Differ;
/**
* ...
*
* @since Class available since Release 3.5.0
*/
class PHPUnit_Framework_Constraint_StringMatches extends PHPUnit_Framework_Constraint_PCREMatch
{
/**
* @var string
*/
protected $string;
/**
* @param string $string
*/
public function __construct($string)
{
parent::__construct($string);
$this->pattern = $this->createPatternFromFormat(
preg_replace('/\r\n/', "\n", $string)
);
$this->string = $string;
}
protected function failureDescription($other)
{
return 'format description matches text';
}
protected function additionalFailureDescription($other)
{
$from = preg_split('(\r\n|\r|\n)', $this->string);
$to = preg_split('(\r\n|\r|\n)', $other);
foreach ($from as $index => $line) {
if (isset($to[$index]) && $line !== $to[$index]) {
$line = $this->createPatternFromFormat($line);
if (preg_match($line, $to[$index]) > 0) {
$from[$index] = $to[$index];
}
}
}
$this->string = implode("\n", $from);
$other = implode("\n", $to);
$differ = new Differ("--- Expected\n+++ Actual\n");
return $differ->diff($this->string, $other);
}
protected function createPatternFromFormat($string)
{
$string = str_replace(
array(
'%e',
'%s',
'%S',
'%a',
'%A',
'%w',
'%i',
'%d',
'%x',
'%f',
'%c'
),
array(
'\\' . DIRECTORY_SEPARATOR,
'[^\r\n]+',
'[^\r\n]*',
'.+',
'.*',
'\s*',
'[+-]?\d+',
'\d+',
'[0-9a-fA-F]+',
'[+-]?\.?\d+\.?\d*(?:[Ee][+-]?\d+)?',
'.'
),
preg_quote($string, '/')
);
return '/^' . $string . '$/s';
}
}

View file

@ -0,0 +1,55 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Constraint that asserts that the string it is evaluated for begins with a
* given prefix.
*
* @since Class available since Release 3.4.0
*/
class PHPUnit_Framework_Constraint_StringStartsWith extends PHPUnit_Framework_Constraint
{
/**
* @var string
*/
protected $prefix;
/**
* @param string $prefix
*/
public function __construct($prefix)
{
parent::__construct();
$this->prefix = $prefix;
}
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* @param mixed $other Value or object to evaluate.
*
* @return bool
*/
protected function matches($other)
{
return strpos($other, $this->prefix) === 0;
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
return 'starts with "' . $this->prefix . '"';
}
}

View file

@ -0,0 +1,125 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Constraint that asserts that the Traversable it is applied to contains
* a given value.
*
* @since Class available since Release 3.0.0
*/
class PHPUnit_Framework_Constraint_TraversableContains extends PHPUnit_Framework_Constraint
{
/**
* @var bool
*/
protected $checkForObjectIdentity;
/**
* @var bool
*/
protected $checkForNonObjectIdentity;
/**
* @var mixed
*/
protected $value;
/**
* @param mixed $value
* @param bool $checkForObjectIdentity
* @param bool $checkForNonObjectIdentity
*
* @throws PHPUnit_Framework_Exception
*/
public function __construct($value, $checkForObjectIdentity = true, $checkForNonObjectIdentity = false)
{
parent::__construct();
if (!is_bool($checkForObjectIdentity)) {
throw PHPUnit_Util_InvalidArgumentHelper::factory(2, 'boolean');
}
if (!is_bool($checkForNonObjectIdentity)) {
throw PHPUnit_Util_InvalidArgumentHelper::factory(3, 'boolean');
}
$this->checkForObjectIdentity = $checkForObjectIdentity;
$this->checkForNonObjectIdentity = $checkForNonObjectIdentity;
$this->value = $value;
}
/**
* Evaluates the constraint for parameter $other. Returns true if the
* constraint is met, false otherwise.
*
* @param mixed $other Value or object to evaluate.
*
* @return bool
*/
protected function matches($other)
{
if ($other instanceof SplObjectStorage) {
return $other->contains($this->value);
}
if (is_object($this->value)) {
foreach ($other as $element) {
if ($this->checkForObjectIdentity && $element === $this->value) {
return true;
} elseif (!$this->checkForObjectIdentity && $element == $this->value) {
return true;
}
}
} else {
foreach ($other as $element) {
if ($this->checkForNonObjectIdentity && $element === $this->value) {
return true;
} elseif (!$this->checkForNonObjectIdentity && $element == $this->value) {
return true;
}
}
}
return false;
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
if (is_string($this->value) && strpos($this->value, "\n") !== false) {
return 'contains "' . $this->value . '"';
} else {
return 'contains ' . $this->exporter->export($this->value);
}
}
/**
* Returns the description of the failure
*
* The beginning of failure messages is "Failed asserting that" in most
* cases. This method should return the second part of that sentence.
*
* @param mixed $other Evaluated value or object.
*
* @return string
*/
protected function failureDescription($other)
{
return sprintf(
'%s %s',
is_array($other) ? 'an array' : 'a traversable',
$this->toString()
);
}
}

View file

@ -0,0 +1,95 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Constraint that asserts that the Traversable it is applied to contains
* only values of a given type.
*
* @since Class available since Release 3.1.4
*/
class PHPUnit_Framework_Constraint_TraversableContainsOnly extends PHPUnit_Framework_Constraint
{
/**
* @var PHPUnit_Framework_Constraint
*/
protected $constraint;
/**
* @var string
*/
protected $type;
/**
* @param string $type
* @param bool $isNativeType
*/
public function __construct($type, $isNativeType = true)
{
parent::__construct();
if ($isNativeType) {
$this->constraint = new PHPUnit_Framework_Constraint_IsType($type);
} else {
$this->constraint = new PHPUnit_Framework_Constraint_IsInstanceOf(
$type
);
}
$this->type = $type;
}
/**
* Evaluates the constraint for parameter $other
*
* If $returnResult is set to false (the default), an exception is thrown
* in case of a failure. null is returned otherwise.
*
* If $returnResult is true, the result of the evaluation is returned as
* a boolean value instead: true in case of success, false in case of a
* failure.
*
* @param mixed $other Value or object to evaluate.
* @param string $description Additional information about the test
* @param bool $returnResult Whether to return a result or throw an exception
*
* @return mixed
*
* @throws PHPUnit_Framework_ExpectationFailedException
*/
public function evaluate($other, $description = '', $returnResult = false)
{
$success = true;
foreach ($other as $item) {
if (!$this->constraint->evaluate($item, '', true)) {
$success = false;
break;
}
}
if ($returnResult) {
return $success;
}
if (!$success) {
$this->fail($other, $description);
}
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
return 'contains only values of type "' . $this->type . '"';
}
}

View file

@ -0,0 +1,122 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Logical XOR.
*
* @since Class available since Release 3.0.0
*/
class PHPUnit_Framework_Constraint_Xor extends PHPUnit_Framework_Constraint
{
/**
* @var PHPUnit_Framework_Constraint[]
*/
protected $constraints = array();
/**
* @param PHPUnit_Framework_Constraint[] $constraints
*/
public function setConstraints(array $constraints)
{
$this->constraints = array();
foreach ($constraints as $constraint) {
if (!($constraint instanceof PHPUnit_Framework_Constraint)) {
$constraint = new PHPUnit_Framework_Constraint_IsEqual(
$constraint
);
}
$this->constraints[] = $constraint;
}
}
/**
* Evaluates the constraint for parameter $other
*
* If $returnResult is set to false (the default), an exception is thrown
* in case of a failure. null is returned otherwise.
*
* If $returnResult is true, the result of the evaluation is returned as
* a boolean value instead: true in case of success, false in case of a
* failure.
*
* @param mixed $other Value or object to evaluate.
* @param string $description Additional information about the test
* @param bool $returnResult Whether to return a result or throw an exception
*
* @return mixed
*
* @throws PHPUnit_Framework_ExpectationFailedException
*/
public function evaluate($other, $description = '', $returnResult = false)
{
$success = true;
$lastResult = null;
$constraint = null;
foreach ($this->constraints as $constraint) {
$result = $constraint->evaluate($other, $description, true);
if ($result === $lastResult) {
$success = false;
break;
}
$lastResult = $result;
}
if ($returnResult) {
return $success;
}
if (!$success) {
$this->fail($other, $description);
}
}
/**
* Returns a string representation of the constraint.
*
* @return string
*/
public function toString()
{
$text = '';
foreach ($this->constraints as $key => $constraint) {
if ($key > 0) {
$text .= ' xor ';
}
$text .= $constraint->toString();
}
return $text;
}
/**
* Counts the number of constraint elements.
*
* @return int
*
* @since Method available since Release 3.4.0
*/
public function count()
{
$count = 0;
foreach ($this->constraints as $constraint) {
$count += count($constraint);
}
return $count;
}
}

View file

@ -0,0 +1,34 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Wrapper for PHP errors.
*
* @since Class available since Release 2.2.0
*/
class PHPUnit_Framework_Error extends PHPUnit_Framework_Exception
{
/**
* Constructor.
*
* @param string $message
* @param int $code
* @param string $file
* @param int $line
* @param Exception $previous
*/
public function __construct($message, $code, $file, $line, Exception $previous = null)
{
parent::__construct($message, $code, $previous);
$this->file = $file;
$this->line = $line;
}
}

View file

@ -0,0 +1,24 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Wrapper for PHP deprecated errors.
* You can disable deprecated-to-exception conversion by setting
*
* <code>
* PHPUnit_Framework_Error_Deprecated::$enabled = false;
* </code>
*
* @since Class available since Release 3.3.0
*/
class PHPUnit_Framework_Error_Deprecated extends PHPUnit_Framework_Error
{
public static $enabled = true;
}

View file

@ -0,0 +1,24 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Wrapper for PHP notices.
* You can disable notice-to-exception conversion by setting
*
* <code>
* PHPUnit_Framework_Error_Notice::$enabled = false;
* </code>
*
* @since Class available since Release 3.3.0
*/
class PHPUnit_Framework_Error_Notice extends PHPUnit_Framework_Error
{
public static $enabled = true;
}

View file

@ -0,0 +1,24 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Wrapper for PHP warnings.
* You can disable notice-to-exception conversion by setting
*
* <code>
* PHPUnit_Framework_Error_Warning::$enabled = false;
* </code>
*
* @since Class available since Release 3.3.0
*/
class PHPUnit_Framework_Error_Warning extends PHPUnit_Framework_Error
{
public static $enabled = true;
}

View file

@ -0,0 +1,77 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Base class for all PHPUnit Framework exceptions.
*
* Ensures that exceptions thrown during a test run do not leave stray
* references behind.
*
* Every Exception contains a stack trace. Each stack frame contains the 'args'
* of the called function. The function arguments can contain references to
* instantiated objects. The references prevent the objects from being
* destructed (until test results are eventually printed), so memory cannot be
* freed up.
*
* With enabled process isolation, test results are serialized in the child
* process and unserialized in the parent process. The stack trace of Exceptions
* may contain objects that cannot be serialized or unserialized (e.g., PDO
* connections). Unserializing user-space objects from the child process into
* the parent would break the intended encapsulation of process isolation.
*
* @see http://fabien.potencier.org/article/9/php-serialization-stack-traces-and-exceptions
* @since Class available since Release 3.4.0
*/
class PHPUnit_Framework_Exception extends RuntimeException implements PHPUnit_Exception
{
/**
* @var array
*/
protected $serializableTrace;
public function __construct($message = '', $code = 0, Exception $previous = null)
{
parent::__construct($message, $code, $previous);
$this->serializableTrace = $this->getTrace();
foreach ($this->serializableTrace as $i => $call) {
unset($this->serializableTrace[$i]['args']);
}
}
/**
* Returns the serializable trace (without 'args').
*
* @return array
*/
public function getSerializableTrace()
{
return $this->serializableTrace;
}
/**
* @return string
*/
public function __toString()
{
$string = PHPUnit_Framework_TestFailure::exceptionToString($this);
if ($trace = PHPUnit_Util_Filter::getFilteredStacktrace($this)) {
$string .= "\n" . $trace;
}
return $string;
}
public function __sleep()
{
return array_keys(get_object_vars($this));
}
}

View file

@ -0,0 +1,91 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Wraps Exceptions thrown by code under test.
*
* Re-instantiates Exceptions thrown by user-space code to retain their original
* class names, properties, and stack traces (but without arguments).
*
* Unlike PHPUnit_Framework_Exception, the complete stack of previous Exceptions
* is processed.
*
* @since Class available since Release 4.3.0
*/
class PHPUnit_Framework_ExceptionWrapper extends PHPUnit_Framework_Exception
{
/**
* @var string
*/
protected $classname;
/**
* @var PHPUnit_Framework_ExceptionWrapper|null
*/
protected $previous;
/**
* @param Throwable|Exception $e
*/
public function __construct($e)
{
// PDOException::getCode() is a string.
// @see http://php.net/manual/en/class.pdoexception.php#95812
parent::__construct($e->getMessage(), (int) $e->getCode());
$this->classname = get_class($e);
$this->file = $e->getFile();
$this->line = $e->getLine();
$this->serializableTrace = $e->getTrace();
foreach ($this->serializableTrace as $i => $call) {
unset($this->serializableTrace[$i]['args']);
}
if ($e->getPrevious()) {
$this->previous = new self($e->getPrevious());
}
}
/**
* @return string
*/
public function getClassname()
{
return $this->classname;
}
/**
* @return PHPUnit_Framework_ExceptionWrapper
*/
public function getPreviousWrapped()
{
return $this->previous;
}
/**
* @return string
*/
public function __toString()
{
$string = PHPUnit_Framework_TestFailure::exceptionToString($this);
if ($trace = PHPUnit_Util_Filter::getFilteredStacktrace($this)) {
$string .= "\n" . $trace;
}
if ($this->previous) {
$string .= "\nCaused by\n" . $this->previous;
}
return $string;
}
}

View file

@ -0,0 +1,41 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Exception for expectations which failed their check.
*
* The exception contains the error message and optionally a
* SebastianBergmann\Comparator\ComparisonFailure which is used to
* generate diff output of the failed expectations.
*
* @since Class available since Release 3.0.0
*/
class PHPUnit_Framework_ExpectationFailedException extends PHPUnit_Framework_AssertionFailedError
{
/**
* @var SebastianBergmann\Comparator\ComparisonFailure
*/
protected $comparisonFailure;
public function __construct($message, SebastianBergmann\Comparator\ComparisonFailure $comparisonFailure = null, Exception $previous = null)
{
$this->comparisonFailure = $comparisonFailure;
parent::__construct($message, 0, $previous);
}
/**
* @return SebastianBergmann\Comparator\ComparisonFailure
*/
public function getComparisonFailure()
{
return $this->comparisonFailure;
}
}

View file

@ -0,0 +1,19 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* A marker interface for marking any exception/error as result of an unit
* test as incomplete implementation or currently not implemented.
*
* @since Interface available since Release 2.0.0
*/
interface PHPUnit_Framework_IncompleteTest
{
}

View file

@ -0,0 +1,84 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* An incomplete test case
*
* @since Class available since Release 4.3.0
*/
class PHPUnit_Framework_IncompleteTestCase extends PHPUnit_Framework_TestCase
{
/**
* @var string
*/
protected $message = '';
/**
* @var bool
*/
protected $backupGlobals = false;
/**
* @var bool
*/
protected $backupStaticAttributes = false;
/**
* @var bool
*/
protected $runTestInSeparateProcess = false;
/**
* @var bool
*/
protected $useErrorHandler = false;
/**
* @var bool
*/
protected $useOutputBuffering = false;
/**
* @param string $className
* @param string $methodName
* @param string $message
*/
public function __construct($className, $methodName, $message = '')
{
$this->message = $message;
parent::__construct($className . '::' . $methodName);
}
/**
* @throws PHPUnit_Framework_Exception
*/
protected function runTest()
{
$this->markTestIncomplete($this->message);
}
/**
* @return string
*/
public function getMessage()
{
return $this->message;
}
/**
* Returns a string representation of the test case.
*
* @return string
*/
public function toString()
{
return $this->getName();
}
}

View file

@ -0,0 +1,19 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Extension to PHPUnit_Framework_AssertionFailedError to mark the special
* case of an incomplete test.
*
* @since Class available since Release 2.0.0
*/
class PHPUnit_Framework_IncompleteTestError extends PHPUnit_Framework_AssertionFailedError implements PHPUnit_Framework_IncompleteTest
{
}

View file

@ -0,0 +1,19 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Extension to PHPUnit_Framework_AssertionFailedError to mark the special
* case of a test that is skipped because of an invalid @covers annotation.
*
* @since Class available since Release 4.0.0
*/
class PHPUnit_Framework_InvalidCoversTargetError extends PHPUnit_Framework_AssertionFailedError implements PHPUnit_Framework_SkippedTest
{
}

View file

@ -0,0 +1,16 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* @since Class available since Release 4.0.0
*/
class PHPUnit_Framework_InvalidCoversTargetException extends PHPUnit_Framework_CodeCoverageException
{
}

View file

@ -0,0 +1,19 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Extension to PHPUnit_Framework_AssertionFailedError to mark the special
* case of a test that printed output.
*
* @since Class available since Release 3.6.0
*/
class PHPUnit_Framework_OutputError extends PHPUnit_Framework_AssertionFailedError
{
}

View file

@ -0,0 +1,19 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* A marker interface for marking any exception/error as result of an unit
* test as risky.
*
* @since Interface available since Release 4.0.0
*/
interface PHPUnit_Framework_RiskyTest
{
}

View file

@ -0,0 +1,19 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Extension to PHPUnit_Framework_AssertionFailedError to mark the special
* case of a risky test.
*
* @since Class available since Release 4.0.0
*/
class PHPUnit_Framework_RiskyTestError extends PHPUnit_Framework_AssertionFailedError implements PHPUnit_Framework_RiskyTest
{
}

View file

@ -0,0 +1,24 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Interface for classes that can return a description of itself.
*
* @since Interface available since Release 3.0.0
*/
interface PHPUnit_Framework_SelfDescribing
{
/**
* Returns a string representation of the object.
*
* @return string
*/
public function toString();
}

View file

@ -0,0 +1,18 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* A marker interface for marking a unit test as being skipped.
*
* @since Interface available since Release 3.0.0
*/
interface PHPUnit_Framework_SkippedTest
{
}

View file

@ -0,0 +1,82 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* A skipped test case
*
* @since Class available since Release 4.3.0
*/
class PHPUnit_Framework_SkippedTestCase extends PHPUnit_Framework_TestCase
{
/**
* @var string
*/
protected $message = '';
/**
* @var bool
*/
protected $backupGlobals = false;
/**
* @var bool
*/
protected $backupStaticAttributes = false;
/**
* @var bool
*/
protected $runTestInSeparateProcess = false;
/**
* @var bool
*/
protected $useErrorHandler = false;
/**
* @var bool
*/
protected $useOutputBuffering = false;
/**
* @param string $message
*/
public function __construct($className, $methodName, $message = '')
{
$this->message = $message;
parent::__construct($className . '::' . $methodName);
}
/**
* @throws PHPUnit_Framework_Exception
*/
protected function runTest()
{
$this->markTestSkipped($this->message);
}
/**
* @return string
*/
public function getMessage()
{
return $this->message;
}
/**
* Returns a string representation of the test case.
*
* @return string
*/
public function toString()
{
return $this->getName();
}
}

View file

@ -0,0 +1,19 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Extension to PHPUnit_Framework_AssertionFailedError to mark the special
* case of a skipped test.
*
* @since Class available since Release 3.0.0
*/
class PHPUnit_Framework_SkippedTestError extends PHPUnit_Framework_AssertionFailedError implements PHPUnit_Framework_SkippedTest
{
}

View file

@ -0,0 +1,19 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Extension to PHPUnit_Framework_AssertionFailedError to mark the special
* case of a skipped test suite.
*
* @since Class available since Release 3.1.0
*/
class PHPUnit_Framework_SkippedTestSuiteError extends PHPUnit_Framework_AssertionFailedError implements PHPUnit_Framework_SkippedTest
{
}

View file

@ -0,0 +1,80 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* Creates a synthetic failed assertion.
*
* @since Class available since Release 3.5.0
*/
class PHPUnit_Framework_SyntheticError extends PHPUnit_Framework_AssertionFailedError
{
/**
* The synthetic file.
*
* @var string
*/
protected $syntheticFile = '';
/**
* The synthetic line number.
*
* @var int
*/
protected $syntheticLine = 0;
/**
* The synthetic trace.
*
* @var array
*/
protected $syntheticTrace = array();
/**
* Constructor.
*
* @param string $message
* @param int $code
* @param string $file
* @param int $line
* @param array $trace
*/
public function __construct($message, $code, $file, $line, $trace)
{
parent::__construct($message, $code);
$this->syntheticFile = $file;
$this->syntheticLine = $line;
$this->syntheticTrace = $trace;
}
/**
* @return string
*/
public function getSyntheticFile()
{
return $this->syntheticFile;
}
/**
* @return int
*/
public function getSyntheticLine()
{
return $this->syntheticLine;
}
/**
* @return array
*/
public function getSyntheticTrace()
{
return $this->syntheticTrace;
}
}

View file

@ -0,0 +1,26 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* A Test can be run and collect its results.
*
* @since Interface available since Release 2.0.0
*/
interface PHPUnit_Framework_Test extends Countable
{
/**
* Runs a test and collects its result in a TestResult instance.
*
* @param PHPUnit_Framework_TestResult $result
*
* @return PHPUnit_Framework_TestResult
*/
public function run(PHPUnit_Framework_TestResult $result = null);
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,167 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* A TestFailure collects a failed test together with the caught exception.
*
* @since Class available since Release 2.0.0
*/
class PHPUnit_Framework_TestFailure
{
/**
* @var string
*/
private $testName;
/**
* @var PHPUnit_Framework_Test|null
*/
protected $failedTest;
/**
* @var Exception
*/
protected $thrownException;
/**
* Constructs a TestFailure with the given test and exception.
*
* @param PHPUnit_Framework_Test $failedTest
* @param Exception $thrownException
*/
public function __construct(PHPUnit_Framework_Test $failedTest, Exception $thrownException)
{
if ($failedTest instanceof PHPUnit_Framework_SelfDescribing) {
$this->testName = $failedTest->toString();
} else {
$this->testName = get_class($failedTest);
}
if (!$failedTest instanceof PHPUnit_Framework_TestCase || !$failedTest->isInIsolation()) {
$this->failedTest = $failedTest;
}
$this->thrownException = $thrownException;
}
/**
* Returns a short description of the failure.
*
* @return string
*/
public function toString()
{
return sprintf(
'%s: %s',
$this->testName,
$this->thrownException->getMessage()
);
}
/**
* Returns a description for the thrown exception.
*
* @return string
*
* @since Method available since Release 3.4.0
*/
public function getExceptionAsString()
{
return self::exceptionToString($this->thrownException);
}
/**
* Returns a description for an exception.
*
* @param Exception $e
*
* @return string
*
* @since Method available since Release 3.2.0
*/
public static function exceptionToString(Exception $e)
{
if ($e instanceof PHPUnit_Framework_SelfDescribing) {
$buffer = $e->toString();
if ($e instanceof PHPUnit_Framework_ExpectationFailedException && $e->getComparisonFailure()) {
$buffer = $buffer . $e->getComparisonFailure()->getDiff();
}
if (!empty($buffer)) {
$buffer = trim($buffer) . "\n";
}
} elseif ($e instanceof PHPUnit_Framework_Error) {
$buffer = $e->getMessage() . "\n";
} elseif ($e instanceof PHPUnit_Framework_ExceptionWrapper) {
$buffer = $e->getClassname() . ': ' . $e->getMessage() . "\n";
} else {
$buffer = get_class($e) . ': ' . $e->getMessage() . "\n";
}
return $buffer;
}
/**
* Returns the name of the failing test (including data set, if any).
*
* @return string
*
* @since Method available since Release 4.3.0
*/
public function getTestName()
{
return $this->testName;
}
/**
* Returns the failing test.
*
* Note: The test object is not set when the test is executed in process
* isolation.
*
* @see PHPUnit_Framework_Exception
*
* @return PHPUnit_Framework_Test|null
*/
public function failedTest()
{
return $this->failedTest;
}
/**
* Gets the thrown exception.
*
* @return Exception
*/
public function thrownException()
{
return $this->thrownException;
}
/**
* Returns the exception's message.
*
* @return string
*/
public function exceptionMessage()
{
return $this->thrownException()->getMessage();
}
/**
* Returns true if the thrown exception
* is of type AssertionFailedError.
*
* @return bool
*/
public function isFailure()
{
return ($this->thrownException() instanceof PHPUnit_Framework_AssertionFailedError);
}
}

View file

@ -0,0 +1,99 @@
<?php
/*
* This file is part of PHPUnit.
*
* (c) Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* A Listener for test progress.
*
* @since Interface available since Release 2.0.0
*/
interface PHPUnit_Framework_TestListener
{
/**
* An error occurred.
*
* @param PHPUnit_Framework_Test $test
* @param Exception $e
* @param float $time
*/
public function addError(PHPUnit_Framework_Test $test, Exception $e, $time);
/**
* A failure occurred.
*
* @param PHPUnit_Framework_Test $test
* @param PHPUnit_Framework_AssertionFailedError $e
* @param float $time
*/
public function addFailure(PHPUnit_Framework_Test $test, PHPUnit_Framework_AssertionFailedError $e, $time);
/**
* Incomplete test.
*
* @param PHPUnit_Framework_Test $test
* @param Exception $e
* @param float $time
*/
public function addIncompleteTest(PHPUnit_Framework_Test $test, Exception $e, $time);
/**
* Risky test.
*
* @param PHPUnit_Framework_Test $test
* @param Exception $e
* @param float $time
*
* @since Method available since Release 4.0.0
*/
public function addRiskyTest(PHPUnit_Framework_Test $test, Exception $e, $time);
/**
* Skipped test.
*
* @param PHPUnit_Framework_Test $test
* @param Exception $e
* @param float $time
*
* @since Method available since Release 3.0.0
*/
public function addSkippedTest(PHPUnit_Framework_Test $test, Exception $e, $time);
/**
* A test suite started.
*
* @param PHPUnit_Framework_TestSuite $suite
*
* @since Method available since Release 2.2.0
*/
public function startTestSuite(PHPUnit_Framework_TestSuite $suite);
/**
* A test suite ended.
*
* @param PHPUnit_Framework_TestSuite $suite
*
* @since Method available since Release 2.2.0
*/
public function endTestSuite(PHPUnit_Framework_TestSuite $suite);
/**
* A test started.
*
* @param PHPUnit_Framework_Test $test
*/
public function startTest(PHPUnit_Framework_Test $test);
/**
* A test ended.
*
* @param PHPUnit_Framework_Test $test
* @param float $time
*/
public function endTest(PHPUnit_Framework_Test $test, $time);
}

Some files were not shown because too many files have changed in this diff Show more