├── .gitignore ├── .travis.yml ├── README.md ├── codeception.yml ├── composer.json ├── composer.lock ├── src └── Codeception │ └── Extension │ ├── PhpBuiltinServer.php │ └── Router.php └── tests ├── acceptance.suite.yml ├── acceptance └── PhpBrowserTestCept.php ├── data └── index.php ├── log └── .gitkeep ├── support ├── UnitGuy.php ├── UnitHelper.php ├── WebGuy.php └── WebHelper.php ├── unit.suite.yml └── unit └── Test.php /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | composer.phar 3 | bin 4 | tests/log/* 5 | !tests/log/.gitkeep 6 | tests/support/_generated 7 | vendor 8 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | 3 | php: 4 | - 5.6 5 | - 7.0 6 | - 7.1 7 | - 7.2 8 | 9 | before_script: 10 | - composer update -n --prefer-dist --dev 11 | 12 | script: 13 | - bin/codecept build 14 | - bin/codecept run 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | PhpBuiltinServer [![Latest Stable](https://poser.pugx.org/codeception/phpbuiltinserver/version.png)](https://packagist.org/packages/codeception/phpbuiltinserver) [![Total Downloads](https://poser.pugx.org/codeception/phpbuiltinserver/downloads.png)](https://packagist.org/packages/codeception/phpbuiltinserver) 2 | ================ 3 | 4 | Codeception extension to start and stop PHP built-in web server for your tests. 5 | 6 | | Codeception Branch | PhpBuiltinServer Branch | Status | 7 | | ------- | -------- | -------- | 8 | | **Codeception 1.x** | **1.1.x** | [![Build Status](https://secure.travis-ci.org/tiger-seo/PhpBuiltinServer.png?branch=v1.1.x)](http://travis-ci.org/tiger-seo/PhpBuiltinServer) | 9 | | **Codeception 2.0** | **1.2.x** | [![Build Status](https://secure.travis-ci.org/tiger-seo/PhpBuiltinServer.png?branch=v1.2.x)](http://travis-ci.org/tiger-seo/PhpBuiltinServer) | 10 | | **Codeception 2.1, 2.2** | **1.3.x** | [![Build Status](https://secure.travis-ci.org/tiger-seo/PhpBuiltinServer.png?branch=v1.3.x)](http://travis-ci.org/tiger-seo/PhpBuiltinServer) | 11 | | **Codeception 2.3** | **1.4.x** | [![Build Status](https://secure.travis-ci.org/tiger-seo/PhpBuiltinServer.png?branch=v1.4.x)](http://travis-ci.org/tiger-seo/PhpBuiltinServer) | 12 | | **Codeception 3.0, 4.0** | **master** | [![Build Status](https://secure.travis-ci.org/tiger-seo/PhpBuiltinServer.png?branch=master)](http://travis-ci.org/tiger-seo/PhpBuiltinServer) | 13 | 14 | ## Minimum requirements 15 | 16 | * Codeception 3.0 17 | * PHP 5.6 18 | 19 | ## Installation 20 | 21 | 1. Install [Codeception](http://codeception.com) via Composer 22 | 2. Add `codeception/phpbuiltinserver: "*"` to your `composer.json` 23 | 3. Run `composer install` 24 | 4. Include extensions into `codeception.yml` configuration: 25 | 26 | ## Configuration 27 | 28 | ### general example 29 | 30 | ``` yaml 31 | paths: 32 | tests: . 33 | log: _log 34 | data: _data 35 | helpers: _helpers 36 | extensions: 37 | enabled: 38 | - Codeception\Extension\PhpBuiltinServer 39 | config: 40 | Codeception\Extension\PhpBuiltinServer: 41 | hostname: localhost 42 | port: 8000 43 | autostart: true 44 | documentRoot: tests/_data 45 | startDelay: 1 46 | phpIni: /etc/php5/apache2/php.ini 47 | ``` 48 | 49 | ### example for projects based on Symfony 50 | ``` yaml 51 | paths: 52 | tests: . 53 | log: _log 54 | data: _data 55 | helpers: _helpers 56 | extensions: 57 | enabled: 58 | - Codeception\Extension\PhpBuiltinServer 59 | config: 60 | Codeception\Extension\PhpBuiltinServer: 61 | hostname: localhost 62 | port: 8000 63 | autostart: true 64 | documentRoot: ../web 65 | router: ../web/app.php 66 | directoryIndex: app.php 67 | startDelay: 1 68 | phpIni: /etc/php5/apache2/php.ini 69 | ``` 70 | -------------------------------------------------------------------------------- /codeception.yml: -------------------------------------------------------------------------------- 1 | paths: 2 | tests: tests 3 | log: tests/log 4 | data: tests/data 5 | support: tests/support 6 | settings: 7 | suite_class: \PHPUnit_Framework_TestSuite 8 | colors: true 9 | memory_limit: 1024M 10 | log: true 11 | modules: 12 | config: 13 | PhpBrowser: 14 | url: http://localhost:8000 15 | extensions: 16 | enabled: 17 | - Codeception\Extension\PhpBuiltinServer 18 | config: 19 | Codeception\Extension\PhpBuiltinServer: 20 | hostname: localhost 21 | port: 8000 22 | documentRoot: tests/data 23 | startDelay: 1 24 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "codeception/phpbuiltinserver", 3 | "description": "PhpBuiltinServer extension for Codeception", 4 | "keywords": ["codeception"], 5 | "minimum-stability": "stable", 6 | "license": "MIT", 7 | "authors": [ 8 | { 9 | "name": "tiger-seo", 10 | "email": "tiger.seo@gmail.com" 11 | } 12 | ], 13 | "require": { 14 | "php": ">=5.6.0", 15 | "codeception/codeception": "^3.0 || ^4.0" 16 | }, 17 | "require-dev": { 18 | "phpunit/phpunit": "5.*" 19 | }, 20 | "autoload": { 21 | "psr-0": { 22 | "Codeception": "src" 23 | } 24 | }, 25 | "config": { 26 | "bin-dir": "bin" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", 5 | "This file is @generated automatically" 6 | ], 7 | "content-hash": "0d9b222e1bf8818170ab587152fba7d2", 8 | "packages": [ 9 | { 10 | "name": "behat/gherkin", 11 | "version": "v4.8.0", 12 | "source": { 13 | "type": "git", 14 | "url": "https://github.com/Behat/Gherkin.git", 15 | "reference": "2391482cd003dfdc36b679b27e9f5326bd656acd" 16 | }, 17 | "dist": { 18 | "type": "zip", 19 | "url": "https://api.github.com/repos/Behat/Gherkin/zipball/2391482cd003dfdc36b679b27e9f5326bd656acd", 20 | "reference": "2391482cd003dfdc36b679b27e9f5326bd656acd", 21 | "shasum": "" 22 | }, 23 | "require": { 24 | "php": "~7.2|~8.0" 25 | }, 26 | "require-dev": { 27 | "cucumber/cucumber": "dev-gherkin-16.0.0", 28 | "phpunit/phpunit": "~8|~9", 29 | "symfony/phpunit-bridge": "~3|~4|~5", 30 | "symfony/yaml": "~3|~4|~5" 31 | }, 32 | "suggest": { 33 | "symfony/yaml": "If you want to parse features, represented in YAML files" 34 | }, 35 | "type": "library", 36 | "extra": { 37 | "branch-alias": { 38 | "dev-master": "4.4-dev" 39 | } 40 | }, 41 | "autoload": { 42 | "psr-0": { 43 | "Behat\\Gherkin": "src/" 44 | } 45 | }, 46 | "notification-url": "https://packagist.org/downloads/", 47 | "license": [ 48 | "MIT" 49 | ], 50 | "authors": [ 51 | { 52 | "name": "Konstantin Kudryashov", 53 | "email": "ever.zet@gmail.com", 54 | "homepage": "http://everzet.com" 55 | } 56 | ], 57 | "description": "Gherkin DSL parser for PHP", 58 | "homepage": "http://behat.org/", 59 | "keywords": [ 60 | "BDD", 61 | "Behat", 62 | "Cucumber", 63 | "DSL", 64 | "gherkin", 65 | "parser" 66 | ], 67 | "time": "2021-02-04T12:44:21+00:00" 68 | }, 69 | { 70 | "name": "codeception/codeception", 71 | "version": "4.1.22", 72 | "source": { 73 | "type": "git", 74 | "url": "https://github.com/Codeception/Codeception.git", 75 | "reference": "9777ec3690ceedc4bce2ed13af7af4ca4ee3088f" 76 | }, 77 | "dist": { 78 | "type": "zip", 79 | "url": "https://api.github.com/repos/Codeception/Codeception/zipball/9777ec3690ceedc4bce2ed13af7af4ca4ee3088f", 80 | "reference": "9777ec3690ceedc4bce2ed13af7af4ca4ee3088f", 81 | "shasum": "" 82 | }, 83 | "require": { 84 | "behat/gherkin": "^4.4.0", 85 | "codeception/lib-asserts": "^1.0", 86 | "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.1.1 | ^9.0", 87 | "codeception/stub": "^2.0 | ^3.0", 88 | "ext-curl": "*", 89 | "ext-json": "*", 90 | "ext-mbstring": "*", 91 | "guzzlehttp/psr7": "^1.4 | ^2.0", 92 | "php": ">=5.6.0 <9.0", 93 | "symfony/console": ">=2.7 <6.0", 94 | "symfony/css-selector": ">=2.7 <6.0", 95 | "symfony/event-dispatcher": ">=2.7 <6.0", 96 | "symfony/finder": ">=2.7 <6.0", 97 | "symfony/yaml": ">=2.7 <6.0" 98 | }, 99 | "require-dev": { 100 | "codeception/module-asserts": "1.*@dev", 101 | "codeception/module-cli": "1.*@dev", 102 | "codeception/module-db": "1.*@dev", 103 | "codeception/module-filesystem": "1.*@dev", 104 | "codeception/module-phpbrowser": "1.*@dev", 105 | "codeception/specify": "~0.3", 106 | "codeception/util-universalframework": "*@dev", 107 | "monolog/monolog": "~1.8", 108 | "squizlabs/php_codesniffer": "~2.0", 109 | "symfony/process": ">=2.7 <6.0", 110 | "vlucas/phpdotenv": "^2.0 | ^3.0 | ^4.0 | ^5.0" 111 | }, 112 | "suggest": { 113 | "codeception/specify": "BDD-style code blocks", 114 | "codeception/verify": "BDD-style assertions", 115 | "hoa/console": "For interactive console functionality", 116 | "stecman/symfony-console-completion": "For BASH autocompletion", 117 | "symfony/phpunit-bridge": "For phpunit-bridge support" 118 | }, 119 | "bin": [ 120 | "codecept" 121 | ], 122 | "type": "library", 123 | "extra": { 124 | "branch-alias": [] 125 | }, 126 | "autoload": { 127 | "psr-4": { 128 | "Codeception\\": "src/Codeception", 129 | "Codeception\\Extension\\": "ext" 130 | } 131 | }, 132 | "notification-url": "https://packagist.org/downloads/", 133 | "license": [ 134 | "MIT" 135 | ], 136 | "authors": [ 137 | { 138 | "name": "Michael Bodnarchuk", 139 | "email": "davert@mail.ua", 140 | "homepage": "http://codegyre.com" 141 | } 142 | ], 143 | "description": "BDD-style testing framework", 144 | "homepage": "http://codeception.com/", 145 | "keywords": [ 146 | "BDD", 147 | "TDD", 148 | "acceptance testing", 149 | "functional testing", 150 | "unit testing" 151 | ], 152 | "funding": [ 153 | { 154 | "url": "https://opencollective.com/codeception", 155 | "type": "open_collective" 156 | } 157 | ], 158 | "time": "2021-08-06T17:15:34+00:00" 159 | }, 160 | { 161 | "name": "codeception/lib-asserts", 162 | "version": "1.13.2", 163 | "source": { 164 | "type": "git", 165 | "url": "https://github.com/Codeception/lib-asserts.git", 166 | "reference": "184231d5eab66bc69afd6b9429344d80c67a33b6" 167 | }, 168 | "dist": { 169 | "type": "zip", 170 | "url": "https://api.github.com/repos/Codeception/lib-asserts/zipball/184231d5eab66bc69afd6b9429344d80c67a33b6", 171 | "reference": "184231d5eab66bc69afd6b9429344d80c67a33b6", 172 | "shasum": "" 173 | }, 174 | "require": { 175 | "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.0.3 | ^9.0", 176 | "ext-dom": "*", 177 | "php": ">=5.6.0 <9.0" 178 | }, 179 | "type": "library", 180 | "autoload": { 181 | "classmap": [ 182 | "src/" 183 | ] 184 | }, 185 | "notification-url": "https://packagist.org/downloads/", 186 | "license": [ 187 | "MIT" 188 | ], 189 | "authors": [ 190 | { 191 | "name": "Michael Bodnarchuk", 192 | "email": "davert@mail.ua", 193 | "homepage": "http://codegyre.com" 194 | }, 195 | { 196 | "name": "Gintautas Miselis" 197 | }, 198 | { 199 | "name": "Gustavo Nieves", 200 | "homepage": "https://medium.com/@ganieves" 201 | } 202 | ], 203 | "description": "Assertion methods used by Codeception core and Asserts module", 204 | "homepage": "https://codeception.com/", 205 | "keywords": [ 206 | "codeception" 207 | ], 208 | "time": "2020-10-21T16:26:20+00:00" 209 | }, 210 | { 211 | "name": "codeception/phpunit-wrapper", 212 | "version": "6.0.21", 213 | "source": { 214 | "type": "git", 215 | "url": "https://github.com/Codeception/phpunit-wrapper.git", 216 | "reference": "1ba4ade15e9c1884604a7d78ca81879025c3bda5" 217 | }, 218 | "dist": { 219 | "type": "zip", 220 | "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/1ba4ade15e9c1884604a7d78ca81879025c3bda5", 221 | "reference": "1ba4ade15e9c1884604a7d78ca81879025c3bda5", 222 | "shasum": "" 223 | }, 224 | "require": { 225 | "phpunit/php-code-coverage": ">=4.0.4 <6.0", 226 | "phpunit/phpunit": ">=5.7.27 <6.5.13", 227 | "sebastian/comparator": ">=1.2.4 <3.0", 228 | "sebastian/diff": ">=1.4 <4.0" 229 | }, 230 | "replace": { 231 | "codeception/phpunit-wrapper": "*" 232 | }, 233 | "require-dev": { 234 | "codeception/specify": "*", 235 | "vlucas/phpdotenv": "^3.0" 236 | }, 237 | "type": "library", 238 | "autoload": { 239 | "psr-4": { 240 | "Codeception\\PHPUnit\\": "src/" 241 | } 242 | }, 243 | "notification-url": "https://packagist.org/downloads/", 244 | "license": [ 245 | "MIT" 246 | ], 247 | "authors": [ 248 | { 249 | "name": "Davert", 250 | "email": "davert.php@resend.cc" 251 | } 252 | ], 253 | "description": "PHPUnit classes used by Codeception", 254 | "time": "2020-12-28T14:01:02+00:00" 255 | }, 256 | { 257 | "name": "codeception/stub", 258 | "version": "2.1.0", 259 | "source": { 260 | "type": "git", 261 | "url": "https://github.com/Codeception/Stub.git", 262 | "reference": "853657f988942f7afb69becf3fd0059f192c705a" 263 | }, 264 | "dist": { 265 | "type": "zip", 266 | "url": "https://api.github.com/repos/Codeception/Stub/zipball/853657f988942f7afb69becf3fd0059f192c705a", 267 | "reference": "853657f988942f7afb69becf3fd0059f192c705a", 268 | "shasum": "" 269 | }, 270 | "require": { 271 | "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.0.3" 272 | }, 273 | "type": "library", 274 | "autoload": { 275 | "psr-4": { 276 | "Codeception\\": "src/" 277 | } 278 | }, 279 | "notification-url": "https://packagist.org/downloads/", 280 | "license": [ 281 | "MIT" 282 | ], 283 | "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", 284 | "time": "2019-03-02T15:35:10+00:00" 285 | }, 286 | { 287 | "name": "doctrine/instantiator", 288 | "version": "1.3.1", 289 | "source": { 290 | "type": "git", 291 | "url": "https://github.com/doctrine/instantiator.git", 292 | "reference": "f350df0268e904597e3bd9c4685c53e0e333feea" 293 | }, 294 | "dist": { 295 | "type": "zip", 296 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/f350df0268e904597e3bd9c4685c53e0e333feea", 297 | "reference": "f350df0268e904597e3bd9c4685c53e0e333feea", 298 | "shasum": "" 299 | }, 300 | "require": { 301 | "php": "^7.1 || ^8.0" 302 | }, 303 | "require-dev": { 304 | "doctrine/coding-standard": "^6.0", 305 | "ext-pdo": "*", 306 | "ext-phar": "*", 307 | "phpbench/phpbench": "^0.13", 308 | "phpstan/phpstan-phpunit": "^0.11", 309 | "phpstan/phpstan-shim": "^0.11", 310 | "phpunit/phpunit": "^7.0" 311 | }, 312 | "type": "library", 313 | "extra": { 314 | "branch-alias": { 315 | "dev-master": "1.2.x-dev" 316 | } 317 | }, 318 | "autoload": { 319 | "psr-4": { 320 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" 321 | } 322 | }, 323 | "notification-url": "https://packagist.org/downloads/", 324 | "license": [ 325 | "MIT" 326 | ], 327 | "authors": [ 328 | { 329 | "name": "Marco Pivetta", 330 | "email": "ocramius@gmail.com", 331 | "homepage": "http://ocramius.github.com/" 332 | } 333 | ], 334 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", 335 | "homepage": "https://www.doctrine-project.org/projects/instantiator.html", 336 | "keywords": [ 337 | "constructor", 338 | "instantiate" 339 | ], 340 | "funding": [ 341 | { 342 | "url": "https://www.doctrine-project.org/sponsorship.html", 343 | "type": "custom" 344 | }, 345 | { 346 | "url": "https://www.patreon.com/phpdoctrine", 347 | "type": "patreon" 348 | }, 349 | { 350 | "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", 351 | "type": "tidelift" 352 | } 353 | ], 354 | "time": "2020-05-29T17:27:14+00:00" 355 | }, 356 | { 357 | "name": "guzzlehttp/psr7", 358 | "version": "1.8.2", 359 | "source": { 360 | "type": "git", 361 | "url": "https://github.com/guzzle/psr7.git", 362 | "reference": "dc960a912984efb74d0a90222870c72c87f10c91" 363 | }, 364 | "dist": { 365 | "type": "zip", 366 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/dc960a912984efb74d0a90222870c72c87f10c91", 367 | "reference": "dc960a912984efb74d0a90222870c72c87f10c91", 368 | "shasum": "" 369 | }, 370 | "require": { 371 | "php": ">=5.4.0", 372 | "psr/http-message": "~1.0", 373 | "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" 374 | }, 375 | "provide": { 376 | "psr/http-message-implementation": "1.0" 377 | }, 378 | "require-dev": { 379 | "ext-zlib": "*", 380 | "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" 381 | }, 382 | "suggest": { 383 | "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" 384 | }, 385 | "type": "library", 386 | "extra": { 387 | "branch-alias": { 388 | "dev-master": "1.7-dev" 389 | } 390 | }, 391 | "autoload": { 392 | "psr-4": { 393 | "GuzzleHttp\\Psr7\\": "src/" 394 | }, 395 | "files": [ 396 | "src/functions_include.php" 397 | ] 398 | }, 399 | "notification-url": "https://packagist.org/downloads/", 400 | "license": [ 401 | "MIT" 402 | ], 403 | "authors": [ 404 | { 405 | "name": "Michael Dowling", 406 | "email": "mtdowling@gmail.com", 407 | "homepage": "https://github.com/mtdowling" 408 | }, 409 | { 410 | "name": "Tobias Schultze", 411 | "homepage": "https://github.com/Tobion" 412 | } 413 | ], 414 | "description": "PSR-7 message implementation that also provides common utility methods", 415 | "keywords": [ 416 | "http", 417 | "message", 418 | "psr-7", 419 | "request", 420 | "response", 421 | "stream", 422 | "uri", 423 | "url" 424 | ], 425 | "time": "2021-04-26T09:17:50+00:00" 426 | }, 427 | { 428 | "name": "myclabs/deep-copy", 429 | "version": "1.10.1", 430 | "source": { 431 | "type": "git", 432 | "url": "https://github.com/myclabs/DeepCopy.git", 433 | "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5" 434 | }, 435 | "dist": { 436 | "type": "zip", 437 | "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", 438 | "reference": "969b211f9a51aa1f6c01d1d2aef56d3bd91598e5", 439 | "shasum": "" 440 | }, 441 | "require": { 442 | "php": "^7.1 || ^8.0" 443 | }, 444 | "replace": { 445 | "myclabs/deep-copy": "self.version" 446 | }, 447 | "require-dev": { 448 | "doctrine/collections": "^1.0", 449 | "doctrine/common": "^2.6", 450 | "phpunit/phpunit": "^7.1" 451 | }, 452 | "type": "library", 453 | "autoload": { 454 | "psr-4": { 455 | "DeepCopy\\": "src/DeepCopy/" 456 | }, 457 | "files": [ 458 | "src/DeepCopy/deep_copy.php" 459 | ] 460 | }, 461 | "notification-url": "https://packagist.org/downloads/", 462 | "license": [ 463 | "MIT" 464 | ], 465 | "description": "Create deep copies (clones) of your objects", 466 | "keywords": [ 467 | "clone", 468 | "copy", 469 | "duplicate", 470 | "object", 471 | "object graph" 472 | ], 473 | "funding": [ 474 | { 475 | "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", 476 | "type": "tidelift" 477 | } 478 | ], 479 | "time": "2020-06-29T13:22:24+00:00" 480 | }, 481 | { 482 | "name": "phpdocumentor/reflection-common", 483 | "version": "2.2.0", 484 | "source": { 485 | "type": "git", 486 | "url": "https://github.com/phpDocumentor/ReflectionCommon.git", 487 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" 488 | }, 489 | "dist": { 490 | "type": "zip", 491 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", 492 | "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", 493 | "shasum": "" 494 | }, 495 | "require": { 496 | "php": "^7.2 || ^8.0" 497 | }, 498 | "type": "library", 499 | "extra": { 500 | "branch-alias": { 501 | "dev-2.x": "2.x-dev" 502 | } 503 | }, 504 | "autoload": { 505 | "psr-4": { 506 | "phpDocumentor\\Reflection\\": "src/" 507 | } 508 | }, 509 | "notification-url": "https://packagist.org/downloads/", 510 | "license": [ 511 | "MIT" 512 | ], 513 | "authors": [ 514 | { 515 | "name": "Jaap van Otterdijk", 516 | "email": "opensource@ijaap.nl" 517 | } 518 | ], 519 | "description": "Common reflection classes used by phpdocumentor to reflect the code structure", 520 | "homepage": "http://www.phpdoc.org", 521 | "keywords": [ 522 | "FQSEN", 523 | "phpDocumentor", 524 | "phpdoc", 525 | "reflection", 526 | "static analysis" 527 | ], 528 | "time": "2020-06-27T09:03:43+00:00" 529 | }, 530 | { 531 | "name": "phpdocumentor/reflection-docblock", 532 | "version": "5.2.0", 533 | "source": { 534 | "type": "git", 535 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", 536 | "reference": "3170448f5769fe19f456173d833734e0ff1b84df" 537 | }, 538 | "dist": { 539 | "type": "zip", 540 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/3170448f5769fe19f456173d833734e0ff1b84df", 541 | "reference": "3170448f5769fe19f456173d833734e0ff1b84df", 542 | "shasum": "" 543 | }, 544 | "require": { 545 | "ext-filter": "*", 546 | "php": "^7.2 || ^8.0", 547 | "phpdocumentor/reflection-common": "^2.2", 548 | "phpdocumentor/type-resolver": "^1.3", 549 | "webmozart/assert": "^1.9.1" 550 | }, 551 | "require-dev": { 552 | "mockery/mockery": "~1.3.2" 553 | }, 554 | "type": "library", 555 | "extra": { 556 | "branch-alias": { 557 | "dev-master": "5.x-dev" 558 | } 559 | }, 560 | "autoload": { 561 | "psr-4": { 562 | "phpDocumentor\\Reflection\\": "src" 563 | } 564 | }, 565 | "notification-url": "https://packagist.org/downloads/", 566 | "license": [ 567 | "MIT" 568 | ], 569 | "authors": [ 570 | { 571 | "name": "Mike van Riel", 572 | "email": "me@mikevanriel.com" 573 | }, 574 | { 575 | "name": "Jaap van Otterdijk", 576 | "email": "account@ijaap.nl" 577 | } 578 | ], 579 | "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", 580 | "time": "2020-07-20T20:05:34+00:00" 581 | }, 582 | { 583 | "name": "phpdocumentor/type-resolver", 584 | "version": "1.3.0", 585 | "source": { 586 | "type": "git", 587 | "url": "https://github.com/phpDocumentor/TypeResolver.git", 588 | "reference": "e878a14a65245fbe78f8080eba03b47c3b705651" 589 | }, 590 | "dist": { 591 | "type": "zip", 592 | "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e878a14a65245fbe78f8080eba03b47c3b705651", 593 | "reference": "e878a14a65245fbe78f8080eba03b47c3b705651", 594 | "shasum": "" 595 | }, 596 | "require": { 597 | "php": "^7.2 || ^8.0", 598 | "phpdocumentor/reflection-common": "^2.0" 599 | }, 600 | "require-dev": { 601 | "ext-tokenizer": "*" 602 | }, 603 | "type": "library", 604 | "extra": { 605 | "branch-alias": { 606 | "dev-1.x": "1.x-dev" 607 | } 608 | }, 609 | "autoload": { 610 | "psr-4": { 611 | "phpDocumentor\\Reflection\\": "src" 612 | } 613 | }, 614 | "notification-url": "https://packagist.org/downloads/", 615 | "license": [ 616 | "MIT" 617 | ], 618 | "authors": [ 619 | { 620 | "name": "Mike van Riel", 621 | "email": "me@mikevanriel.com" 622 | } 623 | ], 624 | "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", 625 | "time": "2020-06-27T10:12:23+00:00" 626 | }, 627 | { 628 | "name": "phpspec/prophecy", 629 | "version": "v1.10.3", 630 | "source": { 631 | "type": "git", 632 | "url": "https://github.com/phpspec/prophecy.git", 633 | "reference": "451c3cd1418cf640de218914901e51b064abb093" 634 | }, 635 | "dist": { 636 | "type": "zip", 637 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", 638 | "reference": "451c3cd1418cf640de218914901e51b064abb093", 639 | "shasum": "" 640 | }, 641 | "require": { 642 | "doctrine/instantiator": "^1.0.2", 643 | "php": "^5.3|^7.0", 644 | "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", 645 | "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", 646 | "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" 647 | }, 648 | "require-dev": { 649 | "phpspec/phpspec": "^2.5 || ^3.2", 650 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" 651 | }, 652 | "type": "library", 653 | "extra": { 654 | "branch-alias": { 655 | "dev-master": "1.10.x-dev" 656 | } 657 | }, 658 | "autoload": { 659 | "psr-4": { 660 | "Prophecy\\": "src/Prophecy" 661 | } 662 | }, 663 | "notification-url": "https://packagist.org/downloads/", 664 | "license": [ 665 | "MIT" 666 | ], 667 | "authors": [ 668 | { 669 | "name": "Konstantin Kudryashov", 670 | "email": "ever.zet@gmail.com", 671 | "homepage": "http://everzet.com" 672 | }, 673 | { 674 | "name": "Marcello Duarte", 675 | "email": "marcello.duarte@gmail.com" 676 | } 677 | ], 678 | "description": "Highly opinionated mocking framework for PHP 5.3+", 679 | "homepage": "https://github.com/phpspec/prophecy", 680 | "keywords": [ 681 | "Double", 682 | "Dummy", 683 | "fake", 684 | "mock", 685 | "spy", 686 | "stub" 687 | ], 688 | "time": "2020-03-05T15:02:03+00:00" 689 | }, 690 | { 691 | "name": "phpunit/php-code-coverage", 692 | "version": "4.0.8", 693 | "source": { 694 | "type": "git", 695 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git", 696 | "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d" 697 | }, 698 | "dist": { 699 | "type": "zip", 700 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef7b2f56815df854e66ceaee8ebe9393ae36a40d", 701 | "reference": "ef7b2f56815df854e66ceaee8ebe9393ae36a40d", 702 | "shasum": "" 703 | }, 704 | "require": { 705 | "ext-dom": "*", 706 | "ext-xmlwriter": "*", 707 | "php": "^5.6 || ^7.0", 708 | "phpunit/php-file-iterator": "^1.3", 709 | "phpunit/php-text-template": "^1.2", 710 | "phpunit/php-token-stream": "^1.4.2 || ^2.0", 711 | "sebastian/code-unit-reverse-lookup": "^1.0", 712 | "sebastian/environment": "^1.3.2 || ^2.0", 713 | "sebastian/version": "^1.0 || ^2.0" 714 | }, 715 | "require-dev": { 716 | "ext-xdebug": "^2.1.4", 717 | "phpunit/phpunit": "^5.7" 718 | }, 719 | "suggest": { 720 | "ext-xdebug": "^2.5.1" 721 | }, 722 | "type": "library", 723 | "extra": { 724 | "branch-alias": { 725 | "dev-master": "4.0.x-dev" 726 | } 727 | }, 728 | "autoload": { 729 | "classmap": [ 730 | "src/" 731 | ] 732 | }, 733 | "notification-url": "https://packagist.org/downloads/", 734 | "license": [ 735 | "BSD-3-Clause" 736 | ], 737 | "authors": [ 738 | { 739 | "name": "Sebastian Bergmann", 740 | "email": "sb@sebastian-bergmann.de", 741 | "role": "lead" 742 | } 743 | ], 744 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", 745 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage", 746 | "keywords": [ 747 | "coverage", 748 | "testing", 749 | "xunit" 750 | ], 751 | "time": "2017-04-02T07:44:40+00:00" 752 | }, 753 | { 754 | "name": "phpunit/php-file-iterator", 755 | "version": "1.4.5", 756 | "source": { 757 | "type": "git", 758 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git", 759 | "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" 760 | }, 761 | "dist": { 762 | "type": "zip", 763 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", 764 | "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", 765 | "shasum": "" 766 | }, 767 | "require": { 768 | "php": ">=5.3.3" 769 | }, 770 | "type": "library", 771 | "extra": { 772 | "branch-alias": { 773 | "dev-master": "1.4.x-dev" 774 | } 775 | }, 776 | "autoload": { 777 | "classmap": [ 778 | "src/" 779 | ] 780 | }, 781 | "notification-url": "https://packagist.org/downloads/", 782 | "license": [ 783 | "BSD-3-Clause" 784 | ], 785 | "authors": [ 786 | { 787 | "name": "Sebastian Bergmann", 788 | "email": "sb@sebastian-bergmann.de", 789 | "role": "lead" 790 | } 791 | ], 792 | "description": "FilterIterator implementation that filters files based on a list of suffixes.", 793 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", 794 | "keywords": [ 795 | "filesystem", 796 | "iterator" 797 | ], 798 | "time": "2017-11-27T13:52:08+00:00" 799 | }, 800 | { 801 | "name": "phpunit/php-text-template", 802 | "version": "1.2.1", 803 | "source": { 804 | "type": "git", 805 | "url": "https://github.com/sebastianbergmann/php-text-template.git", 806 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" 807 | }, 808 | "dist": { 809 | "type": "zip", 810 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 811 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", 812 | "shasum": "" 813 | }, 814 | "require": { 815 | "php": ">=5.3.3" 816 | }, 817 | "type": "library", 818 | "autoload": { 819 | "classmap": [ 820 | "src/" 821 | ] 822 | }, 823 | "notification-url": "https://packagist.org/downloads/", 824 | "license": [ 825 | "BSD-3-Clause" 826 | ], 827 | "authors": [ 828 | { 829 | "name": "Sebastian Bergmann", 830 | "email": "sebastian@phpunit.de", 831 | "role": "lead" 832 | } 833 | ], 834 | "description": "Simple template engine.", 835 | "homepage": "https://github.com/sebastianbergmann/php-text-template/", 836 | "keywords": [ 837 | "template" 838 | ], 839 | "time": "2015-06-21T13:50:34+00:00" 840 | }, 841 | { 842 | "name": "phpunit/php-timer", 843 | "version": "1.0.9", 844 | "source": { 845 | "type": "git", 846 | "url": "https://github.com/sebastianbergmann/php-timer.git", 847 | "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" 848 | }, 849 | "dist": { 850 | "type": "zip", 851 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", 852 | "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", 853 | "shasum": "" 854 | }, 855 | "require": { 856 | "php": "^5.3.3 || ^7.0" 857 | }, 858 | "require-dev": { 859 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" 860 | }, 861 | "type": "library", 862 | "extra": { 863 | "branch-alias": { 864 | "dev-master": "1.0-dev" 865 | } 866 | }, 867 | "autoload": { 868 | "classmap": [ 869 | "src/" 870 | ] 871 | }, 872 | "notification-url": "https://packagist.org/downloads/", 873 | "license": [ 874 | "BSD-3-Clause" 875 | ], 876 | "authors": [ 877 | { 878 | "name": "Sebastian Bergmann", 879 | "email": "sb@sebastian-bergmann.de", 880 | "role": "lead" 881 | } 882 | ], 883 | "description": "Utility class for timing", 884 | "homepage": "https://github.com/sebastianbergmann/php-timer/", 885 | "keywords": [ 886 | "timer" 887 | ], 888 | "time": "2017-02-26T11:10:40+00:00" 889 | }, 890 | { 891 | "name": "phpunit/php-token-stream", 892 | "version": "2.0.2", 893 | "source": { 894 | "type": "git", 895 | "url": "https://github.com/sebastianbergmann/php-token-stream.git", 896 | "reference": "791198a2c6254db10131eecfe8c06670700904db" 897 | }, 898 | "dist": { 899 | "type": "zip", 900 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", 901 | "reference": "791198a2c6254db10131eecfe8c06670700904db", 902 | "shasum": "" 903 | }, 904 | "require": { 905 | "ext-tokenizer": "*", 906 | "php": "^7.0" 907 | }, 908 | "require-dev": { 909 | "phpunit/phpunit": "^6.2.4" 910 | }, 911 | "type": "library", 912 | "extra": { 913 | "branch-alias": { 914 | "dev-master": "2.0-dev" 915 | } 916 | }, 917 | "autoload": { 918 | "classmap": [ 919 | "src/" 920 | ] 921 | }, 922 | "notification-url": "https://packagist.org/downloads/", 923 | "license": [ 924 | "BSD-3-Clause" 925 | ], 926 | "authors": [ 927 | { 928 | "name": "Sebastian Bergmann", 929 | "email": "sebastian@phpunit.de" 930 | } 931 | ], 932 | "description": "Wrapper around PHP's tokenizer extension.", 933 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/", 934 | "keywords": [ 935 | "tokenizer" 936 | ], 937 | "abandoned": true, 938 | "time": "2017-11-27T05:48:46+00:00" 939 | }, 940 | { 941 | "name": "phpunit/phpunit", 942 | "version": "5.7.27", 943 | "source": { 944 | "type": "git", 945 | "url": "https://github.com/sebastianbergmann/phpunit.git", 946 | "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c" 947 | }, 948 | "dist": { 949 | "type": "zip", 950 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c", 951 | "reference": "b7803aeca3ccb99ad0a506fa80b64cd6a56bbc0c", 952 | "shasum": "" 953 | }, 954 | "require": { 955 | "ext-dom": "*", 956 | "ext-json": "*", 957 | "ext-libxml": "*", 958 | "ext-mbstring": "*", 959 | "ext-xml": "*", 960 | "myclabs/deep-copy": "~1.3", 961 | "php": "^5.6 || ^7.0", 962 | "phpspec/prophecy": "^1.6.2", 963 | "phpunit/php-code-coverage": "^4.0.4", 964 | "phpunit/php-file-iterator": "~1.4", 965 | "phpunit/php-text-template": "~1.2", 966 | "phpunit/php-timer": "^1.0.6", 967 | "phpunit/phpunit-mock-objects": "^3.2", 968 | "sebastian/comparator": "^1.2.4", 969 | "sebastian/diff": "^1.4.3", 970 | "sebastian/environment": "^1.3.4 || ^2.0", 971 | "sebastian/exporter": "~2.0", 972 | "sebastian/global-state": "^1.1", 973 | "sebastian/object-enumerator": "~2.0", 974 | "sebastian/resource-operations": "~1.0", 975 | "sebastian/version": "^1.0.6|^2.0.1", 976 | "symfony/yaml": "~2.1|~3.0|~4.0" 977 | }, 978 | "conflict": { 979 | "phpdocumentor/reflection-docblock": "3.0.2" 980 | }, 981 | "require-dev": { 982 | "ext-pdo": "*" 983 | }, 984 | "suggest": { 985 | "ext-xdebug": "*", 986 | "phpunit/php-invoker": "~1.1" 987 | }, 988 | "bin": [ 989 | "phpunit" 990 | ], 991 | "type": "library", 992 | "extra": { 993 | "branch-alias": { 994 | "dev-master": "5.7.x-dev" 995 | } 996 | }, 997 | "autoload": { 998 | "classmap": [ 999 | "src/" 1000 | ] 1001 | }, 1002 | "notification-url": "https://packagist.org/downloads/", 1003 | "license": [ 1004 | "BSD-3-Clause" 1005 | ], 1006 | "authors": [ 1007 | { 1008 | "name": "Sebastian Bergmann", 1009 | "email": "sebastian@phpunit.de", 1010 | "role": "lead" 1011 | } 1012 | ], 1013 | "description": "The PHP Unit Testing framework.", 1014 | "homepage": "https://phpunit.de/", 1015 | "keywords": [ 1016 | "phpunit", 1017 | "testing", 1018 | "xunit" 1019 | ], 1020 | "time": "2018-02-01T05:50:59+00:00" 1021 | }, 1022 | { 1023 | "name": "phpunit/phpunit-mock-objects", 1024 | "version": "3.4.4", 1025 | "source": { 1026 | "type": "git", 1027 | "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", 1028 | "reference": "a23b761686d50a560cc56233b9ecf49597cc9118" 1029 | }, 1030 | "dist": { 1031 | "type": "zip", 1032 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/a23b761686d50a560cc56233b9ecf49597cc9118", 1033 | "reference": "a23b761686d50a560cc56233b9ecf49597cc9118", 1034 | "shasum": "" 1035 | }, 1036 | "require": { 1037 | "doctrine/instantiator": "^1.0.2", 1038 | "php": "^5.6 || ^7.0", 1039 | "phpunit/php-text-template": "^1.2", 1040 | "sebastian/exporter": "^1.2 || ^2.0" 1041 | }, 1042 | "conflict": { 1043 | "phpunit/phpunit": "<5.4.0" 1044 | }, 1045 | "require-dev": { 1046 | "phpunit/phpunit": "^5.4" 1047 | }, 1048 | "suggest": { 1049 | "ext-soap": "*" 1050 | }, 1051 | "type": "library", 1052 | "extra": { 1053 | "branch-alias": { 1054 | "dev-master": "3.2.x-dev" 1055 | } 1056 | }, 1057 | "autoload": { 1058 | "classmap": [ 1059 | "src/" 1060 | ] 1061 | }, 1062 | "notification-url": "https://packagist.org/downloads/", 1063 | "license": [ 1064 | "BSD-3-Clause" 1065 | ], 1066 | "authors": [ 1067 | { 1068 | "name": "Sebastian Bergmann", 1069 | "email": "sb@sebastian-bergmann.de", 1070 | "role": "lead" 1071 | } 1072 | ], 1073 | "description": "Mock Object library for PHPUnit", 1074 | "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", 1075 | "keywords": [ 1076 | "mock", 1077 | "xunit" 1078 | ], 1079 | "abandoned": true, 1080 | "time": "2017-06-30T09:13:00+00:00" 1081 | }, 1082 | { 1083 | "name": "psr/container", 1084 | "version": "1.1.1", 1085 | "source": { 1086 | "type": "git", 1087 | "url": "https://github.com/php-fig/container.git", 1088 | "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" 1089 | }, 1090 | "dist": { 1091 | "type": "zip", 1092 | "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", 1093 | "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", 1094 | "shasum": "" 1095 | }, 1096 | "require": { 1097 | "php": ">=7.2.0" 1098 | }, 1099 | "type": "library", 1100 | "autoload": { 1101 | "psr-4": { 1102 | "Psr\\Container\\": "src/" 1103 | } 1104 | }, 1105 | "notification-url": "https://packagist.org/downloads/", 1106 | "license": [ 1107 | "MIT" 1108 | ], 1109 | "authors": [ 1110 | { 1111 | "name": "PHP-FIG", 1112 | "homepage": "https://www.php-fig.org/" 1113 | } 1114 | ], 1115 | "description": "Common Container Interface (PHP FIG PSR-11)", 1116 | "homepage": "https://github.com/php-fig/container", 1117 | "keywords": [ 1118 | "PSR-11", 1119 | "container", 1120 | "container-interface", 1121 | "container-interop", 1122 | "psr" 1123 | ], 1124 | "time": "2021-03-05T17:36:06+00:00" 1125 | }, 1126 | { 1127 | "name": "psr/http-message", 1128 | "version": "1.0.1", 1129 | "source": { 1130 | "type": "git", 1131 | "url": "https://github.com/php-fig/http-message.git", 1132 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" 1133 | }, 1134 | "dist": { 1135 | "type": "zip", 1136 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", 1137 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", 1138 | "shasum": "" 1139 | }, 1140 | "require": { 1141 | "php": ">=5.3.0" 1142 | }, 1143 | "type": "library", 1144 | "extra": { 1145 | "branch-alias": { 1146 | "dev-master": "1.0.x-dev" 1147 | } 1148 | }, 1149 | "autoload": { 1150 | "psr-4": { 1151 | "Psr\\Http\\Message\\": "src/" 1152 | } 1153 | }, 1154 | "notification-url": "https://packagist.org/downloads/", 1155 | "license": [ 1156 | "MIT" 1157 | ], 1158 | "authors": [ 1159 | { 1160 | "name": "PHP-FIG", 1161 | "homepage": "http://www.php-fig.org/" 1162 | } 1163 | ], 1164 | "description": "Common interface for HTTP messages", 1165 | "homepage": "https://github.com/php-fig/http-message", 1166 | "keywords": [ 1167 | "http", 1168 | "http-message", 1169 | "psr", 1170 | "psr-7", 1171 | "request", 1172 | "response" 1173 | ], 1174 | "time": "2016-08-06T14:39:51+00:00" 1175 | }, 1176 | { 1177 | "name": "ralouphie/getallheaders", 1178 | "version": "3.0.3", 1179 | "source": { 1180 | "type": "git", 1181 | "url": "https://github.com/ralouphie/getallheaders.git", 1182 | "reference": "120b605dfeb996808c31b6477290a714d356e822" 1183 | }, 1184 | "dist": { 1185 | "type": "zip", 1186 | "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", 1187 | "reference": "120b605dfeb996808c31b6477290a714d356e822", 1188 | "shasum": "" 1189 | }, 1190 | "require": { 1191 | "php": ">=5.6" 1192 | }, 1193 | "require-dev": { 1194 | "php-coveralls/php-coveralls": "^2.1", 1195 | "phpunit/phpunit": "^5 || ^6.5" 1196 | }, 1197 | "type": "library", 1198 | "autoload": { 1199 | "files": [ 1200 | "src/getallheaders.php" 1201 | ] 1202 | }, 1203 | "notification-url": "https://packagist.org/downloads/", 1204 | "license": [ 1205 | "MIT" 1206 | ], 1207 | "authors": [ 1208 | { 1209 | "name": "Ralph Khattar", 1210 | "email": "ralph.khattar@gmail.com" 1211 | } 1212 | ], 1213 | "description": "A polyfill for getallheaders.", 1214 | "time": "2019-03-08T08:55:37+00:00" 1215 | }, 1216 | { 1217 | "name": "sebastian/code-unit-reverse-lookup", 1218 | "version": "1.0.2", 1219 | "source": { 1220 | "type": "git", 1221 | "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", 1222 | "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619" 1223 | }, 1224 | "dist": { 1225 | "type": "zip", 1226 | "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619", 1227 | "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619", 1228 | "shasum": "" 1229 | }, 1230 | "require": { 1231 | "php": ">=5.6" 1232 | }, 1233 | "require-dev": { 1234 | "phpunit/phpunit": "^8.5" 1235 | }, 1236 | "type": "library", 1237 | "extra": { 1238 | "branch-alias": { 1239 | "dev-master": "1.0.x-dev" 1240 | } 1241 | }, 1242 | "autoload": { 1243 | "classmap": [ 1244 | "src/" 1245 | ] 1246 | }, 1247 | "notification-url": "https://packagist.org/downloads/", 1248 | "license": [ 1249 | "BSD-3-Clause" 1250 | ], 1251 | "authors": [ 1252 | { 1253 | "name": "Sebastian Bergmann", 1254 | "email": "sebastian@phpunit.de" 1255 | } 1256 | ], 1257 | "description": "Looks up which function or method a line of code belongs to", 1258 | "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", 1259 | "funding": [ 1260 | { 1261 | "url": "https://github.com/sebastianbergmann", 1262 | "type": "github" 1263 | } 1264 | ], 1265 | "time": "2020-11-30T08:15:22+00:00" 1266 | }, 1267 | { 1268 | "name": "sebastian/comparator", 1269 | "version": "1.2.4", 1270 | "source": { 1271 | "type": "git", 1272 | "url": "https://github.com/sebastianbergmann/comparator.git", 1273 | "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" 1274 | }, 1275 | "dist": { 1276 | "type": "zip", 1277 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", 1278 | "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", 1279 | "shasum": "" 1280 | }, 1281 | "require": { 1282 | "php": ">=5.3.3", 1283 | "sebastian/diff": "~1.2", 1284 | "sebastian/exporter": "~1.2 || ~2.0" 1285 | }, 1286 | "require-dev": { 1287 | "phpunit/phpunit": "~4.4" 1288 | }, 1289 | "type": "library", 1290 | "extra": { 1291 | "branch-alias": { 1292 | "dev-master": "1.2.x-dev" 1293 | } 1294 | }, 1295 | "autoload": { 1296 | "classmap": [ 1297 | "src/" 1298 | ] 1299 | }, 1300 | "notification-url": "https://packagist.org/downloads/", 1301 | "license": [ 1302 | "BSD-3-Clause" 1303 | ], 1304 | "authors": [ 1305 | { 1306 | "name": "Jeff Welch", 1307 | "email": "whatthejeff@gmail.com" 1308 | }, 1309 | { 1310 | "name": "Volker Dusch", 1311 | "email": "github@wallbash.com" 1312 | }, 1313 | { 1314 | "name": "Bernhard Schussek", 1315 | "email": "bschussek@2bepublished.at" 1316 | }, 1317 | { 1318 | "name": "Sebastian Bergmann", 1319 | "email": "sebastian@phpunit.de" 1320 | } 1321 | ], 1322 | "description": "Provides the functionality to compare PHP values for equality", 1323 | "homepage": "http://www.github.com/sebastianbergmann/comparator", 1324 | "keywords": [ 1325 | "comparator", 1326 | "compare", 1327 | "equality" 1328 | ], 1329 | "time": "2017-01-29T09:50:25+00:00" 1330 | }, 1331 | { 1332 | "name": "sebastian/diff", 1333 | "version": "1.4.3", 1334 | "source": { 1335 | "type": "git", 1336 | "url": "https://github.com/sebastianbergmann/diff.git", 1337 | "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4" 1338 | }, 1339 | "dist": { 1340 | "type": "zip", 1341 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4", 1342 | "reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4", 1343 | "shasum": "" 1344 | }, 1345 | "require": { 1346 | "php": "^5.3.3 || ^7.0" 1347 | }, 1348 | "require-dev": { 1349 | "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" 1350 | }, 1351 | "type": "library", 1352 | "extra": { 1353 | "branch-alias": { 1354 | "dev-master": "1.4-dev" 1355 | } 1356 | }, 1357 | "autoload": { 1358 | "classmap": [ 1359 | "src/" 1360 | ] 1361 | }, 1362 | "notification-url": "https://packagist.org/downloads/", 1363 | "license": [ 1364 | "BSD-3-Clause" 1365 | ], 1366 | "authors": [ 1367 | { 1368 | "name": "Kore Nordmann", 1369 | "email": "mail@kore-nordmann.de" 1370 | }, 1371 | { 1372 | "name": "Sebastian Bergmann", 1373 | "email": "sebastian@phpunit.de" 1374 | } 1375 | ], 1376 | "description": "Diff implementation", 1377 | "homepage": "https://github.com/sebastianbergmann/diff", 1378 | "keywords": [ 1379 | "diff" 1380 | ], 1381 | "time": "2017-05-22T07:24:03+00:00" 1382 | }, 1383 | { 1384 | "name": "sebastian/environment", 1385 | "version": "2.0.0", 1386 | "source": { 1387 | "type": "git", 1388 | "url": "https://github.com/sebastianbergmann/environment.git", 1389 | "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac" 1390 | }, 1391 | "dist": { 1392 | "type": "zip", 1393 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/5795ffe5dc5b02460c3e34222fee8cbe245d8fac", 1394 | "reference": "5795ffe5dc5b02460c3e34222fee8cbe245d8fac", 1395 | "shasum": "" 1396 | }, 1397 | "require": { 1398 | "php": "^5.6 || ^7.0" 1399 | }, 1400 | "require-dev": { 1401 | "phpunit/phpunit": "^5.0" 1402 | }, 1403 | "type": "library", 1404 | "extra": { 1405 | "branch-alias": { 1406 | "dev-master": "2.0.x-dev" 1407 | } 1408 | }, 1409 | "autoload": { 1410 | "classmap": [ 1411 | "src/" 1412 | ] 1413 | }, 1414 | "notification-url": "https://packagist.org/downloads/", 1415 | "license": [ 1416 | "BSD-3-Clause" 1417 | ], 1418 | "authors": [ 1419 | { 1420 | "name": "Sebastian Bergmann", 1421 | "email": "sebastian@phpunit.de" 1422 | } 1423 | ], 1424 | "description": "Provides functionality to handle HHVM/PHP environments", 1425 | "homepage": "http://www.github.com/sebastianbergmann/environment", 1426 | "keywords": [ 1427 | "Xdebug", 1428 | "environment", 1429 | "hhvm" 1430 | ], 1431 | "time": "2016-11-26T07:53:53+00:00" 1432 | }, 1433 | { 1434 | "name": "sebastian/exporter", 1435 | "version": "2.0.0", 1436 | "source": { 1437 | "type": "git", 1438 | "url": "https://github.com/sebastianbergmann/exporter.git", 1439 | "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4" 1440 | }, 1441 | "dist": { 1442 | "type": "zip", 1443 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", 1444 | "reference": "ce474bdd1a34744d7ac5d6aad3a46d48d9bac4c4", 1445 | "shasum": "" 1446 | }, 1447 | "require": { 1448 | "php": ">=5.3.3", 1449 | "sebastian/recursion-context": "~2.0" 1450 | }, 1451 | "require-dev": { 1452 | "ext-mbstring": "*", 1453 | "phpunit/phpunit": "~4.4" 1454 | }, 1455 | "type": "library", 1456 | "extra": { 1457 | "branch-alias": { 1458 | "dev-master": "2.0.x-dev" 1459 | } 1460 | }, 1461 | "autoload": { 1462 | "classmap": [ 1463 | "src/" 1464 | ] 1465 | }, 1466 | "notification-url": "https://packagist.org/downloads/", 1467 | "license": [ 1468 | "BSD-3-Clause" 1469 | ], 1470 | "authors": [ 1471 | { 1472 | "name": "Jeff Welch", 1473 | "email": "whatthejeff@gmail.com" 1474 | }, 1475 | { 1476 | "name": "Volker Dusch", 1477 | "email": "github@wallbash.com" 1478 | }, 1479 | { 1480 | "name": "Bernhard Schussek", 1481 | "email": "bschussek@2bepublished.at" 1482 | }, 1483 | { 1484 | "name": "Sebastian Bergmann", 1485 | "email": "sebastian@phpunit.de" 1486 | }, 1487 | { 1488 | "name": "Adam Harvey", 1489 | "email": "aharvey@php.net" 1490 | } 1491 | ], 1492 | "description": "Provides the functionality to export PHP variables for visualization", 1493 | "homepage": "http://www.github.com/sebastianbergmann/exporter", 1494 | "keywords": [ 1495 | "export", 1496 | "exporter" 1497 | ], 1498 | "time": "2016-11-19T08:54:04+00:00" 1499 | }, 1500 | { 1501 | "name": "sebastian/global-state", 1502 | "version": "1.1.1", 1503 | "source": { 1504 | "type": "git", 1505 | "url": "https://github.com/sebastianbergmann/global-state.git", 1506 | "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" 1507 | }, 1508 | "dist": { 1509 | "type": "zip", 1510 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", 1511 | "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", 1512 | "shasum": "" 1513 | }, 1514 | "require": { 1515 | "php": ">=5.3.3" 1516 | }, 1517 | "require-dev": { 1518 | "phpunit/phpunit": "~4.2" 1519 | }, 1520 | "suggest": { 1521 | "ext-uopz": "*" 1522 | }, 1523 | "type": "library", 1524 | "extra": { 1525 | "branch-alias": { 1526 | "dev-master": "1.0-dev" 1527 | } 1528 | }, 1529 | "autoload": { 1530 | "classmap": [ 1531 | "src/" 1532 | ] 1533 | }, 1534 | "notification-url": "https://packagist.org/downloads/", 1535 | "license": [ 1536 | "BSD-3-Clause" 1537 | ], 1538 | "authors": [ 1539 | { 1540 | "name": "Sebastian Bergmann", 1541 | "email": "sebastian@phpunit.de" 1542 | } 1543 | ], 1544 | "description": "Snapshotting of global state", 1545 | "homepage": "http://www.github.com/sebastianbergmann/global-state", 1546 | "keywords": [ 1547 | "global state" 1548 | ], 1549 | "time": "2015-10-12T03:26:01+00:00" 1550 | }, 1551 | { 1552 | "name": "sebastian/object-enumerator", 1553 | "version": "2.0.1", 1554 | "source": { 1555 | "type": "git", 1556 | "url": "https://github.com/sebastianbergmann/object-enumerator.git", 1557 | "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7" 1558 | }, 1559 | "dist": { 1560 | "type": "zip", 1561 | "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1311872ac850040a79c3c058bea3e22d0f09cbb7", 1562 | "reference": "1311872ac850040a79c3c058bea3e22d0f09cbb7", 1563 | "shasum": "" 1564 | }, 1565 | "require": { 1566 | "php": ">=5.6", 1567 | "sebastian/recursion-context": "~2.0" 1568 | }, 1569 | "require-dev": { 1570 | "phpunit/phpunit": "~5" 1571 | }, 1572 | "type": "library", 1573 | "extra": { 1574 | "branch-alias": { 1575 | "dev-master": "2.0.x-dev" 1576 | } 1577 | }, 1578 | "autoload": { 1579 | "classmap": [ 1580 | "src/" 1581 | ] 1582 | }, 1583 | "notification-url": "https://packagist.org/downloads/", 1584 | "license": [ 1585 | "BSD-3-Clause" 1586 | ], 1587 | "authors": [ 1588 | { 1589 | "name": "Sebastian Bergmann", 1590 | "email": "sebastian@phpunit.de" 1591 | } 1592 | ], 1593 | "description": "Traverses array structures and object graphs to enumerate all referenced objects", 1594 | "homepage": "https://github.com/sebastianbergmann/object-enumerator/", 1595 | "time": "2017-02-18T15:18:39+00:00" 1596 | }, 1597 | { 1598 | "name": "sebastian/recursion-context", 1599 | "version": "2.0.0", 1600 | "source": { 1601 | "type": "git", 1602 | "url": "https://github.com/sebastianbergmann/recursion-context.git", 1603 | "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a" 1604 | }, 1605 | "dist": { 1606 | "type": "zip", 1607 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/2c3ba150cbec723aa057506e73a8d33bdb286c9a", 1608 | "reference": "2c3ba150cbec723aa057506e73a8d33bdb286c9a", 1609 | "shasum": "" 1610 | }, 1611 | "require": { 1612 | "php": ">=5.3.3" 1613 | }, 1614 | "require-dev": { 1615 | "phpunit/phpunit": "~4.4" 1616 | }, 1617 | "type": "library", 1618 | "extra": { 1619 | "branch-alias": { 1620 | "dev-master": "2.0.x-dev" 1621 | } 1622 | }, 1623 | "autoload": { 1624 | "classmap": [ 1625 | "src/" 1626 | ] 1627 | }, 1628 | "notification-url": "https://packagist.org/downloads/", 1629 | "license": [ 1630 | "BSD-3-Clause" 1631 | ], 1632 | "authors": [ 1633 | { 1634 | "name": "Jeff Welch", 1635 | "email": "whatthejeff@gmail.com" 1636 | }, 1637 | { 1638 | "name": "Sebastian Bergmann", 1639 | "email": "sebastian@phpunit.de" 1640 | }, 1641 | { 1642 | "name": "Adam Harvey", 1643 | "email": "aharvey@php.net" 1644 | } 1645 | ], 1646 | "description": "Provides functionality to recursively process PHP variables", 1647 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context", 1648 | "time": "2016-11-19T07:33:16+00:00" 1649 | }, 1650 | { 1651 | "name": "sebastian/resource-operations", 1652 | "version": "1.0.0", 1653 | "source": { 1654 | "type": "git", 1655 | "url": "https://github.com/sebastianbergmann/resource-operations.git", 1656 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" 1657 | }, 1658 | "dist": { 1659 | "type": "zip", 1660 | "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", 1661 | "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", 1662 | "shasum": "" 1663 | }, 1664 | "require": { 1665 | "php": ">=5.6.0" 1666 | }, 1667 | "type": "library", 1668 | "extra": { 1669 | "branch-alias": { 1670 | "dev-master": "1.0.x-dev" 1671 | } 1672 | }, 1673 | "autoload": { 1674 | "classmap": [ 1675 | "src/" 1676 | ] 1677 | }, 1678 | "notification-url": "https://packagist.org/downloads/", 1679 | "license": [ 1680 | "BSD-3-Clause" 1681 | ], 1682 | "authors": [ 1683 | { 1684 | "name": "Sebastian Bergmann", 1685 | "email": "sebastian@phpunit.de" 1686 | } 1687 | ], 1688 | "description": "Provides a list of PHP built-in functions that operate on resources", 1689 | "homepage": "https://www.github.com/sebastianbergmann/resource-operations", 1690 | "time": "2015-07-28T20:34:47+00:00" 1691 | }, 1692 | { 1693 | "name": "sebastian/version", 1694 | "version": "2.0.1", 1695 | "source": { 1696 | "type": "git", 1697 | "url": "https://github.com/sebastianbergmann/version.git", 1698 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" 1699 | }, 1700 | "dist": { 1701 | "type": "zip", 1702 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", 1703 | "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", 1704 | "shasum": "" 1705 | }, 1706 | "require": { 1707 | "php": ">=5.6" 1708 | }, 1709 | "type": "library", 1710 | "extra": { 1711 | "branch-alias": { 1712 | "dev-master": "2.0.x-dev" 1713 | } 1714 | }, 1715 | "autoload": { 1716 | "classmap": [ 1717 | "src/" 1718 | ] 1719 | }, 1720 | "notification-url": "https://packagist.org/downloads/", 1721 | "license": [ 1722 | "BSD-3-Clause" 1723 | ], 1724 | "authors": [ 1725 | { 1726 | "name": "Sebastian Bergmann", 1727 | "email": "sebastian@phpunit.de", 1728 | "role": "lead" 1729 | } 1730 | ], 1731 | "description": "Library that helps with managing the version number of Git-hosted PHP projects", 1732 | "homepage": "https://github.com/sebastianbergmann/version", 1733 | "time": "2016-10-03T07:35:21+00:00" 1734 | }, 1735 | { 1736 | "name": "symfony/console", 1737 | "version": "v4.4.30", 1738 | "source": { 1739 | "type": "git", 1740 | "url": "https://github.com/symfony/console.git", 1741 | "reference": "a3f7189a0665ee33b50e9e228c46f50f5acbed22" 1742 | }, 1743 | "dist": { 1744 | "type": "zip", 1745 | "url": "https://api.github.com/repos/symfony/console/zipball/a3f7189a0665ee33b50e9e228c46f50f5acbed22", 1746 | "reference": "a3f7189a0665ee33b50e9e228c46f50f5acbed22", 1747 | "shasum": "" 1748 | }, 1749 | "require": { 1750 | "php": ">=7.1.3", 1751 | "symfony/polyfill-mbstring": "~1.0", 1752 | "symfony/polyfill-php73": "^1.8", 1753 | "symfony/polyfill-php80": "^1.16", 1754 | "symfony/service-contracts": "^1.1|^2" 1755 | }, 1756 | "conflict": { 1757 | "psr/log": ">=3", 1758 | "symfony/dependency-injection": "<3.4", 1759 | "symfony/event-dispatcher": "<4.3|>=5", 1760 | "symfony/lock": "<4.4", 1761 | "symfony/process": "<3.3" 1762 | }, 1763 | "provide": { 1764 | "psr/log-implementation": "1.0|2.0" 1765 | }, 1766 | "require-dev": { 1767 | "psr/log": "^1|^2", 1768 | "symfony/config": "^3.4|^4.0|^5.0", 1769 | "symfony/dependency-injection": "^3.4|^4.0|^5.0", 1770 | "symfony/event-dispatcher": "^4.3", 1771 | "symfony/lock": "^4.4|^5.0", 1772 | "symfony/process": "^3.4|^4.0|^5.0", 1773 | "symfony/var-dumper": "^4.3|^5.0" 1774 | }, 1775 | "suggest": { 1776 | "psr/log": "For using the console logger", 1777 | "symfony/event-dispatcher": "", 1778 | "symfony/lock": "", 1779 | "symfony/process": "" 1780 | }, 1781 | "type": "library", 1782 | "autoload": { 1783 | "psr-4": { 1784 | "Symfony\\Component\\Console\\": "" 1785 | }, 1786 | "exclude-from-classmap": [ 1787 | "/Tests/" 1788 | ] 1789 | }, 1790 | "notification-url": "https://packagist.org/downloads/", 1791 | "license": [ 1792 | "MIT" 1793 | ], 1794 | "authors": [ 1795 | { 1796 | "name": "Fabien Potencier", 1797 | "email": "fabien@symfony.com" 1798 | }, 1799 | { 1800 | "name": "Symfony Community", 1801 | "homepage": "https://symfony.com/contributors" 1802 | } 1803 | ], 1804 | "description": "Eases the creation of beautiful and testable command line interfaces", 1805 | "homepage": "https://symfony.com", 1806 | "funding": [ 1807 | { 1808 | "url": "https://symfony.com/sponsor", 1809 | "type": "custom" 1810 | }, 1811 | { 1812 | "url": "https://github.com/fabpot", 1813 | "type": "github" 1814 | }, 1815 | { 1816 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1817 | "type": "tidelift" 1818 | } 1819 | ], 1820 | "time": "2021-08-25T19:27:26+00:00" 1821 | }, 1822 | { 1823 | "name": "symfony/css-selector", 1824 | "version": "v4.4.27", 1825 | "source": { 1826 | "type": "git", 1827 | "url": "https://github.com/symfony/css-selector.git", 1828 | "reference": "5194f18bd80d106f11efa8f7cd0fbdcc3af96ce6" 1829 | }, 1830 | "dist": { 1831 | "type": "zip", 1832 | "url": "https://api.github.com/repos/symfony/css-selector/zipball/5194f18bd80d106f11efa8f7cd0fbdcc3af96ce6", 1833 | "reference": "5194f18bd80d106f11efa8f7cd0fbdcc3af96ce6", 1834 | "shasum": "" 1835 | }, 1836 | "require": { 1837 | "php": ">=7.1.3", 1838 | "symfony/polyfill-php80": "^1.16" 1839 | }, 1840 | "type": "library", 1841 | "autoload": { 1842 | "psr-4": { 1843 | "Symfony\\Component\\CssSelector\\": "" 1844 | }, 1845 | "exclude-from-classmap": [ 1846 | "/Tests/" 1847 | ] 1848 | }, 1849 | "notification-url": "https://packagist.org/downloads/", 1850 | "license": [ 1851 | "MIT" 1852 | ], 1853 | "authors": [ 1854 | { 1855 | "name": "Fabien Potencier", 1856 | "email": "fabien@symfony.com" 1857 | }, 1858 | { 1859 | "name": "Jean-François Simon", 1860 | "email": "jeanfrancois.simon@sensiolabs.com" 1861 | }, 1862 | { 1863 | "name": "Symfony Community", 1864 | "homepage": "https://symfony.com/contributors" 1865 | } 1866 | ], 1867 | "description": "Converts CSS selectors to XPath expressions", 1868 | "homepage": "https://symfony.com", 1869 | "funding": [ 1870 | { 1871 | "url": "https://symfony.com/sponsor", 1872 | "type": "custom" 1873 | }, 1874 | { 1875 | "url": "https://github.com/fabpot", 1876 | "type": "github" 1877 | }, 1878 | { 1879 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1880 | "type": "tidelift" 1881 | } 1882 | ], 1883 | "time": "2021-07-21T12:19:41+00:00" 1884 | }, 1885 | { 1886 | "name": "symfony/event-dispatcher", 1887 | "version": "v4.4.30", 1888 | "source": { 1889 | "type": "git", 1890 | "url": "https://github.com/symfony/event-dispatcher.git", 1891 | "reference": "2fe81680070043c4c80e7cedceb797e34f377bac" 1892 | }, 1893 | "dist": { 1894 | "type": "zip", 1895 | "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2fe81680070043c4c80e7cedceb797e34f377bac", 1896 | "reference": "2fe81680070043c4c80e7cedceb797e34f377bac", 1897 | "shasum": "" 1898 | }, 1899 | "require": { 1900 | "php": ">=7.1.3", 1901 | "symfony/event-dispatcher-contracts": "^1.1", 1902 | "symfony/polyfill-php80": "^1.16" 1903 | }, 1904 | "conflict": { 1905 | "symfony/dependency-injection": "<3.4" 1906 | }, 1907 | "provide": { 1908 | "psr/event-dispatcher-implementation": "1.0", 1909 | "symfony/event-dispatcher-implementation": "1.1" 1910 | }, 1911 | "require-dev": { 1912 | "psr/log": "^1|^2|^3", 1913 | "symfony/config": "^3.4|^4.0|^5.0", 1914 | "symfony/dependency-injection": "^3.4|^4.0|^5.0", 1915 | "symfony/error-handler": "~3.4|~4.4", 1916 | "symfony/expression-language": "^3.4|^4.0|^5.0", 1917 | "symfony/http-foundation": "^3.4|^4.0|^5.0", 1918 | "symfony/service-contracts": "^1.1|^2", 1919 | "symfony/stopwatch": "^3.4|^4.0|^5.0" 1920 | }, 1921 | "suggest": { 1922 | "symfony/dependency-injection": "", 1923 | "symfony/http-kernel": "" 1924 | }, 1925 | "type": "library", 1926 | "autoload": { 1927 | "psr-4": { 1928 | "Symfony\\Component\\EventDispatcher\\": "" 1929 | }, 1930 | "exclude-from-classmap": [ 1931 | "/Tests/" 1932 | ] 1933 | }, 1934 | "notification-url": "https://packagist.org/downloads/", 1935 | "license": [ 1936 | "MIT" 1937 | ], 1938 | "authors": [ 1939 | { 1940 | "name": "Fabien Potencier", 1941 | "email": "fabien@symfony.com" 1942 | }, 1943 | { 1944 | "name": "Symfony Community", 1945 | "homepage": "https://symfony.com/contributors" 1946 | } 1947 | ], 1948 | "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", 1949 | "homepage": "https://symfony.com", 1950 | "funding": [ 1951 | { 1952 | "url": "https://symfony.com/sponsor", 1953 | "type": "custom" 1954 | }, 1955 | { 1956 | "url": "https://github.com/fabpot", 1957 | "type": "github" 1958 | }, 1959 | { 1960 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 1961 | "type": "tidelift" 1962 | } 1963 | ], 1964 | "time": "2021-08-04T20:31:23+00:00" 1965 | }, 1966 | { 1967 | "name": "symfony/event-dispatcher-contracts", 1968 | "version": "v1.1.9", 1969 | "source": { 1970 | "type": "git", 1971 | "url": "https://github.com/symfony/event-dispatcher-contracts.git", 1972 | "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7" 1973 | }, 1974 | "dist": { 1975 | "type": "zip", 1976 | "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/84e23fdcd2517bf37aecbd16967e83f0caee25a7", 1977 | "reference": "84e23fdcd2517bf37aecbd16967e83f0caee25a7", 1978 | "shasum": "" 1979 | }, 1980 | "require": { 1981 | "php": ">=7.1.3" 1982 | }, 1983 | "suggest": { 1984 | "psr/event-dispatcher": "", 1985 | "symfony/event-dispatcher-implementation": "" 1986 | }, 1987 | "type": "library", 1988 | "extra": { 1989 | "branch-alias": { 1990 | "dev-master": "1.1-dev" 1991 | }, 1992 | "thanks": { 1993 | "name": "symfony/contracts", 1994 | "url": "https://github.com/symfony/contracts" 1995 | } 1996 | }, 1997 | "autoload": { 1998 | "psr-4": { 1999 | "Symfony\\Contracts\\EventDispatcher\\": "" 2000 | } 2001 | }, 2002 | "notification-url": "https://packagist.org/downloads/", 2003 | "license": [ 2004 | "MIT" 2005 | ], 2006 | "authors": [ 2007 | { 2008 | "name": "Nicolas Grekas", 2009 | "email": "p@tchwork.com" 2010 | }, 2011 | { 2012 | "name": "Symfony Community", 2013 | "homepage": "https://symfony.com/contributors" 2014 | } 2015 | ], 2016 | "description": "Generic abstractions related to dispatching event", 2017 | "homepage": "https://symfony.com", 2018 | "keywords": [ 2019 | "abstractions", 2020 | "contracts", 2021 | "decoupling", 2022 | "interfaces", 2023 | "interoperability", 2024 | "standards" 2025 | ], 2026 | "funding": [ 2027 | { 2028 | "url": "https://symfony.com/sponsor", 2029 | "type": "custom" 2030 | }, 2031 | { 2032 | "url": "https://github.com/fabpot", 2033 | "type": "github" 2034 | }, 2035 | { 2036 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2037 | "type": "tidelift" 2038 | } 2039 | ], 2040 | "time": "2020-07-06T13:19:58+00:00" 2041 | }, 2042 | { 2043 | "name": "symfony/finder", 2044 | "version": "v4.4.30", 2045 | "source": { 2046 | "type": "git", 2047 | "url": "https://github.com/symfony/finder.git", 2048 | "reference": "70362f1e112280d75b30087c7598b837c1b468b6" 2049 | }, 2050 | "dist": { 2051 | "type": "zip", 2052 | "url": "https://api.github.com/repos/symfony/finder/zipball/70362f1e112280d75b30087c7598b837c1b468b6", 2053 | "reference": "70362f1e112280d75b30087c7598b837c1b468b6", 2054 | "shasum": "" 2055 | }, 2056 | "require": { 2057 | "php": ">=7.1.3", 2058 | "symfony/polyfill-php80": "^1.16" 2059 | }, 2060 | "type": "library", 2061 | "autoload": { 2062 | "psr-4": { 2063 | "Symfony\\Component\\Finder\\": "" 2064 | }, 2065 | "exclude-from-classmap": [ 2066 | "/Tests/" 2067 | ] 2068 | }, 2069 | "notification-url": "https://packagist.org/downloads/", 2070 | "license": [ 2071 | "MIT" 2072 | ], 2073 | "authors": [ 2074 | { 2075 | "name": "Fabien Potencier", 2076 | "email": "fabien@symfony.com" 2077 | }, 2078 | { 2079 | "name": "Symfony Community", 2080 | "homepage": "https://symfony.com/contributors" 2081 | } 2082 | ], 2083 | "description": "Finds files and directories via an intuitive fluent interface", 2084 | "homepage": "https://symfony.com", 2085 | "funding": [ 2086 | { 2087 | "url": "https://symfony.com/sponsor", 2088 | "type": "custom" 2089 | }, 2090 | { 2091 | "url": "https://github.com/fabpot", 2092 | "type": "github" 2093 | }, 2094 | { 2095 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2096 | "type": "tidelift" 2097 | } 2098 | ], 2099 | "time": "2021-08-04T20:31:23+00:00" 2100 | }, 2101 | { 2102 | "name": "symfony/polyfill-ctype", 2103 | "version": "v1.23.0", 2104 | "source": { 2105 | "type": "git", 2106 | "url": "https://github.com/symfony/polyfill-ctype.git", 2107 | "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" 2108 | }, 2109 | "dist": { 2110 | "type": "zip", 2111 | "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", 2112 | "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", 2113 | "shasum": "" 2114 | }, 2115 | "require": { 2116 | "php": ">=7.1" 2117 | }, 2118 | "suggest": { 2119 | "ext-ctype": "For best performance" 2120 | }, 2121 | "type": "library", 2122 | "extra": { 2123 | "branch-alias": { 2124 | "dev-main": "1.23-dev" 2125 | }, 2126 | "thanks": { 2127 | "name": "symfony/polyfill", 2128 | "url": "https://github.com/symfony/polyfill" 2129 | } 2130 | }, 2131 | "autoload": { 2132 | "psr-4": { 2133 | "Symfony\\Polyfill\\Ctype\\": "" 2134 | }, 2135 | "files": [ 2136 | "bootstrap.php" 2137 | ] 2138 | }, 2139 | "notification-url": "https://packagist.org/downloads/", 2140 | "license": [ 2141 | "MIT" 2142 | ], 2143 | "authors": [ 2144 | { 2145 | "name": "Gert de Pagter", 2146 | "email": "BackEndTea@gmail.com" 2147 | }, 2148 | { 2149 | "name": "Symfony Community", 2150 | "homepage": "https://symfony.com/contributors" 2151 | } 2152 | ], 2153 | "description": "Symfony polyfill for ctype functions", 2154 | "homepage": "https://symfony.com", 2155 | "keywords": [ 2156 | "compatibility", 2157 | "ctype", 2158 | "polyfill", 2159 | "portable" 2160 | ], 2161 | "funding": [ 2162 | { 2163 | "url": "https://symfony.com/sponsor", 2164 | "type": "custom" 2165 | }, 2166 | { 2167 | "url": "https://github.com/fabpot", 2168 | "type": "github" 2169 | }, 2170 | { 2171 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2172 | "type": "tidelift" 2173 | } 2174 | ], 2175 | "time": "2021-02-19T12:13:01+00:00" 2176 | }, 2177 | { 2178 | "name": "symfony/polyfill-mbstring", 2179 | "version": "v1.23.1", 2180 | "source": { 2181 | "type": "git", 2182 | "url": "https://github.com/symfony/polyfill-mbstring.git", 2183 | "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" 2184 | }, 2185 | "dist": { 2186 | "type": "zip", 2187 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", 2188 | "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", 2189 | "shasum": "" 2190 | }, 2191 | "require": { 2192 | "php": ">=7.1" 2193 | }, 2194 | "suggest": { 2195 | "ext-mbstring": "For best performance" 2196 | }, 2197 | "type": "library", 2198 | "extra": { 2199 | "branch-alias": { 2200 | "dev-main": "1.23-dev" 2201 | }, 2202 | "thanks": { 2203 | "name": "symfony/polyfill", 2204 | "url": "https://github.com/symfony/polyfill" 2205 | } 2206 | }, 2207 | "autoload": { 2208 | "psr-4": { 2209 | "Symfony\\Polyfill\\Mbstring\\": "" 2210 | }, 2211 | "files": [ 2212 | "bootstrap.php" 2213 | ] 2214 | }, 2215 | "notification-url": "https://packagist.org/downloads/", 2216 | "license": [ 2217 | "MIT" 2218 | ], 2219 | "authors": [ 2220 | { 2221 | "name": "Nicolas Grekas", 2222 | "email": "p@tchwork.com" 2223 | }, 2224 | { 2225 | "name": "Symfony Community", 2226 | "homepage": "https://symfony.com/contributors" 2227 | } 2228 | ], 2229 | "description": "Symfony polyfill for the Mbstring extension", 2230 | "homepage": "https://symfony.com", 2231 | "keywords": [ 2232 | "compatibility", 2233 | "mbstring", 2234 | "polyfill", 2235 | "portable", 2236 | "shim" 2237 | ], 2238 | "funding": [ 2239 | { 2240 | "url": "https://symfony.com/sponsor", 2241 | "type": "custom" 2242 | }, 2243 | { 2244 | "url": "https://github.com/fabpot", 2245 | "type": "github" 2246 | }, 2247 | { 2248 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2249 | "type": "tidelift" 2250 | } 2251 | ], 2252 | "time": "2021-05-27T12:26:48+00:00" 2253 | }, 2254 | { 2255 | "name": "symfony/polyfill-php73", 2256 | "version": "v1.23.0", 2257 | "source": { 2258 | "type": "git", 2259 | "url": "https://github.com/symfony/polyfill-php73.git", 2260 | "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" 2261 | }, 2262 | "dist": { 2263 | "type": "zip", 2264 | "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", 2265 | "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", 2266 | "shasum": "" 2267 | }, 2268 | "require": { 2269 | "php": ">=7.1" 2270 | }, 2271 | "type": "library", 2272 | "extra": { 2273 | "branch-alias": { 2274 | "dev-main": "1.23-dev" 2275 | }, 2276 | "thanks": { 2277 | "name": "symfony/polyfill", 2278 | "url": "https://github.com/symfony/polyfill" 2279 | } 2280 | }, 2281 | "autoload": { 2282 | "psr-4": { 2283 | "Symfony\\Polyfill\\Php73\\": "" 2284 | }, 2285 | "files": [ 2286 | "bootstrap.php" 2287 | ], 2288 | "classmap": [ 2289 | "Resources/stubs" 2290 | ] 2291 | }, 2292 | "notification-url": "https://packagist.org/downloads/", 2293 | "license": [ 2294 | "MIT" 2295 | ], 2296 | "authors": [ 2297 | { 2298 | "name": "Nicolas Grekas", 2299 | "email": "p@tchwork.com" 2300 | }, 2301 | { 2302 | "name": "Symfony Community", 2303 | "homepage": "https://symfony.com/contributors" 2304 | } 2305 | ], 2306 | "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", 2307 | "homepage": "https://symfony.com", 2308 | "keywords": [ 2309 | "compatibility", 2310 | "polyfill", 2311 | "portable", 2312 | "shim" 2313 | ], 2314 | "funding": [ 2315 | { 2316 | "url": "https://symfony.com/sponsor", 2317 | "type": "custom" 2318 | }, 2319 | { 2320 | "url": "https://github.com/fabpot", 2321 | "type": "github" 2322 | }, 2323 | { 2324 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2325 | "type": "tidelift" 2326 | } 2327 | ], 2328 | "time": "2021-02-19T12:13:01+00:00" 2329 | }, 2330 | { 2331 | "name": "symfony/polyfill-php80", 2332 | "version": "v1.23.1", 2333 | "source": { 2334 | "type": "git", 2335 | "url": "https://github.com/symfony/polyfill-php80.git", 2336 | "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be" 2337 | }, 2338 | "dist": { 2339 | "type": "zip", 2340 | "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/1100343ed1a92e3a38f9ae122fc0eb21602547be", 2341 | "reference": "1100343ed1a92e3a38f9ae122fc0eb21602547be", 2342 | "shasum": "" 2343 | }, 2344 | "require": { 2345 | "php": ">=7.1" 2346 | }, 2347 | "type": "library", 2348 | "extra": { 2349 | "branch-alias": { 2350 | "dev-main": "1.23-dev" 2351 | }, 2352 | "thanks": { 2353 | "name": "symfony/polyfill", 2354 | "url": "https://github.com/symfony/polyfill" 2355 | } 2356 | }, 2357 | "autoload": { 2358 | "psr-4": { 2359 | "Symfony\\Polyfill\\Php80\\": "" 2360 | }, 2361 | "files": [ 2362 | "bootstrap.php" 2363 | ], 2364 | "classmap": [ 2365 | "Resources/stubs" 2366 | ] 2367 | }, 2368 | "notification-url": "https://packagist.org/downloads/", 2369 | "license": [ 2370 | "MIT" 2371 | ], 2372 | "authors": [ 2373 | { 2374 | "name": "Ion Bazan", 2375 | "email": "ion.bazan@gmail.com" 2376 | }, 2377 | { 2378 | "name": "Nicolas Grekas", 2379 | "email": "p@tchwork.com" 2380 | }, 2381 | { 2382 | "name": "Symfony Community", 2383 | "homepage": "https://symfony.com/contributors" 2384 | } 2385 | ], 2386 | "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", 2387 | "homepage": "https://symfony.com", 2388 | "keywords": [ 2389 | "compatibility", 2390 | "polyfill", 2391 | "portable", 2392 | "shim" 2393 | ], 2394 | "funding": [ 2395 | { 2396 | "url": "https://symfony.com/sponsor", 2397 | "type": "custom" 2398 | }, 2399 | { 2400 | "url": "https://github.com/fabpot", 2401 | "type": "github" 2402 | }, 2403 | { 2404 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2405 | "type": "tidelift" 2406 | } 2407 | ], 2408 | "time": "2021-07-28T13:41:28+00:00" 2409 | }, 2410 | { 2411 | "name": "symfony/service-contracts", 2412 | "version": "v1.1.9", 2413 | "source": { 2414 | "type": "git", 2415 | "url": "https://github.com/symfony/service-contracts.git", 2416 | "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26" 2417 | }, 2418 | "dist": { 2419 | "type": "zip", 2420 | "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b776d18b303a39f56c63747bcb977ad4b27aca26", 2421 | "reference": "b776d18b303a39f56c63747bcb977ad4b27aca26", 2422 | "shasum": "" 2423 | }, 2424 | "require": { 2425 | "php": ">=7.1.3", 2426 | "psr/container": "^1.0" 2427 | }, 2428 | "suggest": { 2429 | "symfony/service-implementation": "" 2430 | }, 2431 | "type": "library", 2432 | "extra": { 2433 | "branch-alias": { 2434 | "dev-master": "1.1-dev" 2435 | }, 2436 | "thanks": { 2437 | "name": "symfony/contracts", 2438 | "url": "https://github.com/symfony/contracts" 2439 | } 2440 | }, 2441 | "autoload": { 2442 | "psr-4": { 2443 | "Symfony\\Contracts\\Service\\": "" 2444 | } 2445 | }, 2446 | "notification-url": "https://packagist.org/downloads/", 2447 | "license": [ 2448 | "MIT" 2449 | ], 2450 | "authors": [ 2451 | { 2452 | "name": "Nicolas Grekas", 2453 | "email": "p@tchwork.com" 2454 | }, 2455 | { 2456 | "name": "Symfony Community", 2457 | "homepage": "https://symfony.com/contributors" 2458 | } 2459 | ], 2460 | "description": "Generic abstractions related to writing services", 2461 | "homepage": "https://symfony.com", 2462 | "keywords": [ 2463 | "abstractions", 2464 | "contracts", 2465 | "decoupling", 2466 | "interfaces", 2467 | "interoperability", 2468 | "standards" 2469 | ], 2470 | "funding": [ 2471 | { 2472 | "url": "https://symfony.com/sponsor", 2473 | "type": "custom" 2474 | }, 2475 | { 2476 | "url": "https://github.com/fabpot", 2477 | "type": "github" 2478 | }, 2479 | { 2480 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2481 | "type": "tidelift" 2482 | } 2483 | ], 2484 | "time": "2020-07-06T13:19:58+00:00" 2485 | }, 2486 | { 2487 | "name": "symfony/yaml", 2488 | "version": "v4.4.29", 2489 | "source": { 2490 | "type": "git", 2491 | "url": "https://github.com/symfony/yaml.git", 2492 | "reference": "3abcc4db06d4e776825eaa3ed8ad924d5bc7432a" 2493 | }, 2494 | "dist": { 2495 | "type": "zip", 2496 | "url": "https://api.github.com/repos/symfony/yaml/zipball/3abcc4db06d4e776825eaa3ed8ad924d5bc7432a", 2497 | "reference": "3abcc4db06d4e776825eaa3ed8ad924d5bc7432a", 2498 | "shasum": "" 2499 | }, 2500 | "require": { 2501 | "php": ">=7.1.3", 2502 | "symfony/polyfill-ctype": "~1.8" 2503 | }, 2504 | "conflict": { 2505 | "symfony/console": "<3.4" 2506 | }, 2507 | "require-dev": { 2508 | "symfony/console": "^3.4|^4.0|^5.0" 2509 | }, 2510 | "suggest": { 2511 | "symfony/console": "For validating YAML files using the lint command" 2512 | }, 2513 | "type": "library", 2514 | "autoload": { 2515 | "psr-4": { 2516 | "Symfony\\Component\\Yaml\\": "" 2517 | }, 2518 | "exclude-from-classmap": [ 2519 | "/Tests/" 2520 | ] 2521 | }, 2522 | "notification-url": "https://packagist.org/downloads/", 2523 | "license": [ 2524 | "MIT" 2525 | ], 2526 | "authors": [ 2527 | { 2528 | "name": "Fabien Potencier", 2529 | "email": "fabien@symfony.com" 2530 | }, 2531 | { 2532 | "name": "Symfony Community", 2533 | "homepage": "https://symfony.com/contributors" 2534 | } 2535 | ], 2536 | "description": "Loads and dumps YAML files", 2537 | "homepage": "https://symfony.com", 2538 | "funding": [ 2539 | { 2540 | "url": "https://symfony.com/sponsor", 2541 | "type": "custom" 2542 | }, 2543 | { 2544 | "url": "https://github.com/fabpot", 2545 | "type": "github" 2546 | }, 2547 | { 2548 | "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", 2549 | "type": "tidelift" 2550 | } 2551 | ], 2552 | "time": "2021-07-27T16:19:30+00:00" 2553 | }, 2554 | { 2555 | "name": "webmozart/assert", 2556 | "version": "1.9.1", 2557 | "source": { 2558 | "type": "git", 2559 | "url": "https://github.com/webmozarts/assert.git", 2560 | "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" 2561 | }, 2562 | "dist": { 2563 | "type": "zip", 2564 | "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", 2565 | "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", 2566 | "shasum": "" 2567 | }, 2568 | "require": { 2569 | "php": "^5.3.3 || ^7.0 || ^8.0", 2570 | "symfony/polyfill-ctype": "^1.8" 2571 | }, 2572 | "conflict": { 2573 | "phpstan/phpstan": "<0.12.20", 2574 | "vimeo/psalm": "<3.9.1" 2575 | }, 2576 | "require-dev": { 2577 | "phpunit/phpunit": "^4.8.36 || ^7.5.13" 2578 | }, 2579 | "type": "library", 2580 | "autoload": { 2581 | "psr-4": { 2582 | "Webmozart\\Assert\\": "src/" 2583 | } 2584 | }, 2585 | "notification-url": "https://packagist.org/downloads/", 2586 | "license": [ 2587 | "MIT" 2588 | ], 2589 | "authors": [ 2590 | { 2591 | "name": "Bernhard Schussek", 2592 | "email": "bschussek@gmail.com" 2593 | } 2594 | ], 2595 | "description": "Assertions to validate method input/output with nice error messages.", 2596 | "keywords": [ 2597 | "assert", 2598 | "check", 2599 | "validate" 2600 | ], 2601 | "time": "2020-07-08T17:02:28+00:00" 2602 | } 2603 | ], 2604 | "packages-dev": [], 2605 | "aliases": [], 2606 | "minimum-stability": "stable", 2607 | "stability-flags": [], 2608 | "prefer-stable": false, 2609 | "prefer-lowest": false, 2610 | "platform": { 2611 | "php": ">=5.6.0" 2612 | }, 2613 | "platform-dev": [], 2614 | "plugin-api-version": "1.1.0" 2615 | } 2616 | -------------------------------------------------------------------------------- /src/Codeception/Extension/PhpBuiltinServer.php: -------------------------------------------------------------------------------- 1 | 'beforeSuite' 17 | ]; 18 | 19 | private $requiredFields = ['hostname', 'port', 'documentRoot']; 20 | private $resource; 21 | private $pipes; 22 | 23 | public function __construct($config, $options) 24 | { 25 | if (version_compare(PHP_VERSION, '5.4', '<')) { 26 | throw new ExtensionException($this, 'Requires PHP built-in web server, available since PHP 5.4.0.'); 27 | } 28 | 29 | parent::__construct($config, $options); 30 | $this->validateConfig(); 31 | 32 | if ( 33 | !array_key_exists('startDelay', $this->config) 34 | || !(is_int($this->config['startDelay']) || ctype_digit($this->config['startDelay'])) 35 | ) { 36 | $this->config['startDelay'] = 1; 37 | } 38 | 39 | if (!array_key_exists('autostart', $this->config) || $this->config['autostart']) { 40 | $this->startServer(); 41 | } 42 | } 43 | 44 | public function __destruct() 45 | { 46 | $this->stopServer(); 47 | } 48 | 49 | /** 50 | * this will prevent cloning 51 | */ 52 | private function __clone() 53 | { 54 | } 55 | 56 | /** 57 | * @return string 58 | */ 59 | private function getCommand() 60 | { 61 | $parameters = ''; 62 | if (isset($this->config['router'])) { 63 | $parameters .= ' -dcodecept.user_router="' . $this->config['router'] . '"'; 64 | } 65 | if (isset($this->config['directoryIndex'])) { 66 | $parameters .= ' -dcodecept.directory_index="' . $this->config['directoryIndex'] . '"'; 67 | } 68 | if (isset($this->config['phpIni'])) { 69 | $parameters .= ' --php-ini "' . $this->config['phpIni'] . '"'; 70 | } 71 | if ($this->isRemoteDebug()) { 72 | $parameters .= ' -dxdebug.remote_enable=1'; 73 | } 74 | $parameters .= ' -dcodecept.access_log="' . Configuration::logDir() . 'phpbuiltinserver.access_log.txt' . '"'; 75 | 76 | if (PHP_OS !== 'WINNT' && PHP_OS !== 'WIN32') { 77 | // Platform uses POSIX process handling. Use exec to avoid 78 | // controlling the shell process instead of the PHP 79 | // interpreter. 80 | $exec = 'exec '; 81 | } else { 82 | $exec = ''; 83 | } 84 | 85 | $command = sprintf( 86 | $exec . PHP_BINARY . ' %s -S %s:%s -t "%s" "%s"', 87 | $parameters, 88 | $this->config['hostname'], 89 | $this->config['port'], 90 | realpath($this->config['documentRoot']), 91 | __DIR__ . '/Router.php' 92 | ); 93 | 94 | return $command; 95 | } 96 | 97 | private function isRemoteDebug() 98 | { 99 | return Configuration::isExtensionEnabled('Codeception\Extension\RemoteDebug'); 100 | } 101 | 102 | private function validateConfig() 103 | { 104 | $fields = array_keys($this->config); 105 | if (array_intersect($this->requiredFields, $fields) != $this->requiredFields) { 106 | throw new ModuleConfigException( 107 | get_class($this), 108 | "\nConfig: " . implode(', ', $this->requiredFields) . " are required\n 109 | Please, update the configuration and set all the required fields\n\n" 110 | ); 111 | } 112 | 113 | if (false === realpath($this->config['documentRoot'])) { 114 | throw new ModuleConfigException( 115 | get_class($this), 116 | "\nDocument root does not exist. Please, update the configuration.\n\n" 117 | ); 118 | } 119 | 120 | if (false === is_dir($this->config['documentRoot'])) { 121 | throw new ModuleConfigException( 122 | get_class($this), 123 | "\nDocument root must be a directory. Please, update the configuration.\n\n" 124 | ); 125 | } 126 | } 127 | 128 | public function isRunning() { 129 | return (isset($this->resource) && $this->resource !== null); 130 | } 131 | 132 | public function startServer() 133 | { 134 | if ($this->isRunning()) { 135 | return; 136 | } 137 | 138 | $command = $this->getCommand(); 139 | $descriptorSpec = [ 140 | ['pipe', 'r'], 141 | ['file', Configuration::logDir() . 'phpbuiltinserver.output.txt', 'w'], 142 | ['file', Configuration::logDir() . 'phpbuiltinserver.errors.txt', 'a'] 143 | ]; 144 | $this->resource = proc_open($command, $descriptorSpec, $this->pipes, null, null, ['bypass_shell' => true]); 145 | if (!is_resource($this->resource)) { 146 | throw new ExtensionException($this, 'Failed to start server.'); 147 | } 148 | if (!proc_get_status($this->resource)['running']) { 149 | proc_close($this->resource); 150 | throw new ExtensionException($this, 'Failed to start server.'); 151 | } 152 | 153 | $resource = $this->resource; 154 | register_shutdown_function( 155 | function () use ($resource) { 156 | if (is_resource($resource)) { 157 | proc_terminate($resource); 158 | } 159 | } 160 | ); 161 | 162 | if ($this->config['startDelay'] > 0) { 163 | sleep($this->config['startDelay']); 164 | } 165 | } 166 | 167 | public function stopServer() 168 | { 169 | if ($this->isRunning()) { 170 | foreach ($this->pipes AS $pipe) { 171 | if (is_resource($pipe)) { 172 | fclose($pipe); 173 | } 174 | } 175 | proc_terminate($this->resource, 2); 176 | unset($this->resource); 177 | } 178 | } 179 | 180 | public function beforeSuite() 181 | { 182 | // dummy to keep reference to this instance, so that it wouldn't be destroyed immediately 183 | } 184 | } 185 | -------------------------------------------------------------------------------- /src/Codeception/Extension/Router.php: -------------------------------------------------------------------------------- 1 | wantTo('perform actions and see result'); 4 | $I->amOnPage('/'); 5 | $I->see('It work\'s'); 6 | -------------------------------------------------------------------------------- /tests/data/index.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | It work's 4 | 5 | -------------------------------------------------------------------------------- /tests/log/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tiger-seo/PhpBuiltinServer/8dafe0d0027142c3b9ce0f69a4b850d5a61d0c38/tests/log/.gitkeep -------------------------------------------------------------------------------- /tests/support/UnitGuy.php: -------------------------------------------------------------------------------- 1 | setHeader('X-Requested-With', 'Codeception'); 39 | * $I->amOnPage('test-headers.php'); 40 | * ?> 41 | * ``` 42 | * 43 | * @param string $name the name of the request header 44 | * @param string $value the value to set it to for subsequent 45 | * requests 46 | * @see \Codeception\Module\PhpBrowser::setHeader() 47 | */ 48 | public function setHeader($name, $value) { 49 | return $this->scenario->runStep(new \Codeception\Step\Action('setHeader', func_get_args())); 50 | } 51 | 52 | 53 | /** 54 | * [!] Method is generated. Documentation taken from corresponding module. 55 | * 56 | * Deletes the header with the passed name. Subsequent requests 57 | * will not have the deleted header in its request. 58 | * 59 | * Example: 60 | * ```php 61 | * setHeader('X-Requested-With', 'Codeception'); 63 | * $I->amOnPage('test-headers.php'); 64 | * // ... 65 | * $I->deleteHeader('X-Requested-With'); 66 | * $I->amOnPage('some-other-page.php'); 67 | * ?> 68 | * ``` 69 | * 70 | * @param string $name the name of the header to delete. 71 | * @see \Codeception\Module\PhpBrowser::deleteHeader() 72 | */ 73 | public function deleteHeader($name) { 74 | return $this->scenario->runStep(new \Codeception\Step\Action('deleteHeader', func_get_args())); 75 | } 76 | 77 | 78 | /** 79 | * [!] Method is generated. Documentation taken from corresponding module. 80 | * 81 | * Authenticates user for HTTP_AUTH 82 | * 83 | * @param $username 84 | * @param $password 85 | * @see \Codeception\Module\PhpBrowser::amHttpAuthenticated() 86 | */ 87 | public function amHttpAuthenticated($username, $password) { 88 | return $this->scenario->runStep(new \Codeception\Step\Condition('amHttpAuthenticated', func_get_args())); 89 | } 90 | 91 | 92 | /** 93 | * [!] Method is generated. Documentation taken from corresponding module. 94 | * 95 | * Opens the page for the given relative URI. 96 | * 97 | * ``` php 98 | * amOnPage('/'); 101 | * // opens /register page 102 | * $I->amOnPage('/register'); 103 | * ?> 104 | * ``` 105 | * 106 | * @param $page 107 | * @see \Codeception\Module\PhpBrowser::amOnPage() 108 | */ 109 | public function amOnPage($page) { 110 | return $this->scenario->runStep(new \Codeception\Step\Condition('amOnPage', func_get_args())); 111 | } 112 | 113 | 114 | /** 115 | * [!] Method is generated. Documentation taken from corresponding module. 116 | * 117 | * Open web page at the given absolute URL and sets its hostname as the base host. 118 | * 119 | * ``` php 120 | * amOnUrl('http://codeception.com'); 122 | * $I->amOnPage('/quickstart'); // moves to http://codeception.com/quickstart 123 | * ?> 124 | * ``` 125 | * @see \Codeception\Module\PhpBrowser::amOnUrl() 126 | */ 127 | public function amOnUrl($url) { 128 | return $this->scenario->runStep(new \Codeception\Step\Condition('amOnUrl', func_get_args())); 129 | } 130 | 131 | 132 | /** 133 | * [!] Method is generated. Documentation taken from corresponding module. 134 | * 135 | * Changes the subdomain for the 'url' configuration parameter. 136 | * Does not open a page; use `amOnPage` for that. 137 | * 138 | * ``` php 139 | * amOnSubdomain('user'); 145 | * $I->amOnPage('/'); 146 | * // moves to http://user.mysite.com/ 147 | * ?> 148 | * ``` 149 | * 150 | * @param $subdomain 151 | * 152 | * @return mixed 153 | * @see \Codeception\Module\PhpBrowser::amOnSubdomain() 154 | */ 155 | public function amOnSubdomain($subdomain) { 156 | return $this->scenario->runStep(new \Codeception\Step\Condition('amOnSubdomain', func_get_args())); 157 | } 158 | 159 | 160 | /** 161 | * [!] Method is generated. Documentation taken from corresponding module. 162 | * 163 | * Low-level API method. 164 | * If Codeception commands are not enough, use [Guzzle HTTP Client](http://guzzlephp.org/) methods directly 165 | * 166 | * Example: 167 | * 168 | * ``` php 169 | * executeInGuzzle(function (\GuzzleHttp\Client $client) { 171 | * $client->get('/get', ['query' => ['foo' => 'bar']]); 172 | * }); 173 | * ?> 174 | * ``` 175 | * 176 | * It is not recommended to use this command on a regular basis. 177 | * If Codeception lacks important Guzzle Client methods, implement them and submit patches. 178 | * 179 | * @param callable $function 180 | * @see \Codeception\Module\PhpBrowser::executeInGuzzle() 181 | */ 182 | public function executeInGuzzle($function) { 183 | return $this->scenario->runStep(new \Codeception\Step\Action('executeInGuzzle', func_get_args())); 184 | } 185 | 186 | 187 | /** 188 | * [!] Method is generated. Documentation taken from corresponding module. 189 | * 190 | * Perform a click on a link or a button, given by a locator. 191 | * If a fuzzy locator is given, the page will be searched for a button, link, or image matching the locator string. 192 | * For buttons, the "value" attribute, "name" attribute, and inner text are searched. 193 | * For links, the link text is searched. 194 | * For images, the "alt" attribute and inner text of any parent links are searched. 195 | * 196 | * The second parameter is a context (CSS or XPath locator) to narrow the search. 197 | * 198 | * Note that if the locator matches a button of type `submit`, the form will be submitted. 199 | * 200 | * ``` php 201 | * click('Logout'); 204 | * // button of form 205 | * $I->click('Submit'); 206 | * // CSS button 207 | * $I->click('#form input[type=submit]'); 208 | * // XPath 209 | * $I->click('//form/*[@type=submit]'); 210 | * // link in context 211 | * $I->click('Logout', '#nav'); 212 | * // using strict locator 213 | * $I->click(['link' => 'Login']); 214 | * ?> 215 | * ``` 216 | * 217 | * @param $link 218 | * @param $context 219 | * @see \Codeception\Lib\InnerBrowser::click() 220 | */ 221 | public function click($link, $context = null) { 222 | return $this->scenario->runStep(new \Codeception\Step\Action('click', func_get_args())); 223 | } 224 | 225 | 226 | /** 227 | * [!] Method is generated. Documentation taken from corresponding module. 228 | * 229 | * Checks that the current page contains the given string. 230 | * Specify a locator as the second parameter to match a specific region. 231 | * 232 | * ``` php 233 | * see('Logout'); // I can suppose user is logged in 235 | * $I->see('Sign Up','h1'); // I can suppose it's a signup page 236 | * $I->see('Sign Up','//body/h1'); // with XPath 237 | * ?> 238 | * ``` 239 | * 240 | * @param $text 241 | * @param null $selector 242 | * Conditional Assertion: Test won't be stopped on fail 243 | * @see \Codeception\Lib\InnerBrowser::see() 244 | */ 245 | public function canSee($text, $selector = null) { 246 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('see', func_get_args())); 247 | } 248 | /** 249 | * [!] Method is generated. Documentation taken from corresponding module. 250 | * 251 | * Checks that the current page contains the given string. 252 | * Specify a locator as the second parameter to match a specific region. 253 | * 254 | * ``` php 255 | * see('Logout'); // I can suppose user is logged in 257 | * $I->see('Sign Up','h1'); // I can suppose it's a signup page 258 | * $I->see('Sign Up','//body/h1'); // with XPath 259 | * ?> 260 | * ``` 261 | * 262 | * @param $text 263 | * @param null $selector 264 | * @see \Codeception\Lib\InnerBrowser::see() 265 | */ 266 | public function see($text, $selector = null) { 267 | return $this->scenario->runStep(new \Codeception\Step\Assertion('see', func_get_args())); 268 | } 269 | 270 | 271 | /** 272 | * [!] Method is generated. Documentation taken from corresponding module. 273 | * 274 | * Checks that the current page doesn't contain the text specified. 275 | * Give a locator as the second parameter to match a specific region. 276 | * 277 | * ```php 278 | * dontSee('Login'); // I can suppose user is already logged in 280 | * $I->dontSee('Sign Up','h1'); // I can suppose it's not a signup page 281 | * $I->dontSee('Sign Up','//body/h1'); // with XPath 282 | * ?> 283 | * ``` 284 | * 285 | * @param $text 286 | * @param null $selector 287 | * Conditional Assertion: Test won't be stopped on fail 288 | * @see \Codeception\Lib\InnerBrowser::dontSee() 289 | */ 290 | public function cantSee($text, $selector = null) { 291 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('dontSee', func_get_args())); 292 | } 293 | /** 294 | * [!] Method is generated. Documentation taken from corresponding module. 295 | * 296 | * Checks that the current page doesn't contain the text specified. 297 | * Give a locator as the second parameter to match a specific region. 298 | * 299 | * ```php 300 | * dontSee('Login'); // I can suppose user is already logged in 302 | * $I->dontSee('Sign Up','h1'); // I can suppose it's not a signup page 303 | * $I->dontSee('Sign Up','//body/h1'); // with XPath 304 | * ?> 305 | * ``` 306 | * 307 | * @param $text 308 | * @param null $selector 309 | * @see \Codeception\Lib\InnerBrowser::dontSee() 310 | */ 311 | public function dontSee($text, $selector = null) { 312 | return $this->scenario->runStep(new \Codeception\Step\Assertion('dontSee', func_get_args())); 313 | } 314 | 315 | 316 | /** 317 | * [!] Method is generated. Documentation taken from corresponding module. 318 | * 319 | * Checks that there's a link with the specified text. 320 | * Give a full URL as the second parameter to match links with that exact URL. 321 | * 322 | * ``` php 323 | * seeLink('Logout'); // matches Logout 325 | * $I->seeLink('Logout','/logout'); // matches Logout 326 | * ?> 327 | * ``` 328 | * 329 | * @param $text 330 | * @param null $url 331 | * Conditional Assertion: Test won't be stopped on fail 332 | * @see \Codeception\Lib\InnerBrowser::seeLink() 333 | */ 334 | public function canSeeLink($text, $url = null) { 335 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('seeLink', func_get_args())); 336 | } 337 | /** 338 | * [!] Method is generated. Documentation taken from corresponding module. 339 | * 340 | * Checks that there's a link with the specified text. 341 | * Give a full URL as the second parameter to match links with that exact URL. 342 | * 343 | * ``` php 344 | * seeLink('Logout'); // matches Logout 346 | * $I->seeLink('Logout','/logout'); // matches Logout 347 | * ?> 348 | * ``` 349 | * 350 | * @param $text 351 | * @param null $url 352 | * @see \Codeception\Lib\InnerBrowser::seeLink() 353 | */ 354 | public function seeLink($text, $url = null) { 355 | return $this->scenario->runStep(new \Codeception\Step\Assertion('seeLink', func_get_args())); 356 | } 357 | 358 | 359 | /** 360 | * [!] Method is generated. Documentation taken from corresponding module. 361 | * 362 | * Checks that the page doesn't contain a link with the given string. 363 | * If the second parameter is given, only links with a matching "href" attribute will be checked. 364 | * 365 | * ``` php 366 | * dontSeeLink('Logout'); // I suppose user is not logged in 368 | * $I->dontSeeLink('Checkout now', '/store/cart.php'); 369 | * ?> 370 | * ``` 371 | * 372 | * @param $text 373 | * @param null $url 374 | * Conditional Assertion: Test won't be stopped on fail 375 | * @see \Codeception\Lib\InnerBrowser::dontSeeLink() 376 | */ 377 | public function cantSeeLink($text, $url = null) { 378 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeLink', func_get_args())); 379 | } 380 | /** 381 | * [!] Method is generated. Documentation taken from corresponding module. 382 | * 383 | * Checks that the page doesn't contain a link with the given string. 384 | * If the second parameter is given, only links with a matching "href" attribute will be checked. 385 | * 386 | * ``` php 387 | * dontSeeLink('Logout'); // I suppose user is not logged in 389 | * $I->dontSeeLink('Checkout now', '/store/cart.php'); 390 | * ?> 391 | * ``` 392 | * 393 | * @param $text 394 | * @param null $url 395 | * @see \Codeception\Lib\InnerBrowser::dontSeeLink() 396 | */ 397 | public function dontSeeLink($text, $url = null) { 398 | return $this->scenario->runStep(new \Codeception\Step\Assertion('dontSeeLink', func_get_args())); 399 | } 400 | 401 | 402 | /** 403 | * [!] Method is generated. Documentation taken from corresponding module. 404 | * 405 | * Checks that current URI contains the given string. 406 | * 407 | * ``` php 408 | * seeInCurrentUrl('home'); 411 | * // to match: /users/1 412 | * $I->seeInCurrentUrl('/users/'); 413 | * ?> 414 | * ``` 415 | * 416 | * @param $uri 417 | * Conditional Assertion: Test won't be stopped on fail 418 | * @see \Codeception\Lib\InnerBrowser::seeInCurrentUrl() 419 | */ 420 | public function canSeeInCurrentUrl($uri) { 421 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('seeInCurrentUrl', func_get_args())); 422 | } 423 | /** 424 | * [!] Method is generated. Documentation taken from corresponding module. 425 | * 426 | * Checks that current URI contains the given string. 427 | * 428 | * ``` php 429 | * seeInCurrentUrl('home'); 432 | * // to match: /users/1 433 | * $I->seeInCurrentUrl('/users/'); 434 | * ?> 435 | * ``` 436 | * 437 | * @param $uri 438 | * @see \Codeception\Lib\InnerBrowser::seeInCurrentUrl() 439 | */ 440 | public function seeInCurrentUrl($uri) { 441 | return $this->scenario->runStep(new \Codeception\Step\Assertion('seeInCurrentUrl', func_get_args())); 442 | } 443 | 444 | 445 | /** 446 | * [!] Method is generated. Documentation taken from corresponding module. 447 | * 448 | * Checks that the current URI doesn't contain the given string. 449 | * 450 | * ``` php 451 | * dontSeeInCurrentUrl('/users/'); 453 | * ?> 454 | * ``` 455 | * 456 | * @param $uri 457 | * Conditional Assertion: Test won't be stopped on fail 458 | * @see \Codeception\Lib\InnerBrowser::dontSeeInCurrentUrl() 459 | */ 460 | public function cantSeeInCurrentUrl($uri) { 461 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeInCurrentUrl', func_get_args())); 462 | } 463 | /** 464 | * [!] Method is generated. Documentation taken from corresponding module. 465 | * 466 | * Checks that the current URI doesn't contain the given string. 467 | * 468 | * ``` php 469 | * dontSeeInCurrentUrl('/users/'); 471 | * ?> 472 | * ``` 473 | * 474 | * @param $uri 475 | * @see \Codeception\Lib\InnerBrowser::dontSeeInCurrentUrl() 476 | */ 477 | public function dontSeeInCurrentUrl($uri) { 478 | return $this->scenario->runStep(new \Codeception\Step\Assertion('dontSeeInCurrentUrl', func_get_args())); 479 | } 480 | 481 | 482 | /** 483 | * [!] Method is generated. Documentation taken from corresponding module. 484 | * 485 | * Checks that the current URL is equal to the given string. 486 | * Unlike `seeInCurrentUrl`, this only matches the full URL. 487 | * 488 | * ``` php 489 | * seeCurrentUrlEquals('/'); 492 | * ?> 493 | * ``` 494 | * 495 | * @param $uri 496 | * Conditional Assertion: Test won't be stopped on fail 497 | * @see \Codeception\Lib\InnerBrowser::seeCurrentUrlEquals() 498 | */ 499 | public function canSeeCurrentUrlEquals($uri) { 500 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('seeCurrentUrlEquals', func_get_args())); 501 | } 502 | /** 503 | * [!] Method is generated. Documentation taken from corresponding module. 504 | * 505 | * Checks that the current URL is equal to the given string. 506 | * Unlike `seeInCurrentUrl`, this only matches the full URL. 507 | * 508 | * ``` php 509 | * seeCurrentUrlEquals('/'); 512 | * ?> 513 | * ``` 514 | * 515 | * @param $uri 516 | * @see \Codeception\Lib\InnerBrowser::seeCurrentUrlEquals() 517 | */ 518 | public function seeCurrentUrlEquals($uri) { 519 | return $this->scenario->runStep(new \Codeception\Step\Assertion('seeCurrentUrlEquals', func_get_args())); 520 | } 521 | 522 | 523 | /** 524 | * [!] Method is generated. Documentation taken from corresponding module. 525 | * 526 | * Checks that the current URL doesn't equal the given string. 527 | * Unlike `dontSeeInCurrentUrl`, this only matches the full URL. 528 | * 529 | * ``` php 530 | * dontSeeCurrentUrlEquals('/'); 533 | * ?> 534 | * ``` 535 | * 536 | * @param $uri 537 | * Conditional Assertion: Test won't be stopped on fail 538 | * @see \Codeception\Lib\InnerBrowser::dontSeeCurrentUrlEquals() 539 | */ 540 | public function cantSeeCurrentUrlEquals($uri) { 541 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeCurrentUrlEquals', func_get_args())); 542 | } 543 | /** 544 | * [!] Method is generated. Documentation taken from corresponding module. 545 | * 546 | * Checks that the current URL doesn't equal the given string. 547 | * Unlike `dontSeeInCurrentUrl`, this only matches the full URL. 548 | * 549 | * ``` php 550 | * dontSeeCurrentUrlEquals('/'); 553 | * ?> 554 | * ``` 555 | * 556 | * @param $uri 557 | * @see \Codeception\Lib\InnerBrowser::dontSeeCurrentUrlEquals() 558 | */ 559 | public function dontSeeCurrentUrlEquals($uri) { 560 | return $this->scenario->runStep(new \Codeception\Step\Assertion('dontSeeCurrentUrlEquals', func_get_args())); 561 | } 562 | 563 | 564 | /** 565 | * [!] Method is generated. Documentation taken from corresponding module. 566 | * 567 | * Checks that the current URL matches the given regular expression. 568 | * 569 | * ``` php 570 | * seeCurrentUrlMatches('~$/users/(\d+)~'); 573 | * ?> 574 | * ``` 575 | * 576 | * @param $uri 577 | * Conditional Assertion: Test won't be stopped on fail 578 | * @see \Codeception\Lib\InnerBrowser::seeCurrentUrlMatches() 579 | */ 580 | public function canSeeCurrentUrlMatches($uri) { 581 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('seeCurrentUrlMatches', func_get_args())); 582 | } 583 | /** 584 | * [!] Method is generated. Documentation taken from corresponding module. 585 | * 586 | * Checks that the current URL matches the given regular expression. 587 | * 588 | * ``` php 589 | * seeCurrentUrlMatches('~$/users/(\d+)~'); 592 | * ?> 593 | * ``` 594 | * 595 | * @param $uri 596 | * @see \Codeception\Lib\InnerBrowser::seeCurrentUrlMatches() 597 | */ 598 | public function seeCurrentUrlMatches($uri) { 599 | return $this->scenario->runStep(new \Codeception\Step\Assertion('seeCurrentUrlMatches', func_get_args())); 600 | } 601 | 602 | 603 | /** 604 | * [!] Method is generated. Documentation taken from corresponding module. 605 | * 606 | * Checks that current url doesn't match the given regular expression. 607 | * 608 | * ``` php 609 | * dontSeeCurrentUrlMatches('~$/users/(\d+)~'); 612 | * ?> 613 | * ``` 614 | * 615 | * @param $uri 616 | * Conditional Assertion: Test won't be stopped on fail 617 | * @see \Codeception\Lib\InnerBrowser::dontSeeCurrentUrlMatches() 618 | */ 619 | public function cantSeeCurrentUrlMatches($uri) { 620 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeCurrentUrlMatches', func_get_args())); 621 | } 622 | /** 623 | * [!] Method is generated. Documentation taken from corresponding module. 624 | * 625 | * Checks that current url doesn't match the given regular expression. 626 | * 627 | * ``` php 628 | * dontSeeCurrentUrlMatches('~$/users/(\d+)~'); 631 | * ?> 632 | * ``` 633 | * 634 | * @param $uri 635 | * @see \Codeception\Lib\InnerBrowser::dontSeeCurrentUrlMatches() 636 | */ 637 | public function dontSeeCurrentUrlMatches($uri) { 638 | return $this->scenario->runStep(new \Codeception\Step\Assertion('dontSeeCurrentUrlMatches', func_get_args())); 639 | } 640 | 641 | 642 | /** 643 | * [!] Method is generated. Documentation taken from corresponding module. 644 | * 645 | * Executes the given regular expression against the current URI and returns the first match. 646 | * If no parameters are provided, the full URI is returned. 647 | * 648 | * ``` php 649 | * grabFromCurrentUrl('~$/user/(\d+)/~'); 651 | * $uri = $I->grabFromCurrentUrl(); 652 | * ?> 653 | * ``` 654 | * 655 | * @param null $uri 656 | * 657 | * @internal param $url 658 | * @return mixed 659 | * @see \Codeception\Lib\InnerBrowser::grabFromCurrentUrl() 660 | */ 661 | public function grabFromCurrentUrl($uri = null) { 662 | return $this->scenario->runStep(new \Codeception\Step\Action('grabFromCurrentUrl', func_get_args())); 663 | } 664 | 665 | 666 | /** 667 | * [!] Method is generated. Documentation taken from corresponding module. 668 | * 669 | * Checks that the specified checkbox is checked. 670 | * 671 | * ``` php 672 | * seeCheckboxIsChecked('#agree'); // I suppose user agreed to terms 674 | * $I->seeCheckboxIsChecked('#signup_form input[type=checkbox]'); // I suppose user agreed to terms, If there is only one checkbox in form. 675 | * $I->seeCheckboxIsChecked('//form/input[@type=checkbox and @name=agree]'); 676 | * ?> 677 | * ``` 678 | * 679 | * @param $checkbox 680 | * Conditional Assertion: Test won't be stopped on fail 681 | * @see \Codeception\Lib\InnerBrowser::seeCheckboxIsChecked() 682 | */ 683 | public function canSeeCheckboxIsChecked($checkbox) { 684 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('seeCheckboxIsChecked', func_get_args())); 685 | } 686 | /** 687 | * [!] Method is generated. Documentation taken from corresponding module. 688 | * 689 | * Checks that the specified checkbox is checked. 690 | * 691 | * ``` php 692 | * seeCheckboxIsChecked('#agree'); // I suppose user agreed to terms 694 | * $I->seeCheckboxIsChecked('#signup_form input[type=checkbox]'); // I suppose user agreed to terms, If there is only one checkbox in form. 695 | * $I->seeCheckboxIsChecked('//form/input[@type=checkbox and @name=agree]'); 696 | * ?> 697 | * ``` 698 | * 699 | * @param $checkbox 700 | * @see \Codeception\Lib\InnerBrowser::seeCheckboxIsChecked() 701 | */ 702 | public function seeCheckboxIsChecked($checkbox) { 703 | return $this->scenario->runStep(new \Codeception\Step\Assertion('seeCheckboxIsChecked', func_get_args())); 704 | } 705 | 706 | 707 | /** 708 | * [!] Method is generated. Documentation taken from corresponding module. 709 | * 710 | * Check that the specified checkbox is unchecked. 711 | * 712 | * ``` php 713 | * dontSeeCheckboxIsChecked('#agree'); // I suppose user didn't agree to terms 715 | * $I->seeCheckboxIsChecked('#signup_form input[type=checkbox]'); // I suppose user didn't check the first checkbox in form. 716 | * ?> 717 | * ``` 718 | * 719 | * @param $checkbox 720 | * Conditional Assertion: Test won't be stopped on fail 721 | * @see \Codeception\Lib\InnerBrowser::dontSeeCheckboxIsChecked() 722 | */ 723 | public function cantSeeCheckboxIsChecked($checkbox) { 724 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeCheckboxIsChecked', func_get_args())); 725 | } 726 | /** 727 | * [!] Method is generated. Documentation taken from corresponding module. 728 | * 729 | * Check that the specified checkbox is unchecked. 730 | * 731 | * ``` php 732 | * dontSeeCheckboxIsChecked('#agree'); // I suppose user didn't agree to terms 734 | * $I->seeCheckboxIsChecked('#signup_form input[type=checkbox]'); // I suppose user didn't check the first checkbox in form. 735 | * ?> 736 | * ``` 737 | * 738 | * @param $checkbox 739 | * @see \Codeception\Lib\InnerBrowser::dontSeeCheckboxIsChecked() 740 | */ 741 | public function dontSeeCheckboxIsChecked($checkbox) { 742 | return $this->scenario->runStep(new \Codeception\Step\Assertion('dontSeeCheckboxIsChecked', func_get_args())); 743 | } 744 | 745 | 746 | /** 747 | * [!] Method is generated. Documentation taken from corresponding module. 748 | * 749 | * Checks that the given input field or textarea contains the given value. 750 | * For fuzzy locators, fields are matched by label text, the "name" attribute, CSS, and XPath. 751 | * 752 | * ``` php 753 | * seeInField('Body','Type your comment here'); 755 | * $I->seeInField('form textarea[name=body]','Type your comment here'); 756 | * $I->seeInField('form input[type=hidden]','hidden_value'); 757 | * $I->seeInField('#searchform input','Search'); 758 | * $I->seeInField('//form/*[@name=search]','Search'); 759 | * $I->seeInField(['name' => 'search'], 'Search'); 760 | * ?> 761 | * ``` 762 | * 763 | * @param $field 764 | * @param $value 765 | * Conditional Assertion: Test won't be stopped on fail 766 | * @see \Codeception\Lib\InnerBrowser::seeInField() 767 | */ 768 | public function canSeeInField($field, $value) { 769 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('seeInField', func_get_args())); 770 | } 771 | /** 772 | * [!] Method is generated. Documentation taken from corresponding module. 773 | * 774 | * Checks that the given input field or textarea contains the given value. 775 | * For fuzzy locators, fields are matched by label text, the "name" attribute, CSS, and XPath. 776 | * 777 | * ``` php 778 | * seeInField('Body','Type your comment here'); 780 | * $I->seeInField('form textarea[name=body]','Type your comment here'); 781 | * $I->seeInField('form input[type=hidden]','hidden_value'); 782 | * $I->seeInField('#searchform input','Search'); 783 | * $I->seeInField('//form/*[@name=search]','Search'); 784 | * $I->seeInField(['name' => 'search'], 'Search'); 785 | * ?> 786 | * ``` 787 | * 788 | * @param $field 789 | * @param $value 790 | * @see \Codeception\Lib\InnerBrowser::seeInField() 791 | */ 792 | public function seeInField($field, $value) { 793 | return $this->scenario->runStep(new \Codeception\Step\Assertion('seeInField', func_get_args())); 794 | } 795 | 796 | 797 | /** 798 | * [!] Method is generated. Documentation taken from corresponding module. 799 | * 800 | * Checks that an input field or textarea doesn't contain the given value. 801 | * For fuzzy locators, the field is matched by label text, CSS and XPath. 802 | * 803 | * ``` php 804 | * dontSeeInField('Body','Type your comment here'); 806 | * $I->dontSeeInField('form textarea[name=body]','Type your comment here'); 807 | * $I->dontSeeInField('form input[type=hidden]','hidden_value'); 808 | * $I->dontSeeInField('#searchform input','Search'); 809 | * $I->dontSeeInField('//form/*[@name=search]','Search'); 810 | * $I->dontSeeInField(['name' => 'search'], 'Search'); 811 | * ?> 812 | * ``` 813 | * 814 | * @param $field 815 | * @param $value 816 | * Conditional Assertion: Test won't be stopped on fail 817 | * @see \Codeception\Lib\InnerBrowser::dontSeeInField() 818 | */ 819 | public function cantSeeInField($field, $value) { 820 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeInField', func_get_args())); 821 | } 822 | /** 823 | * [!] Method is generated. Documentation taken from corresponding module. 824 | * 825 | * Checks that an input field or textarea doesn't contain the given value. 826 | * For fuzzy locators, the field is matched by label text, CSS and XPath. 827 | * 828 | * ``` php 829 | * dontSeeInField('Body','Type your comment here'); 831 | * $I->dontSeeInField('form textarea[name=body]','Type your comment here'); 832 | * $I->dontSeeInField('form input[type=hidden]','hidden_value'); 833 | * $I->dontSeeInField('#searchform input','Search'); 834 | * $I->dontSeeInField('//form/*[@name=search]','Search'); 835 | * $I->dontSeeInField(['name' => 'search'], 'Search'); 836 | * ?> 837 | * ``` 838 | * 839 | * @param $field 840 | * @param $value 841 | * @see \Codeception\Lib\InnerBrowser::dontSeeInField() 842 | */ 843 | public function dontSeeInField($field, $value) { 844 | return $this->scenario->runStep(new \Codeception\Step\Assertion('dontSeeInField', func_get_args())); 845 | } 846 | 847 | 848 | /** 849 | * [!] Method is generated. Documentation taken from corresponding module. 850 | * 851 | * Checks if the array of form parameters (name => value) are set on the form matched with the 852 | * passed selector. 853 | * 854 | * ``` php 855 | * seeInFormFields('form[name=myform]', [ 857 | * 'input1' => 'value', 858 | * 'input2' => 'other value', 859 | * ]); 860 | * ?> 861 | * ``` 862 | * 863 | * For multi-select elements, or to check values of multiple elements with the same name, an 864 | * array may be passed: 865 | * 866 | * ``` php 867 | * seeInFormFields('.form-class', [ 869 | * 'multiselect' => [ 870 | * 'value1', 871 | * 'value2', 872 | * ], 873 | * 'checkbox[]' => [ 874 | * 'a checked value', 875 | * 'another checked value', 876 | * ], 877 | * ]); 878 | * ?> 879 | * ``` 880 | * 881 | * Additionally, checkbox values can be checked with a boolean. 882 | * 883 | * ``` php 884 | * seeInFormFields('#form-id', [ 886 | * 'checkbox1' => true, // passes if checked 887 | * 'checkbox2' => false, // passes if unchecked 888 | * ]); 889 | * ?> 890 | * ``` 891 | * 892 | * Pair this with submitForm for quick testing magic. 893 | * 894 | * ``` php 895 | * 'value', 898 | * 'field2' => 'another value', 899 | * 'checkbox1' => true, 900 | * // ... 901 | * ]; 902 | * $I->submitForm('//form[@id=my-form]', $form, 'submitButton'); 903 | * // $I->amOnPage('/path/to/form-page') may be needed 904 | * $I->seeInFormFields('//form[@id=my-form]', $form); 905 | * ?> 906 | * ``` 907 | * 908 | * @param $formSelector 909 | * @param $params 910 | * Conditional Assertion: Test won't be stopped on fail 911 | * @see \Codeception\Lib\InnerBrowser::seeInFormFields() 912 | */ 913 | public function canSeeInFormFields($formSelector, $params) { 914 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('seeInFormFields', func_get_args())); 915 | } 916 | /** 917 | * [!] Method is generated. Documentation taken from corresponding module. 918 | * 919 | * Checks if the array of form parameters (name => value) are set on the form matched with the 920 | * passed selector. 921 | * 922 | * ``` php 923 | * seeInFormFields('form[name=myform]', [ 925 | * 'input1' => 'value', 926 | * 'input2' => 'other value', 927 | * ]); 928 | * ?> 929 | * ``` 930 | * 931 | * For multi-select elements, or to check values of multiple elements with the same name, an 932 | * array may be passed: 933 | * 934 | * ``` php 935 | * seeInFormFields('.form-class', [ 937 | * 'multiselect' => [ 938 | * 'value1', 939 | * 'value2', 940 | * ], 941 | * 'checkbox[]' => [ 942 | * 'a checked value', 943 | * 'another checked value', 944 | * ], 945 | * ]); 946 | * ?> 947 | * ``` 948 | * 949 | * Additionally, checkbox values can be checked with a boolean. 950 | * 951 | * ``` php 952 | * seeInFormFields('#form-id', [ 954 | * 'checkbox1' => true, // passes if checked 955 | * 'checkbox2' => false, // passes if unchecked 956 | * ]); 957 | * ?> 958 | * ``` 959 | * 960 | * Pair this with submitForm for quick testing magic. 961 | * 962 | * ``` php 963 | * 'value', 966 | * 'field2' => 'another value', 967 | * 'checkbox1' => true, 968 | * // ... 969 | * ]; 970 | * $I->submitForm('//form[@id=my-form]', $form, 'submitButton'); 971 | * // $I->amOnPage('/path/to/form-page') may be needed 972 | * $I->seeInFormFields('//form[@id=my-form]', $form); 973 | * ?> 974 | * ``` 975 | * 976 | * @param $formSelector 977 | * @param $params 978 | * @see \Codeception\Lib\InnerBrowser::seeInFormFields() 979 | */ 980 | public function seeInFormFields($formSelector, $params) { 981 | return $this->scenario->runStep(new \Codeception\Step\Assertion('seeInFormFields', func_get_args())); 982 | } 983 | 984 | 985 | /** 986 | * [!] Method is generated. Documentation taken from corresponding module. 987 | * 988 | * Checks if the array of form parameters (name => value) are not set on the form matched with 989 | * the passed selector. 990 | * 991 | * ``` php 992 | * dontSeeInFormFields('form[name=myform]', [ 994 | * 'input1' => 'non-existent value', 995 | * 'input2' => 'other non-existent value', 996 | * ]); 997 | * ?> 998 | * ``` 999 | * 1000 | * To check that an element hasn't been assigned any one of many values, an array can be passed 1001 | * as the value: 1002 | * 1003 | * ``` php 1004 | * dontSeeInFormFields('.form-class', [ 1006 | * 'fieldName' => [ 1007 | * 'This value shouldn\'t be set', 1008 | * 'And this value shouldn\'t be set', 1009 | * ], 1010 | * ]); 1011 | * ?> 1012 | * ``` 1013 | * 1014 | * Additionally, checkbox values can be checked with a boolean. 1015 | * 1016 | * ``` php 1017 | * dontSeeInFormFields('#form-id', [ 1019 | * 'checkbox1' => true, // fails if checked 1020 | * 'checkbox2' => false, // fails if unchecked 1021 | * ]); 1022 | * ?> 1023 | * ``` 1024 | * 1025 | * @param $formSelector 1026 | * @param $params 1027 | * Conditional Assertion: Test won't be stopped on fail 1028 | * @see \Codeception\Lib\InnerBrowser::dontSeeInFormFields() 1029 | */ 1030 | public function cantSeeInFormFields($formSelector, $params) { 1031 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeInFormFields', func_get_args())); 1032 | } 1033 | /** 1034 | * [!] Method is generated. Documentation taken from corresponding module. 1035 | * 1036 | * Checks if the array of form parameters (name => value) are not set on the form matched with 1037 | * the passed selector. 1038 | * 1039 | * ``` php 1040 | * dontSeeInFormFields('form[name=myform]', [ 1042 | * 'input1' => 'non-existent value', 1043 | * 'input2' => 'other non-existent value', 1044 | * ]); 1045 | * ?> 1046 | * ``` 1047 | * 1048 | * To check that an element hasn't been assigned any one of many values, an array can be passed 1049 | * as the value: 1050 | * 1051 | * ``` php 1052 | * dontSeeInFormFields('.form-class', [ 1054 | * 'fieldName' => [ 1055 | * 'This value shouldn\'t be set', 1056 | * 'And this value shouldn\'t be set', 1057 | * ], 1058 | * ]); 1059 | * ?> 1060 | * ``` 1061 | * 1062 | * Additionally, checkbox values can be checked with a boolean. 1063 | * 1064 | * ``` php 1065 | * dontSeeInFormFields('#form-id', [ 1067 | * 'checkbox1' => true, // fails if checked 1068 | * 'checkbox2' => false, // fails if unchecked 1069 | * ]); 1070 | * ?> 1071 | * ``` 1072 | * 1073 | * @param $formSelector 1074 | * @param $params 1075 | * @see \Codeception\Lib\InnerBrowser::dontSeeInFormFields() 1076 | */ 1077 | public function dontSeeInFormFields($formSelector, $params) { 1078 | return $this->scenario->runStep(new \Codeception\Step\Assertion('dontSeeInFormFields', func_get_args())); 1079 | } 1080 | 1081 | 1082 | /** 1083 | * [!] Method is generated. Documentation taken from corresponding module. 1084 | * 1085 | * Submits the given form on the page, optionally with the given form 1086 | * values. Give the form fields values as an array. 1087 | * 1088 | * Skipped fields will be filled by their values from the page. 1089 | * You don't need to click the 'Submit' button afterwards. 1090 | * This command itself triggers the request to form's action. 1091 | * 1092 | * You can optionally specify what button's value to include 1093 | * in the request with the last parameter as an alternative to 1094 | * explicitly setting its value in the second parameter, as 1095 | * button values are not otherwise included in the request. 1096 | * 1097 | * Examples: 1098 | * 1099 | * ``` php 1100 | * submitForm('#login', [ 1102 | * 'login' => 'davert', 1103 | * 'password' => '123456' 1104 | * ]); 1105 | * // or 1106 | * $I->submitForm('#login', [ 1107 | * 'login' => 'davert', 1108 | * 'password' => '123456' 1109 | * ], 'submitButtonName'); 1110 | * 1111 | * ``` 1112 | * 1113 | * For example, given this sample "Sign Up" form: 1114 | * 1115 | * ``` html 1116 | *
1117 | * Login: 1118 | *
1119 | * Password: 1120 | *
1121 | * Do you agree to out terms? 1122 | *
1123 | * Select pricing plan: 1124 | * 1128 | * 1129 | *
1130 | * ``` 1131 | * 1132 | * You could write the following to submit it: 1133 | * 1134 | * ``` php 1135 | * submitForm( 1137 | * '#userForm', 1138 | * [ 1139 | * 'user' => [ 1140 | * 'login' => 'Davert', 1141 | * 'password' => '123456', 1142 | * 'agree' => true 1143 | * ] 1144 | * ], 1145 | * 'submitButton' 1146 | * ); 1147 | * ``` 1148 | * Note that "2" will be the submitted value for the "plan" field, as it is 1149 | * the selected option. 1150 | * 1151 | * You can also emulate a JavaScript submission by not specifying any 1152 | * buttons in the third parameter to submitForm. 1153 | * 1154 | * ```php 1155 | * submitForm( 1157 | * '#userForm', 1158 | * [ 1159 | * 'user' => [ 1160 | * 'login' => 'Davert', 1161 | * 'password' => '123456', 1162 | * 'agree' => true 1163 | * ] 1164 | * ] 1165 | * ); 1166 | * ``` 1167 | * 1168 | * Pair this with seeInFormFields for quick testing magic. 1169 | * 1170 | * ``` php 1171 | * 'value', 1174 | * 'field2' => 'another value', 1175 | * 'checkbox1' => true, 1176 | * // ... 1177 | * ]; 1178 | * $I->submitForm('//form[@id=my-form]', $form, 'submitButton'); 1179 | * // $I->amOnPage('/path/to/form-page') may be needed 1180 | * $I->seeInFormFields('//form[@id=my-form]', $form); 1181 | * ?> 1182 | * ``` 1183 | * 1184 | * Parameter values can be set to arrays for multiple input fields 1185 | * of the same name, or multi-select combo boxes. For checkboxes, 1186 | * either the string value can be used, or boolean values which will 1187 | * be replaced by the checkbox's value in the DOM. 1188 | * 1189 | * ``` php 1190 | * submitForm('#my-form', [ 1192 | * 'field1' => 'value', 1193 | * 'checkbox' => [ 1194 | * 'value of first checkbox', 1195 | * 'value of second checkbox, 1196 | * ], 1197 | * 'otherCheckboxes' => [ 1198 | * true, 1199 | * false, 1200 | * false 1201 | * ], 1202 | * 'multiselect' => [ 1203 | * 'first option value', 1204 | * 'second option value' 1205 | * ] 1206 | * ]); 1207 | * ?> 1208 | * ``` 1209 | * 1210 | * Mixing string and boolean values for a checkbox's value is not supported 1211 | * and may produce unexpected results. 1212 | * 1213 | * Field names ending in "[]" must be passed without the trailing square 1214 | * bracket characters, and must contain an array for its value. This allows 1215 | * submitting multiple values with the same name, consider: 1216 | * 1217 | * ```php 1218 | * $I->submitForm('#my-form', [ 1219 | * 'field[]' => 'value', 1220 | * 'field[]' => 'another value', // 'field[]' is already a defined key 1221 | * ]); 1222 | * ``` 1223 | * 1224 | * The solution is to pass an array value: 1225 | * 1226 | * ```php 1227 | * // this way both values are submitted 1228 | * $I->submitForm('#my-form', [ 1229 | * 'field' => [ 1230 | * 'value', 1231 | * 'another value', 1232 | * ] 1233 | * ]); 1234 | * ``` 1235 | * 1236 | * @param $selector 1237 | * @param $params 1238 | * @param $button 1239 | * @see \Codeception\Lib\InnerBrowser::submitForm() 1240 | */ 1241 | public function submitForm($selector, $params, $button = null) { 1242 | return $this->scenario->runStep(new \Codeception\Step\Action('submitForm', func_get_args())); 1243 | } 1244 | 1245 | 1246 | /** 1247 | * [!] Method is generated. Documentation taken from corresponding module. 1248 | * 1249 | * Fills a text field or textarea with the given string. 1250 | * 1251 | * ``` php 1252 | * fillField("//input[@type='text']", "Hello World!"); 1254 | * $I->fillField(['name' => 'email'], 'jon@mail.com'); 1255 | * ?> 1256 | * ``` 1257 | * 1258 | * @param $field 1259 | * @param $value 1260 | * @see \Codeception\Lib\InnerBrowser::fillField() 1261 | */ 1262 | public function fillField($field, $value) { 1263 | return $this->scenario->runStep(new \Codeception\Step\Action('fillField', func_get_args())); 1264 | } 1265 | 1266 | 1267 | /** 1268 | * [!] Method is generated. Documentation taken from corresponding module. 1269 | * 1270 | * Selects an option in a select tag or in radio button group. 1271 | * 1272 | * ``` php 1273 | * selectOption('form select[name=account]', 'Premium'); 1275 | * $I->selectOption('form input[name=payment]', 'Monthly'); 1276 | * $I->selectOption('//form/select[@name=account]', 'Monthly'); 1277 | * ?> 1278 | * ``` 1279 | * 1280 | * Provide an array for the second argument to select multiple options: 1281 | * 1282 | * ``` php 1283 | * selectOption('Which OS do you use?', array('Windows','Linux')); 1285 | * ?> 1286 | * ``` 1287 | * 1288 | * @param $select 1289 | * @param $option 1290 | * @see \Codeception\Lib\InnerBrowser::selectOption() 1291 | */ 1292 | public function selectOption($select, $option) { 1293 | return $this->scenario->runStep(new \Codeception\Step\Action('selectOption', func_get_args())); 1294 | } 1295 | 1296 | 1297 | /** 1298 | * [!] Method is generated. Documentation taken from corresponding module. 1299 | * 1300 | * Ticks a checkbox. For radio buttons, use the `selectOption` method instead. 1301 | * 1302 | * ``` php 1303 | * checkOption('#agree'); 1305 | * ?> 1306 | * ``` 1307 | * 1308 | * @param $option 1309 | * @see \Codeception\Lib\InnerBrowser::checkOption() 1310 | */ 1311 | public function checkOption($option) { 1312 | return $this->scenario->runStep(new \Codeception\Step\Action('checkOption', func_get_args())); 1313 | } 1314 | 1315 | 1316 | /** 1317 | * [!] Method is generated. Documentation taken from corresponding module. 1318 | * 1319 | * Unticks a checkbox. 1320 | * 1321 | * ``` php 1322 | * uncheckOption('#notify'); 1324 | * ?> 1325 | * ``` 1326 | * 1327 | * @param $option 1328 | * @see \Codeception\Lib\InnerBrowser::uncheckOption() 1329 | */ 1330 | public function uncheckOption($option) { 1331 | return $this->scenario->runStep(new \Codeception\Step\Action('uncheckOption', func_get_args())); 1332 | } 1333 | 1334 | 1335 | /** 1336 | * [!] Method is generated. Documentation taken from corresponding module. 1337 | * 1338 | * Attaches a file relative to the Codeception data directory to the given file upload field. 1339 | * 1340 | * ``` php 1341 | * attachFile('input[@type="file"]', 'prices.xls'); 1344 | * ?> 1345 | * ``` 1346 | * 1347 | * @param $field 1348 | * @param $filename 1349 | * @see \Codeception\Lib\InnerBrowser::attachFile() 1350 | */ 1351 | public function attachFile($field, $filename) { 1352 | return $this->scenario->runStep(new \Codeception\Step\Action('attachFile', func_get_args())); 1353 | } 1354 | 1355 | 1356 | /** 1357 | * [!] Method is generated. Documentation taken from corresponding module. 1358 | * 1359 | * If your page triggers an ajax request, you can perform it manually. 1360 | * This action sends a GET ajax request with specified params. 1361 | * 1362 | * See ->sendAjaxPostRequest for examples. 1363 | * 1364 | * @param $uri 1365 | * @param $params 1366 | * @see \Codeception\Lib\InnerBrowser::sendAjaxGetRequest() 1367 | */ 1368 | public function sendAjaxGetRequest($uri, $params = null) { 1369 | return $this->scenario->runStep(new \Codeception\Step\Action('sendAjaxGetRequest', func_get_args())); 1370 | } 1371 | 1372 | 1373 | /** 1374 | * [!] Method is generated. Documentation taken from corresponding module. 1375 | * 1376 | * If your page triggers an ajax request, you can perform it manually. 1377 | * This action sends a POST ajax request with specified params. 1378 | * Additional params can be passed as array. 1379 | * 1380 | * Example: 1381 | * 1382 | * Imagine that by clicking checkbox you trigger ajax request which updates user settings. 1383 | * We emulate that click by running this ajax request manually. 1384 | * 1385 | * ``` php 1386 | * sendAjaxPostRequest('/updateSettings', array('notifications' => true)); // POST 1388 | * $I->sendAjaxGetRequest('/updateSettings', array('notifications' => true)); // GET 1389 | * 1390 | * ``` 1391 | * 1392 | * @param $uri 1393 | * @param $params 1394 | * @see \Codeception\Lib\InnerBrowser::sendAjaxPostRequest() 1395 | */ 1396 | public function sendAjaxPostRequest($uri, $params = null) { 1397 | return $this->scenario->runStep(new \Codeception\Step\Action('sendAjaxPostRequest', func_get_args())); 1398 | } 1399 | 1400 | 1401 | /** 1402 | * [!] Method is generated. Documentation taken from corresponding module. 1403 | * 1404 | * If your page triggers an ajax request, you can perform it manually. 1405 | * This action sends an ajax request with specified method and params. 1406 | * 1407 | * Example: 1408 | * 1409 | * You need to perform an ajax request specifying the HTTP method. 1410 | * 1411 | * ``` php 1412 | * sendAjaxRequest('PUT', '/posts/7', array('title' => 'new title')); 1414 | * 1415 | * ``` 1416 | * 1417 | * @param $method 1418 | * @param $uri 1419 | * @param $params 1420 | * @see \Codeception\Lib\InnerBrowser::sendAjaxRequest() 1421 | */ 1422 | public function sendAjaxRequest($method, $uri, $params = null) { 1423 | return $this->scenario->runStep(new \Codeception\Step\Action('sendAjaxRequest', func_get_args())); 1424 | } 1425 | 1426 | 1427 | /** 1428 | * [!] Method is generated. Documentation taken from corresponding module. 1429 | * 1430 | * Finds and returns the text contents of the given element. 1431 | * If a fuzzy locator is used, the element is found using CSS, XPath, and by matching the full page source by regular expression. 1432 | * 1433 | * ``` php 1434 | * grabTextFrom('h1'); 1436 | * $heading = $I->grabTextFrom('descendant-or-self::h1'); 1437 | * $value = $I->grabTextFrom('~ 1439 | * ``` 1440 | * 1441 | * @param $cssOrXPathOrRegex 1442 | * 1443 | * @return mixed 1444 | * @see \Codeception\Lib\InnerBrowser::grabTextFrom() 1445 | */ 1446 | public function grabTextFrom($cssOrXPathOrRegex) { 1447 | return $this->scenario->runStep(new \Codeception\Step\Action('grabTextFrom', func_get_args())); 1448 | } 1449 | 1450 | 1451 | /** 1452 | * [!] Method is generated. Documentation taken from corresponding module. 1453 | * 1454 | * Grabs the value of the given attribute value from the given element. 1455 | * Fails if element is not found. 1456 | * 1457 | * ``` php 1458 | * grabAttributeFrom('#tooltip', 'title'); 1460 | * ?> 1461 | * ``` 1462 | * 1463 | * 1464 | * @param $cssOrXpath 1465 | * @param $attribute 1466 | * @internal param $element 1467 | * @return mixed 1468 | * @see \Codeception\Lib\InnerBrowser::grabAttributeFrom() 1469 | */ 1470 | public function grabAttributeFrom($cssOrXpath, $attribute) { 1471 | return $this->scenario->runStep(new \Codeception\Step\Action('grabAttributeFrom', func_get_args())); 1472 | } 1473 | 1474 | 1475 | /** 1476 | * [!] Method is generated. Documentation taken from corresponding module. 1477 | * 1478 | * @param $field 1479 | * 1480 | * @return array|mixed|null|string 1481 | * @see \Codeception\Lib\InnerBrowser::grabValueFrom() 1482 | */ 1483 | public function grabValueFrom($field) { 1484 | return $this->scenario->runStep(new \Codeception\Step\Action('grabValueFrom', func_get_args())); 1485 | } 1486 | 1487 | 1488 | /** 1489 | * [!] Method is generated. Documentation taken from corresponding module. 1490 | * 1491 | * Sets a cookie with the given name and value. 1492 | * You can set additional cookie params like `domain`, `path`, `expire`, `secure` in array passed as last argument. 1493 | * 1494 | * ``` php 1495 | * setCookie('PHPSESSID', 'el4ukv0kqbvoirg7nkp4dncpk3'); 1497 | * ?> 1498 | * ``` 1499 | * 1500 | * @param $name 1501 | * @param $val 1502 | * @param array $params 1503 | * @internal param $cookie 1504 | * @internal param $value 1505 | * 1506 | * @return mixed 1507 | * @see \Codeception\Lib\InnerBrowser::setCookie() 1508 | */ 1509 | public function setCookie($name, $val, $params = null) { 1510 | return $this->scenario->runStep(new \Codeception\Step\Action('setCookie', func_get_args())); 1511 | } 1512 | 1513 | 1514 | /** 1515 | * [!] Method is generated. Documentation taken from corresponding module. 1516 | * 1517 | * Grabs a cookie value. 1518 | * You can set additional cookie params like `domain`, `path` in array passed as last argument. 1519 | * 1520 | * @param $cookie 1521 | * 1522 | * @param array $params 1523 | * @return mixed 1524 | * @see \Codeception\Lib\InnerBrowser::grabCookie() 1525 | */ 1526 | public function grabCookie($cookie, $params = null) { 1527 | return $this->scenario->runStep(new \Codeception\Step\Action('grabCookie', func_get_args())); 1528 | } 1529 | 1530 | 1531 | /** 1532 | * [!] Method is generated. Documentation taken from corresponding module. 1533 | * 1534 | * Checks that a cookie with the given name is set. 1535 | * You can set additional cookie params like `domain`, `path` as array passed in last argument. 1536 | * 1537 | * ``` php 1538 | * seeCookie('PHPSESSID'); 1540 | * ?> 1541 | * ``` 1542 | * 1543 | * @param $cookie 1544 | * @param array $params 1545 | * @return mixed 1546 | * Conditional Assertion: Test won't be stopped on fail 1547 | * @see \Codeception\Lib\InnerBrowser::seeCookie() 1548 | */ 1549 | public function canSeeCookie($cookie, $params = null) { 1550 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('seeCookie', func_get_args())); 1551 | } 1552 | /** 1553 | * [!] Method is generated. Documentation taken from corresponding module. 1554 | * 1555 | * Checks that a cookie with the given name is set. 1556 | * You can set additional cookie params like `domain`, `path` as array passed in last argument. 1557 | * 1558 | * ``` php 1559 | * seeCookie('PHPSESSID'); 1561 | * ?> 1562 | * ``` 1563 | * 1564 | * @param $cookie 1565 | * @param array $params 1566 | * @return mixed 1567 | * @see \Codeception\Lib\InnerBrowser::seeCookie() 1568 | */ 1569 | public function seeCookie($cookie, $params = null) { 1570 | return $this->scenario->runStep(new \Codeception\Step\Assertion('seeCookie', func_get_args())); 1571 | } 1572 | 1573 | 1574 | /** 1575 | * [!] Method is generated. Documentation taken from corresponding module. 1576 | * 1577 | * Checks that there isn't a cookie with the given name. 1578 | * You can set additional cookie params like `domain`, `path` as array passed in last argument. 1579 | * 1580 | * @param $cookie 1581 | * 1582 | * @param array $params 1583 | * @return mixed 1584 | * Conditional Assertion: Test won't be stopped on fail 1585 | * @see \Codeception\Lib\InnerBrowser::dontSeeCookie() 1586 | */ 1587 | public function cantSeeCookie($cookie, $params = null) { 1588 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeCookie', func_get_args())); 1589 | } 1590 | /** 1591 | * [!] Method is generated. Documentation taken from corresponding module. 1592 | * 1593 | * Checks that there isn't a cookie with the given name. 1594 | * You can set additional cookie params like `domain`, `path` as array passed in last argument. 1595 | * 1596 | * @param $cookie 1597 | * 1598 | * @param array $params 1599 | * @return mixed 1600 | * @see \Codeception\Lib\InnerBrowser::dontSeeCookie() 1601 | */ 1602 | public function dontSeeCookie($cookie, $params = null) { 1603 | return $this->scenario->runStep(new \Codeception\Step\Assertion('dontSeeCookie', func_get_args())); 1604 | } 1605 | 1606 | 1607 | /** 1608 | * [!] Method is generated. Documentation taken from corresponding module. 1609 | * 1610 | * Unsets cookie with the given name. 1611 | * You can set additional cookie params like `domain`, `path` in array passed as last argument. 1612 | * 1613 | * @param $cookie 1614 | * 1615 | * @param array $params 1616 | * @return mixed 1617 | * @see \Codeception\Lib\InnerBrowser::resetCookie() 1618 | */ 1619 | public function resetCookie($name, $params = null) { 1620 | return $this->scenario->runStep(new \Codeception\Step\Action('resetCookie', func_get_args())); 1621 | } 1622 | 1623 | 1624 | /** 1625 | * [!] Method is generated. Documentation taken from corresponding module. 1626 | * 1627 | * Checks that the given element exists on the page and is visible. 1628 | * You can also specify expected attributes of this element. 1629 | * 1630 | * ``` php 1631 | * seeElement('.error'); 1633 | * $I->seeElement('//form/input[1]'); 1634 | * $I->seeElement('input', ['name' => 'login']); 1635 | * $I->seeElement('input', ['value' => '123456']); 1636 | * 1637 | * // strict locator in first arg, attributes in second 1638 | * $I->seeElement(['css' => 'form input'], ['name' => 'login']); 1639 | * ?> 1640 | * ``` 1641 | * 1642 | * @param $selector 1643 | * @param array $attributes 1644 | * @return 1645 | * Conditional Assertion: Test won't be stopped on fail 1646 | * @see \Codeception\Lib\InnerBrowser::seeElement() 1647 | */ 1648 | public function canSeeElement($selector, $attributes = null) { 1649 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('seeElement', func_get_args())); 1650 | } 1651 | /** 1652 | * [!] Method is generated. Documentation taken from corresponding module. 1653 | * 1654 | * Checks that the given element exists on the page and is visible. 1655 | * You can also specify expected attributes of this element. 1656 | * 1657 | * ``` php 1658 | * seeElement('.error'); 1660 | * $I->seeElement('//form/input[1]'); 1661 | * $I->seeElement('input', ['name' => 'login']); 1662 | * $I->seeElement('input', ['value' => '123456']); 1663 | * 1664 | * // strict locator in first arg, attributes in second 1665 | * $I->seeElement(['css' => 'form input'], ['name' => 'login']); 1666 | * ?> 1667 | * ``` 1668 | * 1669 | * @param $selector 1670 | * @param array $attributes 1671 | * @return 1672 | * @see \Codeception\Lib\InnerBrowser::seeElement() 1673 | */ 1674 | public function seeElement($selector, $attributes = null) { 1675 | return $this->scenario->runStep(new \Codeception\Step\Assertion('seeElement', func_get_args())); 1676 | } 1677 | 1678 | 1679 | /** 1680 | * [!] Method is generated. Documentation taken from corresponding module. 1681 | * 1682 | * Checks that the given element is invisible or not present on the page. 1683 | * You can also specify expected attributes of this element. 1684 | * 1685 | * ``` php 1686 | * dontSeeElement('.error'); 1688 | * $I->dontSeeElement('//form/input[1]'); 1689 | * $I->dontSeeElement('input', ['name' => 'login']); 1690 | * $I->dontSeeElement('input', ['value' => '123456']); 1691 | * ?> 1692 | * ``` 1693 | * 1694 | * @param $selector 1695 | * @param array $attributes 1696 | * Conditional Assertion: Test won't be stopped on fail 1697 | * @see \Codeception\Lib\InnerBrowser::dontSeeElement() 1698 | */ 1699 | public function cantSeeElement($selector, $attributes = null) { 1700 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeElement', func_get_args())); 1701 | } 1702 | /** 1703 | * [!] Method is generated. Documentation taken from corresponding module. 1704 | * 1705 | * Checks that the given element is invisible or not present on the page. 1706 | * You can also specify expected attributes of this element. 1707 | * 1708 | * ``` php 1709 | * dontSeeElement('.error'); 1711 | * $I->dontSeeElement('//form/input[1]'); 1712 | * $I->dontSeeElement('input', ['name' => 'login']); 1713 | * $I->dontSeeElement('input', ['value' => '123456']); 1714 | * ?> 1715 | * ``` 1716 | * 1717 | * @param $selector 1718 | * @param array $attributes 1719 | * @see \Codeception\Lib\InnerBrowser::dontSeeElement() 1720 | */ 1721 | public function dontSeeElement($selector, $attributes = null) { 1722 | return $this->scenario->runStep(new \Codeception\Step\Assertion('dontSeeElement', func_get_args())); 1723 | } 1724 | 1725 | 1726 | /** 1727 | * [!] Method is generated. Documentation taken from corresponding module. 1728 | * 1729 | * Checks that there are a certain number of elements matched by the given locator on the page. 1730 | * 1731 | * ``` php 1732 | * seeNumberOfElements('tr', 10); 1734 | * $I->seeNumberOfElements('tr', [0,10]); //between 0 and 10 elements 1735 | * ?> 1736 | * ``` 1737 | * @param $selector 1738 | * @param mixed $expected: 1739 | * - string: strict number 1740 | * - array: range of numbers [0,10] 1741 | * Conditional Assertion: Test won't be stopped on fail 1742 | * @see \Codeception\Lib\InnerBrowser::seeNumberOfElements() 1743 | */ 1744 | public function canSeeNumberOfElements($selector, $expected) { 1745 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('seeNumberOfElements', func_get_args())); 1746 | } 1747 | /** 1748 | * [!] Method is generated. Documentation taken from corresponding module. 1749 | * 1750 | * Checks that there are a certain number of elements matched by the given locator on the page. 1751 | * 1752 | * ``` php 1753 | * seeNumberOfElements('tr', 10); 1755 | * $I->seeNumberOfElements('tr', [0,10]); //between 0 and 10 elements 1756 | * ?> 1757 | * ``` 1758 | * @param $selector 1759 | * @param mixed $expected: 1760 | * - string: strict number 1761 | * - array: range of numbers [0,10] 1762 | * @see \Codeception\Lib\InnerBrowser::seeNumberOfElements() 1763 | */ 1764 | public function seeNumberOfElements($selector, $expected) { 1765 | return $this->scenario->runStep(new \Codeception\Step\Assertion('seeNumberOfElements', func_get_args())); 1766 | } 1767 | 1768 | 1769 | /** 1770 | * [!] Method is generated. Documentation taken from corresponding module. 1771 | * 1772 | * Checks that the given option is selected. 1773 | * 1774 | * ``` php 1775 | * seeOptionIsSelected('#form input[name=payment]', 'Visa'); 1777 | * ?> 1778 | * ``` 1779 | * 1780 | * @param $selector 1781 | * @param $optionText 1782 | * 1783 | * @return mixed 1784 | * Conditional Assertion: Test won't be stopped on fail 1785 | * @see \Codeception\Lib\InnerBrowser::seeOptionIsSelected() 1786 | */ 1787 | public function canSeeOptionIsSelected($selector, $optionText) { 1788 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('seeOptionIsSelected', func_get_args())); 1789 | } 1790 | /** 1791 | * [!] Method is generated. Documentation taken from corresponding module. 1792 | * 1793 | * Checks that the given option is selected. 1794 | * 1795 | * ``` php 1796 | * seeOptionIsSelected('#form input[name=payment]', 'Visa'); 1798 | * ?> 1799 | * ``` 1800 | * 1801 | * @param $selector 1802 | * @param $optionText 1803 | * 1804 | * @return mixed 1805 | * @see \Codeception\Lib\InnerBrowser::seeOptionIsSelected() 1806 | */ 1807 | public function seeOptionIsSelected($selector, $optionText) { 1808 | return $this->scenario->runStep(new \Codeception\Step\Assertion('seeOptionIsSelected', func_get_args())); 1809 | } 1810 | 1811 | 1812 | /** 1813 | * [!] Method is generated. Documentation taken from corresponding module. 1814 | * 1815 | * Checks that the given option is not selected. 1816 | * 1817 | * ``` php 1818 | * dontSeeOptionIsSelected('#form input[name=payment]', 'Visa'); 1820 | * ?> 1821 | * ``` 1822 | * 1823 | * @param $selector 1824 | * @param $optionText 1825 | * 1826 | * @return mixed 1827 | * Conditional Assertion: Test won't be stopped on fail 1828 | * @see \Codeception\Lib\InnerBrowser::dontSeeOptionIsSelected() 1829 | */ 1830 | public function cantSeeOptionIsSelected($selector, $optionText) { 1831 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeOptionIsSelected', func_get_args())); 1832 | } 1833 | /** 1834 | * [!] Method is generated. Documentation taken from corresponding module. 1835 | * 1836 | * Checks that the given option is not selected. 1837 | * 1838 | * ``` php 1839 | * dontSeeOptionIsSelected('#form input[name=payment]', 'Visa'); 1841 | * ?> 1842 | * ``` 1843 | * 1844 | * @param $selector 1845 | * @param $optionText 1846 | * 1847 | * @return mixed 1848 | * @see \Codeception\Lib\InnerBrowser::dontSeeOptionIsSelected() 1849 | */ 1850 | public function dontSeeOptionIsSelected($selector, $optionText) { 1851 | return $this->scenario->runStep(new \Codeception\Step\Assertion('dontSeeOptionIsSelected', func_get_args())); 1852 | } 1853 | 1854 | 1855 | /** 1856 | * [!] Method is generated. Documentation taken from corresponding module. 1857 | * 1858 | * Asserts that current page has 404 response status code. 1859 | * Conditional Assertion: Test won't be stopped on fail 1860 | * @see \Codeception\Lib\InnerBrowser::seePageNotFound() 1861 | */ 1862 | public function canSeePageNotFound() { 1863 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('seePageNotFound', func_get_args())); 1864 | } 1865 | /** 1866 | * [!] Method is generated. Documentation taken from corresponding module. 1867 | * 1868 | * Asserts that current page has 404 response status code. 1869 | * @see \Codeception\Lib\InnerBrowser::seePageNotFound() 1870 | */ 1871 | public function seePageNotFound() { 1872 | return $this->scenario->runStep(new \Codeception\Step\Assertion('seePageNotFound', func_get_args())); 1873 | } 1874 | 1875 | 1876 | /** 1877 | * [!] Method is generated. Documentation taken from corresponding module. 1878 | * 1879 | * Checks that response code is equal to value provided. 1880 | * 1881 | * @param $code 1882 | * 1883 | * @return mixed 1884 | * Conditional Assertion: Test won't be stopped on fail 1885 | * @see \Codeception\Lib\InnerBrowser::seeResponseCodeIs() 1886 | */ 1887 | public function canSeeResponseCodeIs($code) { 1888 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('seeResponseCodeIs', func_get_args())); 1889 | } 1890 | /** 1891 | * [!] Method is generated. Documentation taken from corresponding module. 1892 | * 1893 | * Checks that response code is equal to value provided. 1894 | * 1895 | * @param $code 1896 | * 1897 | * @return mixed 1898 | * @see \Codeception\Lib\InnerBrowser::seeResponseCodeIs() 1899 | */ 1900 | public function seeResponseCodeIs($code) { 1901 | return $this->scenario->runStep(new \Codeception\Step\Assertion('seeResponseCodeIs', func_get_args())); 1902 | } 1903 | 1904 | 1905 | /** 1906 | * [!] Method is generated. Documentation taken from corresponding module. 1907 | * 1908 | * Checks that the page title contains the given string. 1909 | * 1910 | * ``` php 1911 | * seeInTitle('Blog - Post #1'); 1913 | * ?> 1914 | * ``` 1915 | * 1916 | * @param $title 1917 | * 1918 | * @return mixed 1919 | * Conditional Assertion: Test won't be stopped on fail 1920 | * @see \Codeception\Lib\InnerBrowser::seeInTitle() 1921 | */ 1922 | public function canSeeInTitle($title) { 1923 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('seeInTitle', func_get_args())); 1924 | } 1925 | /** 1926 | * [!] Method is generated. Documentation taken from corresponding module. 1927 | * 1928 | * Checks that the page title contains the given string. 1929 | * 1930 | * ``` php 1931 | * seeInTitle('Blog - Post #1'); 1933 | * ?> 1934 | * ``` 1935 | * 1936 | * @param $title 1937 | * 1938 | * @return mixed 1939 | * @see \Codeception\Lib\InnerBrowser::seeInTitle() 1940 | */ 1941 | public function seeInTitle($title) { 1942 | return $this->scenario->runStep(new \Codeception\Step\Assertion('seeInTitle', func_get_args())); 1943 | } 1944 | 1945 | 1946 | /** 1947 | * [!] Method is generated. Documentation taken from corresponding module. 1948 | * 1949 | * Checks that the page title does not contain the given string. 1950 | * 1951 | * @param $title 1952 | * 1953 | * @return mixed 1954 | * Conditional Assertion: Test won't be stopped on fail 1955 | * @see \Codeception\Lib\InnerBrowser::dontSeeInTitle() 1956 | */ 1957 | public function cantSeeInTitle($title) { 1958 | return $this->scenario->runStep(new \Codeception\Step\ConditionalAssertion('dontSeeInTitle', func_get_args())); 1959 | } 1960 | /** 1961 | * [!] Method is generated. Documentation taken from corresponding module. 1962 | * 1963 | * Checks that the page title does not contain the given string. 1964 | * 1965 | * @param $title 1966 | * 1967 | * @return mixed 1968 | * @see \Codeception\Lib\InnerBrowser::dontSeeInTitle() 1969 | */ 1970 | public function dontSeeInTitle($title) { 1971 | return $this->scenario->runStep(new \Codeception\Step\Assertion('dontSeeInTitle', func_get_args())); 1972 | } 1973 | } 1974 | -------------------------------------------------------------------------------- /tests/support/WebHelper.php: -------------------------------------------------------------------------------- 1 | expectException(ModuleConfigException::class); 26 | $this->expectExceptionMessageRegExp('/set all the required fields/'); 27 | 28 | new PhpBuiltinServer([], []); 29 | } 30 | 31 | public function testExceptionIfDocumentRootDoesNotExist() 32 | { 33 | $this->expectException(ModuleConfigException::class); 34 | $this->expectExceptionMessageRegExp('/Document root does not exist/'); 35 | 36 | $config = [ 37 | 'hostname' => 'localhost', 38 | 'port' => '8000', 39 | 'documentRoot' => 'notexistingdir' 40 | ]; 41 | 42 | new PhpBuiltinServer($config, []); 43 | } 44 | 45 | public function testExceptionIfDocumentRootIsNotADirectory() 46 | { 47 | $this->expectException(ModuleConfigException::class); 48 | $this->expectExceptionMessageRegExp('/Document root must be a directory/'); 49 | 50 | $config = [ 51 | 'hostname' => 'localhost', 52 | 'port' => '8000', 53 | 'documentRoot' => 'codeception.yml' 54 | ]; 55 | 56 | new PhpBuiltinServer($config, []); 57 | } 58 | 59 | public function testServerIsNotRunIfAutostartConfigIsFalse() 60 | { 61 | $config = [ 62 | 'hostname' => 'localhost', 63 | 'port' => '8000', 64 | 'autostart' => false, 65 | 'documentRoot' => 'tests/data' 66 | ]; 67 | 68 | $server = new PhpBuiltinServer($config, []); 69 | $this->assertFalse($server->isRunning()); 70 | } 71 | 72 | public function testServerIsRunIfAutostartConfigIsTrue() 73 | { 74 | $config = [ 75 | 'hostname' => 'localhost', 76 | 'port' => '8000', 77 | 'autostart' => true, 78 | 'documentRoot' => 'tests/data', 79 | 'startDelay' => 0 80 | ]; 81 | 82 | $server = new PhpBuiltinServer($config, []); 83 | $this->assertTrue($server->isRunning()); 84 | } 85 | } 86 | --------------------------------------------------------------------------------